Memorizza l'indirizzo e-mail crittografato ma in modo deterministico

0

Come parte di un'applicazione che sto sviluppando, mi viene richiesto di memorizzare gli indirizzi email degli utenti su un DB cloud. L'indirizzo e-mail non deve essere scritto in testo normale per il normale funzionamento dell'applicazione.

Quindi, per fornire sicurezza, l'indirizzo e-mail viene crittografato e quindi memorizzato nel database. L'indirizzo email nel modulo crittografato sarà il mezzo principale per identificare gli utenti (è la chiave primaria).

Dati questi fatti, quale dei seguenti metodi di crittografia ha senso se il server del database è vulnerabile agli attacchi.

Metodo 1:

Encrypted-Email-Address = Asymmetric Cipher(Pub-Key2, 
               Asymmetric Cipher(Pub-Key1, Plain-text-Email-address))

Non verrà utilizzato alcun padding casuale per consentire la mappatura deterministica tra gli indirizzi e-mail semplici e cifrati, quindi la crittografia due volte

o

Metodo 2:

Encrypted-Email-Address = Symmetric Cipher(Key, Plain-text-Email-address)

Si noti che poiché la decrittografia non è richiesta per la normale operazione, le chiavi private nel metodo 1 verranno archiviate offline nel mondo fisico. La crittografia dovrà essere deterministica anche se l'indirizzo email è la chiave primaria.

Ho seguito il link . Ma l'OP sta cercando di memorizzare un campo chiave non primario, quindi non posso usarlo.

Sei a conoscenza di eventuali migliori metodologie che risolvono questo caso d'uso?

    
posta dvlpr 30.09.2013 - 21:04
fonte

2 risposte

0

Per quanto ne so, stai utilizzando l'indirizzo email per 2 scopi separati, quindi perché non memorizzarlo due volte?

In una colonna, è possibile memorizzare una versione hash, proprio come se si memorizzasse una password. È deterministico, quindi puoi utilizzarlo per cercare un utente tramite il loro indirizzo email.

Sebbene, come altri hanno già detto, non è una buona idea usarlo come chiave primaria. Utilizza una chiave surrogata (ad esempio un incremento automatico) e crea un indice univoco nella colonna email.

Quindi, in una seconda colonna, avresti una versione crittografata asimmetricamente che puoi decifrare con una chiave privata offline, se mai ne hai bisogno. Questo non avrebbe bisogno di essere deterministico, quindi è possibile utilizzare la crittografia asimmetrica standard.

    
risposta data 01.10.2013 - 16:59
fonte
3

Gli indirizzi email sono soggetti a enumerazione. Non ci sono tanti indirizzi email. Qualsiasi schema deterministico che non usi alcun segreto (cioè nessuna chiave che un possibile attaccante possa sapere) non farà nulla contro questo. Non so cosa si suppone che la "doppia crittografia asimmetrica" con due chiavi pubbliche abbia successo; ma so che non risolve il problema principale. Le chiavi pubbliche sono pubbliche.

La crittografia

simmetrica , con una chiave che l'utente malintenzionato non ha, può essere deterministica e sicura ( se eseguita correttamente ), ma ciò si applica difficilmente alla tua situazione, dal momento che anche se non hai bisogno di decryption , devi cifrare molto, perché l'indirizzo email dell'utente è ciò che l'utente digita.

Un ulteriore problema con gli indirizzi e-mail è che non sono sempre riproducibili: gli utenti possono utilizzare diversi involucri (caso non significativo nella parte del dominio, dopo "@", ma può essere significativo nella parte locale), utilizzare le varianti (molte persone hanno '[email protected]' e '[email protected]' come indirizzi validi) e includere "commenti" (come in '[email protected]' ) con una nozione site specific di ciò che costituisce un "commento". Come suggerisce @Stephen, è meglio assegnare semplicemente un ID a ciascun utente e utilizzare quell'ID come chiave primaria.

    
risposta data 30.09.2013 - 23:42
fonte

Leggi altre domande sui tag