Marc de Graauw Web Services / HL7v3 expert HL7/XML-masterclass I Marc de Graauw Web Services / HL7v3 expert 3-11-2009
Marc de Graauw studeerde biologie & filosofie sinds 1989 in de ICT sinds 1996 zelfstandig consultant semantiek interoperabiliteit XML & Web Services Landelijk Elektronisch Patiëntendossier, Strafrechtketen, verzekeraars, arbodiensten, UWV artikelen en presentaties: zie http://www.marcdegraauw.com/
XML en Unicode
De geschiedenis van XML SGML Standard Generalized Markup Language IBM: back to the sixties... Markup: structuur, niet processing HTML: SGML spinoff 1998: XML SGML voor het Web, zonder ballast 2002: Hype Standaard technologie
Nictiz Nationaal ICT Instituut in de Zorg HTML - een voorbeeld <HTML> <HEAD> <TITLE>Marc de Graauw</TITLE> </HEAD> <BODY> <H1>Marc de Graauw</H1> <P>Geslacht: Man</P> <H2>Opleidingen</H2> <OL> <LI>VWO</LI> <LI>kandidaats Biologie</LI> <LI>doctoraal filosofie</LI> </OL> </BODY> </HTML> www.nictiz.nl Nictiz Nationaal ICT Instituut in de Zorg
Nictiz Nationaal ICT Instituut in de Zorg XML - een voorbeeld <?xml version="1.0" encoding="UTF-8"?> <persoon> <persoonsgegevens geslacht="Man"> <achternaam>Graauw</achternaam> <voorvoegsel>de</voorvoegsel> <voornaam>Marc</voornaam> </persoonsgegevens> <opleiding>VWO</opleiding> <opleiding>kandidaats Biologie</opleiding> <opleiding>doctoraal filosofie</opleiding> </persoon> www.nictiz.nl Nictiz Nationaal ICT Instituut in de Zorg
Vóór Unicode bits 0110 1101 0110 0001 0111 0010 0110 0011 bytes dec 109 97 114 99 bytes hex 6d 61 72 63 ascii m a r c 7 bits, 128 tekens, 95 afdrukbaar Engels: cijfers, letters, leestekens niet: Frans: ê ç Duits: ß ä Grieks: ε Ω Nederlands: ë ï Spaans, Arabisch, Fins, Russisch, Chinees, Thais, etc. etc.
Vóór Unicode bytes 128 - 255 bytes 0 - 127 ISO- 8859-1 (ISO-Latin) page 473 West- Europees Engels, meeste Frans, Duits IBM PC ASCII DEC Multi- national Character Set code page 850 West Europees + Á ß ISO- 8859-15 ISO-Latin + ‘IJ’sland + ‘œ’uf Windows 1252 ISO-Latin + œ, € Shift- JIS EBCDIC IBM mainframe Japans etc. etc. etc....
Vóór Unicode Ç CP 437 850 Windows 1252 ISO-Latin-1 ISO-Latin-15 61 0061 á a0 e1 00e1 ä 84 e4 00e4 € - 80 a4 20ac õ f5 00f5 Ç c7 00c7 œ 9c bd 0153
Unicode m m m m m code point glyph karakter LATIN SMALL LETTER M (de letter ‘m’) U+006D m m m
Tengwar – Tolkien - niet officieel (private use range)
Unicode encodings Unicode UTF-16 encoding UTF-8 U+006D = ‘m’ karakter 0 – 255: gelijk aan ISO-Latin-1 1.114.112 code points (0 – 10FFFF) UTF-16 encoding 4 bytes 0000 – FFFF: gelijk aan Unicode nummer Byte Order Mark U+FEFF (ZERO-WIDTH NO-BREAK SPACE) byte-swapped = U+FFFE = geen legaal karakter efficiënt voor Chinees en Japans UTF-8 1 tot 4 bytes 0 – 127: gelijk aan ASCII ergo: ASCII tekst is altijd ook UTF-8 tekst efficiënt voor Westerse talen
Unicode encodings teken code point UTF-8 UTF-16 ISO-Latin-1 ASCII spatie U+0020 20 00 20 a U+0061 61 00 61 ä U+00E4 C3 A4 00 E4 E4 -
XML Java .NET
XML XML = SGML – ballast + Unicode Een XML document is een boom Een root node Attributen, elementen, tekst
Tokenauthenticatie
Authentication Smartcard (UZI pass) with: PKI-Government Personal pass private key (RSA) X.509 certificate (includes public key) PKI-Government Personal pass guard safely no sharing PIN protected
Secure connection
Secure data
Tokenauthenticatie smartcard met private key Certificaat QURX_ EX990011NL token maken SignedInfo maken RSA / SHA sig maken signedData SignedInfo SignatureValue Bericht maken SOAP bericht
Transformatie XML 2 SignedData Verstrekkings- Lijstquery QURX_IN990111NL_01.xml signedData.xsl signedData QURX_IN990111NL_01_signedData.xml
VerstrekkingsLijstquery
signedData X.509 Strong Authentication Koppeling met bericht message id nonce unieke indentificatie van bericht (if duplicate removal has already taken place) notBefore & notAfter time to live security semantics can expire time to store & check nonce addressedParty replay against other receivers Koppeling met bericht BSN voor patiëntgerelateerde berichten Trigger Event Id versieonafhankelijk, itt. InteractionId
signedData.xml (pretty print)
Token versus bestand
Whitespace eruit signedData QURX_IN990111NL_01_signedData.xml remove- between- elements.xsl signedData QURX_IN990111NL_01_signedData.xml
Exclusive Canonicalization signedData QURX_IN990111NL_01_signedData.xml excc14n (Oxygen gebruikt) signedData excc14n signedData_ excc14n.xml
Exclusive Canonicalization
Exclusive Canonicalization Dubbele quotes ipv. enkele Namespace declaraties vóór attributen Namespaces alfabetisch rangschikken Linefeed, geen carriage return of CR/LF Geen Byte Order Mark UTF-8
Signed Info element signedData excc14n signedData_ excc14n.xml bits template wsu Id SHA1 hash 160 bits maken SignedInfo Base64 karakters SignedInfo SignedInfo.xml
SHA: Cryptographic hash Wikipedia: A cryptographic hash function is a deterministic procedure that takes an arbitrary block of data and returns a fixed-size bit string, the (cryptographic) hash value, such that an accidental or intentional change to the data will change the hash value.
SHA SHA1 ... SHA256 SHA-1 1995: SHA-1 NSA 2005: zwaktes in SHA-1 ontdekt 2001: SHA-2 (225, 256, 384, 512) 2008 – 12: SHA-3, open competitie SHA-1 input: message maximum (264 − 1) bits output: 160 bits
Base 64 UTF-8: niet alle octets zijn toegestaan! Ergo: binaire data kunnen niet zomaar in XML / UTF-8 Oplossing: bits -> karakters RFC2045 (MIME) alfabet: [A-Z][a-z][0-9]+/
SHA + Base64 Input (bits) SHA1 (160 bits) Base 64 4vBP5K5M5llABaWYzxCrKIdjS2I=
Nictiz Nationaal ICT Instituut in de Zorg SignedInfo www.nictiz.nl Nictiz Nationaal ICT Instituut in de Zorg
RSA with SHA SignedInfo (exc c14n) private key bits SHA1 hash 400 bits 3021300906 052b0e0302 1a05000414 ASN.1 DER formaat Base64 karakters 3031300d06 0960864801 6503040201 05000420 SHA 256 -> 464 bits SignatureValue
OK Sender Receiver “Hello world” “Hello world” SHA-1 hash: Public key: 5llABaWYz xCrKIdjS... Public key: MIICHzCCAY ygAwIBAgI..... OK Private key: shhhh..... RSA sig value: c9fVK7vYAdv s2DRZVtS... RSA sig value: c9fVK7vYAdv s2DRZVtS...
Security Services (X.800) Authentication Authorization Data Confidentiality Data Integrity Non-repudiation
Security services √ Secure connection Authentication Token Digital Signature Authentication √ Authorization Confidentiality Integrity Non-repudiation
Key usage Naam Key Usage omschrijving Toepassing Key usage hexadecimaal authenticiteit-certificaat digitalSignature tokenauthenticatie 0x80 handtekening-certificaat NonRepudiation elektronische handtekening 0x40 vertrouwelijkheid certificaat keyEncipherment, dataEncipherment, keyAgreement 0x38 (OR'ed 0x20, 0x10, 0x08)
SOAP bericht signedData QURX_ EX990011NL SignedInfo SignatureValue Certificaat verwijzing Header maken Header maken authentication Tokens wss:Security Bericht maken SOAP bericht
SOAP bericht
Functie Algoritme URI Signature RSA+SHA-1 <SignatureMethod Algorithm= "http://www.w3.org/2000/09/xmldsig#rsa-sha1"/> Digest SHA-1 <DigestMethod Algorithm= "http://www.w3.org/2000/09/xmldsig#sha1"/> RSA+SHA-256 "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/> SHA-256 "http://www.w3.org/2001/04/xmlenc#sha256"/>
Transformatie XML 2 SignedData Verstrekkings- Lijstquery QURX_IN990111NL_01.xml signedData.xsl signedData QURX_IN990111NL_01_signedData.xml
Whitespace eruit signedData QURX_IN990111NL_01_signedData.xml remove- between- elements.xsl signedData QURX_IN990111NL_01_signedData.xml
Exclusive Canonicalization signedData QURX_IN990111NL_01_signedData.xml excc14n (Oxygen gebruikt) signedData excc14n signedData_ excc14n.xml
Signed Info element signedData excc14n signedData_ excc14n.xml bits template wsu Id SHA1 hash 160 bits maken SignedInfo Base64 karakters SignedInfo SignedInfo.xml
RSA with SHA SignedInfo (exc c14n) private key bits SHA1 hash 400 bits 3021300906 052b0e0302 1a05000414 ASN.1 DER formaat Base64 karakters 3031300d06 0960864801 6503040201 05000420 SHA 256 -> 464 bits SignatureValue
SOAP bericht signedData QURX_ EX990011NL SignedInfo SignatureValue Certificaat verwijzing Header maken Header maken authentication Tokens wss:Security Bericht maken SOAP bericht
Tokenauthenticatie smartcard met private key Certificaat QURX_ EX990011NL token maken SignedInfo maken RSA / SHA sig maken signedData SignedInfo SignatureValue Bericht maken SOAP bericht