XML-aláírás
Az XML-aláírás (amit XMLDsig, XML-Dsig, XML-Sig-nek is hívnak) digitális aláírásokhoz és az XML-aláírás szintaxis és eljárási W3C-ajánlásban van meghatározva. Az XML-aláírást a W3C-szabvány határozza meg az XML-aláírási szintaxis és eljárásokban.
Funkcionálisan sok közös (vonás) van benne a PKCS#7-tel, de jobban bővíthető és rugalmasabban/ könnyebben alakítható az XML-dokumentumok aláírása felé/ irányába. Különféle web alkalmazásoknál használják, úgymint SOAP, SAML és egyebek. Az XML-aláírás használható bármilyen adattípus forrásának aláírására, tipikusan XML-dokumentumokéra, de bármi másra is amit URL-en keresztül el lehet érni, azt ezzel le lehet írni. Egy XML-aláírást arra használnak hogy leírjon egy forrást az őt tartalmazó XML-dokumentumon kívül. A különálló forrás tartalmazza az XML-dokumentumot akkor az aláírást a külső XML-fájl tartalmazza akkor különállónak hívjuk, borítékoló.
Háromféle van:
- csatolt (olyan forrást ír le, ami kívül van az azt tartalmazó XML-dokumentumon)
- borítékolt (ha arra használják, hogy leírjon bizonyos részeit az azt tartalmazó dokumentumnak, akkor borítékolt aláírásnak nevezzük)- ez az XML-be ágyazott aláírás.
- nem borítékolt (ha önmagában tartalmazza az aláírt adatokat akkor borítékoló, beburkoló aláírásnak hívjuk) [önmagában benne van].
Struktúra
[szerkesztés]Egy XML-aláírás aláírási
elemekből áll a http://www.w3.org/2000/09/xmldsig#
névtérben. (határolóban). Az alapstruktúra a következő:
<Signature>
<SignedInfo>
<CanonicalizationMethod />
<SignatureMethod />
<Reference>
<Transforms>
<DigestMethod>
<DigestValue>
</Reference>
<Reference /> etc.
</SignedInfo>
<SignatureValue />
<KeyInfo />
<Object />
</Signature>
- A SignedInfo tag tartalmazza vagy hivatkozik a leírt adatokra és meghatározza hogy milyen algoritmusokat használunk az aláírandó adatnál. Ez határozza meg hogy milyen algoritmust használunk az aláírandó adatoknál. Tehát ezeket meghatározza és ezekre hivatkozik.
A SignatureMethod és CanonicalizationMethod tagek használják a SignatureValue taget és közöttük a SignedInfo védeni őket az illetéktelenektől. A Signature Value tag használja a SignatureMethod és C.Method tageket és ezek benne vannak a SignedInfo-ban hogy megvédjék azokat a illetéktelenektől. Egy vagy több referencia rész/ elem meghatározza a forrást amit a URI referencia ír le, valamint azokat a változtatásokat/ transzformációkat amiket a forráshoz használnak/ alkalmaznak az aláírást megelőzően. Az átalakítás lehet egy Xpath-kifejezés ami kiválaszt egy meghatározott dokumentum részfát.
DigestMethod meghatározza a hash algoritmust a hash felhasználása előtt. DigestValue tartalmazza a felhasznált hash algoritmust, ami a transzformált forrásra vonatkozik.
- A SignatureValue elem tartalmazza a Base64 kódolt aláírás eredményét – azt az aláírást mely a SignatureMethod tag specifikus paraméterei alapján generálódik- a SignedInfo tagnek miután alkalmazták rá a CMethod által meghatározott algoritmust.
- A KeyInfo tag opcionálisan megengedi az aláírónak hogy biztosítsa a fogadók számára az érvényesítési kulcsot az aláíráshoz, általában egy vagy több X.509-es digitális tanusítvány formájában. Az erre az adatra alapuló résznek azonosítania kell a kulcsot a környezetből, ha a KeyInfo nem áll rendelkezésre.
- Az Object tag (opcionális= választható) tartalmazza az aláírt adatot ha ez egy borítékoló aláírás.
Érvényesítési és biztonsági intézkedések
[szerkesztés]Miután érvényesítjük az XML-aláírást, az ún. Core Validation folyamat következik.
- Referencia érvényesítés: Minden egyes referenciát az annak megfelelő forrás előhívásával, bármiféle transzformáció alkalmazásával és azután specifikus feldolgozó metódussal igazolják. Az eredményt összehasonlítják a feljegyzett
DigestValue
és ha nem egyeznek, akkor az érvényesítés eredménytelen.
- Aláírás érvényesítés:
A SignedInfo
tag, sorba van rendezve aCanonicalizationMethod
használva ami a Kanonizációs Metódusban van meghatározva, a kulcs adat a KeyInfo vagy más források használatával van előhozva és az aláírást egySignatureMethod
-ban meghatározott metódust használva érvényesítenek.
Ez az eljárás megállapítja hogy a források valóban egy jogosult fél által lettek aláírva. Habár, a kanonizációs és transzformációs metódusok bővíthetősége miatt, az érvényesítő félnek biztosnak kell lennie abban, hogy amit ténylesen aláírt vagy feldolgozott az valóban az, ami az eredeti adatban szerepelt, más szóval az ott használt algoritmusok megbízhatóak abból a szempontból hogy nem változtatják meg az aláírt adatok jelentését.
XML-kanonizáció
[szerkesztés]Az XML-aláírás elkészítése lényegesen összetettebb, mint egy hagyományos digitális aláírás elkészítése, mert az adott XML-dokumentumnak (egy "Infoset" amit az XML-fejlesztők gyakran használnak) lehet hogy több elfogadott sorba rendezése van. Például: a szóköz egy XML-tagen belül szintaktikailag nem jelentős, így <Elem >
szintaktikailag megegyezik<Elem>
. .
Mivel a digitális aláírást egy aszimmetrikus kulcs algoritmus használatával készítik (ami tipikusan egy algoritmus) hogy kódolják a szerializált XML-dokumentum futásának az eredményét a Cryptographic hash funkción keresztül (ami tipikusan a SHA1) egyetlenegy byte különbség már eltérést okozna a digitális aláírásban. Sőt mi több ha egy XML-dokumentumot eljuttatnak egyik számítógépről a másikig, a vonal (hálózati, vezetékes) terminátor változhat (átválthat CR-ről LF-re ill. CR-re, LF-re stb. ) Egy program ami feldolgoz és érvényesít egy XML-dokumentumot az később lefordíthatja az XML-dokumentumot különböző módokon pl. több helyet biztosítva egy megkülönböztetett jellemző számára, vagy relatív (illetve abszolút URL-ek használatával, vagy a névterek (határolók) meghatározások átrendezésével. A Canonical XML különösen fontos, amikor egy XML-aláírás egy távoli dokumentumra vonatkozik, amely időbeli meghatározással variálódik egy váltakozó távoli szerver által.
Ezen problémák elkerülésére és annak garantálására, hogy a logikailag azonos XML-dokumentumok azonos digitális aláírásokat adnak, egy XMLkanonizációs transzformációt (amit gyakran C14n-nek rövidítenek) alkalmaznak az XML-dokumentumok aláírásakor (a SignedInfo
aláírásához a kanonizáció kötelező). Ezek az algoritmusok garantálják azt, hogy a logikailag azonos dokumentumok pontosan megegyező szérializált reprezentációkat hoznak létre.
A másik bonyodalom abból a módból ered, hogy az eredeti kanonizációs algoritmus kezeli a névtér meghatározásokat; gyakran egy aláírt XML-dokumentumot be kell illeszteni egy másik dokumentumba; ebben az esetben az eredeti kanonizációs algoritmus nem fogja ugyanazt az eredményt hozni mintha a dokumentumot önmagában tekintenénk. Emiatt egy ún. Exclusive Canonicalization -t hoztak létre (kizáró, kizárólagos kanonizáció), amely szérializálja az XML-névtér meghatározásokat az azt körülvevő XML-től függetlenül.
Előnyök
[szerkesztés]XML DSig flexibilisebb, mint a digitális aláírások más fajtái, mint például a Pretty Good Privacy és a Cryptographic Message Syntax, mivel nem bináris adatokra alapozva működik, hanem XML Infosettel, ami lehetővé teszi az adatok részhalmazait érintő munkát, többféle módon összekötve az aláírást és az aláírt információt és a transzformációk végrehajtását. Még egy alap fogalomnak számít a szabványosítás (kanonikalizáció), ami kizárólag az "esszencia" aláírását jelenti, elhárítva az olyan jelentéktelen különbségeket, mint a szóközöket és a sorkizárásokat.
Hátrányok
[szerkesztés]Léteznek kritikák, melyek általánosságban az XML-architektúra biztonságára[1] és az XML szabványosítására (kanonizációjára) irányulnak, különösképpen egy elülső befejezésként az XML-adatok aláírására és kódolására a komplexitásnak megfelelően velejáró feldolgozási szükségletekkel és szegényes teljesítmény karakterisztikával.[2][3][4] Az argumentum arra irányul, hogy az XML-szabványosítás (kanonikalizáció) túlzott látenciát okoz, amelyet túl nehéz meghaladni a tranzakciós, teljesítmény érzékeny SOA alkalmazásoknak. Ezeket az eseteket az XML Security Working Group
További információk
[szerkesztés]- Canonical XML
- Additional XML Security Uniform Resource Identifiers (URIs)
- Exclusive XML Canonicalization
- XMLSignatures Java binding Archiválva 2009. április 11-i dátummal a Wayback Machine-ben for XMLBeans and JAXB.
- Step-by-Step example of how a signature is created.
Források
[szerkesztés]- ↑ http://www.cs.auckland.ac.nz/~pgut001/pubs/xmlsec.txt Why XML Security is Broken
- ↑ http://grids.ucs.indiana.edu/ptliupages/publications/WSSPerf.pdf Archiválva 2021. február 24-i dátummal a Wayback Machine-ben Performance of Web Services Security
- ↑ http://www.extreme.indiana.edu/xgws/papers/sec-perf.pdf Performance Comparison of Security Mechanisms for Grid Services
- ↑ http://www.javaworld.com/javaworld/jw-01-2007/jw-01-vtd.html Archiválva 2008. február 13-i dátummal a Wayback Machine-ben Why XML canonicalization is bad for Web Services Security