Se stai usando bcrypt, oltre al testo in chiaro / password che stai tracciando, bcrypt richiede un sale e un fattore di lavoro. Suppongo che tu stia mantenendo costante il fattore di lavoro, ma non hai detto del sale.
Generalmente, la probabilità di collisione di una buona funzione di hash dipende dalla dimensione dell'output dell'hash. Il compleanno paradosso rende le collisioni molto più frequenti di quanto permetta la tua intuizione; un'approssimazione (molto approssimativa) consiste nel prendere la radice quadrata del numero di uscite possibili (chiama il risultato n ) e assumere che vedrai una collisione dopo l'hashing n ingressi.
Quindi, se manteneste la costante di sale, otterreste 184 bit di spazio di output, traducendo in circa 1 collisione in 2 ingressi 92 con hash. Se hai usato un salt casuale su ogni input, avresti uno spazio aggiuntivo di 128 bit di output, migliorando ulteriormente la resistenza alle collisioni.
Si noti che queste sono probabilità , non garanzie . Quindi potresti produrre la tua prima collisione molto prima del previsto, anche se è improbabile. Tuttavia, dovresti probabilmente pianificare le collisioni. Se hai effettivamente prodotto una collisione, potresti cambiare il sale e riprovare fino a quando non sei andato in collisione; è abbastanza semplice da non complicare molto il tuo codice.
Questo articolo ti fornisce la matematica dietro il calcolo delle probabilità di collisione dell'hash.