Vorrei usare la funzione di hash di OpenSSL external, in modo da poter assegnare un salt da solo. È possibile o è la funzione di hash di OpenSSL alsways interno "salato"?
Vorrei usare la funzione di hash di OpenSSL external, in modo da poter assegnare un salt da solo. È possibile o è la funzione di hash di OpenSSL alsways interno "salato"?
Gli algoritmi di hash vengono utilizzati in OpenSSL per i controlli di integrità dei dati e per firmare certificati e CRL. La tecnica Salted-Hashing viene utilizzata a livello di applicazione. È possibile utilizzare JavaScript per ottenerlo. Per favore facci sapere che cosa stai cercando di raggiungere.
Quanto segue si basa su input e requisiti di un'implementazione non sicura a scopo di test.
Le funzioni di hash SHA-1 e SHA256 non salveranno i tuoi dati internamente. Tutte le iterazioni multiple di hashing di un determinato dato risulteranno sempre nello stesso hash. Quindi, quello che stai cercando di costruire è possibile.
Passaggio 1 : chiedi all'utente di inserire i dati da sottoporre a hash.
Passaggio 2 : chiedi all'utente quale opzione preferiscono:
La salatura è richiesta - hash=SHA256(SHA256(data)+random(1))
Inserimento manuale di sale - hash=SHA256(SHA256(data)+manual_salt)
Nessuna salatura - hash=SHA256(data)
Se stai codificando in C ++, controlla alcuni di questi link:
SHA-1 e SHA-256 sono funzioni di hash crittografiche . Prendono come input una sequenza arbitraria di bit - e solo quello. Non c'è "sale" nelle funzioni hash.
Quando si dice che una funzione di hash è "salata", questa non è una funzione di hash; questa è un'altra costruzione che usa, tra i suoi parametri di input, uno che è considerato un "sale", e che può usare, internamente, una funzione di hash come elemento di costruzione. Un esempio di tale costruzione è PBKDF2 .
La distinzione è importante, perché quando qualcuno dice "Voglio salare il mio hash", allora questo può significare una delle seguenti due cose:
Che qualcuno sta cercando di implementare alcune costruzioni esistenti e ben specificate come PBKDF2, e lo chiama semplicemente "un hash salato". Il modo giusto è di cercare un'implementazione esistente della costruzione completa, o, in mancanza, di implementarla usando la specifica che indicherà esattamente quale sequenza di bit viene iniettata in qualunque funzione di hash è usata internamente. In ogni caso, la domanda su "come salare un hash" diventa priva di significato.
Che qualcuno è in procinto di creare la sua propria costruzione fatta in casa che comporta una funzione di hash, e cerca di mischiare alcuni valori e alcune funzioni crittografiche, sperando che tutti gli ingredienti interagiscano bene insieme e generino "sicurezza" , immaginato come una specie di torta. Questa è una ricetta conosciuta per il disastro; solo il dolore si trova su quel sentiero.
Di solito , la nozione di "salt" deriva dal concetto di hashing password , dove le password sono "deboli segreti" ("segreti" perché dovrebbero rimanere confidenziali, "deboli" perché possono essere ricordati dai cervelli umani, e il cervello umano è davvero cattivo nel ricordare valori casuali). Le password di hashing non sono qualcosa che tollera bene l'improvvisazione; c'è molta teoria e ricerca sull'argomento, e l'esperienza ha ripetutamente dimostrato che gli schemi casalinghi sono quasi invariabilmente pateticamente deboli. Leggi questa risposta come introduzione sull'argomento.