Il sale può essere considerato pubblico praticamente per definizione .
Per quanto riguarda l'hash da usare e il modo in cui è "sicuro", vorrei attenermi alle raccomandazioni che il NIST rivolge alle agenzie governative degli Stati Uniti. Come l'articolo di Wikipedia dice:
SHA-1 is being retired for most government uses; the U.S. National Institute of Standards and Technology says, "Federal agencies should stop using SHA-1 for...applications that require collision resistance as soon as practical, and must use the SHA-2 family of hash functions for these applications after 2010"
Puoi speculare su come vari algoritmi sicuri o non sicuri sono, ma perché preoccuparti quando hai una specifica che il governo degli Stati Uniti considera abbastanza buono per il proprio uso?
[modifica]
A proposito, la tua domanda sembra riflettere un fraintendimento su come vengono eseguite queste analisi. C'è molto di più per una funzione di hash rispetto al suo numero di bit.
Forzare a forza di un hash a 160 bit come SHA-1 richiede uno sforzo di 2 ^ 160; questo semplicemente non succederà, non importa quante "GPU" ci passi. In realtà probabilmente non accadrà nella vita dell'universo. (Vero, la forzatura brutale di una collisione richiede "solo" uno sforzo di 2 ^ 80. Ma richiede anche 2 ^ 80 memoria . Buona fortuna con quello.)
Il motivo per cui MD5 e SHA-1 sono considerati "potenzialmente insicuri" è che sono state scoperte debolezze in ogni algoritmo che potrebbe ridurre il modo di lavorare, molto al di sotto dello sforzo della forza bruta. La ragione per passare a un nuovo algoritmo (come SHA-2) è di evitare quelle note debolezze; il motivo dell'utilizzo di 256 bit è quello di fornire un buffer contro i punti deboli sconosciuti . Non ha nulla a che fare con "GPU"; per resistere agli attacchi di forza bruta, 160 bit sono sufficienti.
Dichiarazioni simili valgono comunque per tutti i tipi di crittografia.
Ora, è impossibile esagerare quanto più la gente della NSA sa di queste cose rispetto a te o a me. Fanno raccomandazioni per le agenzie governative degli Stati Uniti e l'industria degli Stati Uniti tramite il NIST. Quindi, a meno che il tuo avversario non sia di per sé un grande governo mondiale, le raccomandazioni del NIST sono più che sufficienti. Ignora gli "esperti" autoproclamati che cercano di dirti altrimenti; La NSA è migliore in ciò che fa di quanto tu possa immaginare.
Se il tuo avversario è un importante governo mondiale, nessuno in SO è qualificato per aiutarti. E tu hai problemi molto più grandi di quale funzione hash usare.
[modifica 2]
Naturalmente presumo che tu stia già utilizzando questa funzione come parte di uno schema di hashing delle password standard, come PKCS # 5 (noto anche come "PBKDF2") e la tua domanda riguardava esclusivamente la funzione hash da utilizzare.
PBKDF2 raccomanda un minimo di 1000 iterazioni, ma puoi scegliere quello che vuoi. Lo sforzo della forza bruta dell'attaccante sale linearmente con quel numero, quindi 10000 iterazioni contro 1000 significa che impiegheranno 10 volte di più per forzare ogni password.