PEMBARUAN: Baru-baru ini saya belajar dari pertanyaan ini bahwa dalam seluruh diskusi di bawah ini, saya (dan saya yakin orang lain juga melakukannya) agak membingungkan: Apa yang terus saya sebut tabel pelangi, sebenarnya disebut tabel hash. Tabel pelangi adalah makhluk yang lebih kompleks, dan sebenarnya merupakan varian dari Hellman Hash Chains. Meskipun saya yakin jawabannya masih sama (karena tidak sampai pada pembacaan sandi), beberapa diskusi mungkin sedikit miring.
Pertanyaannya: " Apakah tabel pelangi itu dan bagaimana penggunaannya? "
Biasanya, saya selalu merekomendasikan penggunaan nilai acak yang kuat secara kriptografik seperti salt, untuk digunakan dengan fungsi hash (misalnya untuk kata sandi), seperti untuk melindungi dari serangan Rainbow Table.
Tetapi apakah sebenarnya garam perlu secara kriptografik menjadi acak? Apakah nilai unik apa pun (unik per pengguna, mis. UserId) cukup dalam hal ini? Ini sebenarnya akan mencegah penggunaan satu Tabel Pelangi untuk memecahkan semua (atau sebagian besar) kata sandi dalam sistem ...
Tetapi apakah kurangnya entropi benar-benar melemahkan kekuatan kriptografi dari fungsi hash?
Catatan, saya tidak bertanya tentang mengapa menggunakan garam, bagaimana melindunginya (tidak perlu), menggunakan hash konstan tunggal (jangan), atau jenis fungsi hash apa yang digunakan.
Apakah garam membutuhkan entropi atau tidak.
Terima kasih atas jawabannya sejauh ini, tetapi saya ingin fokus pada area yang (sedikit) kurang saya kenal. Implikasi utamanya untuk kriptanalisis - saya akan sangat menghargai jika ada yang memiliki masukan dari PoV matematika-kripto.
Selain itu, jika ada vektor tambahan yang belum dipertimbangkan, itu juga merupakan masukan yang bagus (lihat poin @Dave Sherohman pada beberapa sistem).
Di luar itu, jika Anda memiliki teori, ide, atau praktik terbaik - harap dukung ini dengan bukti, skenario serangan, atau bukti empiris. Atau bahkan pertimbangan yang valid untuk trade-off yang dapat diterima ... Saya akrab dengan Praktik Terbaik (huruf besar B kapital P) tentang masalah ini, saya ingin membuktikan nilai apa yang sebenarnya diberikan ini.
EDIT: Beberapa jawaban yang sangat bagus di sini, tapi saya pikir seperti yang dikatakan @Dave, itu turun ke Tabel Pelangi untuk nama pengguna umum ... dan kemungkinan nama yang kurang umum juga. Namun, bagaimana jika nama pengguna saya unik secara global? Tidak selalu unik untuk sistem saya, tetapi untuk setiap pengguna - mis. Alamat email.
Tidak akan ada insentif untuk membangun RT untuk satu pengguna (seperti yang ditekankan @Dave, garam tidak dirahasiakan), dan ini masih akan mencegah pengelompokan. Satu-satunya masalah adalah saya mungkin memiliki email dan kata sandi yang sama di situs yang berbeda - tetapi garam tidak akan mencegahnya.
Jadi, kembali ke pembacaan sandi - APAKAH entropi diperlukan, atau tidak? (Pemikiran saya saat ini adalah tidak perlu dari sudut pandang kriptanalisis, tetapi dari alasan praktis lainnya.)