Saya melihat algoritma hashing, tetapi tidak dapat menemukan jawaban.
- Bcrypt menggunakan Blowfish
- Blowfish lebih baik daripada MD5
- T: tetapi apakah Blowfish lebih baik daripada SHA512?
Terima kasih..
Memperbarui:
Saya ingin menjelaskan bahwa saya memahami perbedaan antara hashing dan enkripsi. Apa yang mendorong saya untuk mengajukan pertanyaan dengan cara ini adalah artikel ini , di mana penulis menyebut bcrypt sebagai "hashing adaptif"
Karena bcrypt didasarkan pada Blowfish, saya jadi berpikir bahwa Blowfish adalah algoritma hashing. Jika itu enkripsi seperti yang ditunjukkan oleh jawaban, maka bagi saya sepertinya tidak ada tempat dalam artikel ini. Yang lebih buruk adalah dia menyimpulkan bahwa bcrypt adalah yang terbaik. Yang juga membingungkan saya sekarang adalah kelas phpass (digunakan untuk hashing kata sandi saya percaya) menggunakan bcrypt (yaitu blowfish, yaitu enkripsi). Berdasarkan info baru ini yang kalian beri tahu (blowfish adalah enkripsi), kelas ini terdengar salah. Apakah saya melewatkan sesuatu?
sumber
bcrypt
hanya memiliki "faktor kerja" yang lebih tinggi secara default. SHA diasumsikan tidak untuk ... kecuali jika Anda menggunakan passhash9, yang dapat digunakan bersama dengan faktor kerja. mengapa pertanyaan ini ditutup? itu jauh dari jawab namun sangat penting.Jawaban:
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.
sumber
Saya setuju dengan jawaban Erickson, dengan satu peringatan: untuk tujuan otentikasi password, bcrypt adalah jauh lebih baik daripada iterasi tunggal dari SHA-512 - hanya karena jauh lebih lambat. Jika Anda tidak mengerti mengapa kelambatan merupakan keunggulan dalam gim ini, baca artikel yang Anda tautkan lagi (gulir ke bawah untuk " Kecepatan adalah persis apa yang tidak Anda inginkan dalam fungsi hash kata sandi. ").
Anda tentu saja dapat membangun algoritma hashing kata sandi yang aman di sekitar SHA-512 dengan mengulanginya ribuan kali, sama seperti cara kerja algoritma MD5 PHK. Ulrich Drepper melakukan ini , untuk crypt (). Tidak ada alasan khusus untuk melakukan ini, jika Anda sudah memiliki implementasi bcrypt yang teruji tersedia.
sumber
crypt
implementasi (termasuk dalam PHP yang saya gunakan), ketika saya membaca pertanyaan asli saya bahkan berasumsi bahwa itulah yang dimaksud OP ketika dia bertanya tentang SHA-512 - bahwa dia sebenarnya mengacu pada ribuan putaran SHA-512 vs bcrypt yang menggunakan ratusan atau ribuan iterasi itu sendiri.Blowfish bukan algoritma hashing. Ini adalah algoritma enkripsi. Artinya adalah bahwa Anda dapat mengenkripsi sesuatu menggunakan blowfish, dan kemudian Anda dapat mendekripsi kembali ke teks biasa.
SHA512 adalah algoritma hashing. Itu berarti bahwa (secara teori) setelah Anda hash input Anda tidak bisa mendapatkan input asli kembali.
Mereka adalah 2 hal yang berbeda, dirancang untuk digunakan untuk tugas yang berbeda. Tidak ada jawaban yang 'benar' untuk "apakah blowfish lebih baik daripada SHA512?" Anda mungkin juga bertanya "apakah apel lebih baik dari kanguru?"
Jika Anda ingin membaca lebih banyak tentang topik ini, berikut beberapa tautan:
sumber
bcrypt
) itu digunakan sebagai algoritma hashing dengan menurunkan kunci dari string sumber dan menggunakannya untuk mengenkripsi angka ajaib. Ini membuatnya ireversibel, pada dasarnya fungsi hashing. Anda tidak dapat menghitung kunci dari cipher, bahkan jika Anda tahu plaintext dan data terenkripsi.Blowfish tidak lebih baik dari MD5 atau SHA512, karena mereka melayani tujuan yang berbeda. MD5 dan SHA512 adalah algoritma hashing, Blowfish adalah algoritma enkripsi. Dua fungsi kriptografi yang sama sekali berbeda.
sumber
Saya akan merekomendasikan implementasi crypt berbasis SHA-256 / SHA-512 dari Ulrich Drepper.
Kami mem-porting algoritme ini ke Java, dan Anda dapat menemukan versi yang dilisensikan secara bebas di ftp://ftp.arlut.utexas.edu/java_hashes/ .
Perhatikan bahwa sebagian besar Unix (modern) mendukung algoritma Drepper dalam file / etc / shadow mereka.
sumber
Saya baru saja menemukan ini:
http://codahale.com/how-to-safely-store-a-password/
Bisakah penulis artikel ini salah?
sumber