BCrypt hash come ID della tabella del database

0

Nella mia applicazione web devo memorizzare i valori hash (usando BCrypt) come ID per una tabella di database.
L'input per ogni valore di hash è una stringa univoca.
Sono preoccupato per possibili collisioni.
1) Qual è la possibilità di avere una collisione (che causerà un'eccezione DB, mentre si inserisce una nuova riga con ID colliso generato)?
2) Quali sono i mezzi per prevenirlo?

Si prega di non avvisare, che i valori dell'hash non possono essere utilizzati come ID.
Comunque non sono attaccato solo a BCrypt (l'alternativa è ok).
Il compito principale è quello di avere valori hash sicuri unici.

    
posta Sabine 24.06.2017 - 18:58
fonte

1 risposta

0

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.

    
risposta data 26.06.2017 - 01:24
fonte

Leggi altre domande sui tag