Sto cercando di aiutare a anonimizzare gli utenti, ma di dare loro comunque alcuni controlli. Quindi questo è diverso da come dire, anonimizzando un set di dati in cui non hai mai bisogno di tornare agli utenti originali.
Lascia che ti faccia un esempio. Voglio che un utente entri con il suo indirizzo email per accedere al mio sistema, ma non voglio memorizzare l'indirizzo email. Voglio assegnare a quell'utente un UUID che userò. Tuttavia, se l'utente perde l'identificatore casuale è necessario essere in grado di reinserire il proprio indirizzo e-mail e quindi tornare nel sistema.
La risposta più semplice a questo è un hash. Ovviamente potrei memorizzare l'hash accanto all'UUID. Se perdono l'UUID possono tornare indietro e posso re-hash la password. D'altra parte, se il mio sistema è suddiviso, i cattivi possono semplicemente fare un attacco di dizionario su un elenco di indirizzi e-mail e quindi ri-identificare gli UUID.
In primo luogo, c'è un modo standard per farlo? bcrypt e PBKDF2 mi vengono in mente, ma ovviamente non posso memorizzare una tupla di <email, salt, iterations>
senza rendere il lavoro degli intrusi ancora più facile.
Non mi piace inventare nuovi elementi di sicurezza, ma ho avuto un'idea. Fondamentalmente immagazzino <SHA512(email), salt, iterations>
e poi immagazzino <PBKDF2(email, salt, iterations), UUID>
.
In questo modo devono prima attaccare il dizionario alla prima tabella, e poi usare i risultati per fare singoli attacchi di dizionario su ogni riga della seconda tabella, il che dovrebbe rallentare.