...
</saml:AttributeStatement>
1.1 Algoritmes
Om de integriteit en onweerlegbaarheid van het SAML scantoken te waarborgen wordt een XML Signature geplaatst, zoals beschreven in [IH tokens generiek]. Na plaatsen van de XML Signature kan de ontvanger, met gebruikmaking van het persoonsgebonden identiteits-certificaat van de verzender en de CA certificaten zoals verstrekt door ZORG-ID, onomstotelijk vaststellen dat het SAML scantoken ondertekend is met de privé sleutel behorend bij het gebruikte certificaat van de zorgmedewerker en dat het WID_token ondertekend is met de privé sleutel van het ZORG-ID servercertificaat.
De XML Signature van het SAML scantoken die gebruikt wordt bij berichtauthenticatie met behulp van het identiteitscertificaat maakt gebruik van de volgende algoritmes, zoals beschreven in [IH tokens generiek]:
- Voor het berekenen van de hashwaarde wordt SHA-256 gebruikt.
- Voor de digitale handtekening in AORTA wordt gebruik gemaakt van een RSA handtekening over een SHA-256 digest.
Omdat de XML Signature onderdeel is van het SAML scantoken en in het SAML scantoken geplaatst wordt, moet er een "enveloped-signature" transformatie uitgevoerd worden die de Signature tags uit het SAML scantoken verwijderd gevolgd door een “exc-c14n transformatie” (zie ook [SAML Core] §5.4.3 en §5.4.4). |
1.2 Opbouw
1.2.1 De headers
Eerst wordt het SAML scantoken – het <saml:Assertion ...> element aangemaakt en gevuld met die elementen, zoals beschreven in paragraaf 2.4 Inhoud.
<saml:Assertion
ID="token_2.16.528.1.1007.3.3.1234567.1_0123456789"
IssueInstant="2009-06-24T11:47:34Z"
Version="2.0"
xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">
... Zie paragraaf 2.4 Inhoud ...
</saml:Assertion>
Het XML Signature blok is onderdeel van het SAML scantoken. Het XML Signature blok komt na het <saml:Issuer> element. Na de Signature volgt de rest van de inhoud van de assertion.
<saml:Assertion
ID="token_2.16.528.1.1007.3.3.1234567.1_0123456789"
IssueInstant="2009-06-24T11:47:34Z"
Version="2.0"
xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">
<saml:Issuer Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">
urn:IIroot:?:IIext:?
</saml:Issuer>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
...
</ds:SignedInfo>
<ds:SignatureValue>Wuwn...5e4=</ds:SignatureValue>
<ds:KeyInfo>
<wss:SecurityTokenReference>
<ds:X509Data>
...
</ds:X509Data>
<wss:SecurityTokenReference>
</ds:KeyInfo>
</ds:Signature> ...
... Zie paragraaf 2.3 Inhoud ...
</saml:Assertion>
Indien de Signature aangemaakt wordt moet niet meer met de strings (saml:Assertion en SignedInfo) gemanipuleerd worden, maar ze moeten octet-voor-octet overgenomen worden in het bericht. Strikt genomen is het toegestaan wijzigingen aan te brengen die door canonicalisatie bij de ontvanger weer opgeheven worden, maar wanneer de digitale handtekening door middel van strings wordt opgebouwd, is het een foutgevoelige handeling.
Lange Base 64 waarden zijn afgekort. Wederom kan dit als strings worden behandeld, waarbij drie waarden vervangen moeten worden.
Deze drie waarden worden ingevuld:
- Neem het SignedInfo blok op.
- Neem de SignatureValue op.
- Neem certificaatgegevens in het KeyInfo blok op, in de vorm van het volledige publieke certificaat (in het scantoken het identiteitscertificaat; in het WID-token het ZORG-ID servercertificaat).
Wanneer een bericht een SAML assertion bevat, moet dat bericht precies één bijbehorende digitale handtekening bevatten. |
Het maken van de XML Signature uit strings levert de SAML assertion op met daarin de Signature.
1.2.2 Plaats van het SAML token en de digitale handtekening
Het SAML scantoken met daarin de digitale handtekening wordt Base64-geëncodeerd in het attribuut “Scantoken” van het inschrijftoken gezet.
Het SAML WID_token met daarin de digitale handtekening wordt Base64-geëncodeerd in het attribuut “WID_token” van het scantoken gezet.
De WID_raw_data met daarin de digitale handtekening wordt Base64-geëncodeerd in het attribuut “WID_raw_data” van het WID_token gezet.