Sempre quando esegui l'hashing di informazioni sensibili come password, dovresti usare un algoritmo strong e una cosa chiamata sale. Quando un server esegue un hash dalla tua password, utilizza un determinato metodo per farlo in base all'algoritmo in uso. Non importa quanto sia strong l'algoritmo, quando non è salato, produrrà sempre lo stesso risultato con la stessa stringa.
Quindi, la soluzione qui è che è necessario utilizzare un sale con il tuo algoritmo. È meglio se tu possa usare un metodo creato da professionisti che genera un hash con un sale.
Inoltre, potresti piantarne uno solo se la frase dice:
se l'utente è questo e il sale è questo, quindi accedi.
Allora sei sicuro che solo questo utente con questo nome utente sta effettuando l'accesso.
Ma, se vuoi davvero che l'hash sia casuale, hai bisogno di un po 'di sale.
Quindi, cos'è un salt?
Bene, Wikipedia lo spiega in modo positivo:
In cryptography, a salt is random data that is used as an additional
input to a one-way function that "hashes" a password or passphrase.
Salts are closely related to the concept of nonce. The primary
function of salts is to defend against dictionary attacks or against
its hashed equivalent, a pre-computed rainbow table attack.[1] Salts
are used to safeguard passwords in storage. Historically a password
was stored in plaintext on a system, but over time additional
safeguards developed to protect a user's password against being read
from the system. A salt is one of those methods. A new salt is
randomly generated for each password. In a typical setting, the salt
and the password (or its version after Key stretching) are
concatenated and processed with a cryptographic hash function, and the
resulting output (but not the original password) is stored with the
salt in a database. Hashing allows for later authentication without
keeping and therefore risking the plaintext password in the event that
the authentication data store is compromised. Since salts do not have
to be memorized by humans they can make the size of the rainbow table
required for a successful attack prohibitively large without placing a
burden on the users. Since salts are different in each case, they also
protect commonly used passwords, or those who use the same password on
several sites, by making all salted hash instances for the same
password different from each other. Cryptographic salts are broadly
used in many modern computer systems, from Unix system credentials to
Internet security. - Wikipedia https://en.wikipedia.org/wiki/Salt_(cryptography)
Quindi, quando usiamo un sale, evitiamo i cosiddetti attacchi arcobaleni e gli attacchi dictonary e non otteniamo la stessa stringa hash.
Come aggiungeremo un salt?
Ci sono almeno due modi per aggiungere un sale.
1. Aggiungi il sale alla stringa prima del suo hash che è, stringa + sale
2. Utilizza metodi incorporati o buoni metodi progettati da professionisti
Okay, prima di tutto, un sale deve essere davvero, davvero casuale per ogni singola password. Questo è un alto rischio se si ha un sale che è sempre lo stesso perché quando sarà esposto (Sì, quando, perché tutti saranno hackerati in qualche punto), è molto più facile per l'hacker infrangere tutte le password nel database. Con questo in mente, continuiamo.
Il primo metodo, aggiungere un sale direttamente alla stringa non è male, ma poi la domanda è: dove conservare il sale? E come hai intenzione di renderlo il più casuale possibile? Bene, è consigliabile che se stai andando a memorizzare sali che sono memorizzati in modo sperato dalle password, anche in un altro database perché forse qualcuno ha hackerato la tabella delle password o il database in cui sono le password e non i sali, quindi non sa il sale e quindi non le password. Quindi dobbiamo pensare al randomnes del nostro sale, quale metodo è il migliore per generare la cosa più casuale che puoi ottenere? Dipende ovviamente dalla lingua e non hai menzionato alcuna lingua nella tua domanda, quindi temo di non poterti aiutare con quello.
Il secondo è quello di utilizzare funzioni integrate progettate per hash una password con un salt. Questi sono spesso migliori di un semplice aggiunta di sale e hash, perché puoi essere sicuro di ottenere il sale più casuale possibile e diverso su ciascuna password. Il mal di testa con dove conservare il sale e come posso lasciare che sia casuale e ogni password e cosa usare in modo che diventi molto, molto casuale, scompare. Una linea e tu sei bravo. Anche questo è spesso mantenuto e ci sono alcuni metodi che forniscono l'algoritmo più potente che la lingua può offrire + salt. Quindi, questo è ancora più sicuro, perché non devi preoccuparti di quale algoritmo è meglio usare o quando l'algoritmo che stai usando si interrompe, non hai bisogno di andare oltre l'intero codice e cambiare. Ma non tutte le lingue supportano questo tipo di metodi, quindi il primo è quindi meglio di niente.
Il secondo metodo è abbastanza buono, credo, perché non è nemmeno necessario memorizzare il sale, almeno non nel database e quindi è impossibile sapere quale password appartiene a ogni sale, quindi è abbastanza sicuro. Inoltre, mi raccomando durante l'hashing, se possibile, che usi un metodo che usa sempre l'algoritmo più potente disponibile e un sale molto casuale. Perché, allora accade automaticamente e non devi preoccuparti.
Quindi, penso che il secondo metodo sia migliore perché è un sovraccarico e, se possibile, più sicuro perché si utilizzano funzioni integrate. Ma non tutti i linguaggi di programmazione hanno queste funzioni integrate, quindi il primo metodo è meglio di niente. Ma, se ciò non è possibile, usa il primo.
Lì, ce l'hai, la risposta breve è fondamentalmente mettere un po 'di sale sulla tua password, quindi l'hash non sarà lo stesso per ogni password.
Spero che questa informazione aiuti te e alcuni altri.