Saat menambahkan nilai garam ke nilai hash untuk sesuatu seperti kata sandi yang tidak dapat disimpan dalam teks biasa, dari mana tempat terbaik untuk mendapatkan nilai garam? Untuk konteks, mari kita anggap ini untuk kata sandi pada login halaman web.
12
Jawaban:
Saya biasanya memiliki kolom
created TIMESTAMP
di tabel pengguna sehingga saya bisa melihat ketika pengguna mendaftar. Saya tidak suka menambahkan kolom tambahan untuk Garam, jadi saya menggunakan kolom cap waktu sebagai garam:sumber
Apakah itu penting?
Garam memiliki dua tujuan. Itu membuatnya tidak praktis untuk menggunakan tabel besar dari kata sandi yang sudah di prehashed ("rainbow tables") dan itu membuat kata sandi yang identik terlihat berbeda dalam daftar hash. Membuat kata sandi yang identik terlihat berbeda membantu menghindari masalah ketika beberapa orang menggunakan satu kata sandi tertentu, yang mungkin merupakan kata sandi yang umum lemah.
Oleh karena itu, setiap akun harus memiliki garam uniknya sendiri, dan garamnya tidak boleh terlalu diprediksi, dalam arti tidak akan ada kelompok garam yang mungkin terjadi. (Jika banyak situs dimulai pada 1 dan dihitung, orang jahat dapat membuat tabel pelangi termasuk garam jumlah rendah, misalnya.) Mereka tidak harus acak dalam arti apa pun selain yang umumnya tidak dapat diprediksi. Mereka bukan rahasia lagi dari hash itu sendiri, sehingga mereka tidak perlu secara khusus tidak dapat diterima.
Gunakan metode yang mudah untuk menghasilkan garam. Jika ada banyak nilai garam potensial (sistem Unix awal sering menggunakan dua byte, untuk jumlah 65536) dibandingkan dengan jumlah akun, penugasan semi-acak hampir tidak akan pernah memberikan garam duplikat.
sumber
Setiap kali Anda ingin menyimpan kata sandi baru (pendaftaran, pengaturan ulang kata sandi, pembaruan kata sandi), satu teknik yang baik adalah:
for i in (0...65536) { password = hmac(password) }
sumber
Leverage kerangka kerja. Di. NET Anda bisa menggunakan RNGCryptoServoiceProvider ...
Kerangka kerja lain harus memiliki kelas serupa yang dapat Anda manfaatkan. Untuk mencapai keacakan perangkat lunak sering kali mempekerjakan pengguna versus
Random
sebagaimana disebutkan di atas. Menggerakkan mouse secara acak di area yang ditentukan untuk memberikan garam adalah opsi yang digunakan oleh TrueCrypt. Itu bermuara pada kebutuhan spesifik Anda dan tingkat keamanan; karena garam Anda bisa saja!@#$%
.sumber
Anda menghasilkan sisi server garam dan menugaskannya ke akun pengguna pada saat pembuatannya. Lebih baik gunakan beberapa API crypto-generation yang tersedia dengan kerangka kerja Anda tetapi pada prinsipnya urutan apa pun akan dilakukan.
Biasanya barang disimpan seperti ini:
Contoh:
PasswordHashWithSalt =
A15CD9652D4F4A3FB61A2A422AEAFDF0DEA4E703 j5d58k4b56s8744q
sumber
Gunakan bcrypt dan baca artikel ini karena hash yang normal saja bukan perlindungan serius di zaman sekarang ini.
Pertimbangkan untuk menggunakan protokol kata sandi nol pengetahuan SDR yang memiliki banyak pustaka sumber terbuka dan bebas paten.
SDR membutuhkan garam dan tempat terbaik untuk mendapatkannya adalah klien; mengatur waktu penekanan tombol mereka, gerakan mouse, hash variabel lingkungan mereka, angka acak, waktu pembuatan file di folder temp mereka, untuk membuat garam pada akhirnya dengan cara yang tak terduga jauh dari server Anda. SDR mengambil garam, kata sandi besar, kata sandi pengguna dan menghasilkan kunci verifikasi. Anda tidak menyimpan kata sandi yang tidak pernah keluar dari mesin mereka tetapi Anda dapat memverifikasi bahwa mereka memiliki kata sandi yang sesuai dengan kunci verifikasi dan garam. Itu kebal dari manusia di tengah dan serangan kamus. Enkripsi kunci dan garam di kolom basis data hanya untuk memastikan.
sumber