Cryptografie
Het Vorderingenoverzicht Rijk maakt gebruik van cryptografie om de communicatie tussen burgers en overheidsorganisaties te beveiligen.
Cryptografische functies
De gebruikte encryptiefunctionaliteit is onder te verdelen in
- Encryptie/decryptie - Hiervoor wordt RSA OAEP gebruikt - RFC3560
- Ondertekening/verificatie - Hiervoor wordt RSA PSS gebruikt - RFC4056
- Ondertekening/verificatie van claims - Hiervoor wordt RSA i.c.m. JWT gebruikt - RFC8332 & RFC7519
Sleutelmateriaal
Actoren maken hun eigen sleutelmateriaal (RSA public/private keypairs) aan.
Actor | Sleutelmateriaal | SLeuteltype | Wordt aangemaakt... |
---|---|---|---|
Burger | app-private-key | 2048 bits RSA | ...door de app bij opstarten |
Bronorganisatie | source-org-private-key | 2048 bits RSA | ...door de bronorganisatie via beheeromgeving |
App manager | app-manager-private-key | 2048 bits RSA | ...handmatig door de app manager |
Stelselbeheerder | T.B.D. | T.B.D. | T.B.D. |
Een keypair kan handmatig aangemaakt worden met openssl
, bijvoorbeeld:
openssl genrsa -out rsa.key 2048
Toepassing van cryptografiefuncties in het protocol
Het opzetten van een verbinding tussen een burger en een organisatie
- Burger: ENCRYPT challenge-request (=app-public-key) with org-public-key
- Organisatie (bronorganisatie of app manager) DECRYPT challenge-request with org-private-key
- Organisatie (bronorganisatie of app manager): SIGN challenge USING org-private-key
- Burger: VERIFY challenge USING org-public-key
- Burger: SIGN challenge-response USING app-private-key
- Organisatie (bronorganisatie of app manager): VERIFY challenge-response USING app-public-key
Het activeren (certificeren) van een digitale handtekening
- [Nadat een verbinding is opgezet]
- App manager: CREATE JWT app_manager_jwt_certificate USING app-manager-privkey
- App manager: ENCRYPT certificate (=app_manager_jwt_certificate + certificate-signature) USING app-public-key
- Burger: DECRYPT encrypted-certificate USING app-private-key
- Burger: VERIFY JWT app_manager_jwt_certificate USING app-manager-public-key
JWT (app_manager_jwt_certificate)
Claim Name | Claim Description |
---|---|
app_public_key | Public key van de burger |
app_manager_oin | Organisatie-identificatienummer van de app manager |
app_manager_public_key | Public key van de app manager |
given_name1 | Given name(s) or first name(s) |
family_name1 | Surname(s) or last name(s) |
bsn | Burgerservicenummer |
iat1 | Issued At |
nbf1 | Not Before |
exp1 | Expiration Time |
Het ondertekenen van een verzoek om schuldinformatie (using certificate)
- [Nadat een verbinding is opgezet]
- Burger: SIGN request-document USING app-private-key
- Burger ENCRYPT envelope (= request-document + document-signature + legalized-certificate) USING source-org-public-key
- Bronorganisatie: DECRYPT encrypted-envelope USING source-org-private-key
- Bronorganisatie: VERIFY JWT app_manager_jwt_certificate USING app-manager-public-key
- Bronorganisatie: VERIFY document signature USING app-public-key
- Bronorganisatie: CHECK app-public-key used with signature equals app-public-key used in certificate
- Bronorganisatie: CHECK app-public-key signature equals app-public-key used in current session
Het ophalen van schuldinformatie
- [Nadat een verbinding is opgezet]
- Bronorganisatie: ENCRYPT financial-claims-information-document USING app-public-key
- Burger: DECRYPT encrypted-financial-claims-information-document USING app-private-key
TODO: Ondertekening van het stelsel
- Noot: op dit moment is het stelsel nog niet ondertekend, maar het is wel voorzien dat de stelselbeheerder de stelselinformatie na elke wijziging, ondertekent, zodat partijen die zich op de stelselinformatie beroepen zeker weten dat deze informatie door de stelselbeheerder geaccordeerd is.
- Stelselbeheerder: SIGN stelselregistratie USING scheme-manager-private-key
- Burger, bronorganisatie: VERIFY stelselinformatie USING scheme-manager-private-key
Mogelijke verbeterpunten (opgepakt op basis van prioriteit)
- Het gebruik van elliptic curve (Curve25519, libsodium, etc.) of post-quantum cryptography schemes in plaats van RSA
- Het gebruik van x509 certificaatstandaarden voor het activeren (certificeren) van digitale handtekeningen in plaats van signed JSON
Overige cryptografie
Op sommige lagere niveaus van het systeem wordt ook cryptografie toegepast, maar deze wordt hier op dit moment niet expliciet behandeld omdat het gebruik van deze cryptografie wijdverspreid is en niet specifiek is voor het Vorderingenoverzicht Rijk. Het gaat dan om cryptografie die wordt toegepast in onder meer:
- Het opzetten van HTTPS-verbindingen met organisaties
- Toegangsbeheer tot het apparaat van de gebruiker (burger)
- Het versleuteld opslaan van gegevens op het apparaat van de gebruiker (burger)