Perché PHP password_hash utilizza blowfish intstead threefish?

2

Mi stavo chiedendo perché la funzione hash_password di PHP usi blowfish anziché threefish. Secondo Bruce Schneider, il blowfish è obsoleto e raccomanda due pesci o tre pesci. Blowfish è abbastanza sicuro e threefish rallenta l'autenticazione di accesso?

    
posta ampika 11.01.2016 - 17:14
fonte

3 risposte

8

PHP usa bcrypt per password_hash() , ma poiché PHP è PHP, devono massimizzare la confusione, quindi chiamano "Blowfish".

Oltre ad essere una famiglia di pesci altamente velenosi , Blowfish è un block cipher per più di 20 anni fa. Bcrypt è una funzione di hashing della password che risulta essere derivata da un codice a blocchi interno simile a Blowfish, ma è usato per qualcosa di completamente diverso da quello che i cifrari a blocchi sono pensati per essere usato, cioè la crittografia.

Threefish è un altro codice a blocchi, che è stato progettato molto più tardi per un altro scopo, che è il design del Skein Funzione di hash. Ora fai attenzione , perché qui arriva il punto delicato. "Funzioni hash" e "funzioni hashing password" sono cose completamente diverse . Nonostante la somiglianza nel nome, sono bestie molto distinte, che prendono diversi tipi di input, producono diversi tipi di output e hanno requisiti e proprietà di sicurezza molto diversi.

Threefish è stato progettato come codice a blocchi per una serie di motivi, il principale dei quali è la necessità di blocchi grandi (512 bit o più), perché sono necessari blocchi di grandi dimensioni per creare una funzione hash che resista alle collisioni. Tuttavia, le collisioni sono completamente irrilevanti per l'hashing delle password e la dimensione del blocco breve di Blowfish (64 bit) non è un problema per bcrypt.

Come cifrari a blocchi , Threefish è "migliore" di Blowfish in molti modi (blocchi più grandi, più veloci, possono essere implementati senza tabelle ...). Come un elemento fondamentale per una funzione hash, Threefish è ancora meglio di Blowfish, ma in modi diversi. Come elemento fondamentale per una funzione di hashing della password, Threefish è in realtà peggiore di Blowfish, per gli stessi motivi per cui Threefish è migliore di Blowfish per una funzione hash; in particolare, Threefish può essere implementato senza tabelle. Ciò significa che Threefish consente implementazioni parallele completamente ottimizzate su GPU , qualcosa di buono in generale, e molto brutto per l'hashing delle password .

Niente di tutto questo spiega davvero perché PHP non sia "passato a Threefish". Questo dice solo perché un tale interruttore sarebbe una cattiva idea.

    
risposta data 11.01.2016 - 19:14
fonte
3

PHP password_hash utilizza funzione hashing di crittografia . Questo è vicino allo stato dell'arte per l'archiviazione delle password con forse scrypt in fila come suo successore.

Anche se non si fornisce un collegamento per il commento di Schneier (non corretto ortografia), sospetto che stia parlando dell'algoritmo di crittografia blowfish. Mentre bcrypt è basato su blowfish, non si ritiene che abbia punti deboli simili.

    
risposta data 11.01.2016 - 17:41
fonte
0

Attualmente, password_hash è progettato per essere compatibile con crypt() , che supporta un intervallo limitato di algoritmi hash. Tra gli algoritmi supportati, Blowfish è l'unico algoritmo crittografico:

  • DES è noto per essere debole e ha un hash molto breve (2 caratteri)
  • Il DES avanzato è un po 'meglio
  • MD5 è troppo veloce da usare per l'hashing della password - è possibile fare 100ks di prove al secondo su un PC moderno
  • SHA256 e SHA512 sono entrambi forti, ma ancora più veloci di Blowfish, il che è una cosa negativa per le password. Supportano un conteggio del round, che aiuta e potrebbe teoricamente essere utilizzato

Qualsiasi altra funzione potrebbe essere facilmente inclusa in PHP, ma risulterebbe in hash che non potevano essere verificati usando crypt.

    
risposta data 11.01.2016 - 17:44
fonte

Leggi altre domande sui tag