Stai confrontando due diversi tipi di difese che funzionano contro due diversi tipi di minacce, senza specificare quali tipi di segreti stai cercando di proteggere o quali tipi di minacce stai cercando di difendere. E non ci stai fornendo protocolli completi con cui lavorare, quindi faremo ipotesi su ciò che stai cercando di fare. Quindi, per favore, comprendi in anticipo se la risposta non soddisfa le tue aspettative.
La prima cosa da ricordare su Salt è che non è tenuto segreto, e non è destinato a essere tenuto segreto. L'unica ragione per cui esiste il sale è rendere difficile indovinare il valore dei dati nel caso in cui i dati sottoposti a hash debbano rimanere segreti E 'possibile che i dati possano entrare in collisione con altri dati. Per esempio se io e te abbiamo scelto la stessa password e entrambi gli hash delle password sono mantenuti nel database, qualcuno che guarda il database potrebbe vedere che l'hash della mia password è uguale al tuo. Ma quando conosco il tuo sale (ricorda, il sale non è segreto), posso provare a forzare il tuo segreto con la forza bruta eseguendo le mie ipotesi attraverso il tuo algoritmo di hash sale +.
La prossima domanda è come stai crittografando l'hash? Tutti gli hash sono crittografati con la stessa chiave? Se è così, allora le collisioni tra i segreti sono ancora possibili e non si comportano diversamente da un hash non salato. Ad esempio, se il mio segreto è "Squeamish Ossifrage", il digest di hash potrebbe essere 123456 e il digest di hash crittografato utilizzando la chiave ABC potrebbe essere XYZ999. Se il tuo segreto è anche "Squeamish Ossifrage", allora il tuo hash digest è anche 123456, e il digest hash crittografato usando la chiave ABC è anche XYZ999. Un utente malintenzionato potrebbe confrontare le voci nel database e vedendo che entrambi hanno XYZ999 saprebbe che il tuo segreto è uguale al mio.
La crittografia di un hash con una chiave segreta fa una cosa: impedisce a qualcun altro di calcolare l'hash perché non conosce la chiave segreta. Altrimenti, funziona come un hash.
E NON preoccuparti di "un algoritmo di decrittografia potrebbe essere rotto". Se hai scelto un algoritmo strong come hai affermato nelle tue precondizioni, non è una preoccupazione realistica. (E se hai scelto AES-256 ed è scoppiato, il mondo intero ha molto più da perdere rispetto a qualunque segreto tu conservi.)