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.