Correct toepassen van cryptografie - (ISC)2 NL - 10 juni 2014

27
Correct toepassen van cryptografie Luuk Danes dinsdag 10 juni 2014 (ISC) 2 NL - Bilthoven Luuk Danes Advies

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 of Correct toepassen van cryptografie - (ISC)2 NL - 10 juni 2014

Page 1: Correct toepassen van cryptografie - (ISC)2 NL - 10 juni 2014

Correct toepassenvan cryptografie

Luuk Danes

dinsdag 10 juni 2014(ISC)2 NL - Bilthoven

Luuk Danes Advies

Page 2: Correct toepassen van cryptografie - (ISC)2 NL - 10 juni 2014

Agenda

• Over Luuk Danes (Advies)• Over het CISSP domein Cryptografie• Basisbegrippen Cryptografie• Correct toepassen van cryptografie in 5 stappen• Samenvattend advies• Vragen

Page 3: Correct toepassen van cryptografie - (ISC)2 NL - 10 juni 2014

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

Page 4: Correct toepassen van cryptografie - (ISC)2 NL - 10 juni 2014

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

Page 5: Correct toepassen van cryptografie - (ISC)2 NL - 10 juni 2014

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

Page 6: Correct toepassen van cryptografie - (ISC)2 NL - 10 juni 2014

De 4 hoofdfuncties van cryptografie

• Vertrouwelijkheid

• Integriteit

• Authenticatie

• Onweerlegbaarheid (non-repudiation)

Page 7: Correct toepassen van cryptografie - (ISC)2 NL - 10 juni 2014

Cryptografische primitieven

Symmetrisch• encryptie

• message authentication codes (MACs)

Random number generation

Asymmetrisch• public key encryptie

• digitale handtekening

• public key authenticatie & sleuteluitwisseling

Hash functies

Page 8: Correct toepassen van cryptografie - (ISC)2 NL - 10 juni 2014

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)

Page 9: Correct toepassen van cryptografie - (ISC)2 NL - 10 juni 2014

• 5 stappen:1. Eisen opstellen2. Ontwerpen3. Implementeren4. Controleren5. Onderhouden

• Requirements traceability! (volgens waterval-methode)

Stappenplan

Page 10: Correct toepassen van cryptografie - (ISC)2 NL - 10 juni 2014

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

Page 11: Correct toepassen van cryptografie - (ISC)2 NL - 10 juni 2014

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

Page 12: Correct toepassen van cryptografie - (ISC)2 NL - 10 juni 2014

Stap 1: Eisen opstellen

• Bepaal het beschermingsniveau• Bepaal de vereiste

veiligheid in Bits of Security

Let op: sleutellengte ≠ security level

ImplementationRequirements Design MaintenanceVerification

Page 13: Correct toepassen van cryptografie - (ISC)2 NL - 10 juni 2014

Bronnen

• Sleutellengtes: www.keylength.com • Beschermingsniveaus en bijpassende cryptografische primitieven:

ECRYPT II Report 2012 ENISA Report 2013 NIST SP 800-131A

Page 14: Correct toepassen van cryptografie - (ISC)2 NL - 10 juni 2014

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

Page 15: Correct toepassen van cryptografie - (ISC)2 NL - 10 juni 2014

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

Page 16: Correct toepassen van cryptografie - (ISC)2 NL - 10 juni 2014

Stap 2: Ontwerpen

• Dwing in het ontwerp het correct gebruiken van de crypto-maatregelen af

ImplementationRequirements Design MaintenanceVerification

Page 17: Correct toepassen van cryptografie - (ISC)2 NL - 10 juni 2014

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

Page 18: Correct toepassen van cryptografie - (ISC)2 NL - 10 juni 2014

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

Page 19: Correct toepassen van cryptografie - (ISC)2 NL - 10 juni 2014

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

Page 20: Correct toepassen van cryptografie - (ISC)2 NL - 10 juni 2014

Stap 3: Implementeren

• Implementeer sleutelbeheer:

• Technisch

• Organisatorisch

ImplementationRequirements Design MaintenanceVerification

Page 21: Correct toepassen van cryptografie - (ISC)2 NL - 10 juni 2014

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

Page 22: Correct toepassen van cryptografie - (ISC)2 NL - 10 juni 2014

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

Page 23: Correct toepassen van cryptografie - (ISC)2 NL - 10 juni 2014

Stap 3: Implementeren

• Algemene software security

• Maatregelen tegen side-channel attacks

• Maatregelen buiten de applicatie

ImplementationRequirements Design MaintenanceVerification

Page 24: Correct toepassen van cryptografie - (ISC)2 NL - 10 juni 2014

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

Page 25: Correct toepassen van cryptografie - (ISC)2 NL - 10 juni 2014

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

Page 26: Correct toepassen van cryptografie - (ISC)2 NL - 10 juni 2014

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

Page 27: Correct toepassen van cryptografie - (ISC)2 NL - 10 juni 2014

Vragen?

Luuk Danes Advies www.luukdanes.nl

bron: xkcd.com/257