Fungsi hash kriptografi mana yang harus saya pilih?

140

Kerangka .NET dikirimkan dengan 6 algoritme hashing yang berbeda:

  • MD5: 16 byte (Waktu untuk hash 500MB: 1462 ms)
  • SHA-1: 20 byte (1644 ms)
  • SHA256: 32 byte (5618 md)
  • SHA384: 48 byte (3839 ms)
  • SHA512: 64 byte (3820 md)
  • RIPEMD: 20 byte (7066 md)

Masing-masing fungsi ini bekerja secara berbeda; MD5 menjadi yang tercepat dan RIPEMD menjadi yang paling lambat.

MD5 memiliki keunggulan karena cocok dengan tipe Panduan bawaan; dan itu adalah dasar dari UUID tipe 3 . Hash SHA-1 adalah dasar dari tipe 5 UUID. Yang membuatnya sangat mudah digunakan untuk identifikasi.

Namun MD5 rentan terhadap serangan tabrakan , SHA-1 juga rentan tetapi pada tingkat yang lebih rendah.

Dalam kondisi apa saya harus menggunakan algoritma hashing?

Pertanyaan khusus yang sangat ingin saya jawab adalah:

  • Apakah MD5 tidak bisa dipercaya? Dalam situasi normal ketika Anda menggunakan algoritma MD5 tanpa niat jahat dan tidak ada pihak ketiga yang memiliki niat jahat apa pun yang Anda harapkan terjadi tabrakan (artinya dua byte acak [] menghasilkan hash yang sama)

  • Seberapa jauh lebih baik RIPEMD daripada SHA1? (jika ada yang lebih baik) 5 kali lebih lambat untuk menghitung tetapi ukuran hashnya sama dengan SHA1.

  • Seberapa besar kemungkinan mendapatkan tabrakan tidak berbahaya saat mencirikan nama file (atau string pendek lainnya)? (Misalnya, 2 nama file acak dengan hash MD5 yang sama) (dengan MD5 / SHA1 / SHA2xx) Secara umum, seberapa besar kemungkinan tabrakan tidak berbahaya?

Ini patokan yang saya gunakan:

    static void TimeAction(string description, int iterations, Action func) {
        var watch = new Stopwatch();
        watch.Start();
        for (int i = 0; i < iterations; i++) {
            func();
        }
        watch.Stop();
        Console.Write(description);
        Console.WriteLine(" Time Elapsed {0} ms", watch.ElapsedMilliseconds);
    }

    static byte[] GetRandomBytes(int count) {
        var bytes = new byte[count];
        (new Random()).NextBytes(bytes);
        return bytes;
    }


    static void Main(string[] args) {

        var md5 = new MD5CryptoServiceProvider();
        var sha1 = new SHA1CryptoServiceProvider();
        var sha256 = new SHA256CryptoServiceProvider();
        var sha384 = new SHA384CryptoServiceProvider();
        var sha512 = new SHA512CryptoServiceProvider();
        var ripemd160 = new RIPEMD160Managed();

        var source = GetRandomBytes(1000 * 1024);

        var algorithms = new Dictionary<string,HashAlgorithm>();
        algorithms["md5"] = md5;
        algorithms["sha1"] = sha1;
        algorithms["sha256"] = sha256;
        algorithms["sha384"] = sha384;
        algorithms["sha512"] = sha512;
        algorithms["ripemd160"] = ripemd160;

        foreach (var pair in algorithms) {
            Console.WriteLine("Hash Length for {0} is {1}", 
                pair.Key, 
                pair.Value.ComputeHash(source).Length);
        }

        foreach (var pair in algorithms) {
            TimeAction(pair.Key + " calculation", 500, () =>
            {
                pair.Value.ComputeHash(source);
            });
        }

        Console.ReadKey();
    }
Sam Saffron
sumber
15
Fakta bahwa Anda menyebutkan md5 cocok dalam format GUID (16 byte) menunjukkan kesalahpahaman mendasar. Hash tidak dijamin unik, tetapi jarang (dan sulit dipalsukan jika digunakan dalam pengertian kriptografik) dan berasal dari hal yang merupakan hash sedangkan GUID, yah, unik tetapi tidak terkait dengan konten hal yang diidentifikasi. Mereka digunakan untuk tujuan yang sangat berbeda.
Barry Wark
1
Benar tidak terkait, itu hanya fakta spesifik implementasi berguna. Saya mengerti bahwa Anda tidak dapat memasukkan infinity menjadi 16 byte. Anda bisa mendapatkan tabrakan dengan algoritma hashing APA SAJA
Sam Saffron
5
Juga Panduan hanya dalam praktiknya unik, dalam teori jika Anda terus menghasilkan Panduan pada akhirnya Anda akan mendapatkan duplikat.
Sam Saffron
3
Anda benar - benar tidak boleh memasukkan hash ke dalam GUID, meskipun cocok. Contoh paling sederhana: dua salinan dari file yang sama harus memiliki GUID yang berbeda, tetapi hash yang sama. 8 huruf pertama dari nama seseorang juga cukup pas menjadi 16 byte.
dbkk
2
@ user2332868 Pemutusan SHA-1 tidak berpengaruh pada kemungkinan tabrakan tidak disengaja . Ketika niat jahat menjadi ancaman bagi penggunaan Anda, saya pikir memilih fungsi hash secara membabi buta adalah salah, dan Anda perlu meluangkan waktu untuk melakukan analisis risiko / biaya untuk kasus spesifik Anda.
Andrey Tarantsov

Jawaban:

140

Dalam kriptografi, fungsi hash menyediakan tiga fungsi terpisah.

  1. Resistensi tabrakan : Seberapa sulit bagi seseorang untuk menemukan dua pesan ( setiap dua pesan) yang hash yang sama.
  2. Preimage Resistance : Dengan adanya hash, seberapa sulit menemukan pesan lain yang memiliki hash yang sama? Juga dikenal sebagai fungsi hash satu arah .
  3. Resistensi preimage kedua : Jika ada pesan, cari pesan lain yang memiliki hash yang sama.

Properti ini terkait tetapi independen. Misalnya, resistensi tabrakan menyiratkan resistensi preimage kedua, tetapi tidak sebaliknya. Untuk aplikasi tertentu, Anda akan memiliki persyaratan yang berbeda, membutuhkan satu atau beberapa properti ini. Fungsi hash untuk mengamankan kata sandi di server biasanya hanya memerlukan resistensi preimage, sedangkan message digest membutuhkan ketiganya.

Telah ditunjukkan bahwa MD5 tidak tahan benturan, namun tidak menghalangi penggunaannya dalam aplikasi yang tidak memerlukan ketahanan benturan. Memang, MD5 sering masih digunakan dalam aplikasi yang menguntungkan ukuran dan kecepatan tombol yang lebih kecil. Karena kekurangannya, peneliti merekomendasikan penggunaan fungsi hash lainnya dalam skenario baru.

SHA1 memiliki cacat yang memungkinkan tabrakan ditemukan secara teoritis jauh lebih sedikit daripada langkah 2 ^ 80 yang dibutuhkan oleh fungsi hash yang aman dari panjangnya. Serangan itu terus direvisi dan saat ini dapat dilakukan dalam ~ 2 ^ 63 langkah - hampir tidak dalam bidang komputasi saat ini. Untuk alasan ini, NIST menghentikan penggunaan SHA1 secara bertahap, yang menyatakan bahwa keluarga SHA2 harus digunakan setelah tahun 2010.

SHA2 adalah keluarga baru dari fungsi hash yang dibuat mengikuti SHA1. Saat ini tidak ada serangan yang diketahui terhadap fungsi SHA2. SHA256, 384 dan 512 adalah bagian dari kelompok SHA2, hanya menggunakan panjang kunci yang berbeda.

RIPEMD Saya tidak dapat berkomentar terlalu banyak, kecuali untuk dicatat bahwa RIPEMD tidak umum digunakan seperti keluarga SHA, dan karenanya belum diteliti secara cermat oleh para peneliti kriptografi. Untuk alasan itu saja saya akan merekomendasikan penggunaan fungsi SHA di atasnya. Dalam implementasi yang Anda gunakan sepertinya juga cukup lambat, yang membuatnya kurang berguna.

Kesimpulannya, tidak ada satu fungsi terbaik - semuanya tergantung pada apa yang Anda butuhkan. Waspadai kekurangan masing-masing dan Anda akan dapat memilih fungsi hash yang tepat untuk skenario Anda .

Eric Burnett
sumber
1
Sangat menghargai Anda masuk ke tingkat detail ini. Ini sangat membantu.
joelc
1
Untuk beberapa aplikasi, bahkan fungsi hash non-tingkat kripto mungkin sesuai. OP tidak pernah menyebutkan apakah itu khusus untuk kata sandi, atau untuk autentikasi challenge-response, atau untuk token akses, atau hanya untuk mengindeks sekumpulan string / file. Kinerja, di sisi lain, adalah perhatian OP ...
Seva Alekseyev
113

Semua fungsi hash "rusak"

The prinsip mengesampingkan mengatakan bahwa mencoba sekeras yang Anda akan Anda tidak dapat memasukkan lebih dari 2 merpati di 2 lubang (kecuali jika Anda memotong merpati up). Demikian pula Anda tidak dapat memasukkan 2 ^ 128 + 1 angka dalam 2 ^ 128 slot. Semua fungsi hash menghasilkan hash dengan ukuran terbatas, ini berarti Anda selalu dapat menemukan tabrakan jika mencari melalui "ukuran terbatas" + 1 urutan. Hanya saja tidak mungkin untuk melakukannya. Bukan untuk MD5 dan bukan untuk Skein .

MD5 / SHA1 / Sha2xx tidak memiliki kemungkinan tabrakan

Semua fungsi hash memiliki benturan, itu fakta kehidupan. Menghadapi tabrakan ini secara tidak sengaja sama saja dengan memenangkan lotre antargalaksi . Artinya, tidak ada yang memenangkan lotere intergalaksi , hanya saja cara kerjanya tidak demikian. Anda tidak akan menemukan hash MD5 / SHA1 / SHA2XXX yang tidak disengaja, EVER. Setiap kata dalam setiap kamus, dalam setiap bahasa, memiliki nilai yang berbeda. Setiap nama jalur, pada setiap mesin di seluruh planet memiliki hash MD5 / SHA1 / SHA2XXX yang berbeda. Bagaimana saya tahu itu, Anda mungkin bertanya. Yah, seperti yang saya katakan sebelumnya, tidak ada yang pernah memenangkan lotere antargalaksi.

Tapi ... MD5 rusak

Terkadang fakta bahwa kerusakannya tidak masalah .

Tidak ada serangan gambar awal atau gambar kedua yang diketahui di MD5.

Jadi apa yang salah tentang MD5, Anda mungkin bertanya? Ada kemungkinan bagi pihak ketiga untuk menghasilkan 2 pesan, salah satunya adalah JAHAT dan yang lainnya BAIK yang keduanya memiliki nilai yang sama. ( Serangan tabrakan )

Meskipun demikian, rekomendasi RSA saat ini adalah tidak menggunakan MD5 jika Anda membutuhkan resistansi gambar sebelumnya. Orang-orang cenderung bersikap hati-hati dalam hal algoritme keamanan.

Jadi apa fungsi hash yang harus saya gunakan di .NET?

  • Gunakan MD5 jika Anda membutuhkan kecepatan / ukuran dan tidak peduli dengan serangan ulang tahun atau serangan gambar sebelumnya.

Ulangi ini setelah saya, tidak ada kemungkinan tabrakan MD5 , tabrakan berbahaya dapat direkayasa dengan hati-hati. Meskipun hingga saat ini belum ada serangan gambar awal di MD5, garis dari pakar keamanan menyatakan bahwa MD5 tidak boleh digunakan di tempat yang Anda butuhkan untuk melindungi dari serangan gambar sebelumnya. SAMA berlaku untuk SHA1 .

Perlu diingat, tidak semua algoritme perlu mempertahankan diri dari serangan pra-gambar atau benturan. Ambil kasus sepele dari pencarian jalan pertama untuk file duplikat pada HD Anda.

  • Gunakan fungsi berbasis SHA2XX jika Anda menginginkan fungsi hash yang aman secara kriptografis.

Tidak ada yang pernah menemukan tabrakan SHA512. PERNAH. Mereka telah berusaha sangat keras. Untuk itu tidak ada yang pernah menemukan tabrakan SHA256 atau 384. .

  • Jangan gunakan SHA1 atau RIPEMD kecuali untuk skenario interoperabilitas.

RIPMED belum menerima jumlah pemeriksaan yang sama seperti yang diterima SHAX dan MD5. Baik SHA1 dan RIPEMD rentan terhadap serangan ulang tahun. Keduanya lebih lambat dari MD5 di .NET dan memiliki ukuran 20 byte yang aneh. Tidak ada gunanya menggunakan fungsi-fungsi ini, lupakan saja.

Serangan tabrakan SHA1 turun menjadi 2 ^ 52, itu tidak akan terlalu lama sampai tabrakan SHA1 keluar di alam liar.

Untuk informasi terkini tentang berbagai fungsi hash, lihat kebun binatang fungsi hash .

Tapi tunggu, masih ada lagi

Memiliki fungsi hash yang cepat bisa menjadi kutukan. Misalnya: penggunaan yang paling umum untuk fungsi hash adalah penyimpanan kata sandi. Pada dasarnya, Anda menghitung hash dari kata sandi yang digabungkan dengan string acak yang diketahui (untuk menghalangi serangan pelangi) dan menyimpan hash itu di database.

Masalahnya adalah, jika seorang penyerang mendapatkan dump database, dia bisa, dengan cukup efektif menebak password menggunakan brute-force. Setiap kombinasi yang dia coba hanya membutuhkan sepersekian milidetik, dan dia dapat mencoba ratusan ribu kata sandi dalam satu detik.

Untuk mengatasi masalah ini, algoritma bcrypt dapat digunakan, ia dirancang untuk menjadi lambat sehingga penyerang akan sangat melambat jika menyerang sistem menggunakan bcrypt. Baru-baru ini scrypt telah menjadi berita utama dan dianggap oleh beberapa orang lebih efektif daripada bcrypt tetapi saya tidak tahu tentang implementasi .Net.

Sam Saffron
sumber
Meskipun MD5 dan SHA-1 telah dilemahkan, MD5 jauh lebih lemah dari SHA-1, sementara hanya sedikit lebih cepat. Tabrakan MD5 yang sebenarnya telah ditemukan dan digunakan untuk eksploitasi dunia nyata (pemalsuan sertifikat CA), tetapi sejauh yang saya tahu tidak ada tabrakan SHA-1 yang ditemukan (meskipun jumlah operasi telah dikurangi secara signifikan dari kekerasan). Dan mengingat seberapa lemah MD5 itu, saya tidak akan terkejut jika serangan preimage kedua muncul lebih cepat untuk MD5 daripada untuk SHA-1. Jadi, saya pikir Anda harus menggunakan SHA-1 jika Anda membutuhkan kecepatan dan tidak tahan benturan, dan jika tidak, gunakan salah satu dari keluarga SHA-2.
Brian Campbell
1
@Brian cukup jelas bahwa dalam beberapa tahun ke depan orang akan dapat menjalankan serangan tabrakan di SHA1, ini secara efektif akan membuat SHA1 berguna seperti MD5, Hal sertifikat CA adalah serangan tabrakan, demikian pula dalam beberapa tahun orang akan dapat untuk menjalankan serangan yang sama pada sertifikat CA SHA1. Serangan tersebut bergantung pada pihak jahat yang membuat sertifikat JAHAT dan BAIK. Tidak ada serangan primage yang diketahui pada MD5 dan fakta bahwa ada serangan tabrakan tidak membuat kemungkinan terjadinya serangan pra-gambar.
Sam Saffron
Ini jauh lebih sedikit tentang hash yang Anda gunakan untuk kata sandi, daripada apa yang di-hash. Jika salt Anda diketahui maka database Anda akan segera rentan terhadap serangan kamus; jika salt Anda prosedural, dan filesystem Anda terganggu, Anda (sekali lagi) rentan; jika garam Anda dihilangkan, Anda kembali dikompromikan. Keamanan yang dipermasalahkan adalah, apa pun yang terjadi, APA yang di-hash. Sertifikat, saya tidak akan membahasnya karena saya belum menangani mereka sebagai programmer (IE, membuat, memahami, dll).
Robert K
Istilah rusak memiliki arti khusus dalam konteks hashing, dan itu bukanlah arti yang ditekankan oleh jawaban ini. Semua jawaban ini akan menyebabkan kebingungan.
Joel McBeth
1
Ini adalah jawaban yang sangat bagus karena berfokus pada kepraktisan. Hash digunakan untuk hal-hal selain keamanan (seperti membuat kunci pencarian cache untuk data non-sensitif atau menentukan apakah objek serial telah berubah). Peluang serangan yang ditargetkan hampir nol (jangan pernah katakan tidak pernah), dan bahkan jika serangan berhasil, itu tidak akan berdampak material. Pekerjaan luar biasa yang berfokus pada dampak praktis (bukan teoretis).
DVK
36

Memperbarui:

Waktu telah berubah, kami memiliki pemenang SHA3. Saya akan merekomendasikan menggunakan pemenang keccak (alias SHA3 ) dari kontes SHA3.

Jawaban Asli:

Dari yang terlemah ke terkuat saya akan mengatakan:

  1. RIPEMD RUSAK, Seharusnya tidak digunakan seperti yang dapat dilihat di pdf ini
  2. MD-5 RUSAK, Tidak boleh digunakan, bisa rusak dalam 2 menit dengan laptop
  3. SHA-1 RUSAK, Seharusnya tidak digunakan, pada prinsipnya rusak, serangan semakin baik dari minggu ke minggu
  4. SHA-2 WEAK, Mungkin akan rusak dalam beberapa tahun mendatang. Beberapa kelemahan telah ditemukan. Perhatikan bahwa secara umum semakin tinggi ukuran kunci, semakin sulit fungsi hash dipecah. Meskipun ukuran kunci = kekuatan tidak selalu benar, namun sebagian besar benar. Jadi SHA-256 mungkin lebih lemah dari SHA-512.
  5. Skein NO KNOWN WEAKNESSES, adalah kandidat SHA-3 . Ini cukup baru dan karenanya belum teruji. Ini telah diterapkan dalam banyak bahasa.
  6. MD6 NO KNOWN WEAKNESSES, adalah kandidat lain untuk SHA-3. Mungkin lebih kuat dari Skien, tetapi lebih lambat pada mesin inti tunggal. Seperti Skien, ini belum teruji. Beberapa pengembang yang berpikiran keamanan menggunakannya, dalam peran penting misi .

Secara pribadi saya akan menggunakan MD6, karena orang tidak pernah terlalu paranoid. Jika kecepatan adalah masalah nyata, saya akan melihat Skein, atau SHA-256.

Ethan Heilman
sumber
6
Saya tidak akan menempatkan Skein dan MD6 setinggi itu dalam daftar; Ada alasan mengapa kompetisi SHA-3 tidak akan selesai sampai akhir 2012. Butuh waktu lama dan banyak perhatian untuk diyakinkan bahwa fungsi hash sebenarnya mungkin aman, dan tidak satu pun dari fungsi ini sudah cukup lama untuk itu.
Eric Burnett
Saya setuju dengan sentimen Anda, tetapi menurut saya komunitas berada dalam posisi yang aneh. Semua fungsi hash yang digunakan hampir saja rusak (mungkin, mungkin, bukan SHA2 256-512), namun kita harus menunggu hingga 2012 untuk memilih penggantinya. pilih racun Anda: lemah / rusak atau belum teruji (sebagian besar kandidat NIST sudah tidak publik selama lebih dari 6 bulan)? Pilihan yang sulit.
Ethan Heilman
6
RIPEMD rusak, tetapi RIPEMD-128/160/256 berbeda, dan tidak rusak.
Bwooce
Saya tidak mengetahui adanya implementasi yang bagus dari Skein untuk .NET. Saya telah menemukan SkeinFish dan nskein, dan keduanya sangat lambat.
Cocowalla
1
Saya akan menunggu dengan menggunakan SHA-3 sampai standar sebenarnya di luar sana, setidaknya jika Anda ingin benar-benar mengikuti standar. Algoritme itu sendiri memiliki terlalu banyak opsi.
Paŭlo Ebermann
3

Dalam pembelaan MD5, tidak ada cara yang diketahui untuk menghasilkan file dengan hash MD5 yang berubah-ubah. Penulis asli harus merencanakan terlebih dahulu agar tabrakan berfungsi. Jadi jika penerima mempercayai pengirim, MD5 baik-baik saja. MD5 rusak jika penandatangannya jahat, tetapi tidak diketahui rentan terhadap serangan man-in-the-middle.

rlbond.dll
sumber
1
Meskipun saya sama sekali bukan ahli di bidang ini, bukankah saat ini hampir mungkin untuk menghitung hash MD5 sewenang-wenang dengan kekerasan saat ini?
mafu
@mafu: Respons terlambat di sini, tetapi mungkin saja untuk menghitung hash apa pun melalui brute force. Ini mungkin membutuhkan waktu yang sangat lama.
Kutil
@ItzWarty Saya secara khusus mengacu pada waktu yang dibutuhkan - karena MD5 cukup singkat, saya pikir mungkin saja untuk membuang sumber komputasi yang masuk akal di atasnya (E3, atau jaringan komputer murah beberapa mesin dengan beberapa kartu grafis, sesuatu sepanjang garis tersebut) dan dapat menghitung hash MD5 arbitrer dalam, katakanlah, beberapa hari.
mafu
@mafu Serangan gambar awal membutuhkan 2 ^ 127 pemanggilan hash untuk hash 128 bit. Ini jauh dari mungkin. 2 ^ 80 pemanggilan layak tetapi sudah sangat mahal.
CodesInChaos
3

Ide yang bagus untuk melihat algorythm BLAKE2 .

Seperti yang dijelaskan, ini lebih cepat dari MD5 dan setidaknya seaman SHA-3. Ini juga diimplementasikan oleh beberapa aplikasi perangkat lunak , termasuk WinRar.

Florin Mircea
sumber
Ini mungkin lebih cepat kecuali banyak implementasi memiliki dukungan perangkat keras yang membuat SHA-256 cukup cepat.
zaf
1
Saya setuju. pada 2019, Blake2b adalah hash serba guna terbaik yang dirilis hingga saat ini. Secara signifikan lebih cepat dari semua alternatif lain, dan tidak kurang aman (setidaknya tidak berarti), dan dapat dijalankan hanya dalam 336 byte ram (168 untuk blake2s), oh, dan itu dioptimalkan untuk CPU little-endian, yang endian dominan pada sistem saat ini.
Hanshenrik
2

Yang mana yang Anda gunakan sangat bergantung pada tujuan Anda menggunakannya. Jika Anda hanya ingin memastikan bahwa file tidak rusak saat transit dan tidak terlalu mengkhawatirkan keamanan, lakukan dengan cepat dan kecil. Jika Anda memerlukan tanda tangan digital untuk perjanjian bailout federal bernilai miliaran dolar dan perlu memastikan perjanjian itu tidak dipalsukan, lakukan dengan susah payah dan lambat.

tvanfosson.dll
sumber
1
Sering kali ketika membahas solusi untuk masalah yang saya sebutkan saya menggunakan MD5 untuk identitas cepat (hashing string), mereka berkata "tetapi md5 rusak ... jangan gunakan, gunakan sha1" ... Saya tidak benar-benar berlangganan ini bertanya-tanya jika ada sesuatu yang pada dasarnya rusak dengan beberapa hash yang lebih lemah sehingga harus dihindari ... misalnya kasus pekerjaan nyata di mana data normal menghasilkan benturan
Sam Saffron
Melihat MD5 bekerja dengan baik untuk jutaan orang selama lima belas tahun, saya rasa tidak apa-apa bagi Anda jika keamanan hash tidak penting.
mqp
2
@sambo MD5 berfungsi dengan baik untuk hampir semua kasus kecuali jika keamanan / integritas sistem Anda bergantung pada pencegahan tabrakan.
Rex M
2

Saya ingin berpadu (sebelum md5 tercabik-cabik) bahwa saya masih menggunakan md5 secara ekstensif meskipun kerusakannya luar biasa untuk banyak kripto.

Selama Anda tidak peduli untuk melindungi dari tabrakan (Anda juga masih aman menggunakan md5 di hmac) dan Anda memang menginginkan kecepatan (terkadang Anda menginginkan hash yang lebih lambat) maka Anda masih dapat menggunakan md5 dengan percaya diri.

Mike Boers
sumber
@Mike Saya dengan Anda tentang itu, itulah yang saya gali dengan pertanyaan ini, adalah sesuatu tentang fungsi hash yang lebih lemah yang secara fundamental rusak sehingga tidak boleh digunakan.
Sam Saffron
Selanjutnya, jika data atau keamanan yang diperlukan data memiliki umur yang lebih pendek dari periode crack (beberapa menit hari ini iirc) MD5 baik-baik saja. Berguna secara situasional tetapi tetap bermanfaat adalah intinya.
annakata
@annakata - Perlu diingat bahwa Anda juga harus menghindari penggunaan ulang kunci di beberapa pesan agar dapat digunakan dalam situasi tersebut.
Steve Westbrook
0

Saya bukan ahli dalam hal semacam ini, tetapi saya mengikuti komunitas keamanan dan banyak orang di sana menganggap hash md5 rusak. Saya akan mengatakan bahwa yang mana yang akan digunakan tergantung pada seberapa sensitif datanya dan aplikasi spesifiknya. Anda mungkin bisa lolos dengan hash yang sedikit kurang aman selama kuncinya bagus dan kuat.

blueintegral
sumber
1
fungsi hash biasanya tidak menggunakan kunci
Ethan Heilman
0

Inilah saran saya untuk Anda:

  1. Anda mungkin harus melupakan MD5 jika Anda mengantisipasi serangan. Ada banyak tabel pelangi untuk mereka online, dan perusahaan seperti RIAA telah dikenal mampu menghasilkan urutan dengan hash yang setara.
  2. Gunakan garam jika Anda bisa. Menyertakan panjang pesan dalam pesan dapat membuat bentrokan hash yang berguna menjadi sangat sulit.
  3. Sebagai pedoman umum, lebih banyak bit berarti lebih sedikit tabrakan (dengan prinsip lubang meriam) dan lebih lambat, dan mungkin lebih aman (kecuali Anda jenius matematika yang dapat menemukan kerentanan).

Lihat di sini untuk makalah yang merinci algoritma untuk membuat tabrakan md5 dalam 31 detik dengan komputer desktop Intel P4.

http://eprint.iacr.org/2006/105

Tidak diketahui
sumber
Komentar ini sangat tua dan tampaknya agak terkubur, tapi bagian ini - RIAA telah dikenal mampu menghasilkan urutan dengan hash yang setara - melompat ke arah saya, dan saya sangat penasaran apa konteksnya. Secara khusus, bruteforcing MD5 8 tahun yang lalu sedikit kurang sepele dibandingkan tahun 2017, jadi mereka pasti punya alasan yang cukup bagus.
i336_