Setiap garam sama sekali jelas akan membantu ketika pengasinan dan hashing password pengguna. Adakah praktik terbaik untuk berapa lama garam itu seharusnya? Saya akan menyimpan garam di tabel pengguna saya, jadi saya ingin tradeoff terbaik antara ukuran penyimpanan dan keamanan. Apakah garam 10 karakter acak cukup? Atau apakah saya membutuhkan sesuatu yang lebih lama?
encryption
hash
salt
David
sumber
sumber
Jawaban:
Sebagian besar jawaban ini agak salah arah dan menunjukkan kebingungan antara garam dan kunci kriptografi. Tujuan memasukkan garam adalah untuk memodifikasi fungsi yang digunakan untuk hash setiap kata sandi pengguna sehingga setiap hash kata sandi yang disimpan harus diserang secara individual. Satu-satunya persyaratan keamanan adalah mereka unik per pengguna, tidak ada untungnya mereka tidak dapat diprediksi atau sulit ditebak.
Garam hanya perlu cukup lama sehingga garam setiap pengguna akan unik. Garam 64-bit acak sangat tidak mungkin untuk diulang bahkan dengan satu miliar pengguna terdaftar, jadi ini tidak masalah. Garam yang diulang sendiri adalah masalah keamanan yang relatif kecil, memungkinkan penyerang untuk mencari dua akun sekaligus tetapi secara agregat tidak akan mempercepat pencarian banyak di seluruh database. Bahkan garam 32-bit dapat diterima untuk sebagian besar keperluan, dalam kasus terburuk akan mempercepat pencarian penyerang sekitar 58%. Biaya peningkatan garam di luar 64 bit tidak tinggi tetapi tidak ada alasan keamanan untuk melakukannya.
Ada beberapa manfaat untuk juga menggunakan garam di seluruh situs di atas garam per pengguna, ini akan mencegah kemungkinan tabrakan dengan hash kata sandi yang disimpan di situs lain, dan mencegah penggunaan tabel pelangi untuk keperluan umum, meskipun bahkan 32 bit garam cukup untuk membuat tabel pelangi serangan tidak praktis.
Bahkan yang lebih sederhana - dan pengembang selalu mengabaikan hal ini - jika Anda memiliki ID pengguna unik atau nama login, itu berfungsi dengan baik sebagai garam. Jika Anda melakukan ini, Anda harus menambahkan garam di seluruh situs untuk memastikan Anda tidak tumpang tindih dengan pengguna sistem lain yang memiliki ide cemerlang yang sama.
sumber
Standar yang diterima saat ini untuk hashing kata sandi membuat garam panjang 16 karakter baru untuk setiap kata sandi dan menyimpan garam dengan hash kata sandi.
Tentu saja perawatan kriptografi yang tepat untuk membuat garam benar-benar acak harus dilakukan.
sumber
Sunting: Jawaban saya di bawah ini menjawab pertanyaan sebagaimana ditanyakan, tetapi jawaban "nyata" adalah: cukup gunakan bcrypt , scrypt , atau Argon2 . Jika Anda mengajukan pertanyaan seperti ini, Anda hampir pasti menggunakan alat pada level yang terlalu rendah.
Jujur, tidak ada alasan yang bisa dipertahankan untuk tidak membuat garam sama panjangnya dengan kata sandi hash. Jika Anda menggunakan SHA-256, maka Anda memiliki hash 256-bit. Tidak ada alasan untuk tidak menggunakan garam 256-bit.
Lebih dari 256 bit tidak akan memberi Anda peningkatan keamanan, secara matematis. Tetapi menggunakan garam yang lebih pendek selalu berakhir dengan situasi di mana meja pelangi mencapai panjang garam Anda - terutama dengan garam yang lebih pendek.
sumber
Wikipedia :
Garam 128-bit (16-byte) sudah cukup. Anda dapat mewakilinya sebagai urutan
128 / 4 = 32
digit heksadesimal.sumber
Satu jawaban mungkin untuk menggunakan sebagai ukuran garam nilai bahwa hash yang akan Anda gunakan memberikan keamanan.
Misalnya, jika Anda akan menggunakan SHA-512, gunakan garam 256 bit karena keamanan yang disediakan oleh SHA-512 adalah 256 bit.
sumber