Kryptering av fødselsnummer
Fellestjenester BYGG bruker kryptering av fødselsnummer.
Vi har implementert asymmetrisk kryptering der søknadssystemene vil kryptere fødselsnummer med en offentlig nøkkel. Fellestjenester BYGG arbeidsflyt funksjonen bruker en korresponderende privat nøkkel for å dekryptere personnummeret slik at det kan brukes for adressering i Altinn for meldinger og skjema til privatpersoner.
FtB krypteringnøkler er av typen RSA (Rivest–Shamir–Adleman) med 1024 bit nøkkelstørrelse. Den offentlige nøkkelen blir levert både som en .pem text fil og en .cer sertifikat fil.
Med 1024 bit kryptering blir et 9 siffer fødselsnummer til en ca. 170 tegn lang tekst streng.
Krypteringprosess
Våre C# eksempler nedenfor bruker en krypteringsflyt som dette:
- Data input er et fødselsnummer som en streng (dette er hva man tidligere la inn i <foedselsnummer> taggen i XML)
- Prosess input er den offentlige nøkkelen
- Konverter strengen med fødselsnummer til byte array
- Krypter byte array med krypteringtjener basert på den offentlige nøkkelen. Resultatet er nytt byte array
- Konverter kryptert byte array til en Base64 kodet streng
- Den krypterte strengen blir så lagt inn i <foedselsnummer> taggen i XML istedet for klar tekst versjonen av fødselsnummeret.
Innlesing av offentlig nøkkel eksempel (C#)
Det finnes et par alternativer på innlesing av nøkkelen. Vi presenterer to eksempler her. I begge eksemplene ender vi opp med en RSACryptoServiceProvider fra C# System.Security.Cryptography.
I det første eksemplet leser vi inn en .pem fil som der nøkkelen ligger som en tekst fil av på denne måten:
Vi har lagt inn PEM filen som en "embeddet resource" i C# prosjektet, andre måter å få tilgang til en fil er mulig.
Innlesing av filen:
Vi setter opp en RSACryptoServiceProvider via BouncyCastle funksjoner (tilgjengelig fra Nuget). Input er streng med den offentlig nøkkelen fra forrige steg.
Alternativt kan den offentlige nøkkelen installeres som et sertifikat på serveren og hentes via "thumbprint" eller avtrykk. Da må man bruke .cer versjonen av nøkkelen. Det er viktig parameterene "StoreName.My" og "StoreLocation.LocalMachine" stemmer overens med hvor sertifikatet er installert. Koden under henter ut et X509Certificate2.
Dette kan gjøres om til en RSACryptoServiceProvider:
Kryptering av fødselsnummer
Med en RSACryptoServiceProvider kan fødselenummeret krypteres med denne koden:
De fleste eksemplene er basert på implementasjonen i test motoren som kjører på fellesbygg.dibk.no:
FB-Testmotor / DIBK.FellestjenesterBygg.TestEngine / DIBK.FellestjenesterBygg.TestEngine / Models / Encryption /
Offentlige nøkler for FtB testmiljø er tilgjengelig for konsesjonærer på Fellestjenester-Forum under Documents->PublicKeyForFtbEncryption.
Krypteringsløsing i Java
Følgende er et eksempel på en implementering i Java.
Public key kan leses fra en pem fil på med følgende funksjoner
API for testing
Vi har lagt ut API for å kryptere og dekryptere med vår nøkkel for FtB test server. Disse fungerer ikke på PROD server.
Kryptere
GET
https://admbygg.ft-test.dibk.no/api/GetEncryptedString/{fødselsnummer}
https://admbygg.ft-test.dibk.no/api/GetEncryptedString/123456789
Dekryptere
POST
https://admbygg.ft-test.dibk.no/api/GetDecryptedString
HEADER
Content-Type text/plain
BODY
HZ0GJnK98Xf7cNvLbQHXbDDWX9llrtOabNjmXzoy3tNyxej8CaHI/PIDlBenBmLFkYAKfY0yEh0R2AFhzc8pjQSuKymjUybswQLSMnOdF/m+FFWZgU8PCixAFdLbDmulRj50turREq4Lgf1aV3H/qyMBZsz+WfpyuiO8uDloS0w=
(kryptert streng, uten anførselstegn)