XML-handtekening (XMLDSig)

XML-handtekening (XMLDSig): de W3C/IETF-standaard voor een digitale handtekening in XML, de basis waarop XAdES voor eIDAS voortbouwt.

XML-handtekening (XMLDSig) is de basisstandaard om een digitale handtekening als XML weer te geven: hij definieert een Signature-element en de regels om dat te berekenen en te controleren. De IETF-specificatie, RFC 3275, gepubliceerd in maart 2002, verving een eerdere, kortstondige versie van dezelfde standaard, RFC 3075, en er verscheen een bijbehorende World Wide Web Consortium Recommendation met dezelfde technische inhoud, zodat de standaard tegelijk als IETF- en als W3C-document bestaat.

In 2013 publiceerde W3C een tweede versie, XML Signature Syntax and Processing Version 1.1, die hetzelfde Signature-element en dezelfde canonicalisatiemethode behoudt, maar de aanbevolen cryptografische algoritmes bijwerkt: SHA-256 wordt verplicht te ondersteunen, omdat SHA-1 - de hash die RFC 3275 standaard gebruikte - inmiddels te zwak wordt geacht en het gebruik ervan wordt afgeraden.

Omdat twee XML-documenten byte voor byte kunnen verschillen terwijl ze inhoudelijk precies hetzelfde betekenen (volgorde van attributen, witruimte, codering), ondertekent de standaard een canonieke vorm van de data in plaats van de ruwe bytes, met een proces dat XML-canonicalisatie (C14N) heet, zodat onschuldige opmaakwijzigingen een geldige handtekening niet stilletjes laten breken.

Een Signature-element bestaat altijd uit dezelfde kernonderdelen, in een vaste volgorde die de specificatie zelf vastlegt als Signature (SignedInfo, SignatureValue, KeyInfo?, Object*):

  • SignedInfo: de gecanonicaliseerde lijst van wat er ondertekend is, elk item herkenbaar aan een hash
  • SignatureValue: de cryptografische handtekening berekend over SignedInfo
  • KeyInfo: de sleutel of het certificaat om de handtekening te controleren, vaak een X.509-certificaat
  • Object: optionele ondertekende of niet-ondertekende data die in het handtekeningelement zelf wordt meegedragen

De ondertekende data kan in hetzelfde document zitten, eromheen zitten, of ergens anders staan en via een URI worden aangewezen - daarom kan XMLDSig net zo goed een databaserecord, een berichttekst of een gewoon bestand ondertekenen als een XML-document.

Let op: XMLDSig bewijst op zichzelf alleen integriteit en welke sleutel heeft ondertekend. Of dat voldoende is om als geavanceerde elektronische handtekening onder eIDAS te gelden, hangt af van de verdere voorwaarden die in dat begrip staan; XAdES voegt de certificaat- en tijdstipgegevens toe die die voorwaarden controleerbaar maken, zodat een kale XMLDSig-handtekening op zichzelf geen AdES-formaat is.

Veelgestelde vragen

Terug naar begrippenlijst