AGGIORNAMENTO: Recentemente ho imparato da questa domanda che nell'intera discussione qui sotto, io (e sono sicuro che anche altri lo hanno fatto) ero un po 'confuso: quello che continuo a chiamare un tavolo arcobaleno, in realtà è chiamato tabella hash. I tavoli arcobaleno sono creature più complesse e in realtà sono una variante di Hellman Hash Chains. Anche se credo che la risposta sia sempre la stessa (dal momento che non si riduce alla crittoanalisi), alcune delle discussioni potrebbero essere un po 'distorte.
La domanda: " Cosa sono le tabelle arcobaleno e come vengono utilizzate? "
In genere, consiglio sempre di utilizzare un valore casuale crittograficamente forte come salt, da utilizzare con funzioni hash (ad esempio per le password), come per proteggere dagli attacchi di Rainbow Table.
Ma è davvero necessario crittograficamente che il sale sia casuale? Qualunque valore univoco (univoco per utente, ad es. UserId) sarebbe sufficiente a questo proposito? In effetti, impedirebbe di utilizzare una sola Rainbow Table per decifrare tutte (o la maggior parte) le password nel sistema ...
Ma la mancanza di entropia indebolisce davvero la forza crittografica delle funzioni hash?
Nota, non sto chiedendo perché usare il sale, come proteggerlo (non è necessario), usando un singolo hash costante (non) o che tipo di funzione hash usare.
Solo se il sale ha bisogno di entropia o meno.
Grazie a tutti per le risposte finora, ma vorrei concentrarmi sulle aree che conosco (un po ') meno. Principalmente implicazioni per la crittoanalisi: apprezzerei di più se qualcuno avesse qualche input dal PoV cripto-matematico.
Inoltre, se ci sono vettori aggiuntivi che non sono stati considerati, anche questo è un ottimo input (vedi il punto @Dave Sherohman su più sistemi).
Oltre a ciò, se hai una teoria, un'idea o una buona pratica, ti preghiamo di supportarla con prove, scenari di attacco o prove empiriche. O anche valide considerazioni per compromessi accettabili ... Ho familiarità con Best Practice (B maiuscola P maiuscola) sull'argomento, vorrei dimostrare quale valore effettivamente fornisce.
EDIT: Alcune risposte davvero buone qui, ma penso che come dice @Dave, si tratta di Rainbow Tables per nomi utente comuni ... e anche possibili nomi meno comuni. Tuttavia, cosa succede se i miei nomi utente sono unici al mondo? Non necessariamente univoco per il mio sistema, ma per ogni utente, ad esempio indirizzo e-mail.
Non ci sarebbe alcun incentivo a costruire un RT per un singolo utente (come ha sottolineato @Dave, il sale non è tenuto segreto) e ciò impedirebbe comunque il raggruppamento. L'unico problema sarebbe che potrei avere la stessa email e password su un sito diverso, ma il sale non lo impedirebbe comunque.
Quindi, si torna alla crittoanalisi: l'entropia è necessaria o no? (Il mio pensiero attuale è che non è necessario dal punto di vista della crittoanalisi, ma è per altri motivi pratici.)