Om de vertrouwelijkheid en authenticiteit van gegevens te kunnen waarborgen wordt meestal gebruik gemaakt van cryptografie. Hoewel er goede, veilige cryptografische methoden beschikbaar zijn, worden vaak de verkeerde keuzes gemaakt of wordt de methode onjuist geïmplementeerd. Om u voor deze fouten in de toekomst te behoeden, vertelt Luuk Danes welk proces doorlopen moet worden en voor welke valkuilen u moet waken bij het gebruik van cryptografie.
2. Agenda
• Over Luuk Danes (Advies)
• Over het CISSP domein Cryptografie
• Basisbegrippen Cryptografie
• Correct toepassen van cryptografie in 5 stappen
• Samenvattend advies
• Vragen
3. Luuk Danes Advies
• Wiskundige,
gespecialiseerd in cryptologie
• Ervaring opgedaan bij
de OV-chipkaart en een
security evaluation lab
• Werkzaam als freelance
security-adviseur
• Lid Normcommissie voor het
Framework Secure Software
4. Over CISSP domein Cryptografie
• Veel technische ‘weetjes’
• Kennis voor cryptografen, niet voor decision makers
• Veel historische informatie over ‘onbekende’ algoritmes
• Tussen de regels door wel tips voor toepassing,
maar geen duidelijk advies of richting gegeven
5. Samenvattend advies
• Bezint eer ge begint:
Cryptografie is moeilijk
• Volg de 5 stappen:
Eisen opstellen, ontwerpen, implementeren, controleren, onderhouden
• Kies voor erkende standaard oplossingen:
Standaard algoritmes, protocollen, libraries en oplossingen
• Schakel een expert in
6. De 4 hoofdfuncties van cryptografie
• Vertrouwelijkheid
• Integriteit
• Authenticatie
• Onweerlegbaarheid (non-repudiation)
7. Cryptografische primitieven
Symmetrisch
• encryptie
• message authentication codes (MACs)
Random number generation
Asymmetrisch
• public key encryptie
• digitale handtekening
• public key authenticatie &
sleuteluitwisseling
Hash functies
10. Stap 1: Eisen opstellen
• Bepaal het doel
• Is vertrouwelijkheid, integriteit, authenticatie of onweerlegbaarheid vereist?
• Is er sprake van opslag, transport of enkel tijdelijk materiaal?
• In geval van opslag, bepaal voor welke termijn
• In geval van transport, bepaal de dataflow:
beginlocatie, eindlocatie en tussenlocaties
ImplementationRequirements Design MaintenanceVerification
11. Stap 1: Eisen opstellen
• Bepaal het beschermingsniveau
• Bepaal mogelijke typen aanvallers
• Bepaal de termijn waarop de gegevens beschermd moeten blijven
ImplementationRequirements Design MaintenanceVerification
Very short-term < 5 years protection
Short-term ≈ 10 years protection
Medium-term ≈ 20 years protection
Long-term ≈ 30 years protection
Foreseeable future
12. Stap 1: Eisen opstellen
• Bepaal het
beschermingsniveau
• Bepaal de vereiste
veiligheid in
Bits of Security
Let op:
sleutellengte
≠
security level
ImplementationRequirements Design MaintenanceVerification
14. Stap 2: Ontwerpen
• Kies de juiste type (categorie) crypto
• Op basis van het doel
• Kies de juiste algoritmes en protocollen
• Op basis van het doel
• Op basis van de benodigde Bits of Security
• Uit de lijst met ‘approved’ algoritmes en protocollen
(ECRYPT / ENISA / NIST documenten)
• Kies de juiste parameters
• Op basis van toegestane parameters
• Op basis van benodigde Bits of Security
ImplementationRequirements Design MaintenanceVerification
15. Stap 2: Ontwerpen
• Kies voor erkende oplossingen
Let op:
Ga niet zelf iets uitvinden! en Kies nooit voor een bekend zwak algoritme!
• Zorg dat het ontwerp in overeenstemming is met de eisen
Let op:
Doe hierbij geen concessies aan projectleiders en business-owners!
(Eventueel: laat de eindverantwoordelijke tekenen voor aanpassing van eisen)
ImplementationRequirements Design MaintenanceVerification
16. Stap 2: Ontwerpen
• Dwing in het ontwerp het correct gebruiken van de crypto-
maatregelen af
ImplementationRequirements Design MaintenanceVerification
17. Stap 3: Implementeren
• Implementeer de ontworpen oplossing
• Kies betrouwbare crypto libraries
• Gebruik die op de juiste manier!
• Gebruik de laatste versies
• Voorbeelden: OpenSSL, Crypto++, BouncyCastle, NaCl, .NET Framework
• Gebruik functies op de juiste manier
• Correcte aanroep
• Selecteer de juiste algoritmes en parameters
• Pas het ‘Fail secure’-principe toe op cryptografische functies
ImplementationRequirements Design MaintenanceVerification
18. Stap 3: Implementeren
• Kies een veilige random number generator
Niet goed: Ook niet goed:
ImplementationRequirements Design MaintenanceVerification
int main(void) {
srand(time(NULL));
for(int i = 1; i <=10; i) {
cout << rand() % 10;
}
return 0;
}
bron: xkcd.com/221
19. Stap 3: Implementeren
• Kies een veilige random number generator:
• Veiligste* oplossing: True Random Number Generator (TRNG)
• Praktische oplossing:
gebruik de random number generator van het platform of library
Let op: controleer of de gekozen RNG cryptographically secure is!
• Voorbeelden:
• Java : java.security.SecureRandom
• Linux : /dev/random of /dev/urandom
• Windows : CryptGenRandom (CAPI) of BCryptGenRandom (CNG)
• .Net : RNGCryptoServiceProvider.GetBytes
ImplementationRequirements Design MaintenanceVerification
21. Stap 3: Implementeren
• Implementeer sleutelbeheer vanuit technisch oogpunt:
• Veiligste* oplossing: Hardware Security Module
• Software-oplossing:
gebruik de key management functies van het platform
• Voorbeelden:
• CNG Key Storage Functions
• iOS/OS X Keychain Services
• Android KeyStore
ImplementationRequirements Design MaintenanceVerification
22. Stap 3: Implementeren
• Implementeer sleutelbeheer vanuit organisatorisch oogpunt:
• Zorg voor processen rond sleuteluitgifte, intrekking, etc.
• Maak processen voor het veilig aanmaken van master/root keys
• Houd een register bij (passief en actief!) van uitgegeven sleutels
ImplementationRequirements Design MaintenanceVerification
24. Stap 4: Controleren
• Controleer of eisen en ontwerp in overeenstemming zijn
Vaststelling van tweezijdige compleetheid is bij crypto nóg
belangrijker dan bij ‘gewone’ software-verificatie
• Controleer of ontwerp en implementatie in overeenstemming zijn
• Controleer de security van de implementatie in het algemeen
• Sterk aanbevolen: review/beoordeling door een externe partij
ImplementationRequirements Design MaintenanceVerification
25. Stap 5: Onderhouden
• Volg en onderhoud de processen rond sleutelbeheer
• Houd software up-to-date
en zorg voor een update-routine
• Zowel technische als procedureel
• Niet enkel voor de software, maar ook voor het crypto-algoritme of protocol
• Zorg voor informatiebeveiliging in het algemeen:
ImplementationRequirements Design MaintenanceVerification
PROTECT RECOVERDETECTDETER RESPOND
26. Samenvattend advies
• Bezint eer ge begint:
Cryptografie is moeilijk
• Volg de 5 stappen:
Eisen opstellen, ontwerpen, implementeren, controleren, onderhouden
• Kies voor erkende standaard oplossingen:
Standaard algoritmes, protocollen, libraries en oplossingen
• Schakel een expert in