Diciamo che ho una chiamata API che dovrebbe verificare se l'indirizzo e-mail esiste nel DB, senza trasmettere l'indirizzo e-mail effettivo. A tal fine, ho deciso di archiviare l'hash SHA256 dell'indirizzo e-mail nel DB e di aggiornare il client per inviare l'hash SHA256 dell'email nella chiamata API (anziché l'indirizzo e-mail in chiaro).
Come posso renderlo più sicuro usando Salt quando si calcola l'hash?
Secondo la mia comprensione, avere un sale fisso è praticamente lo stesso di non avere affatto sale. C'è un modo in cui posso avere un unico sale per indirizzo email, ma in modo tale che sia il server che il client possono calcolarli?
Qualcosa del genere avrebbe senso? In caso contrario, puoi spiegare perché?
salt = sha256(email)
email_hash = salt + "|" + sha256(email + salt)
Considera la seguente citazione:
The salt value is not secret and may be generated at random and stored with the password hash. A large salt value prevents precomputation attacks, including rainbow tables, by ensuring that each user's password is hashed uniquely. This means that two users with the same password will have different password hashes (assuming different salts are used). In order to succeed, an attacker needs to precompute tables for each possible salt value. The salt must be large enough, otherwise an attacker can make a table for each salt value.
Non sono sicuro se mi manca qualcosa o no, ma questo significa che anche se il sale non è un segreto né casuale, e tutti sanno come calcolare il sale per un indirizzo email, impedirebbe comunque il attaccante dal recupero degli indirizzi email dagli hash utilizzando le tabelle arcobaleno. Perché ogni email verrebbe sottoposta ad hash in modo univoco. È corretto?