Mcrypt: è una chiave lunga più sicura di una chiave breve?

3

Uso MCRYPT_RIJNDAEL_256 in modalità CBC utilizzando mcrypt in PHP. Questo supporta le dimensioni chiave di 16, 24 o 32.

La dimensione della chiave di 32 è più sicura di una chiave di 16 o 24? Se lo è, conta davvero o è solo un po 'meglio? E una chiave più grande ha un impatto notevole sulle prestazioni in questo caso?

La ricerca su Google o qui su Information Security non mi aiuta, non riesco a trovare una risposta a questa domanda.

La mia ipotesi è che una chiave più lunga sia più sicura e che non influenzi realmente le prestazioni, ma vorrei una conferma (preferibilmente insieme ad alcune fonti).

    
posta Louis Matthijssen 15.06.2014 - 17:00
fonte

2 risposte

3

Più spesso ascolterai le dimensioni delle chiavi discusse a bit anziché a byte. Quindi, 32 byte = 256 bit. 16 = 128, 24 = 192.

In teoria, sì, le lunghezze delle chiavi più lunghe sono più sicure, poiché ci sono più permutazioni possibili della chiave. Ogni bit aggiuntivo significa il doppio delle chiavi possibili, quindi raddoppia la quantità di tempo necessaria per forzare la chiave. Detto questo, la fisica suggerisce che è impossibile persino forzare la forza bruta a 128 bit . Quindi, in realtà, situazioni in cui la crittografia a 256 bit viene utilizzata per una delle due ragioni: 1) vogliono un margine di sicurezza aggiuntivo se le debolezze (ma non un'interruzione completa) sono trovate in AES, o 2) vogliono essere in grado di commercializzalo come "cripto a 256 bit!" In altre parole, è spesso usato per la sensazione di caldo-e-fuzzy di criptaggio "migliore".

Molto più importante della lunghezza della chiave che scegli è come crei la tua chiave. Se le tue chiavi vengono create da un essere umano su una tastiera scegliendo una password, è altamente improbabile che vengano a creare 128 bit. Secondo NIST , basato su studi di password comune pratiche, una password scelta dall'uomo dovrebbe essere lunga 112 caratteri per fornire 128 bit di entropia. Dato che è improbabile che gli utenti digitino 112 caratteri, la strategia di generazione delle chiavi potrebbe essere il punto debole (anche in questo caso, assumendo le chiavi generate dall'utente). Prendi in considerazione l'utilizzo di qualcosa come PBKDF2 per rafforzare l'input dell'utente nei tasti.

Se stai generando le chiavi, assicurati di utilizzare una fonte di qualità di entropia, come /dev/urandom o openssl_random_pseudo_bytes in PHP. Non utilizzare rand o mt_rand , poiché questi non sono crittograficamente sicuri e sono prevedibili per un utente malintenzionato.

    
risposta data 15.06.2014 - 17:19
fonte
3

Le chiavi più lunghe non sono più sicure - non quando il tasto "corto" è già troppo lungo per poter essere infranto con la forza bruta. Non puoi essere più sicuro che sicuro. Non importa se il tempo necessario per rompere la tua chiave è 10 volte o 10 miliardi di volte la vita dell'Universo.

Rijndael è meglio conosciuto come AES . Quando si utilizza una chiave a 256 bit (32 byte), è più lento del 40% rispetto a quando si utilizza una chiave a 128 bit (16 byte); il tempo extra è un capriccio del modo in cui l'algoritmo è definito (14 giri con una chiave da 256 bit invece di 10 round per una chiave da 128 bit). Raramente conta nella pratica, però.

Pertanto, l'hai ottenuto al contrario: una chiave più lunga non è "più sicura", ma può influire sulle prestazioni.

(In pratica, la dimensione della chiave è la parte più strong del tuo sistema, sarà il momento di agitarsi sui computer quantistici quando ogni altro bit di software e hardware nella tua applicazione è stato portato a tali livelli di sicurezza, che è improbabile che si verifichi in qualsiasi software effettivo, in particolare uno che contiene un SO generico, un server Web e PHP.)

    
risposta data 15.06.2014 - 17:14
fonte

Leggi altre domande sui tag