it-swarm-id.com

Kata sandi pra-hash sebelum menerapkan bcrypt untuk menghindari pembatasan panjang kata sandi

Praktik yang baik adalah untuk tidak membatasi panjang kata sandi yang tidak perlu, sehingga frasa sandi yang tepat-panjang (mungkin 35-45 karakter untuk 6/7 kata kunci) dapat digunakan. (Lihat mis. Haruskah saya memiliki panjang kata sandi maksimum? di mana maksimum 1K disarankan, untuk melindungi terhadap DoS tanpa membatasi kemampuan pengguna untuk menetapkan kata sandi yang panjang.)

bcrypt juga umum direkomendasikan (lihat misalnya Apakah ada pakar keamanan merekomendasikan bcrypt untuk penyimpanan kata sandi? , http://chargen.matasano.com/chargen/2007/9/7/enough- dengan-the-Rainbow-tables-what-you-need-to-know-about-s.html )

Juga disarankan untuk menggunakan garam (acak, dan disimpan dengan hash kata sandi) - Saya percaya 32-bit (4 karakter) sering direkomendasikan. (Saya memahami alasan ukuran garam menjadi "cukup bahwa jumlah kombinasi jauh lebih besar dari jumlah catatan pengguna DAN cukup untuk membuat tabel Rainbow menjadi sangat besar" - 16 bit sudah cukup untuk bagian kedua tetapi mungkin tidak cukup untuk yang pertama.)

Tapi AIUI bcrypt hanya memiliki 55 byte - dengan 4 karakter untuk garam yang menyisakan 51 untuk kata sandi.

Saya menduga kita tidak boleh hanya bcrypt (kiri (kata sandi, 51)) dan mengabaikan karakter terakhir.

Haruskah kita membatasi pengguna hingga 50 karakter dalam kata sandi mereka (cukup untuk hampir semua orang, tetapi tidak cukup )?

Haruskah kita menggunakan sesuatu seperti bcrypt (sha256 (salt + password)) sebagai gantinya, dan mengizinkan hingga 1K karakter? Atau apakah penambahan langkah sha256 (atau sha512?) Mengurangi keamanan keseluruhan entah bagaimana?

Apakah scrypt atau PBKDF2 memiliki batasan panjang yang serupa?

(Pertanyaan terakhir hanya untuk kepentingan, sungguh - saya menyadari bahwa space-hardness/FPGA-resistance, dan relatif baru scrypt, dan GPGPU-resistance bcrypt dibandingkan dengan PBKDF2 adalah pertimbangan yang jauh lebih penting dalam memutuskan hash mana yang harus menggunakan.)

65
Misha

Menggunakan fungsi hash aman untuk memproses ulang kata sandi aman; dapat ditunjukkan bahwa jika bcrypt (SHA-256 (kata sandi)) rusak, maka kata sandi dapat ditebak, atau beberapa karakteristik keamanan SHA-256 telah terbukti salah. Tidak perlu bermain-main dengan garam di tingkat itu; kata sandi saja, kemudian gunakan bcrypt pada hasilnya (dengan garam, seperti mandat bcrypt). SHA-256 dianggap sebagai fungsi hash yang aman.

Maksud dari garam adalah menjadi unik - seunik mungkin, sehingga tidak ada dua kata sandi yang di-hash menggunakan nilai garam yang sama. 32 bit agak rendah untuk itu; Anda harus menggunakan garam yang lebih panjang. Jika Anda memiliki n bit garam, maka Anda akan menemukan tabrakan (dua kata sandi hash menggunakan garam yang sama) segera setelah Anda memiliki lebih dari sekitar 2n/2 kata sandi hash - sekitar 65000 dengan n = 32, nilai yang tidak terlalu tinggi. Anda sebaiknya menggunakan 64 bit atau lebih garam (gunakan 128 bit dan Anda bisa berhenti khawatir tentang hal itu).

39
Thomas Pornin

Bcrypt menggunakan garam 128-bit DAN kata sandi 55 karakter (maks). Anda tidak perlu menambahkan nilai garam lainnya; bcrypt menangani itu.

Perancang bcrypt merasa bahwa batas 55 karakter pada kata sandi tidak menjadi masalah karena hash memiliki output 128-bit. Jika kata sandi Anda lebih besar dari 55 karakter, para desainer berasumsi bahwa Anda sudah menyediakan lebih dari 128-bit entropi sehingga ini bukan masalah. Sebaliknya, pedoman NIST akan menghitung ini hanya 77 bit entropi. Pedoman NIST didasarkan pada fakta bahwa frasa pass memiliki lebih sedikit entropi per karakter daripada kata sandi acak dan pada asumsi bahwa pengguna akan menggunakan frasa pass untuk kata sandi yang lebih lama. Untuk memastikan bahwa Anda mendapatkan entropi 128-bit penuh, Anda dapat memperbolehkan kata sandi yang lebih panjang dan menggunakannya menggunakan SHA-256 atau SHA-384 untuk mengompresnya hingga panjang yang dapat diterima. Anda juga bisa menyederhanakan hal-hal dengan menggunakan scrypt atau PBKDF2 yang tidak memiliki batasan panjang. Scrypt dirancang untuk menjadi "memori sulit" selain menjadi komputasi memakan waktu; itu akan menjadi pilihan algoritma saya.

14
Steven Alexander