it-swarm-id.com

Sebesar apa garam itu?

Saya akan menggunakan scrypt untuk menyimpan kata sandi di aplikasi saya. Karena itu, saya akan menggunakan SHA-256 dan primitif crypto Salsa20 (dengan PBKDF2).

Mengingat itu, seberapa besar garam yang harus saya gunakan? Apakah harus sama dengan ukuran keluaran SHA-256: 256bits atau harus sama dengan jumlah bit yang akan saya ambil dari fungsi peregangan kata sandi ini: 512bits?

Mempertimbangkan bahwa SSHA seperti yang digunakan oleh OpenLDAP hanya memiliki garam 32bit dan Linux crypt () menggunakan garam 48bit, garam saya akan tampak cukup besar ...

Secara umum: Apa aturan praktis untuk ukuran garam?


Terkait:

Apa yang harus digunakan sebagai garam?

Apa garam yang cukup baik untuk SaltedHash?

30
Hubert Kario

Garam harus unik; itu satu-satunya pekerjaan mereka. Anda harus berusaha, sebisa mungkin, untuk tidak pernah menggunakan kembali nilai garam; penggunaan kembali yang jarang jarang kritis tetapi masih harus dihindari). Dengan skema kata sandi yang dirancang secara wajar, tidak ada properti lain yang bermanfaat dalam garam selain keunikan; Anda dapat memilihnya sesuka Anda selama Anda tidak mereproduksi urutan bit yang sama persis. Keunikan harus dipahami di seluruh dunia.

(Dengan skema hashing kata sandi yang dirancang dengan buruk, garam mungkin memiliki beberapa properti tambahan yang diperlukan, tetapi jika Anda menggunakan skema kata sandi desain yang buruk, Anda sudah memiliki masalah yang lebih besar. Perhatikan bahwa garam tidak persis sama dengan (Inisialisasi Vektor) untuk enkripsi simetris, di mana persyaratan ketat seperti keacakan seragam yang tidak terduga biasanya berlaku.)

A cara umum untuk memiliki nilai garam yang kurang lebih unik adalah dengan membuatnya secara acak, dengan generator yang baik (katakanlah, yang cocok untuk penggunaan kriptografi, seperti /dev/urandom). Jika garamnya cukup panjang, risiko tabrakan (yaitu menggunakan kembali nilai garam) rendah. Jika Anda menggunakan n - garam bit, kemungkinan tabrakan menjadi tidak dapat diabaikan begitu Anda mencapai sekitar 2n/2 nilai yang dihasilkan. Ada sekitar 7 miliar orang di planet ini, dan tampaknya aman untuk mengasumsikan bahwa mereka, rata-rata, masing-masing memiliki kurang dari 1000 kata sandi, sehingga jumlah kata sandi hash di seluruh dunia harus sedikit lebih rendah daripada 242.7. Karenanya, 86 bit garam seharusnya cukup. Karena kita seperti yang disebut "margin keamanan", dan, lebih lagi, karena programmer hanya cinta kekuatan dua, mari kita pergi ke 128 bit . Sesuai analisis di atas, itu lebih dari cukup untuk memastikan keunikan di seluruh dunia dengan probabilitas yang cukup tinggi, dan tidak ada yang lebih kita inginkan dari garam daripada keunikan.

Keunikan juga dapat dipastikan melalui cara lain, mis. menggunakan sebagai garam gabungan dari nama server (sistem DNS di seluruh dunia sudah memastikan bahwa setiap orang bisa mendapatkan nama server sendiri, berbeda dari siapa pun di planet ini) dan penghitung di seluruh server. Ini menimbulkan beberapa masalah praktis, mis. mempertahankan nilai penghitung yang tidak berulang, bahkan dalam kasus crash & reboot server yang tidak tepat waktu, dan/atau beberapa ujung depan dengan load balancing. Garam panjang tetap acak lebih mudah.

33
Thomas Pornin

"Panjangnya setidaknya delapan oktet (64 bit)." dari: http://www.ietf.org/rfc/rfc2898.txt

7
woliveirajr