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

Post on 25-Jun-2015

365 views 2 download

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

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