1 XML Signatures Autor Martin Lasoň Abstrakt Digitální podpisy zajišťují integritu, autenticitu a nepopiratelnost dat na Webu. Takové rysy jsou zvlášť...
Abstrakt Digitální podpisy zajišťují integritu, autenticitu a nepopiratelnost dat na Webu. Takové rysy jsou zvlášť důležité pro dokumenty, které reprezentují závazky jako smlouvy, ceníky a prohlášení. Tato práce pojednává o digitálních podpisech dokumentů (dostupných pomocí URI na Webu) s použitím XML syntaxe. Využití těchto vlastností je zvláště důležité pro komerční elektronické aplikace.
Klíčová slova XML, digitální podpis, počítačová bezpečnost.
Seznam použitých symbolů a zkratek HTML – HyperText Markup Language je jazyk pro tvorbu hypertextových dokumentů pro Web. MAC – Message Authenticity Code – klíčovaná jednocestná hašovací funkce generující charakteristiku závislou na hodnotě nějakého tajemství – klíče. SSL – Secure Sockets Layer je protokol vyvinutý společností Netscape Communications pro vybudování bezpečného spojení přes internetový kanál. Zaručuje autenticitu partnerů komunikace, důvěrnost, integritu a autenticitu přenášených údajů. URI – Uniform Resource Identifier je řetězec znaků určený k identifikaci abstraktního nebo fyzického zařízení. X.509 – Standardizovaný formát pro certifikáty a revokační seznamy. XML – Extensible Markup Language je množina pravidel pro definici sémantických značek, které rozdělují dokument na části a identifikují různé části dokumentu.
Současné bezpečnostní technologie nedostačují k zabezpečení obchodních transakcí na Webu. Většina současných bezpečnostních mechanismů založených na prohlížečích dostačuje pro menší obchodní transakce prodeje zákazníkům, ale neposkytuje zvýšenou bezpečnost k ochránění důležitých komerčních transakcí a k výměně citlivých informací s nimi spojenými. Nač ale potřebujeme XML podpisy, pokud při komunikaci se serverem využíváme SSL? Pokud se na celou věc podíváme z pozice hackera, tak co by pro něj bylo jednodušší: odchytávat IP pakety jednotlivého připojení, aby zaměnil jedno číslo kreditní karty, nebo nabourat se na server, kde jsou uložena všechna čísla kreditních karet? A zde přichází na řadu digitální podpis.
2
XML digitální podpis
Stejně jako zajištění důvěrnosti obchodních zpráv, je důležité zabezpečit i jejich autenticitu (kdo je poslal), integritu (zda nebyly pozměněny) a umožnit nepopiratelnost (nemožnost popřít odeslání). Obecně uznávaná metoda k zajištění těchto požadavků v zabezpečených obchodních transakcích je využití digitálních certifikátů a digitálního podpisu. Díky vlastnostem XML, jako jsou bohatá sémantika, strukturovaná data, textový základ a Webová povaha může být tohoto formátu použito k šifrování a digitálnímu podpisu dat.
2.1
Hlavní cíle
V případech, kdy dokument vytváří několik účastníků, každý chce podepsat jen tu část, za kterou je zodpovědný. Pro tyto účely je navržen XML podpis (anglicky XML Signature) 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 [1] je „vyvinout syntaxi jazyka XML, umožňující reprezentaci podpisů Webových zdrojů a části protokolových zpráv (cokoli adresovatelného pomocí URI), a procedur pro výpočet a ověření takových podpisůÿ. 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), přidávají XML podpisy autentizaci, integritu dat a nepopiratelnost k datům která podepisují. Na rozdíl od jiných standardů digitálního podpisu byl XML podpis navržen tak, aby podporoval oba typy a mohl být využit v Internetu a XML. XML podpisy usnadňují aplikacím podepisování zdrojů na Webu.
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 3
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 zpoplatňovat každé využití jeho serverů k autentizaci tímto klientem. A najednou jsou příjmy a monopol na světě!
2.4
Syntaxe
XML digitální podpisy jsou reprezentovány elementem <Signature>, který má následující strukturu 1 : <Signature> <SignedInfo> <SignatureMethod/> ( ()? )+ 1
znak ’ ?’ znamená žádný nebo jeden výskyt, ’+’ znamená jeden nebo více výskytů a ’*’ znamená nula nebo více výskytů
4
<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 3.2. 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 3.1. <SignatureMethod> označuje algoritmus použitý pro převedení normalizovaného elementu <SignedInfo> na hodnotu <SignatureValue>. Jedná se o kombinaci algoritmu otisku, algoritmu závislého na klíči a případných jiných algoritmech, jako je ”vycpává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