it-swarm-id.com

Algoritma hash kata sandi yang paling aman?

Apa yang saat ini merupakan algoritma hashing yang paling aman secara kriptografis? ( tersedia dalam PHP )

Kecepatan tidak relevan, karena saya iterasi hash atas waktu yang tetap (bukan jumlah iterasi yang tetap). Yang saya tertarik adalah kekuatan matematika.

Intuisi saya memberi tahu saya pusaran air , menjadi yang terbesar dan paling lambat di antara kumpulan itu. Itu atau SHA-512. Tetapi di mana di internet saya dapat melihat apa yang para ahli rekomendasikan?

41
Core Xii

Crypographers dapat menunjukkan bahwa, ketika Anda membaca cetakan halus, tidak ada bukti bahwa fungsi hash aman benar-benar ada. Satu-satunya yang kita miliki sekarang adalah kandidat yang belum ditemukan kelemahannya.

Jadi yang terbaik yang bisa Anda harapkan adalah fungsi yang telah selamat dari pengamatan oleh banyak cryptographers untuk waktu yang lama. Juga, Anda memerlukannya untuk memiliki output yang cukup luas (256 bit sudah cukup jika Anda ingin mencapai "keamanan 128-bit" dan melampaui itu tidak masuk akal). Saat ini, pada musim panas 2011, ini menunjuk ke SHA-256 atau SHA-512, bukan Whirlpool.

Mendasarkan hitungan iterasi pada waktu yang dibutuhkan pada mesin biasa adalah ide yang bagus - tetapi mendasarkannya pada waktu it sungguh mengambil Anda mesin adalah bukan ide yang bagus. Jika tidak, Anda dapat berakhir dengan jumlah iterasi yang rendah untuk beberapa kata sandi karena mesin sedang menangani banyak permintaan pada saat itu (sebuah situasi yang bisa saja diserang oleh penyerang). Menggunakan banyak iterasi dimaksudkan untuk menggagalkan penyerang dengan membuat hashing kata sandi lambat pada penyerang komputer - yang juga membuatnya lambat pada sistem Anda adalah produk sampingan yang disayangkan; tetapi target sebenarnya adalah kekuatan mesin apa pun yang bisa dikerahkan penyerang. Karena Anda tidak dapat benar-benar membuat tolok ukur pada mesin penyerang, Anda harus menggunakan perkiraan kasar, maka jumlah yang tetap, setinggi mungkin selama beban rata-rata dapat ditoleransi pada sistem Anda (Kata penting di sini adalah "rata-rata", yang mendiskualifikasi ukuran dinamis saat Anda berniat untuk melakukan).

Juga, mesin penyerang tidak perlu terlihat seperti milik Anda; mungkin, misalnya a GPU atau FPGA , yang menawarkan komputasi berbeda kemampuan dari apa yang bisa Anda dapatkan di server biasa. Anda menginginkan fungsi yang penyerang tidak akan bisa mendapatkan peningkatan kinerja besar dengan menggunakan perangkat keras non-PC. Ada lagi, ini mempromosikan SHA-256 atau SHA-512, yang dimaksudkan untuk efisiensi CPU (dengan operasi aritmatika 32-bit atau 64-bit), bukan Whirlpool, yang dapat mengambil manfaat dari optimasi perangkat keras yang serupa dengan AES yang dirancang untuk itu.

Akhirnya, iterasi hanyalah bagian dari pekerjaan; Anda juga membutuhkan garam yang cukup panjang dan unik. Iterasi dan pengasinan bisa agak sulit dilakukan pada saat yang sama; Anda dengan hangat dianjurkan untuk menggunakan konstruksi standar seperti PBKDF2 (meskipun itu dimaksudkan sebagai fungsi derivasi kunci, bukan pengingat kata sandi, PBKDF2 ternyata cukup bagus juga).

33
Thomas Pornin

Dari komentar OP:

"Aman" seperti pada, berdasarkan masalah matematika yang tidak memiliki solusi cepat yang diketahui. "Paling aman" seperti pada, berdasarkan pada masalah yang paling kompleks seperti itu. Algoritma hashing dianggap "kuat" ketika memecahnya akan membutuhkan kontribusi besar untuk kriptologi/matematika.

Kedengarannya seolah-olah Anda telah membaca Thomas Ptacek's "Cukup Dengan Tabel Pelangi: Yang Perlu Anda Ketahui Tentang Skema Sandi Aman" , dan sekarang Anda bertanya-tanya hash kriptografi modern mana yang dioptimalkan untuk penyimpanan kata sandi adalah dianggap 'paling aman'.

Saya tidak berpikir ada jawaban yang jelas. Sejauh yang saya tahu, beberapa favorit saat ini di komunitas pemrograman (scrypt & bcrypt) belum ditinjau secara ketat sebagai fungsi hashing kata sandi. Setidaknya, mereka belum ditinjau oleh sejumlah besar kriptografi yang sebanding dengan bagaimana entri kompetisi fungsi hash NIST diperiksa.

Yang mengatakan, konsensus Hacker News saat ini adalah bahwa urutannya adalah:

  1. scrypt . Karena intensif-memori dan intensif-CPU, scrypt dianggap memiliki margin keamanan tertinggi dari hash kata sandi saat ini . Anda dapat lihat lebih lanjut tentang desainnya di sini .
  2. bcrypt adalah juara sebelumnya, seperti yang disebutkan dalam posting blog Thomas Ptacek di atas .
  3. PBKDF2 dan beberapa putaran SHA2 (fx nix Crypt dengan SHA256 ) dianggap sebagai yang terbaik ketiga (yang salah satunya adalah 'terbaik' tergantung pada jumlah iterasi bekas).

(Perhatikan bahwa "Berita Peretas" sebagian besar adalah komunitas pemrograman, dan bukan karena namanya mungkin menyiratkan ke komunitas spesialis keamanan (meskipun beberapa dari mereka juga nongkrong di sana))

Jika Anda melihat-lihat situs ini, di bawah kriptografikata sandi dan hashing tag fx, maka Anda akan melihat bahwa biasanya tidak ada satu pun hash kata sandi 'terbaik' disebutkan. Saya kira itu sebagian karena kriptografi nyata tidak memiliki konsensus yang jelas di mana yang 'terkuat', karena peer review yang relatif terbatas.

Berikut ini adalah perbandingan yang cukup adil dan mudah dibaca (yang tidak termasuk scrypt, mungkin karena masih terlalu baru).

Kecepatan tidak relevan, karena saya iterasi hash selama waktu yang tetap (daripada jumlah iterasi yang tetap).

Dengan beberapa hash ini, Anda tidak bisa benar-benar melakukannya. Anda memberikan "faktor kerja" ketika Anda memanggil perpustakaan, dan perpustakaan mengurus sisanya.

20
Jesper M

CRYPT_BLOWFISH (OpenBSD bcrypt, berdasarkan pada cipher simetris blowfish, tetapi merupakan algoritma hashing yang sebenarnya, tampaknya ada banyak kebingungan tentang ini) dan CRYPT_SHA512 adalah yang terbaik. Kedua hal ini memberikan opsi untuk menskala jumlah 'putaran' yang digunakan, memungkinkan Anda untuk memilih pengorbanan keamanan/kinerja.

Misalnya, jumlah putaran standar untuk blowfish adalah 7 (kisaran nilai 4-31). Nilai ini adalah logaritmik, sehingga setiap peningkatan menghasilkan algoritma yang dijalankan 10 kali lebih banyak. Nilai 13, membutuhkan waktu hampir 1 menit per hash pada Core2Duo 2.4ghz

Menyetel ini setinggi kinerja yang dapat ditoleransi, akan menghasilkan keamanan yang terkuat.

catatan: baru-baru ini ditemukan bug dalam beberapa implementasi bcrypt, dan karenanya, Anda mungkin ingin menggunakan SHA-512.

Catatan: SHA-512 lebih cepat untuk menghitung daripada SHA-256 pada prosesor 64bit (terutama jika dioptimalkan dengan SSE2_64. Khususnya, Anda harus mempertimbangkan ini dan menggunakan putaran tambahan untuk memastikan hash Anda cukup kuat untuk tujuannya.

Aplikasi open source hashkill , menerbitkan beberapa tolok ukur kinerja tentang seberapa cepat GPU modern dapat menembus algoritma hashing modern. Secara khusus, Radeon HD 6990 dapat melakukan: 11001 Megahash/detik MD5 lurus (CRYPT_MD5 di salin, dan implementasi FreeBSD menggunakan 100 putaran). Lurus SHA1 pada 3444 Megahash/dtk.

7
Allan Jude

Saya sarankan Anda untuk menggunakan phpass

Ini adalah kerangka kerja hashing kata sandi domain publik portabel untuk digunakan dalam aplikasi PHP. Ini dimaksudkan untuk bekerja dengan PHP 3 ke atas, dan sebenarnya telah diuji dengan setidaknya PHP 3.0.18 hingga 5.3.0 sejauh ini.

Metode hashing yang lebih disukai (paling aman) didukung oleh phpass adalah bcrypt berbasis Blowfish gaya OpenBSD, juga didukung dengan paket domain publik crypt_blowfish kami (untuk aplikasi C), dan dikenal dalam PHP sebagai CRYPT_BLOWFISH , dengan fallback ke hash berbasis DES yang diperluas dengan gaya BSDI, yang dikenal dalam PHP sebagai CRYPT_EXT_DES, dan fallback pilihan terakhir ke hashing berbasis kode asin dan variabel iterasi MD5 yang diterapkan di phpass itu sendiri ( juga disebut sebagai hash portabel).

Seperti situs webnya, bcrypt yang berbasis Blowfish adalah hashing paling aman. Saya percaya ini benar karena itu adalah " bukti hukum Moore " sedangkan yang lainnya tidak.

0
Alfred