it-swarm-id.com

Apa keuntungan menggunakan PBKDF2 vs SHA256 untuk menghasilkan kunci enkripsi AES dari frasa sandi?

Saya sedang melihat dua perangkat lunak yang sebanding yang mengenkripsi data pada disk menggunakan frasa sandi. Satu menggunakan PBKDF2 untuk menghasilkan kunci enkripsi dari frasa sandi, sementara yang lain menggunakan dua putaran SHA256. Apa bedanya? Apakah yang satu lebih disukai daripada yang lain?

82
Andrey Fedorov

Perbedaannya adalah:

  • PBKDF2 sesuai desain lambat
  • SHA256 adalah fungsi hash yang baik; itu tidak lambat, dengan desain

Jadi jika seseorang mencoba banyak frasa sandi yang mungkin berbeda, ucapkan seluruh kamus, maka setiap kata dengan angka ditambahkan, maka setiap kata dengan huruf besar berbeda, lalu dua kata kamus, dll. Maka proses ini akan jauh lebih lambat dengan PBKDF2 .

Tetapi jika frasa sandi Anda benar-benar aman, itu sangat panjang, sangat acak dan di luar jangkauan proses pencacahan sistematis, maka tidak ada perbedaan praktis, kecuali bahwa penyerang dapat menghabiskan lebih banyak sumber daya mencoba memecahkan frasa sandi Anda (atau mungkin kurang jika mereka memutuskan untuk menyerah lebih cepat).

93
curiousguy

Algoritma hashing kata sandi seperti PBKDF2, bcrypt, dan scrypt dimaksudkan untuk digunakan dengan kata sandi dan sengaja dibuat lambat. Algoritma hashing kriptografi cepat. Puasa itu baik di sebagian besar situasi, tetapi tidak di sini. Memperlambat algoritma (biasanya dengan iterasi) membuat pekerjaan penyerang jauh lebih sulit. Kata sandi hash juga menambahkan nilai garam ke setiap hash untuk membuatnya unik sehingga penyerang tidak dapat menyerang beberapa hash pada saat yang sama.

Penyerang akan mencoba memulihkan kata sandi dengan melakukan serangan kamus dan brute-force di mana mereka menebak kata sandi dengan hashing dan membandingkannya dengan kata sandi yang disimpan untuk menentukan apakah mereka cocok. Dengan fungsi hash kriptografis biasa (mis. MD5, SHA256), penyerang dapat menebak miliaran kata sandi per detik. Dengan PBKDF2, bcrypt, atau scrypt, penyerang hanya dapat membuat beberapa ribu tebakan per detik (atau kurang, tergantung pada konfigurasi).

Ini berarti bahwa setiap kata sandi jauh lebih kuat jika PBKDF2, bcrypt, atau scrypt digunakan daripada fungsi hash biasa.

Selain itu, PBKDF2, bcrypt, dan scrypt semuanya menggunakan nilai "garam" acak besar untuk memastikan bahwa setiap kata sandi pengguna di-hash secara unik. Menyerang 100 hash kata sandi akan memakan waktu 100 kali lebih lama daripada menyerang satu hash. Menyerang satu juta akan memakan waktu sejuta kali lebih lama, dll. Dengan SHA256, penyerang dapat mencoba memecahkan ribuan atau jutaan hash pada saat yang sama dengan sedikit memperlambat.

Anda harus selalu menggunakan hash kata sandi atau "formula derivasi kunci" untuk kata sandi daripada hash kriptografi biasa. Sangat sulit untuk memilih kata sandi yang cukup kuat untuk menahan upaya perengkahan khusus jika mereka hash dengan sesuatu seperti SHA atau MD5. Dengan PBKDF2, bcrypt, atau scrypt, kata sandi dapat sesingkat 7 atau 8 karakter tetapi dengan MD5 atau SHA, mereka harus setidaknya 13-14 karakter.

52
Steven Alexander

Ada jawaban yang baik di atas, tetapi alasan langsungnya adalah bahwa sha256 tidak asin dan dua putaran sangat lemah dengan cara yang sama seperti kata sandi 4 digit lemah, secara komputasi:

  • Pengaturan GPU modern dapat dengan mudah menghitung semua hash sha256 4 digit yang tidak tawar (dalam milidetik)
10
Bradley Kreider