Bcrypt ha il miglior tipo di reputazione che si possa ottenere per un algoritmo crittografico: è in circolazione da un po 'di tempo, usato abbastanza ampiamente, "ha attirato l'attenzione", e tuttavia rimane ininterrotto fino ad oggi .
Perché bcrypt è in qualche modo migliore di PBKDF2
Se guardi la situazione in dettaglio, puoi effettivamente vedere alcuni punti in cui bcrypt è migliore di, ad esempio PBKDF2. Bcrypt è una funzione di hashing della password che mira ad essere lenta. Per essere precisi, vogliamo che la funzione di hashing della password sia il più lenta possibile per l'attaccante mentre non sia intollerabilmente lenta per i sistemi onesti . Poiché i "sistemi onesti" tendono a utilizzare hardware generico standard (cioè "un PC") che è anche disponibile per l'attaccante, il meglio che possiamo sperare è fare l'hashing delle password N tempi più lenti sia per l'attaccante che per noi. Quindi aggiustiamo N in modo da non eccedere le nostre risorse (la prima delle quali è la pazienza dell'utente, che è davvero limitata).
Ciò che vogliamo evitare è che un attaccante possa utilizzare hardware non per PC che gli permetterebbe di soffrire meno di noi del lavoro extra implicito da bcrypt o PBKDF2. In particolare, un aggressore industrioso potrebbe voler utilizzare una GPU o un FPGA. SHA-256, ad esempio, può essere implementato in modo molto efficiente su una GPU, poiché utilizza solo operazioni aritmetiche e logiche a 32 bit in cui la GPU è molto brava. Quindi, un utente malintenzionato con 500 $ di GPU sarà in grado di "provare" molte più password all'ora rispetto a quello che potrebbe fare con 500 $ di PC (il rapporto dipende dal tipo di GPU, ma un rapporto 10x o 20x lo farebbe essere tipico).
Bcrypt fa molto affidamento sugli accessi a una tabella che viene costantemente modificata durante l'esecuzione dell'algoritmo. Questo è molto veloce su un PC, molto meno su una GPU, dove la memoria è condivisa e tutti i core competono per il controllo del bus di memoria interno. Pertanto, la spinta che un utente malintenzionato può ottenere dall'utilizzo della GPU è piuttosto ridotta, rispetto a ciò che l'attaccante ottiene con PBKDF2 o progetti simili.
I progettisti di bcrypt erano abbastanza consapevoli del problema, motivo per cui hanno progettato bcrypt dal codice a blocchi Blowfish e non una funzione SHA- *. Notano nel loro articolo quanto segue:
Ciò significa che si dovrebbe rendere qualsiasi funzione di password il più efficiente possibile per l'impostazione in cui opererà. I progettisti di crypt non sono riusciti a farlo. Hanno basato crypt su DES, un algoritmo particolarmente inefficiente da implementare nel software a causa di molte trasposizioni di bit. Hanno scontato gli attacchi hardware, in parte perché la crittografia non può essere calcolata con l'hardware DES stock. Sfortunatamente, Biham in seguito ha scoperto una tecnica software nota come bitslicing che elimina il costo delle trasposizioni di bit nell'elaborazione di molte crittografie DES simultanee. Sebbene il bitslicing non aiuterà nessuno ad accedere più velocemente, offre una velocità impressionante per le ricerche di password a forza bruta.
che mostra che l'hardware e il modo in cui può essere utilizzato è importante. Anche con lo stesso PC del sistema onesto, un utente malintenzionato può utilizzare il bitslicing per provare diverse password in parallelo e trarne vantaggio, perché l'attaccante ha diverse password da provare, mentre il sistema onesto ha solo uno alla volta.
Perché bcrypt non è sicuro in modo ottimale
Gli autori di bcrypt lavoravano nel 1999. A quel tempo, la minaccia era un ASIC personalizzato con conteggi di gate molto bassi. I tempi sono cambiati; ora, il sofisticato attaccante utilizzerà un grande FPGA, ei modelli più recenti (ad esempio Virtex di Xilinx) hanno blocchi RAM incorporati, che consentono loro di implementare Blowfish e bcrypt in modo molto efficiente. Bcrypt richiede solo 4 kB di RAM veloce. Mentre bcrypt fa un lavoro decente nel rendere la vita difficile a un attaccante potenziato dalla GPU, fa ben poco contro un attaccante che brandisce FPGA.
Ciò ha spinto Colin Percival a inventare scrypt nel 2009 ; questa è una funzione simile a bcrypt che richiede molta più RAM. Questo è ancora un nuovo design (solo due anni) e da nessuna parte così diffuso come bcrypt; Lo reputo troppo nuovo per essere raccomandato in generale. Ma la sua carriera dovrebbe essere seguita.
( Modifica: si è scoperto che scrypt non è stato completamente all'altezza delle sue promesse. Fondamentalmente, è buono per ciò per cui era stato progettato, cioè proteggere la chiave di crittografia per il disco rigido principale di un computer: questo è un contesto di utilizzo in cui l'hashing può utilizzare centinaia di megabyte di RAM e diversi secondi di CPU. Per un server occupato che autentica le richieste in arrivo, il budget della CPU è molto inferiore, perché il server deve essere in grado di servire più richieste simultanee contemporaneamente e non rallentare fino a una scansione sotto carichi di picco occasionali; ma quando scrypt utilizza meno CPU, utilizza anche meno RAM, questo fa parte di come la funzione è definito internamente. Quando il calcolo dell'hash deve essere completato entro pochi millisecondi di lavoro, la quantità di RAM utilizzata è così bassa che scrypt diventa, tecnicamente, più debole di bcrypt.)
Cosa consiglia il NIST
NIST ha rilasciato la pubblicazione speciale SP 800-132 sull'argomento della memorizzazione delle password con hash. Fondamentalmente raccomandano PBKDF2. Ciò non significa che ritengano bcrypt insicuro; non dicono niente di bcrypt. Significa solo che il NIST ritiene PBKDF2 "abbastanza sicuro" (e certamente è molto meglio di un semplice hash!). Inoltre, il NIST è un'organizzazione amministrativa, quindi sono tenuti ad amare tutto ciò che si basa su algoritmi già "approvati" come SHA-256. D'altra parte, bcrypt proviene da Blowfish che non ha mai ricevuto alcun tipo di benedizione (o maledizione) NIST.
Anche se raccomando bcrypt, seguo comunque NIST in quanto se implementi PBKDF2 e lo usi correttamente ( con un numero di iterazioni "alto"), è abbastanza probabile che la memorizzazione delle password non sia più il peggiore dei tuoi problemi di sicurezza.