Correct toepassenvan cryptografie
Luuk Danes
dinsdag 10 juni 2014(ISC)2 NL - Bilthoven
Luuk Danes Advies
Agenda
• Over Luuk Danes (Advies)• Over het CISSP domein Cryptografie• Basisbegrippen Cryptografie• Correct toepassen van cryptografie in 5 stappen• Samenvattend advies• Vragen
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
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
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
De 4 hoofdfuncties van cryptografie
• Vertrouwelijkheid
• Integriteit
• Authenticatie
• Onweerlegbaarheid (non-repudiation)
Cryptografische primitieven
Symmetrisch• encryptie
• message authentication codes (MACs)
Random number generation
Asymmetrisch• public key encryptie
• digitale handtekening
• public key authenticatie & sleuteluitwisseling
Hash functies
Cryptografische primitieven
Symmetrisch• encryptie
block ciphers (3DES, AES, Blowfish)
modes of operation (ECB, CBC, CTR)
stream ciphers (RC4, A5/1, SNOW 3G)
• message authentication codes (MACs) (HMAC, CBC-MAC, CMAC)
Random number generation
Asymmetrisch• public key encryptie
(RSA, Elliptic Curve)
• digitale handtekening (RSA PKCS#1 v1.5, DSA, ECDSA)
• public key authenticatie & sleuteluitwisseling (Diffie-Hellman, PKI, TLS, SSH)
Hash functies (MD5, RIPE-MD160, SHA-2)
• 5 stappen:1. Eisen opstellen2. Ontwerpen3. Implementeren4. Controleren5. Onderhouden
• Requirements traceability! (volgens waterval-methode)
Stappenplan
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
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 protectionShort-term ≈ 10 years protectionMedium-term ≈ 20 years protectionLong-term ≈ 30 years protectionForeseeable future
Stap 1: Eisen opstellen
• Bepaal het beschermingsniveau• Bepaal de vereiste
veiligheid in Bits of Security
Let op: sleutellengte ≠ security level
ImplementationRequirements Design MaintenanceVerification
Bronnen
• Sleutellengtes: www.keylength.com • Beschermingsniveaus en bijpassende cryptografische primitieven:
ECRYPT II Report 2012 ENISA Report 2013 NIST SP 800-131A
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
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
Stap 2: Ontwerpen
• Dwing in het ontwerp het correct gebruiken van de crypto-maatregelen af
ImplementationRequirements Design MaintenanceVerification
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 functiesImplementationRequirements Design MaintenanceVerification
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
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 libraryLet 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
Stap 3: Implementeren
• Implementeer sleutelbeheer:
• Technisch
• Organisatorisch
ImplementationRequirements Design MaintenanceVerification
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
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
Stap 3: Implementeren
• Algemene software security
• Maatregelen tegen side-channel attacks
• Maatregelen buiten de applicatie
ImplementationRequirements Design MaintenanceVerification
Stap 4: Controleren
• Controleer of eisen en ontwerp in overeenstemming zijnVaststelling 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
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
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
Vragen?
Luuk Danes Advies www.luukdanes.nl
bron: xkcd.com/257
Top Related