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

Transcript
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