SHA1 degli indirizzi e-mail sarà sempre univoco?

7

Vogliamo memorizzare i dati relativi a una persona senza memorizzare il loro indirizzo email, ma vogliamo che quest'ultima connetta quella persona con i loro dati su di loro fornendo il loro indirizzo email.

La memorizzazione di uno SHA1 del loro indirizzo email (in minuscolo) lo realizzerà, ma è possibile che due indirizzi email diversi risultino nello stesso SHA1? In tal caso, qual è la probabilità?

CESL

    
posta user19695 15.01.2013 - 19:36
fonte

3 risposte

7
  • La possibilità che questo accada per caso è trascurabile. È approssimativamente n 2 / 2 159 quando hai n di indirizzi email. Ad esempio se hai un miliardo di email, la possibilità è 2 -99 o 10 -30 .

    Quindi, supponendo che non accada per caso è una scommessa abbastanza sicura.

  • Qualcuno sarà in grado di creare due indirizzi email con lo stesso hash, ma non sarà in grado di creare un'email che corrisponda all'hash di un'altra persona che non è identica all'email di quella persona.

    O come direbbe un crittografo, gli attacchi di collisione contro SHA-1 sono fattibili, ma le pre-immagini non lo sono.

    Ma gli attacchi di collisione sembrano irrilevanti per la tua applicazione. Dal momento che non vedo come un utente malintenzionato potrebbe sfruttare il vantaggio di possedere due email con un hash corrispondente.

  • Indovinare l'email e confermarla con un hash è possibile. Il problema principale qui è che SHA-1 è veloce.

    Ho eseguito un simile attacco contro MD5 graatar hashes stackoverflow pubblica , e recuperato intorno al 28%. Qualcuno che impiegherà più sforzi probabilmente sarà in grado di recuperare un po 'di più.

La mia raccomandazione è di utilizzare una costosa costruzione di hashing come PBKDF-2-HMAC-SHA-2 con un sale per applicazione.

    
risposta data 15.01.2013 - 19:52
fonte
4

Se si prendono gli indirizzi n , la probabilità di una collisione (due indirizzi distinti con hashing dello stesso valore) è vicino a n 2 * 2 -159 (per valori pratici di n ). In pratica, puoi ignorare totalmente il rischio di una collisione (il rischio di essere masticato a morte da un orso rabbioso è molto più alto di quello).

Nota però che:

  • SHA-1 ha alcuni punti deboli crittografici, che rendono un po 'più facile per un individuo malintenzionato creare appositamente due distinti indirizzi e-mail che avranno lo stesso valore. Questa è ancora una debolezza teorica, perché mentre il metodo descritto è più veloce del costo teorico di 2 80 , comporta ancora il numero sostanziale di 2 61 valutazioni della funzione hash. Inoltre, potrebbe essere difficile riadattare la collisione calcolata nel formato degli indirizzi email. Ad ogni modo, potresti essere un po 'più cauto nell'usare SHA-256 invece di SHA-1 (e avrà un aspetto migliore se verrà controllato).

  • Gli indirizzi email possono essere distinti tra maiuscole e minuscole. In particolare, il nome di dominio (dopo "@") è, per statuto, non sensibile al maiuscolo / minuscolo, quindi example.com , Example.COM e exAmPLE.cOM sono tutti equivalenti. Per ciò che appare prima il segno '@', questo è dipendente dal sito. Potresti voler fare un po 'di normalizzazione prima dell'hashing, ed è possibile che non ci sia una buona soluzione che funzionerà con tutti gli indirizzi email esistenti.

Modifica: sebbene questo risponda alla tua domanda esatta, ti consigliamo di guardare la risposta di @CodeInChaos, che cerca di vedere un po 'più in profondità il tuo problema: se è possibile fornire un indirizzo email e verifica che corrisponda a un hash memorizzato, quindi rende possibile "provare" potenziali indirizzi email contro il valore hash e tende a funzionare. Questa è una variante dell'attacco del dizionario e potrebbe essere o non essere un grosso problema con il tuo modello di sicurezza.

    
risposta data 15.01.2013 - 19:52
fonte
1

Il termine per questo è (SHA1) collisione e ci sono numerose risorse su Internet a riguardo.

Il numero di indirizzi email e il problema di compleanno aumentano le possibilità di una collisione ma per questo uso pratico, il è probabile che non avrai mai una collisione.

Dovresti aspettarti diversi problemi come gli indirizzi email con punti. Gmail ignorerà qualsiasi punto nell'indirizzo email in modo che [email protected] sia uguale a [email protected] ma l'hash sarà diverso.

    
risposta data 15.01.2013 - 19:52
fonte

Leggi altre domande sui tag