Seharusnya cukup untuk mengatakan apakah bcrypt atau SHA-512 (dalam konteks algoritma yang sesuai seperti PBKDF2) cukup baik . Dan jawabannya adalah ya, algoritma mana pun cukup aman sehingga pelanggaran akan terjadi melalui cacat implementasi, bukan kriptanalisis.
Jika Anda bersikeras tahu mana yang "lebih baik", SHA-512 telah memiliki ulasan mendalam oleh NIST dan lainnya. Itu bagus, tetapi kelemahan telah diakui bahwa, meskipun tidak dapat dieksploitasi sekarang, telah menyebabkan kompetisi SHA-3 untuk algoritma hash baru. Juga, perlu diingat bahwa studi tentang algoritma hash "lebih baru" dari pada cipher, dan cryptographers masih belajar tentang mereka.
Meskipun bcrypt secara keseluruhan tidak memiliki pengawasan sebanyak seperti Blowfish itu sendiri, saya percaya bahwa didasarkan pada cipher dengan struktur yang dipahami dengan baik memberinya beberapa keamanan yang melekat yang tidak memiliki otentikasi berbasis hash. Juga, lebih mudah untuk menggunakan GPU umum sebagai alat untuk menyerang hash berbasis SHA-2; karena persyaratan memorinya, mengoptimalkan bcrypt memerlukan perangkat keras yang lebih khusus seperti FPGA dengan beberapa on-board RAM.
Catatan: bcrypt adalah algoritma yang menggunakan Blowfish secara internal. Ini bukan algoritma enkripsi itu sendiri. Ini digunakan untuk mengaburkan kata sandi yang tidak dapat dibalikkan, sama seperti fungsi hash digunakan untuk melakukan "hash satu arah".
Algoritma hash kriptografi dirancang agar tidak mungkin untuk dibalik. Dengan kata lain, hanya diberi output dari fungsi hash, perlu "selamanya" untuk menemukan pesan yang akan menghasilkan output hash yang sama. Sebenarnya, secara komputasi tidak layak untuk menemukan dua pesan yang menghasilkan nilai hash yang sama. Tidak seperti sandi, fungsi hash tidak diparameterisasi dengan kunci; input yang sama akan selalu menghasilkan output yang sama.
Jika seseorang memberikan kata sandi yang hash dengan nilai yang disimpan dalam tabel kata sandi, mereka diautentikasi. Khususnya, karena tidak dapat dibaliknya fungsi hash, itu diasumsikan bahwa pengguna bukan penyerang yang memegang hash dan membaliknya untuk menemukan kata sandi yang berfungsi.
Sekarang pertimbangkan bcrypt. Ini menggunakan Blowfish untuk mengenkripsi string ajaib, menggunakan kunci "berasal" dari kata sandi. Kemudian, ketika pengguna memasukkan kata sandi, kunci tersebut diturunkan lagi, dan jika ciphertext yang dihasilkan dengan mengenkripsi dengan kunci itu cocok dengan ciphertext yang disimpan, pengguna diautentikasi. Ciphertext disimpan dalam tabel "kata sandi", tetapi kunci turunannya tidak pernah disimpan.
Untuk memecahkan kriptografi di sini, penyerang harus memulihkan kunci dari ciphertext. Ini disebut serangan "diketahui-plainteks", karena serangan itu tahu string ajaib yang telah dienkripsi, tetapi bukan kunci yang digunakan. Blowfish telah dipelajari secara luas, dan belum ada serangan yang diketahui yang memungkinkan penyerang menemukan kunci dengan plaintext tunggal yang diketahui.
Jadi, seperti halnya algoritma kriptografi berbasis ireversibel, bcrypt menghasilkan output yang ireversibel, dari kata sandi, garam, dan faktor biaya. Kekuatannya terletak pada resistensi Blowfish terhadap serangan plaintext yang diketahui, yang dianalogikan dengan "serangan pra-gambar pertama" pada algoritma digest. Karena dapat digunakan sebagai pengganti algoritma hash untuk melindungi kata sandi, bcrypt secara membingungkan disebut sebagai algoritma "hash" itu sendiri.
Dengan asumsi bahwa tabel pelangi telah digagalkan oleh penggunaan garam yang tepat, fungsi yang benar-benar ireversibel akan mengurangi penyerang menjadi trial-and-error. Dan kecepatan yang bisa diserang oleh penyerang ditentukan oleh kecepatan dari algoritma "hash" yang tidak dapat diubah. Jika satu iterasi fungsi hash digunakan, penyerang dapat membuat jutaan percobaan per detik menggunakan peralatan yang harganya $ 1.000, menguji semua kata sandi hingga 8 karakter dalam beberapa bulan.
Namun jika, intisari keluaran "diumpankan" ribuan kali, akan butuh ratusan tahun untuk menguji serangkaian kata sandi yang sama pada perangkat keras itu. Bcrypt mencapai efek "penguatan kunci" yang sama dengan beralih ke dalam rutin derivasi kunci, dan metode berbasis hash yang tepat seperti PBKDF2 melakukan hal yang sama; dalam hal ini, kedua metode tersebut serupa.
Jadi, rekomendasi bcrypt saya berasal dari asumsi 1) bahwa Blowfish telah memiliki tingkat pengawasan yang sama dengan keluarga SHA-2 fungsi hash, dan 2) bahwa metode cryptanalytic untuk sandi lebih baik dikembangkan daripada yang untuk fungsi hash.