Zabezpečení webových služeb Martin Lasoň
[email protected] Abstrakt Webové služby jsou v současné době rychle se rozvíjející technologií. Existuje několik standardů jejichž implementace bude důležitá pro rozšíření webových služeb v komerční oblasti. V tomto článku jsou popsány specifikace, které mají umožnit zabezpečení webových služeb. Součástí textu jsou také ukázky implementace v jazyce Java.
Klíčová slova: Webové služby, bezpečnost, XML Signature, XML Encryption, WSSecurity, SAML, XKMS, XACML, ebXML, XML.
Obsah 1 Webové služby 1.1 Důvody zabezpečení . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Omezení SSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Řešení založená na XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 XML digitální podpis 2.1 Hlavní cíle . . . . . . . . . . . . 2.2 Výhody . . . . . . . . . . . . . 2.3 Nevýhody . . . . . . . . . . . . 2.4 Syntaxe . . . . . . . . . . . . . 2.5 Typ podepisovaných dat . . . . 2.6 Algoritmy . . . . . . . . . . . . 2.7 Ukázka vytvoření XML podpisu 2.8 Ukázka ověření XML podpisu .
. . . . . . . .
. . . . . . . .
. . . . . . . .
3 XML Encryption 3.1 Hlavní cíle . . . . . . . . . . . . . . . 3.2 Výhody . . . . . . . . . . . . . . . . 3.3 Nevýhody . . . . . . . . . . . . . . . 3.4 Syntaxe . . . . . . . . . . . . . . . . 3.5 Ukázka zašifrování XML dokumentu 3.6 Ukázka dešifrování XML dokumentu
1
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
3 3 3 3
. . . . . . . .
4 4 5 5 6 7 7 7 12
. . . . . .
14 14 14 14 14 16 17
4 WS-Security 4.1 Elementy WS-Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Specifikace navazující na WS-Security . . . . . . . . . . . . . . . . . . . . . 4.3 Ukázka bezpečného přenosu . . . . . . . . . . . . . . . . . . . . . . . . . .
17 18 20 21
5 SAML 5.1 Možnosti využití . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 SAML tvrzení . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3 Ukázka žádosti a odpovědi . . . . . . . . . . . . . . . . . . . . . . . . . . .
22 23 23 25
6 XKMS 6.1 XML Key Information Service Specification . . . . . . . . . . . . . . . . . 6.2 XML Key Registration Service Specification . . . . . . . . . . . . . . . . .
26 26 27
7 XACML 7.1 Příklad politiky kontroly přístupu . . . . . . . . . . . . . . . . . . . . . . .
27 27
8 ebXML Message Service
28
9 Spolupráce těchto iniciativ
28
2
1
Webové služby
Webové služby (anglicky Web Services) jsou novou technologií vzdáleného volání funkcí v distribuovaných systémech, jako jsou RPC, CORBA nebo RMI [7]. Tato technologie je jednoduchá, nezávislá na platformě a založená na standardech W3C. Neřeší však autentizaci a bezpečnost. Technologii webových služeb tvoří tři části: • protokol pro vzdálené volání procedur, zvaný SOAP, přenášející data ve formátu XML • jazyk pro popis poskytovaných služeb, zvaný WSDL • mechanismus pro nalezení služeb, zastoupený standardy UDDI a WSIL
1.1
Důvody zabezpečení
Protokol SOAP (Simple Object Access Protocol — česky jednoduchý protokol pro přístup k objektům) má formát XML dokumentu, který je přenášen protokolem HTTP. Mohou jej ale přenášet i jiné protokoly jako FTP nebo SMTP. Problémem je otevřený text protokolu SOAP. Tato vlastnost je nepřijatelná pro komerční aplikace, které přenášejí čísla kreditních karet, rodná čísla nebo čísla účtů.
1.2
Omezení SSL
K zabezpečení webových služeb se nabízí použití šifrovaného protokolu SSL (Secure Socket Layer). Pro použití ve webových službách je však z následujících důvodů nevhodný: 1. SSL je navržen, aby zabezpečoval spojení typu bod—bod. To nestačí pro webové služby, neboť u nich je potřeba zabezpečit komunikaci mezi koncovými účastníky mezi kterými může existovat několik uzlů. 2. SSL pracuje na transportní vrstvě a ne na úrovni zprávy. Data jsou tedy chráněna, když putují po drátě ale ne na pevném disku. 3. HTTPS v současné podobě nepodporuje nepopiratelnost. Ta je důležitá zvláště u komerčních webových služeb. 4. SSL neumožňuje podepisování a šifrování elementů v XML dokumentu.
1.3
Řešení založená na XML
Bezpečnost při výměně zpráv typicky představuje autenticitu, integritu dat, nepopiratelnost a utajení. Digitální podpis zajišťuje první tři požadavky. Čtvrtý zajišťuje šifrování dat.
3
World Wide Web Consortium (W3C) definovalo specifikace XML Signature a XML Encryption pro zabezpečení komunikace založené na XML. Kromě toho společnosti IBM, Microsoft a VeriSign společně vytvořili doplňující specifikace jako WS-Security (Web Services Security), které jsou postaveny na těchto specifikacích W3C. Celkem bylo v průběhu posledních let vytvořeno několik bezpečnostních schémat založených na XML, aby poskytly úplné a jednotné bezpečnostní schémata pro Webové služby [15]. Tyto schémata zahrnují: • XML digital signature1 • XML Encryption2 • WS-Security (Web Services Security)3 • SAML (Secure Assertion Markup Language)4 • XKMS (XML Key Management Specification)5 • XACML (Extensible Access Control Markup Language)6 • ebXML Message Service7 V následujícím textu, budou tato schémata popsány podrobněji.
2
XML digitální podpis
Stejně jako jiné technologie digitálního podpisu, také XML digitální podpis zaručuje autenticitu (kdo je autorem), integritu dat (ochranu proti falšování) a nepopiratelnost (nemožnost popřít odeslání). Ze všech bezpečnostních iniciativ pro XML je tato nejdále. Jeho využití je důležité zvláště pro komerční aplikace, kde najde uplatnění při zabezpečení ceníků, smluv a podobně.
2.1
Hlavní cíle
XML podpis (anglicky XML Signature) je navržen pro případy, kdy dokument vytváří několik účastníků a každý chce podepsat jen tu část, za kterou je zodpovědný. XML podpis je vyvíjen společným úsilím World Wide Web Consortium (W3C) a Internet Engineering Task Force (IETF). Cílem této pracovní skupiny je vyvinout syntaxi jazyka XML, umožňující reprezentaci podpisů Webových zdrojů a části protokolových zpráv 1
W3C Recommendation W3C Recommendation 3 OASIS Committee Draft 4 OASIS Standard 5 W3C Working Draft 6 OASIS Standard 7 OASIS Standard 2
4
(cokoli co lze adresovat pomocí URI). Dále definuje procedury pro počítání a ověřování takovýchto podpisů [19]. Zabývá se také tak zvanou kanonizací dokumentů, tj. převedením do syntakticky ekvivalentní formy (například vypouštění počátečních mezer). XML podpisy jsou digitální podpisy navržené pro použití v XML transakcích. Standard definuje schéma pro popsání výsledku operace digitálního podpisu provedené na libovolných (často XML) datech. Stejně jako digitální podpisy, které nejsou ve formátu XML (např. PKCS), obohacují XML podpisy podepisovaná data o autenticitu, integritu dat a nepopiratelnost. Na rozdíl od jiných standardů digitálního podpisu byl XML podpis navržen tak, aby mohl být využit v Internetu a v XML. Výsledný podpis může být zakotven v dokumentu nebo přiložen zvlášť.
2.2
Výhody
Hlavní výhodou XML podpisů je schopnost podepsat jen určitou část XML stromu místo celého dokumentu. To může být důležité v případě, kdy jeden XML dokument má dlouhou historii a různé části vytvářely různé strany a každá podepisuje jen ty elementy, za které je zodpovědná. Tato flexibilita je zvláště výhodná v případě, kdy je důležité zajistit integritu jisté části dokumentu, který je ponechán otevřený pro případné změny. Příkladem může být XML formulář, kde by podpis přes celý formulář neumožňoval změnit položky aniž by došlo k zneplatnění podpisu.
2.3
Nevýhody
XML podpis (podle RFC 3075) zaručuje integritu, autenticitu zprávy a/nebo služby autentizující podepsaného pro jakýkoli datový typ umístěný v podepsaném XML nebo kdekoli jinde. Hlavním cílem těchto podpisů je poskytovat základní serverové bezpečnostní služby pro Web pomocí XML. Jeho autoři však varují, aby tato práce nebyla považována za technický všelék. XML podpisy předpokládají použití Webu (pomocí URI v XML) k nalezení metod pro zakódování a dekódování. Jestliže ale podpis potřebuje zdroje ze sítě, aby mohl provést akci, kdo bude dodávat tyto zdroje? Proces XML podpisu je navržen co nejobecněji, ale právě tato obecnost je problém. Představme si například komerční softwarovou společnost, která se rozhodne, že chce poskytovat tyto autentizační služby. Dále předpokládejme, že operační systém této společnosti je široce rozšířen. Společnost přijde s novou verzí operačního systému, který obsahuje klienta využívajícího jen XML podpisy k zajištění bezpečnosti. Všechny XML kódy ukazují na servery tohoto výrobce. Autentizace pomocí tohoto klienta se stane široce používaná, protože je snadné jej nastavit jako výchozí v rozšířeném operačním systému. A tak jej výrobce zakotví do jeho oblíbeného „zdarmaÿ dodávaného prohlížeče jako výchozí bezpečnostní mechanismus. A jako třešničku na dortu začne tento výrobce požadovat poplatky za každé využití jeho serverů k autentizaci tímto klientem. A najednou jsou příjmy a monopol na světě! [8]
5
2.4
Syntaxe
XML digitální podpisy jsou reprezentovány elementem <Signature>, který má následující strukturu8 [20]: <Signature> <SignedInfo>
<SignatureMethod/> (
( )? )+ <SignatureValue/> (
)? (
)* Povinný element <SignedInfo> je informace, která je opravdu podepisována. Ověření podpisu (anglicky validation) se skládá ze dvou povinných částí ověření podpisu a ověření každého zdroje popsaných podrobněji v části 2.8. Algoritmus uvedený v
je použit pro standardizaci elementu <SignedInfo> před tím, než je vytvořen otisk (anglicky digest). Různé datové proudy se stejnými XML informacemi, které se liší například jen mezerami, je totiž potřeba převést do jednotného tvaru, aby se předešlo problémům při ověřování. Proces vytváření podpisu je podrobněji vysvětlen na příkladě v části 2.7. <SignatureMethod> označuje algoritmus použitý pro převedení kanonizovaného elementu <SignedInfo> na hodnotu <SignatureValue>. Jedná se o kombinaci algoritmu otisku, algoritmu závislého na klíči a případně jiných algoritmech, jako je „doplňováníÿ (anglicky padding). Každý element obsahuje typ otisku a jeho výslednou vypočtenou hodnotu. Volitelné URI identifikuje podepisovaný datový objekt. Element pak obsahuje volitelný seznam kroků, které byly provedeny se zdrojem než byl podepsán. Může se jednat o operace jako XSLT, XPath, komprese atd. označuje klíč určený k ověření podpisu. Tento element je volitelný jednak z důvodu, že podepsaný si nemusí přát prozradit svůj klíč všem stranám, které s dokumentem pracují a nebo je tato informace aplikaci již známa a není potřeba ji proto všude uvádět. (Tento element se využívá také v XML Encryption.) Volitelný element slouží ke vkládání datových objektů v rámci elementu podpisu nebo jinam. 8
znak ’ ?’ znamená žádný nebo jeden výskyt, ’+’ znamená jeden nebo více výskytů a ’*’ znamená nula nebo více výskytů
6
Typ Otisk (Digest) Kódování MAC Podpis Podpis Standardizace Standardizace Transformace Transformace Transformace
Algoritmus SHA1 base64 HMAC-SHA1 DSAwithSHA1 (DSS) RSAwithSHA1 Canonical XML Canonical XML with Comments XSLT XPath Enveloped Signature
Požadavky Vyžadováno Vyžadováno Vyžadováno Vyžadováno Doporučeno Vyžadováno Doporučeno Dobrovolné Doporučeno Vyžadováno
Tabulka 1: Algoritmy využívané v XML podpisu.
2.5
Typ podepisovaných dat
XML podpis může podepsat jeden nebo více zdrojů různého typu. Například jeden XML podpis může zahrnovat textová data (HTML), binární data (JPG), XML data a stanovenou část XML souboru. Ověření vyžaduje, aby byl podepsaný objekt dostupný. XML podpis obvykle označuje místo podepsaného objektu. Odkaz na takovýto objekt může • být adresován pomocí URI v XML podpisu • být umístěn ve stejném zdroji jako XML podpis — podpis je sourozenec • být zakotvený v XML podpisu — podpis je rodič • mít svůj XML podpis zakotven v sobě — podpis je syn
2.6
Algoritmy
Tabulka 1 uvádí algoritmy využívané v XML digitálním podpisu. Jednotlivé algoritmy jsou identifikovány pomocí URI, které je uvedeno jako atribut elementu označujícího způsob jeho použití. Tato URI jsou uvedena v tabulce 2.
2.7
Ukázka vytvoření XML podpisu
Následující příklad ukazuje postup vytvoření XML podpisu XML dokumentu vytvořený programem napsaným v jazyce Java. Tento příklad byl inspirován článkem [10]. Pro generování podpisu byly použity třídy projektu Apache XML Security [1]9 Projekt Apache 9
Aby bylo možné s uvedenou knihovnou pracovat, je potřeba nainstalovat knihovnu Xalan (2.2.0 nebo vyšší).
7
Algoritmus URI algoritmu SHA1 http://www.w3.org/2000/09/xmldsig#sha1 Base64 http://www.w3.org/2000/09/xmldsig#base64 HMAC-SHA1 http://www.w3.org/2000/09/xmldsig#hmac-sha1 DSAwithSHA1 (DSS) http://www.w3.org/2000/09/xmldsig#dsa RSAwithSHA1 http://www.w3.org/2000/09/xmldsig#rsa-sha1 Canonical XML http://www.w3.org/TR/2001/REC-xml-c14n-20010315 XSLT http://www.w3.org/TR/1999/REC-xslt-19991116 XPath http://www.w3.org/TR/1999/REC-xpath-19991116 Tabulka 2: URI algoritmů používaných v XML podpisu.
XML Security je open source projekt, který implementuje specifikaci W3C XML Signature a brzy by měl podporovat také XML Encryption. Následující kroky vysvětlují postup vytvoření XML podpisu SOAP zprávy. Předpokládejme jednoduchou webovou službu zjišťující cenu akcií. Klient, který chce poslat službě dotaz na cenu akcií firmy IBM, pošle například zprávu SOAP: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <ns1:getPrice soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="urn:quote"> <symbol xsi:type="xsd:string">IBM Následující kroky se provedou, při podepisování XML dokumentu: 1. Určení zdrojů, které budou podepsány. V prvním kroku se vytvoří identifikace zdrojů pomocí URI. 2. Vypočtení otisku každého zdroje. V XML podpisu je každý adresovatelný zdroj popsán elementem a jeho otisk je umístěn v synovském elementu , jak je uvedeno na příkladě: 8
w1cJdTvtONxK2NTwV+uwu34ahx8= Element určuje algoritmus, který byl použit pro výpočet otisku. 3. Shromáždění elementů Reference Elementy jsou se svými otisky shromážděny do elementu <SignedInfo>. ... Element označuje algoritmus, který byl použit ke kanonizaci elementu <SignedInfo>. Element <SignatureMethod> označuje algoritmus použitý k vytvoření hodnoty podpisu. 4. Podepsání Je vypočten otisk elementu <SignedInfo>, provedeno podepsání tohoto otisku a umístění hodnoty podpisu do elementu <SignatureValue>. LeW5R5vJDwyDY62ATX+lrKdthrtid dQKLsXMFtLB8TL8AebuOVf3rQ==
9
5. Přidání informace o klíči Jestliže je vkládána informace o klíči, pak je to do elementu . Tyto informace pak obsahují X.509 certifikát odesilatele, který může obsahovat veřejný klíč potřebný k ověření podpisu. MIIDTjCCAwo...Oj9QWA== /X9TgR11EilS30qcLuzk...IAcc= l2BQjxUjC8yykrmCouuEC/BYHPU= 9+GghdabPd7LvKtcNrhX...PSSo= aVwaU514Aa1Ig0qp3IIn...KlL4= 6. Zapouzdření do elementu Signature Umístění elementů <SignedInfo>, <SignatureValue> a do elementu <Signature>. Element <Signature> pak obsahuje XML podpis. ... LeW5R5vJDwyDY...uOVf3rQ== ... Ukázka zdrojového kódu Nyní uvedu ukázku kódu, která pomocí Apache XML Security podepíše SOAP zprávu a vloží podpis do hlavičky zprávy, podobně jako je to definováno ve WS-Security. Dodejme, že odpověď ze serveru bude podobná zprávě s požadavkem, tj. tělo SOAP bude v kanonizovaném tvaru a digitální podpis bude v hlavičce. Vytvoření podpisu vypadá takto: // Inicializace knihovny org.apache.xml.security.Init.init();
10
// Nahrání zprávy SOAP s požadavkem javax.xml.parsers.DocumentBuilderFactory dbf = javax.xml.parsers.DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); dbf.setAttribute("http://xml.org/sax/features/namespaces", Boolean.TRUE); javax.xml.parsers.DocumentBuilder db = dbf.newDocumentBuilder(); db.setErrorHandler(new org.apache.xml.security.utils.IgnoreAllErrorHandler()); org.w3c.dom.Document doc = db.parse(new java.io.FileInputStream(new File("Request.xml"))); // Vyhledání hlavičky SOAP Element headerElement = null; NodeList nodes = doc.getElementsByTagNameNS( "http://schemas.xmlsoap.org/soap/envelope/","Header"); if(nodes.getLength() == 0) { // Přidání elementu hlavičky SOAP headerElement = doc.createElementNS( "http://schemas.xmlsoap.org/soap/envelope/","Header"); nodes = doc.getElementsByTagNameNS( "http://schemas.xmlsoap.org/soap/envelope/","Envelope"); if (nodes != null) { Element envelopeElement = (Element)nodes.item(0); headerElement.setPrefix(envelopeElement.getPrefix()); envelopeElement.appendChild(headerElement); } } else { // Nalezeny elementy hlaviček SOAP headerElement = (Element)nodes.item(0); } // Vytvoření instance třídy XMLSignature XMLSignature sig = new XMLSignature(doc, "", XMLSignature.ALGO_ID_SIGNATURE_DSA); headerElement.appendChild(sig.getElement()); // Specifikace transformace Transforms transforms = new Transforms(doc); transforms.addTransform(Transforms.TRANSFORM_ENVELOPED_SIGNATURE); transforms.addTransform(Transforms.TRANSFORM_C14N_WITH_COMMENTS); sig.addDocument("", transforms, org.apache.xml.security.utils.Constants.ALGO_ID_DIGEST_SHA1);
11
// Přidání certifikátu a informací o veřejném klíči pro verifikátor X509Certificate cert = (X509Certificate) ks.getCertificate("martin"); sig.addKeyInfo(cert); sig.addKeyInfo(cert.getPublicKey()); // Podepsání sig.sign(privateKey); // Uložení podepsané zprávy do souboru FileOutputStream f = new FileOutputStream(new File("SignedRequest.xml")); XMLUtils.outputDOMc14nWithComments(doc, f); f.close();
2.8
Ukázka ověření XML podpisu
K ověření XML podpisu je potřeba provést následující dva kroky: 1. Provede se ověření podpisu elementu <SignedInfo>. K tomu je potřeba přepočítat otisk elementu <SignedInfo> (algoritmem uvedeným v elementu <SignatureMethod> a pomocí veřejného klíče ověřit, že hodnota elementu <SignatureValue> souhlasí s otiskem v elementu <SignedInfo>. 2. Pokud je předchozí krok úspěšný, jsou přepočítány otisky odkazů uvedených v elementu <SignedInfo> a porovnány s hodnotami otisků uvedenými v elementech odpovídajícího elementu . Ukázka zdrojového kódu Následující ukázka kódu, provede pomocí Apache XML Security ověření podpisu SOAP zprávy: org.apache.xml.security.Init.init(); javax.xml.parsers.DocumentBuilderFactory dbf = javax.xml.parsers.DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); dbf.setAttribute("http://xml.org/sax/features/namespaces", Boolean.TRUE); File f = new File("SignedRequest.xml"); javax.xml.parsers.DocumentBuilder db = dbf.newDocumentBuilder(); db.setErrorHandler(new org.apache.xml.security.utils.IgnoreAllErrorHandler()); 12
org.w3c.dom.Document doc = db.parse(new java.io.FileInputStream(f)); Element sigElement = null; NodeList nodes = doc.getElementsByTagNameNS( org.apache.xml.security.utils.Constants.SignatureSpecNS, "Signature"); if (nodes.getLength() != 0) { // Byly nalezeny elementy Signature sigElement = (Element)nodes.item(0); XMLSignature signature = new XMLSignature(sigElement,""); KeyInfo ki = signature.getKeyInfo(); if (ki != null) { if (ki.containsX509Data()) { System.out.println("Could find a X509Data in the KeyInfo"); } X509Certificate cert = signature.getKeyInfo().getX509Certificate(); if (cert != null) { System.out.println("The XML signature is " + (signature.checkSignatureValue(cert) ? "valid (good)" : "invalid !!!!! (bad)")); } else { System.out.println("Did not find a Certificate"); PublicKey pk = signature.getKeyInfo().getPublicKey(); if (pk != null) { System.out.println("The XML signatur is " + (signature.checkSignatureValue(pk) ? "valid (good)" : "invalid !!!!! (bad)")); } else { System.out.println("Did not find a public key"); } } } else { System.out.println("Did not find a KeyInfo"); } }
13
3
XML Encryption
XML dokument lze, stejně jako jakýkoli jiný dokument, celý zašifrovat například pomocí SSL nebo TSL. Jak ale vyřešit situace, kdy různé části jednoho dokumentu vyžadují odlišné zpracování? Jak kontrolovat autorizovaný přístup k různým skupinám elementů? Obchodník chce znát vaše jméno a adresu, ale nepotřebuje vědět detaily o vašem účtu o nic víc než banka o nakupovaném zboží. To vše řeší XML Encryption.
3.1
Hlavní cíle
Cílem XML šifrování (anglicky XML Encryption je vyvinout proces šifrování/dešifrování digitálního obsahu (včetně XML dokumentů a jejich částí), syntaxi pro reprezentaci zašifrovaného obsahu a informaci, která umožní zamýšlenému adresátovi zprávu dešifrovat [17]. Standart také specifikuje transformaci dešifrování XML podpisu tak, aby aplikace ověřující XML podpis mohly rozličit struktury, které byly zašifrovány před podepsáním (tedy nesmí být dešifrovány) a ty, které byly zašifrovány po podepsání (a musí být dešifrovány). Stejně jako XML podpis je také šifrování koordinováno konsorciem W3C.
3.2
Výhody
Standardy jako S/MIME (Secure/Multipurpose Internet Mail Extensions) a PGP (Pretty Good Privacy) zajišťují, že zprávu může přečíst jen zamýšlený adresát. Tyto standardy bohužel (stejně jako SSL/TLS) zachází s každou zprávou jako s celkem a nelze s nimi zašifrovat jen část XML dokumentu. Schopnost selektivně šifrovat je důležitá zvláště v případech, kdy dokument je vytvářen více aplikacemi nebo je prohlížen, podepisován nebo schvalován více lidmi [3]. XML Encryption může, na rozdíl od SSL, zašifrovat jen ta data, která musí být zašifrována.
3.3
Nevýhody
Jednou z výhod XML dokumentu je, že hledání v něm je jasné a jednoznačné. DTD nebo schéma poskytují informace týkající se odpovídající syntaxe. Pokud je část dokumentu včetně tagů zašifrována jako celek, pak je možnost vyhledávat data odpovídající těmto tagům ztracena. Pokud jsou tagy zašifrovány samy, pak mohou být vhodným materiálem k zahájení útoku na kryptografickou metodu pomocí známého otevřeného textu [9].
3.4
Syntaxe
Při XML šifrování je šifrován buď element (obr. 1) nebo obsah elementu (obr. 2). Nelze však zašifrovat půl obsahu elementu. Po zašifrování získáme XML element nazvaný EncryptedData obsahující zašifrovaný text zakódovaný ve formátu Base64. To znamená, že EncryptedData nahrazuje čistý text.
14
<EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element" xmlns=...> ... Obrázek 1: Zašifrování elementu <EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Content" xmlns=...> ... <EncryptedData> Obrázek 2: Zašifrování obsahu elementu Elementy XML šifrování EncryptedData a EncryptedKey jsou odvozeny z abstraktního typu EncryptedType. První je určen pro zašifrovaná data a druhý pro zašifrované klíče. Pokud dokument obsahuje element EncryptedKey, může v něm být šifrovaný dočasný klíč (anglicky session key) zašifrovaný veřejným klíčem. Element EncryptedData má následující strukturu10 [18]: <EncryptedData Id? Type? MimeType? Encoding?> <EncryptionMethod/>? <EncryptedKey>? ? ? ? ? ? ? ? <EncryptionProperties>? Nejdůležitějsím elementem je CipherData, který obsahuje zašifrovaná data buď v ele10
znak ’ ?’ znamená žádný nebo jeden výskyt, ’+’ znamená jeden nebo více výskytů a ’*’ znamená nula nebo více výskytů
15
mentu CipherValue nebo na ně ukazuje v případě CipherReference. Ostatní elementy jsou volitelné, protože sdělují informace, které druhá strana již může znát (např. algoritmus použitý k šifrování nebo použitý šifrovací klíč).
3.5
Ukázka zašifrování XML dokumentu
Následující příklad byl vytvořen na základě článku [3]. K jeho vyzkoušení je potřeba mít nainstalovánu knihovnu XML Security Suite od IBM11 . Pro samotné šifrování je potřeba: 1. element, který bude zašifrován; 2. rozhodnout, zda se bude šifrovat celý nebo jen jeho obsah; 3. šifrovací metoda (tj. jméno algoritmu a délku klíče); 4. šifrovací klíč; 5. možnost získání klíče. Zdrojový kód v jazyce Java vypadá nějak takto: //Nastavení zdroje klíčů KeyStoreKeyInfoResolver kskiResolver = new KeyStoreKeyInfoResolver(ks); kskiResolver.putAliasAndPassword("merchant", "merchantpw".toCharArray()); kskiResolver.putAliasAndPassword("bank", "bankpw".toCharArray()); // Připravení EncryptedData a vložení CipherValue CipherValue cv = new CipherValue(); CipherData cd = new CipherData(); cd.setCipherValue(cv); EncryptedData ed = new EncryptedData(); ed.setCipherData(cd); // Zvolení algoritmu RSA v1.5 k šifrování EncryptionMethod rsa_1_5 = new EncryptionMethod(); em.setAlgorithm(EncryptionMethod.RSA_1_5); // Připrava KeyInfo pro obchodníka KeyInfo merchant = new KeyInfo(); KeyName kn = new KeyName(); kn.setName("merchant"); merchant.addKeyName(kn); 11
Tato knihovna nejlépe s poskykovatelem bezpečnosti (anglicky Security Provider ) IBMJCE.
16
// Připrava KeyInfo pro banku ... // Zašifrování xmlPlainText.encrypt("//Item", kskiResolver, ed, EncryptedData.CONTENT, rsa_1_5, merchant); xmlPlainText.encrypt("//CreditCard", kskiResolver, ed, EncryptedData.ELEMENT, rsa_1_5, bank);
3.6
Ukázka dešifrování XML dokumentu
Při dešifrování je potřeba říci knihovně, který element se má dešifrovat a kde najít šifrovací klíč. V předcházejícím případě nebyly ukládány žádné inforamce o algoritmu a klíči. Zdrojový kód dešifrující minulý příklad může vypadat nějak takto: EncryptionMethod em = new EncryptionMethod(); em.setAlgorithm(EncryptionMethod.RSA_1_5); KeyInfo ki = new KeyInfo(); KeyName kn = new KeyName(); kn.setName("merchant"); ki.addKeyName(kn); // Dešifrování klíčem obchodníka xmlCipherText.decrypt("//Item/child::*", kskiResolver, null, null, em.createElement(XMLUtil.createNewDocument(), true), ki.createElement(XMLUtil.createNewDocument(), true));
4
WS-Security
Bezpečnost webových služeb (anglicky Web Sevice Security) rozšiřuje zprávu SOAP tak, aby poskytovala kvalitní ochranu zajištěním integrity, utajení a autentizaci jedné zprávy [5]. WS-Security také poskytuje obecný mechanizmus umožňující spojení zpráv s bezpečnostními informacemi (anglicky security token)12 , přičemž není vyžadován žádný konkrétní typ. Navíc popisuje, jak tyto tokeny zakódovat. WS-Security sama o sobě nezajišťuje ani neposkytuje bezpečnostní řešení, ale je stavebním kamenem, který se používá s jinými protokoly a technologiemi. Využívá například specifikací XML podpisu a XML šifrování a definuje, jak vložit digitální podpis, otisk zprávy nebo zašifrovaná data do zprávy SOAP. Návrh WS-Security vznikl ve spolupráci společností IBM, Microsoft a Verisn a její spe12
Může se jednat například o uživatelské jméno, certifikát X.509 nebo lístek Kerbera
17
Prefix ds S11 S12 wsse wsu xenc
Jmenný prostor http://www.w3.org/2000/09/xmldsig# http://schemas.xmlsoap.org/soap/envelope/ http://www.w3.org/2003/05/soap-envelope http://www.docs.oasis-open.org/wss/2004/01/oasis-200401wss-wssecurity-secext-1.0.xsd http://www.docs.oasis-open.org/wss/2004/01/oasis-200401wss-wssecurity-utility-1.0.xsd http://www.w3.org/2001/04/xmlenc# Tabulka 3: Tabulka jmenných prostorů
cifikaci definuje Organization for the Advancement of Structured Information Standards (OASIS). Následující text používá jmenné prostory uvedené v tabulce 3.
4.1
Elementy WS-Security
Hlavičkový blok <wsse:Security> poskytuje mechanismus pro připojení bezpečnostních informací určených zamýšlenému příjemci. Tím může být konečný adresát nebo prostředník. Proto elementy tohoto typu mohou být ve zprávě SOAP obsaženy vícekrát. Prostředník, kterým zpráva prochází, může do existujícího hlavičkového bloku <wssw:Security> přidat jeden nebo více podelementů pokud jsou určeny pro jeho uzel SOAP nebo může přidat jeden nebo více hlaviček pro další cíle. Zpráva tedy může mít v hlavičce více bloků <wsse:Security>, ale jen jeden z nich může vypustit atributy S11:actor nebo S12:role. Žádné dva bloky přitom nesmí mít stejnou hodnotu těchto atributů. Zpráva určená více príjemcům musí mít různé bloky <wsse:Security>. Blok bez atributů S11:actor nebo S12:role může být zpracován kýmkoli, ale nesmí být odstraněn před svým konečným cílem. <S11:Envelope> <S11:Header> ... <wsse:Security S11:actor="..." S11:mustUnderstand="..."> ... ... ... Pokud hlavička <wsse:Security> obsahuje atribut mustUnderstand="true", musí příjemce vygenerovat chybu SOAP, pokud neimplementuje specifikaci uvedenou ve jmenném 18
prostoru nebo pokud neumí interpertovat nebo zpracovat bezpečností informace (security token). Příjemce však smí ignorovat elementy nebo rozšíření v elementu <wsse:Security> založené na lokální bezpečností politice. V rámci elementu <wsse:Security> jsou definovány následující prvky [14]: Element UsernameToken. Autentizační element <wsse:UsernameToken> nese informaci o přihlašovacím jméně13 . <wsse:UsernameToken wsu:Id="..."> <wsse:Username>... Element BinarySecurityToken. K ukládání autentizačních informací, které jsou v jiném formátu než XML (například certifikát X.509 nebo lístek systému Kerberos) slouží element <wsse:BinarySecurityToken>. Atribut EncodingType specifikuje použité kódování (například Base64Binary). <wsse:BinarySecurityToken wsu:Id=... EncodingType=... ValueType=.../> Element SecurityTokenReference. Security token obsahuje množinu údajů. Někdy se tyto autentizační data se mohou nacházet někde jinde a nemusí tak být obsažena v každé zprávě. Element <wsse:SecurityTokenReference> poskytuje rozšiřitelný mechanismus k získání těchto identifikačních dat. Zejména při použití XML Signature a XML Encryption se doporučuje umístit tento element do elementu . <wsse:SecurityTokenReference wsu:Id="..."> ... Následující výčet poskytuje seznam konkrétních odkazů seřazený podle důležitosti: • Přímé odkazy – odkaz na vložené tokeny pomocí URI (elementem <wsse:Reference>); • Identifikátory klíčů – odkaz pomocí nejasné hodnoty reprezentující token (elementem <wsse:KeyIdentifier>); • Jména klíčů– odkaz na token pomocí identifikačního řetězce, což může vést k více výsledkům (nedoporučovaný element .); • Vnořené odkazy – vnořený token, což odporuje smyslu elementu odkazovat se jinam (element <wsse:SecurityTokenReference>). 13
Specifikace IBM připouští také připojení volitelného elementu Password, které se doporučuje používat jen při bezpečném přenosu. Standard OASIS však tuto volbu neobsahuje.
19
Element Signature. Element je určen pro připojení podpisu, který odpovídá specifikaci XML Signature. Všechny elementy by přitom měly ukazovat na zdroje v obálce SOAP. WS-Security tak využívá standardu popsaného v části 2. Element ReferenceList. Pomocí standardu XML Encryption, popsaného v části 3, lze zašifrovat libovolné části bloků těla a hlavičky zprávy SOAP. Element <xenc:ReferenceList> vytváří seznam zašifrovaných částí obsažených v elementu <xenc:EncryptedData>. Na rozdíl od elementu <xenc:EncryptedKey> se jedná o seznam částí, které mohly být zašifrovány různými klíči. <S11:Header> <wsse:Security> <xenc:ReferenceList> <xenc:DataReference URI="#bodyID"/> <S11:Body> <xenc:EncryptedData Id="bodyID"> ... Element EncryptedKey. Pokud je uveden element <xenc:EncryptedKey>, nese informaci o použitém šifrovacím klíči. Uvnitř tohoto elementu by měl být uveden také seznam částí (tj. element <xenc:ReferenceList>, které byly zašifrovany tímto klíčem. Na rozdíl od XML Encryption, kde <xenc:EncryptedKey> může být umístěn v elementu <xenc:EncryptedData>, v tomto případě se doporučuje jeho umístění do hlavičky <wsse: Security>. Element Timestamps. Element <wsu:Timestamp> umožňuje vyjádřit čas vytvoření nebo expirační dobu zprávy. Doporučený formát času by měl být typu xsd:dateTime a v UTC. <wsu:Timestamp wsu:Id="..."> <wsu:Created ValueType="...">... <wsu:Expires ValueType="...">... ...
4.2
Specifikace navazující na WS-Security
Jak bylo uvedeno, WS-Security zajišťuje bezpečnost jedné zprávy SOAP. Aby bylo možno zajistit komunikaci mezi subjekty s různým stupněm zabezpečení, vznikají další standardy, 20
které WS-Security využívají. Jsou to: WS–Policy — specifikace popisující politiky (například obchodní nebo bezpečnostní), kterými se řídí komunikace mezi účastníky. WS–Trust — specifikace popisující navazování důveryhodných vazeb v prostědí webových služeb (včetně třetích stran a prostředníků). WS–Privacy — specifikace popisující spojení webových služeb se soukromými politikami a preferencemi. WS–SecureConversation — specifikace popisující, jak může být soubor zpráv bezpečně přenesen jako část složitější transakce. WS–Federation — model pro spojení různých bezpečnostních mechanismů aby byla zachována identita, autentizace apod. WS–Authorization — popisuje reprezentaci autentizačních požadavků a odpovědí v architektuře webových služeb.
4.3
Ukázka bezpečného přenosu
Následující ukázka komunikace byla vytvořena pomocí IBM Web Services ToolKit [4] a byla zachycena aplikací Ethereal. <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Header> <wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/07/secext"> <EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#"> <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/> <wsse:SecurityTokenReference> <wsse:KeyIdentifier>nclLOyA ... kCc8= kfLI8rDDJcZcjhEVIP1 ... PNKzYA= 21
<EncryptedData Id="wssecurity_encryption_id_1 ... 400" Type="http://www.w3.org/2001/04/xmlenc#Element" xmlns="http://www.w3.org/2001/04/xmlenc#"> <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc"/> xf8BCBYKRFHJ6n ... h+F0YJmk <wsu:Timestamp xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility"> <wsu:Created>2004-01-16T14:06:55Z <wsu:Expires>2004-02-16T14:06:55Z <soapenv:Body> <EncryptedData Id="wssecurity_encryption_id_1 ... 414" Type="http://www.w3.org/2001/04/xmlenc#Content" xmlns="http://www.w3.org/2001/04/xmlenc#"> <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc"/> MzpojxBIEkiSn ... GrXtEWFn9HU=
5
SAML
Security Assertion Markup Language (SAML) je specifikace OASIS, která definuje rámec XML pro výměnu autentizačních a autorizačních informací mezi obchodními partnery pomocí Internetu. Tento rámec lze rozdělit do tří částí. První definuje syntaxi a sémantiku zpráv obsahujících tvrzení (anglicky assertion) ve formě XML. Druhá definuje protokoly žádostí a odpovědí pro výměnu bezpečnostních informací mezi žádající a vydávající stranou. Třetí definuje pravidla pro používání tvrzení v rámcích zpráv a přenosu [15]. (Definuje například, jak přenést tvrzení SAML ve zprávě SOAP pomocí HTTP.) 22
SAML je v podstatě o systém jednoho přihlášení (anglicky single sign-on neboli SSO), který zahrnuje dva dřívější standardy: S2ML a AuthXML. Tato specifikace nedefinuje novou technologii autentizace nebo autorizace, ale poskytuje společný jazyk založený na XML, aby popsal informaci či výstupy těchto systémů. Tvrzení SAML tedy neprovádějí autentizaci, ale tento proces zapouzdřují a přenášejí [6].
5.1
Možnosti využití
Specifikace SAML předpokládá tři scénáře případu užití: jediné přihlášení, distribuovaná transakce a autorizační služba [15]. Jediné přihlášení (SSO). Předpokládejme, že se uživatel přihlásí na x.com a je autentizován. Stejný uživatel se později chce přihlásit na y.com. Bez SSO by musel uživatel znovu zadat své identifikační údaje. Při použití SAML pošle y.com požadavek na x.com, ve kterém se zeptá, zda byl již uživatel autentizován. x.com odpoví prohlášením, že uživatel byl autentizován, po jehož obdržení y.com zpřístuní uživateli své zdroje bez toho, aby se znovu ptal na jeho přihlašovací informace. Distribuovaná transakce. Předpokládejme, že si uživatel koupí auto na www.auta.cz a pak se rozhodne pořídit si ještě pojištění na auto na www.pojisteni.cz. Navštíví tedy www.pojisteni.cz a informace o uživatelském profilu jako jméno nebo adresa, které o něm eviduje server www.auta.cz může předat pojišťovacímu serveru. Ten pošle požadavek SAML tvrzení na www.auta.cz říkající: „Pošli mi informace o uživatelském profiluÿ a ten pošle zpátky všechny informace, které o uživateli ví ve formě prohlášení SAML tvrzení. Autorizační služba. Řekněme, že zaměstnanec vsb.cz Martin Lasoň si chce objednat zařízení do kanceláře v ceně 100 000 Kč na serveru www.nabytek.cz, který je výhradním dodavatelem nábytku. Jakmile www.nabytek.cz obdrží objednávku, bude chtít vědět, zda je uživatel Martin Lasoň autorizován objednávku provést a jakou maximální finanční částku může utratit. www.nabytek.cz tedy pošle zprávu se požadavkem SAML tvrzení na vsb.cz. Ten pak odpoví SAML tvrzením oznamujícím, že uživatel Martin Lasoň může objednávat zařízení, ale v maximálnáí hodnotě 500 Kč.
5.2
SAML tvrzení
SAML rozlišuje tři základní druhy výroků. Jsou to [11]: • Autentizace (anglicky authentication) — Tvrzení, že uvedený subjekt byl autentizován konkrétními prostředky v konktrétním čase. Toto tvrzení je reprezentováno elementem : <saml:Assertion ...> <saml:AuthenticationStatement 23
AuthenticationMethod="password" (Prosředek) AuthenticationInstant="2001-12-03T10:02:00Z">(Čas) <saml:Subject> (Subjekt) <saml:NameIdentifier SecurityDomain="sun.com" Name="Sang" /> <saml:ConfirmationMethod> http://...core-25/sender-vouches • Atribut (anglicky Attribute) — Tvrzení, že uvedený subjekt je svázán s příslušnými atributy. Toto tvrzení je reprezentováno elementem : <saml:Assertion ...> <saml:AttributeStatement> <saml:Subject>..Sang.. <saml:Attribute AttributeName="PaidStatus" AttributeNamespace="http://smithco.com"> <saml:AttributeValue> PaidUp <saml:Attribute AttributeName="CreditLimit" AttributeNamespace="http://smithco.com"> <saml:AttributeValue> <my:amount currency="USD">500.00 • Rozhodnutí o autorizaci (anglicky Authorization Decision) — Žádost o povolení přístupu uvedeného subjektu k uvedeným zdrojům byla povolena nebo zamítnuta. Toto tvrzení je reprezentováno elementem : <saml:Assertion ...> <saml:AuthorizationDecisionStatement 24
Decision="Permit" Resource="http://jonesco.com/rpt_12345.html"> <saml:Subject>... Sang ... <saml:Actions ActionNamespace="http://...core-25/rwedc"> <saml:Action>Read
5.3
Ukázka žádosti a odpovědi
Tento příklad byl převzat z [2] představuje žádost vysílající strany požadující autentizaci heslem od vydávající strany. <samlp: Request ...> <samlp: AttributeQuery> <saml: Subject> <saml: NameIdentifier SecurityDomain="sun.com" Name="rimap"/> <saml: AttributeDesignator AttributeName="Employee_ ID" AttributeNamespace="sun.com"> V odpovědi vydávající autorita tvrdí, že subjekt byl autentizován uvedeným prostředkem v uvedeném čase. <samlp: Response MajorVersion="1" MinorVersion="0" RequestID="128.14.234.20.90123456" InResponseTo="123.45.678.90.12345678" StatusCode="/features/2002/05/Success"> <saml: Assertion MajorVersion="1" MinorVersion="0" AssertionID="123.45.678.90.12345678" Issuer="Sun Microsystems, Inc." IssueInstant="2002- 01- 14T10: 00: 23Z"> <saml: Conditions 25
NotBefore="2002- 01- 14T10: 00: 30Z" NotAfter="2002- 01- 14T10: 15: 00Z" /> <saml: AuthenticationStatement AuthenticationMethod="Password" AuthenticationInstant="2001- 01- 14T10: 00: 20Z"> <saml: Subject> <saml: NameIdentifier SecurityDomain="sun.com" Name="rimap" />
6
XKMS
XKMS znamená XML specifikace správy klíčů (anglicky XML Key Management Specification). Skládá se ze dvou částí: X-KISS — XML specifikace služby informace o klíči (anglicky XML Key Information Service Specification a X-KRSS — XML specifikace služby registrace klíče (anglicky XML Key Registration Service Specification) [16]. X-KISS definuje protokol pro získání nebo ověření veřejných klíčů v podepsaných nebo zašifrovaných XML dokumentech, zatímco X-KRSS definuje protokol pro registraci veřejného klíče, jeho odvolání a znovunabytí. XKMS slouží jako specifikace protokolu mezi XKMS klientem a XKMS serverem, kde XKMS server poskytuje důvěryhodné služby svým klientům (ve formě webových služeb) prováděním různých PKI operací (například ověření platnosti klíče nebo odvolání klíče za klienta). Potřeba XKMS plyne z náročnosti PKI operací na výpočetní zdroje. Tato náročnost zabraňuje některým aplikacím nebo malým zařízením podílet se na transakcích založených na PKI v elektronickém obchodování nebo webovských službách. XKMS umožňuje XKMS serveru provádět PKI operace, o které klienti požádají zasláním XKMS zprávy protokolem SOAP.
6.1
XML Key Information Service Specification
Tato specifikace se využívá například v případě, kdy je dokument podepsán pomocí XML podpisu, ale element obsahuje místo použitého klíče jen jeho jméno. Pokud příjemce není schopen ověřit podpis, získá klíč od služby XKMS použitím lokalizační služby (anglicky Locate Service). Ta mu v odpovědi na žádost doplní do elementu hodnotu klíče . Jiným příkladem využití může být případ, kdy Bob obdržel od Alice zprávu a jeho emailový klient ověří podpis veřejným klíčem z certifikátu vydaného Alici. Bob ovšem neví, zda je tento klíč důvěryhodný a tak pošle řetězec certifikátů validační službě XKMS 26
Validate service. Ta mu odpoví, že klíč byl vydán důvěryhodnou autoritou a že nebyl odvolán (revokován). Spolupráce validační a lokalizační služby by se dala popsat scénářem, kdy emailový klient pošle na validační službu žádost o nalezení důvěryhodného klíče pro konkrétní subjekt. Validační služba vyhledá příslušnou lokalizační službu, od ní získá požadovaný klíč a ověří důvěryhodnost řetězce certifikátů. Výsledek pak zašle zpět klientovi.
6.2
XML Key Registration Service Specification
X-KRSS umožňuje spravovat informace týkající se páru veřejných klíčů. Specifikace této služby podporuje následující operace: Registrace (anglicky Register ) spojuje pár veřejných klíčů vazbou mezi klíči. Znovuvydání (anglicky Reissue) vytvoří novou vazbu na již registrovaný klíč. Odvolání (anglicky Revoke) odvolá vazbu na již registrovaný klíč. Obnovení (anglicky Recover ) obnoví soukromý klíč spojený s vazbou klíčů.
7
XACML
XACML je zkratkou pro Extensible Access Control Markup Language. Jeho cílem je standardizovat jazyk pro popsání autentizace a přístupových politik v XML syntaxi. Standardní jazyk pro kontrolu přístupu vede k nízkým nákladům, protože není potřeba vyvíjet jazyk pro určitou aplikaci nebo psát politiky kontroly přístupu ve více jazycích. Pomocí XACML je možné vytvářet poliky kontroly přístupu z těch, které byly vytvořeny jinými stranami. XACML definuje slovník pro specifikaci předmětů, práv objektů a podmínek.
7.1
Příklad politiky kontroly přístupu
Předpokládejme, že společnost jménem Medi Corp (medico.com) má politiku kontroly přístupu, která kterémukoli uživateli, jehož email patří do medico.com umožní provést jakoukoli akci nad jakýmkoli zdrojem [13]. Takto nějak by vypadala žádost o rozhodnutí (anglicky decision request) v níž si uživatel Bart Simpson, s adresou [email protected] chce přečíst lékařský záznam Medi Corp.: <Subject> [email protected] 27
/medico/record/patient/BartSimpson read
8
ebXML Message Service
Iniciativa ebXML je monžina standardů nové generace založených na XML umožňujících transakce elekronického obchodování přes Internet. Jedním z těchto standardů je ebXML Message Service, který definuje, jak bezpečně a spolehlivě posílat a přijímat SOAP zprávy. Tato specifikace se zaměřuje na definování metody výměny zpráv elektronického obchodování, která bude nezávislá na komunikačním protokolu. Definuje vlastní zapouzdření podporující spolehlivé a bezpečné doručení obchodní zprávy [12].
9
Spolupráce těchto iniciativ
Tvrzení SAML mohou být digitálně podepsány pomocí XML Signature. Pro zajištění utajení mohou být stejná tvrzení zašifrována pomocí XML Encryption. Veřejný klíč použitý k digitálnímu podpisu a šifrování může být ověřen a registrován pomocí XKMS. Pokud jde o XACML, strana vydávající tvrzení SAML jej může využít k definování politiky kontroly přístupu jako základ pro manipulaci s pozažavky na tvrzení SAML [15]. Například Alice použije XML digitální podpis a XML šifrování k podepsání a zašifrování objednávky ve formě XML dokumentu. Tento dokument pak odešle dodavateli, pravděpodobně protokolem SOAP, jehož struktura hlavičky je definována buď ve WS-Security nebo ve standardu ebXML Message Service. Příjemce dokumentu pak může využít XKMS k vyhledání a kontrole veřejného klíče, který patří Alici. Jakmile je ověřeno, že klíč je důvěryhodný, příjemce ověří a dešifruje objednávku. Nakonec příjemce autorizaci pomocí serveru bezpečnostních politik posláním a přijetím SAML požadavku a odpovědi. Server může mít informace o politice kontroly přístupu v XACML.
28
Reference [1] Apache Foundation: Apache XML Security [online]. 2002 [cit. 10.1.2004]. Dostupný na WWW: . [2] BYOUS, Jon: Single Sign-on Simplicity with SAML [online]. 2002 [cit. 28.1.2004]. Dostupný na WWW: . [3] DJAJADINATA, Ray: Yes, you can secure your Web services documents, Part 1 [online]. 2002 [cit. 9.1.2004]. Dostupný na WWW: . [4] International Business Machines Corporation: IBM Web Services ToolKit (WSTK) 3.3.2 [online]. 2003 [cit. 12.1.2004]. Dostupný na WWW: . [5] International Business Machines Corporation: Web Services Security (WS-Security) [online]. 2002 [cit. 27.1.2003]. Dostupný na WWW: . [6] JOHNSTON, Stuart J.: Positive Identification [online]. 2002 [cit. 11.2.2004]. Dostupný na WWW: . [7] KUBA, Martin. Web Services [online]. 2003 [cit. 19.11.2003]. Dostupný na WWW: . [8] LOEB, Larry.: XML signatures: Behind the curtain [online]. 2001 [cit. 19.1.2004]. Dostupný na WWW: . [9] MACTAGGART, Murdoch. Enabling XML security [online]. 2001 [cit. 17.1.2004]. Dostupný na WWW: . [10] MODI, Tarak: Safeguard your XML-based messages [online]. 2002 [cit. 9.1.2004]. Dostupný na WWW: . [11] Organization for the Advancement of Structured Information Standards: Assertions and Protocol for the OASIS Security Assertion Markup Language [online]. 2003 [cit. 11.2.2004]. Dostupný na WWW: .
29
[12] Organization for the Advancement of Structured Information Standards: Message Service Specification [online]. 2002 [cit. 12.2.2004]. Dostupný na WWW: . [13] Organization for the Advancement of Structured Information Standards: eXtensible Access Control Markup Language [online]. 2003 [cit. 11.1.2004]. Dostupný na WWW: . [14] Organization for the Advancement of Structured Information Standards: Web Services Security: SOAP Message Security 1.0 [online]. 2004 [cit. 28.1.2003]. Dostupný na WWW: . [15] SHIN, Sang. Secure Web services [online]. 2003 [cit. 9.1.2004]. Dostupný na WWW: . [16] The World Wide Web Consortium: XML Key Management Specification [online]. 2003 [cit. 11.2.2004]. Dostupný na WWW: . [17] The World Wide Web Consortium: XML Encryption Working Group [online]. 2003 [cit. 24.1.2003]. Dostupný na WWW: . [18] The World Wide Web Consortium: XML Encryption Syntax and Processing [online]. 2003 [cit. 24.1.2003]. Dostupný na WWW: . [19] The World Wide Web Consortium: XML Signature Working Group [online]. 2003 [cit. 20.1.2004]. Dostupný na WWW: . [20] The World Wide Web Consortium: XML-Signature Syntax and Processing [online]. 2002 [cit. 20.1.2004]. Dostupný na WWW: .
30