correct toepassen van cryptografie - (isc)2 nl - 10 juni 2014
DESCRIPTION
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.TRANSCRIPT
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