e-tinglysning Digital signering Søren Gjesse Business Systems Architect e-mail: sgjesse@csc.com Bjarne Hansen Business Systems Architect e-mail: bhansen4@csc.com
Indledning Digital Signering i e-tinglysning XML Signature standarden Elementer i en anmeldelse (<etl:anmeldelse> </etl:anmeldelse>) Elementer i en kuvert (<etl:kuvert> </etl:kuvert>) Principper for brug af XML Signature (i e-tinglysning) Kanonisering Signatur metode Referencer KeyInfo Eksempel: Opbygning og underskrift af anmeldelse (Java) Slide 2
XML-Signature på én side (http://www.w3.org/tr/xmldsig-core/) <Signature ID?> <SignedInfo> <CanonicalizationMethod/> <SignatureMethod/> (<Reference URI? > <Transforms> <DigestMethod> <DigestValue> </Reference>)+ </SignedInfo> <SignatureValue> (<KeyInfo>)? (<Object ID?>)* </Signature> Det man rent faktisk underskriver I hovedsagen en beskrivelse af hvordan underskriften er foretaget, samt en række referencer til det som underskrives, f.eks. et tinglysningsdokument. Referencen indeholder digest af det som refereres for at sikre at det refererede ikke kan ændres efterfølgende. Referencerne kan pege på XML elementer i <Object> tag et, XML elementer andre steder i dokumentet eller ressourcer som ikke er inkluderet i dokumentet, men som kan nås via f.eks. HTTP. Den digitale signatur Den digitale signatur af <SignedInfo> elementet. Dette er den egentlige underskrift. Det man har underskrevet med Der er forskellige muligheder i XML-Signature for at underskrive et dokument i e-tinglysning vil dette være et X509 Certificate. Data som underskrives Her kan være de data som underskrives (digest) eller f.eks. ekstra attributter som vedrører underskriften, som f.eks. tidsstempel eller lignende. Slide 3
XML Signature eksempel Eksempel på XML Signature (taget fra XML Signature standarden) <Signature Id="MyFirstSignature" xmlns="http://www.w3.org/2000/09/xmldsig#"> <SignedInfo> <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/> <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#dsa-sha1"/> <Reference URI="http://www.w3.org/TR/2000/REC-xhtml1-20000126/"> <Transforms> <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/> </Transforms> <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> <DigestValue>j6lwx3rvEPO0vKtMup4NbeVu8nk=</DigestValue> </Reference> </SignedInfo> <SignatureValue>MC0CFFrVLtRlk=...</SignatureValue> <KeyInfo> <KeyValue> <DSAKeyValue> <P>...</P><Q>...</Q><G>...</G><Y>...</Y> </DSAKeyValue> </KeyValue> </KeyInfo> </Signature> Slide 4
En anmeldelse <etl:anmeldelse> <etl:tinglysningsdokument> </etl:tinglysningsdokument> <etl:bilag /> <etl:bilag /> <etl:underskrifter> <ds:signature /> <ds:signature /> </etl:underskrifter> </etl:anmeldelse Selve tinglysningsdokumentet Det tinglysningsdokument som anmeldelsen vedrører. Tinglysningsdokumentet følger et fastlagt skema. På grund af digest i <xs:reference> elementet kan tinglysningsdokumentet ikke ændres efter første underskrift (ude at det opdages) Bilag til anmeldelsen Meta-data og de binære data (base64) for eventuelle bilag til anmeldelsen Underskrifter for anmeldelsen Her findes en eller flere underskrifter (XML-Signature), som underskriver Tinglysningsdokumentet samt evt. bilag. Hvad der konkret underskrives udpeges gennem referencer (<xs:reference>) i <xs:signatureinfo> elementet. Antallet af underskrifter i <etl:underskrifter> kan udvides uden at den øvrige del af dokumentet berøres. Således kan en anmeldelse underskrives af flere parter inden det sendes til tinglysning. Denne del af en anmeldelse er den som udfyldes i overensstemmelse med XML Signature standarden. Slide 5
En kuvert <etl:kuvert> <etl:anmeldelse /> <etl:anmeldelse /> <etl:følgeseddel /> <etl:underskrifter> <ds:signature /> </etl:underskrifter> </etl:kuvert> Anmeldelser De enkelte anmeldelser som er indeholdt i kuverten. Hver anmeldelse indeholder i sig selv underskrifter fra forskellige parter. Følgeseddel Følgeseddel som angiver rækkefølge for behandling, samt forskellige egenskaber ved behandlingen. Underskrift(er) af følgeseddel Hvis det er nødvendigt kan vi her have underskrifter af selve følgesedlen. Underskriften af følgesedlen er en kvittering for at den som har indsendt kuverten ønsker de anmeldelser som forefindes I kuverten behandlet som specificeret i følgesedlen. Der er således ikke (nødvendigvis) nogen sammenhæng mellem underskriften af følgesedlen og underskrifterne på anmeldelsen. Denne del af en anmeldelse er den som udfyldes i overensstemmelse med XML Signature standarden. Slide 6
Principper for brug af XML Signature XML Signature er en generel standard som sætter vide rammer for digital signatur af XML dokumenter/elementer Metode (algoritme) til dannelse af kanonisk repræsentation (canonicalization) af <SignatureInfo> elementet Metode (algoritme) til underskrift Transformationer på data inden der beregnes digest Digest algoritme Hvilken slags KeyInfo (f.eks. certifikat) der bruges ved underskrift Formålet med at fastsætte principper for anvendelse af XML Signature i forbindelse med e-tinglysning er at begrænse muligheder til en fornuftig delmængde som understøtter det behov der er i forbindelse med e-tinglysning gennem denne begrænsningen at gøre det mere enkelt at udvikle og anvende digital signatur i forbindelse med e-tinglysning Slide 7
Kanonisering Angivelse af algoritme til kanonisering af <SignedInfo> elementet <CanonicalizationMetod Algorithm= /> Der findes to algoritmer som udgangspunkt i XML signature, en som medtager XML kommentarer og en som udelader XML kommentarer Der er beskrevet 2 algoritmer i XML Signature standarden Kanonisk XML uden kommentarer (required) http://www.w3.org/tr/2001/rec-xml-c14n-20010315 Kanonisk XML med kommentarer (optional) http://www.w3.org/tr/2001/rec-xml-c14n-20010315#withcomments e-tinglysning anbefaling Kanonisering uden kommentarer http://www.w3.org/tr/2001/rec-xml-c14n-20010315 Slide 8
Signatur metode Algoritme for signering af <SignedInfo> elementet <SignatureMethod Algorithm= /> Der er beskrevet 2 algoritmer i XML Signature standarden DSA med SHA1 (required) http://www.w3.org/2000/09/xmldsig#dsa-sha1 RSA med SHA1 (optional) http://www.w3.org/2000/09/xmldsig#rsa-sha1 Ifølge standarden skal DSA understøttes, mens RSA er optionel, men da de nøgler som er indeholdt i OCES certifikaterne er RSA nøgler anvendes RSA algoritmen i forbindelse med signering i e-tinglysning e-tinglysning anbefaling Algorithm = http://www.w3.org/2000/09/xmldsig#rsa-sha1 Slide 9
Referencer Elementet <SignedInfo> kan indeholde et antal referencer <Reference> til elementer / data som underskrives En reference er kendetegnet ved URI Udpeger de data der skal med i underskriften Transforms Angiver transformeringer som skal udføres på data inden hash funktionen beregnes på data DigestMethod Angivelse af den hash algoritme som anvendes SHA1 http://www.w3.org/2000/09/xmldsig#sha1 (required) DigestValue Den beregnede værdi fra hash funktion e-tinglysning anbefaling URI Se efterfølgende sider Transforms Det foreslås at der kun tillades Canonicalization og Base64. DigestMethod SHA1 Slide 10
Referencer (URI) Eksempler på URI er http://example.com/data/test.xml Reference til en ekstern data strøm, ie. man kan underskrive noget som ikke er med i selve dokumentet, f.eks. et bilag. (tom streng) Refererer til hele dokumentet som signaturen er indeholdt i #dokument Reference til det XML element som har ID= dokument XPointer/XPath udtryk, f.eks. #xpointer(id( someid )) #xpointer(id( hæftelse )/child::hovedstol) URI en kan således udpeges lokale eller eksterne dokumenter/fragmenter e-tinglysning anbefaling Brug af #en-id-på-et-element til at udpege element i anmeldelsen Det overvejes hvorvidt det kan tillades at bruge referencer til eksterne ressourcer, i.e. http://... Slide 11
Flere referencer vs. flere signaturer Underskrift <SignedInfo> er det som rent teknisk underskrives <SignedInfo> indeholder referencer <Reference> til elementer, der er en del af underskriften Hver <Reference> indeholder hash af indhold <Signature> <SignedInfo> <Reference /> <Reference /> </SignedInfo> </Signature> VS. <Signature> <SignedInfo> <Reference /> </SignedInfo> </Signature> <Signature> <SignedInfo> <Reference /> </SignedInfo> </Signature> Forskellige måder at håndtere flere underskrifter på En samlet underskrift af flere elementer En signatur per element Slide 12
KeyInfo Angiver den nøglering som er anvendt ved underskrift af dokumentet http://www.w3.org/2000/09/xmldsig#dsakeyvalue http://www.w3.org/2000/09/xmldsig#rsakeyvalue http://www.w3.org/2000/09/xmldsig#x509data http://www.w3.org/2000/09/xmldsig#pgpdata http://www.w3.org/2000/09/xmldsig#spkidata http://www.w3.org/2000/09/xmldsig#mgmtdata e-tinglysning anbefaling Der anvendes X509Data, da vi ønsker underskrift med OCES certifikat (generelt X509 certifikat) Slide 13
Sammendrag Egenskab CanonicalizationMethod SignatureMethod DigestMethod KeyInfo e-tinglysning anbefaling http://www.w3.org/tr/2001/rec-xml-c14n-20010315 http://www.w3.org/2000/09/xmldsig#rsa-sha1 http://www.w3.org/2000/09/xmldsig#sha1 http://www.w3.org/2000/09/xmldsig#x509data Slide 14
Opbygning af <etl:anmeldelse> - step 1 Eksempel baseret på brug af Apache XML Security library // Opret nyt XML dokument dbf = DocumentBuilderFactory.newInstance(); dbf.setnamespaceaware(true); db = dbf.newdocumentbuilder(); doc = db.newdocument(); // Tilføj XML rod element <etl:anmeldelse> anmeldelse = doc.createelementns("http://www.tinglysning.dk/schema/2007/01", "etl:anmeldelse"); anmeldelse.setattributens(constants.namespacespecns,"xmlns:etl", ETLNS); doc.appendchild(anmeldelse); // Tilføj XML element <etl:tinglysningsdokument> tinglysningsdokument = doc.createelement("etl:tinglysningsdokument"); tinglysningsdokument.setattribute("id", "dokument"); tinglysningsdokument.setidattribute("id", true); tinglysningsdokument.appendchild(doc.createtextnode("...")); anmeldelse.appendchild(tinglysningsdokument); // Tilføj XML element <etl:bilag> for bilag nr. 1 bilag = doc.createelement("etl:bilag"); bilag.setattribute("id", "bilag1"); bilag.setidattribute("id", true); bilag.appendchild(doc.createtextnode("...")); anmeldelse.appendchild(bilag); Slide 15
Opbygning af <etl:anmeldelse> - step 2 // Tilføj XML element <etl:underskrifter> underskrifter = doc.createelement("etl:underskrifter"); underskrifter.setattribute("id", "underskrifter"); underskrifter.setidattribute("id", true); anmeldelse.appendchild(bilag); // Opret XML Signature element (<ds:signature>) og tilføj den til elementet <etl:underskrifter> signature = new XMLSignature(doc, baseuri, XMLSignature.ALGO_ID_SIGNATURE_DSA); signature.getsignedinfo().addresourceresolver(new ResolverFragment()); underskrifter.appendchild(signature.getelement()); // Definer transformationer for <ds:reference> elementer transforms = new Transforms(doc); transforms.addtransform(transforms.transform_c14n_omit_comments); // Tilføj reference (<ds:reference>) for tinglysningsdokumentet og bilag signature.adddocument("#dokument", transforms, Constants.ALGO_ID_DIGEST_SHA1); signature.adddocument("#bilag1", transforms, Constants.ALGO_ID_DIGEST_SHA1); signature.adddocument("#bilag1", transforms, Constants.ALGO_ID_DIGEST_SHA1); Slide 16
Opbygning af <etl:anmeldelse> - step 3 // Indlæs Java keystore ks = KeyStore.getInstance(keystoreType); fis = new FileInputStream(keystoreFile); ks.load(fis, keystorepass.tochararray()); // Get private key for signing privatekey = (PrivateKey) ks.getkey(privatekeyalias, privatekeypass.tochararray()); // Tilføj certifikatet til <ds:keyinfo> elementet certificate = (X509Certificate) ks.getcertificate(certificatealias); signature.addkeyinfo(certificate); // Underskriv tinglysningsdokument og bilag signature.sign(privatekey); Slide 17
Referencer Standarder X.509 Certificate (http://www.ietf.org/rfc/rfc2459.txt) XML Signature (http://www.w3.org/tr/xmldsig-core/) Java Apache XML Security (http://xml.apache.org/security/).net http://www.c-sharpcorner.com/uploadfile/lsitaraman/xmlsignatures11232005051727am/xmlsignatures.aspx http://msdn2.microsoft.com/en-us/library/ms229950(vs.80).aspx Slide 18
Udestående Features i XML Signature som er under overvejelse Brug af<manifest> som samlemappe for referencer <SignatureProperties>? Har vi meta-data som vi gerne vil have embedded i signaturen? Hvordan ses en evt. anvendelse af eksterne referencer (HTTP) i <Reference> elementer? Vil vi tillade generelle HTTP referencer?...og i så fald hviken betydning har det?...og hvad med sikkerheden? Slide 19
Experience. Results.