Signaturformat

Från FriBID
Hoppa till navigeringHoppa till sök

Introduktion[redigera]

Signaturformatet i BankID är baserat på xmldsig. I BankID verkar signaturerna aldrig innehålla några blanktecken (utom i själva datan som signeras), och ser ut att vara i s.k. "kanonisk form".

Uppbyggnad[redigera]

All data som signeras läggs i bankIdSignedData-elementet. Vidare lagras certifikatkedjan till användarens certifikat så att det går att kontrollera att certifikatet godkänt. Detta element hashas sedan, tillsammans med certifikatkedjan, och hashen signeras.

Exempel[redigera]

XML-koden är indenterad för att öka läsbarheten. Normalt står allt på en enda rad.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
   <SignedInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
       <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315">
       </CanonicalizationMethod>
       
       <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1">
       </SignatureMethod>
       
       <Reference Type="http://www.bankid.com/signature/v1.0.0/types" URI="#bidSignedData">
           <Transforms>
               <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315">
               </Transform>
           </Transforms>
           <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256">
           </DigestMethod>
           <DigestValue>
               (Base64-kodad SHA256-hash av hela bankIdSignedData-elementet)
           </DigestValue>
       </Reference>
       
       <Reference URI="#bidKeyInfo">
           <Transforms>
               <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315">
               </Transform>
           </Transforms>
           <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256">
           </DigestMethod>
           <DigestValue>
               (Base64-kodad SHA256-hash av hela KeyInfo-elementet)
           </DigestValue>
       </Reference>
   </SignedInfo>
   
   <SignatureValue>
       (Base64-kodad ISO-SHA1-RSA-signatur av hela SignedInfo-elementet)
   </SignatureValue>
   
   <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#" Id="bidKeyInfo">
       <X509Data>
           <X509Certificate>
               (användarens certifikat i DER-format, lagrat Base64-kodat)
           </X509Certificate>
           <X509Certificate>
               (CAn:s (utgivarens) certifikat. Normalt sett en bank)
           </X509Certificate>
           <X509Certificate>
               (CA:ns CA:s certifikat, osv... Till slut kommer vi till rotcertifikatet från Finansiell ID-teknik)
           </X509Certificate>
       </X509Data>
   </KeyInfo>
   
   
   <Object>
       <bankIdSignedData xmlns="http://www.bankid.com/signature/v1.0.0/types" Id="bidSignedData">
           
           <usrVisibleData charset="UTF-8" visible="wysiwys">
               (Meddelande som användaren ska signera (visas för användaren). Förekommer
                endast vid underskrift, inte vid  inloggning. Informationen här kommer
                från parametern TextToBeSigned, som även här är Base64-kodad)
           </usrVisibleData>
           
           <usrNonVisibleData>
               (Samma som usrVisibleData, men visas inte för användaren. Kommer från
                parametern NonVisibleData om den angetts.)
           </usrNonVisibleData>
           
           <srvInfo>
               <nonce>
                   ("nonce"-värdet från servern. Kommer från Challenge eller Nonce parametern, och
                    är även här Base64-kodat)
               </nonce>
               <serverTime>
                   (Ett 10-siffrigt heltal som är ett tidsvärde från servern.
                    Kommer från parametern ServerTime, om den angetts)
               </serverTime>
           </srvInfo>
           
           <clientInfo>
               <funcId>(Här står det "Identification" vid inloggning och "Signing" vid underskrift)</funcId>
               
               <host>
                   <fqdn>(webbserverns domännamn, t.ex. localhost)</fqdn>
                   <ip>(webbserverns IP-adress, t.ex. 127.0.0.1)</ip>
               </host>
               
               <version>
                   (Base64-kodad versionssträng)
               </version>
           </clientInfo>
       </bankIdSignedData>
   </Object>
</Signature>