Apakah mungkin untuk mendekripsi hash MD5?

260

Seseorang mengatakan kepada saya bahwa ia telah melihat sistem perangkat lunak yang:

  1. mengambil kata sandi terenkripsi MD5 dari sistem lain;
  2. mendekripsi kata sandi terenkripsi dan
  3. menyimpan kata sandi dalam database sistem menggunakan algoritma sistem sendiri.

Apakah itu mungkin? Saya pikir itu tidak mungkin / layak untuk mendekripsi hash MD5.

Saya tahu ada kamus MD5, tetapi adakah algoritma dekripsi yang sebenarnya?

John Bubriski
sumber
7
Mengembalikan MD5 akan menghasilkan banyak kata sandi juga.
Carles Company
231
MD5 adalah algoritma digest. Anggap saja mengubah sapi menjadi steak. Sekarang cobalah untuk membalikkan itu.
Mekanik siput
5
@ Pertama dari apa yang saya mengerti, ya, tetapi hanya jika Anda memiliki banyak dari itu. Dan bahkan jika Anda melakukannya, Anda tidak akan bisa mundur, karena algoritma kehilangan informasi dengan sengaja.
Jordan
8
@mechanicalsnail mengingat analogi itu, orang bisa membuat klon sempurna sempurna dari DNA pada steak. :))
Trimikha Valentius
8
@TrimikhaValentius MD5 adalah algoritma pencernaan. Anggap saja makan steak> pencernaan> output. Sekarang cobalah untuk membalikkan itu.
user4157124

Jawaban:

424

Tidak. MD5 bukan enkripsi (meskipun dapat digunakan sebagai bagian dari beberapa algoritma enkripsi), ini adalah fungsi hash satu arah . Banyak data asli sebenarnya "hilang" sebagai bagian dari transformasi.

Pikirkan tentang ini: MD5 selalu memiliki panjang 128 bit. Itu berarti ada kemungkinan 128 hash MD5. Itu adalah jumlah yang cukup besar, namun itu pasti terbatas. Namun, ada jumlah tak terbatas input yang mungkin untuk fungsi hash yang diberikan (dan kebanyakan dari mereka mengandung lebih dari 128 bit, atau sangat sedikit 16 byte). Jadi sebenarnya ada sejumlah kemungkinan data yang tak terhingga yang akan memiliki nilai yang sama. Hal yang membuat hash menarik adalah bahwa sangat sulit untuk menemukan dua potong data yang memiliki nilai hash yang sama, dan kemungkinan terjadinya hash hampir 0.

Contoh sederhana untuk fungsi hash (sangat tidak aman) (dan ini menggambarkan ide umum itu menjadi satu arah) akan mengambil semua bit dari sepotong data, dan memperlakukannya sebagai sejumlah besar. Selanjutnya, lakukan pembagian integer menggunakan sejumlah besar (mungkin prima) n dan ambil sisanya (lihat: Modulus ). Anda akan dibiarkan dengan angka antara 0 dan n . Jika Anda melakukan perhitungan yang sama lagi (kapan saja, di komputer mana saja, di mana saja), menggunakan string yang sama persis, itu akan muncul dengan nilai yang sama. Namun, tidak ada cara untuk mengetahui apa nilai aslinya, karena ada jumlah angka tak terbatas yang memiliki sisa yang tepat, ketika dibagi dengan n .

Yang mengatakan, MD5 telah ditemukan memiliki beberapa kelemahan, sehingga dengan beberapa matematika yang kompleks, dimungkinkan untuk menemukan tabrakan tanpa mencoba 2 128 string input yang mungkin. Dan fakta bahwa sebagian besar kata sandi pendek, dan orang-orang sering menggunakan nilai-nilai umum (seperti "kata sandi" atau "rahasia") berarti bahwa dalam beberapa kasus, Anda dapat menebak kata sandi seseorang dengan Googling untuk hash atau menggunakan Rainbow meja . Itulah salah satu alasan mengapa Anda harus selalu " garam " kata sandi hash, sehingga dua nilai identik, ketika hash, tidak akan hash dengan nilai yang sama.

Setelah sepotong data dijalankan melalui fungsi hash, tidak ada jalan untuk kembali.

Adam Batkin
sumber
22
Namun, ada lebih banyak tabrakan daripada yang diperkirakan di ruang hash MD5. Ini tidak lagi dianggap optimal sebagai hash terbaik untuk kata sandi.
Cheeso
12
Karena sebagian besar kata sandi lebih pendek dari hash MD5, biasanya hanya ada satu kata sandi untuk setiap hash. (Dan menemukan satu, bahkan jika itu bukan yang asli, sudah cukup untuk mengakses akun.) Maksud dari fungsi satu arah adalah tidak ada beberapa preimage yang berbeda, jadi kita tidak bisa tahu mana yang asli , tetapi sangat sulit untuk menemukan bahkan satu nilai asli .
Paŭlo Ebermann
2
@Nick: Sebenarnya, RFC1321 secara eksplisit mengatakan: "Algoritme mengambil sebagai input pesan yang panjangnya sewenang-wenang"
Adam Batkin
6
@Olathe - Saya tidak yakin saya setuju. Diberikan hash, umumnya tidak mungkin untuk menentukan (dengan kepastian 100%) input asli. Ada (biasanya) jumlah input tak terbatas yang menghasilkan setiap kemungkinan (hash) output. Saya katakan secara umum karena, jika Anda tahu (misalnya) bahwa Anda mencari serangkaian karakter ASCII, dan itu kurang dari, katakanlah, 12 byte, kemungkinan hanya ada satu input yang menghasilkan output tertentu. Tetapi akan selalu ada tabrakan (tak terbatas), dan kecuali Anda memiliki batasan eksternal (seperti dalam contoh saya), Anda tidak akan pernah tahu mana yang benar
Adam Batkin
2
@Adam Batkin, Anda benar, tapi maksud saya bukan kepastian 100%. Pemecahan sandi tidak dapat dilakukan dengan kepastian 100%. Pengirim mungkin berarti omong kosong acak daripada plainteks bahasa Inggris menggunakan kunci yang sama yang mendekripsi plaintext bahasa Inggris lainnya, tetapi kemungkinan bahasa Inggris sangat dekat dengan 100%. Demikian pula, ketika memilih antara kata sandi puisi Jepang UTF-8 yang panjang dan string omong kosong, probabilitas puisi itu mendekati 100%. Hal ini dapat dilakukan dengan menggunakan probabilitas setelah-fakta daripada kendala yang telah ditentukan sebelumnya. Ini jelas tidak bisa dilakukan secara umum, tetapi masih cukup bermanfaat.
Olathe
154

Anda tidak bisa - secara teori. Inti dari hash adalah bahwa itu hanya satu arah. Ini berarti bahwa jika seseorang berhasil mendapatkan daftar hash, mereka masih tidak dapat memperoleh kata sandi Anda. Selain itu itu berarti bahwa bahkan jika seseorang menggunakan kata sandi yang sama di beberapa situs (ya, kita semua tahu kita seharusnya tidak, tetapi ...) siapa pun yang memiliki akses ke database situs A tidak akan dapat menggunakan kata sandi pengguna di situs B.

Fakta bahwa MD5 adalah hash juga berarti kehilangan informasi. Untuk setiap hash MD5 yang diberikan, jika Anda mengizinkan kata sandi dengan panjang sewenang-wenang, mungkin ada beberapa kata sandi yang menghasilkan hash yang sama. Untuk hash yang baik, secara komputasi tidak mungkin untuk menemukan mereka di luar panjang maksimum yang cukup sepele, tetapi itu berarti tidak ada jaminan bahwa jika Anda menemukan kata sandi yang memiliki hash target, itu pasti kata sandi asli. Secara astronomis tidak mungkin Anda melihat dua kata sandi ASCII saja dan panjang akal yang memiliki hash MD5 yang sama, tetapi itu bukan tidak mungkin.

MD5 adalah hash buruk untuk digunakan untuk kata sandi:

  • Ini cepat, yang berarti jika Anda memiliki hash "target", murah untuk mencoba banyak kata sandi dan melihat apakah Anda dapat menemukan hash yang hash ke target itu. Penggaraman tidak membantu dengan itu skenario, tapi membantu untuk membuatnya lebih mahal untuk mencoba untuk menemukan password yang cocok salah satu dari beberapa hash menggunakan garam yang berbeda.
  • Saya percaya ini telah mengetahui kekurangan yang membuatnya lebih mudah untuk menemukan tabrakan, meskipun menemukan tabrakan dalam teks yang dapat dicetak (daripada data biner sewenang-wenang) setidaknya akan lebih sulit.

Saya bukan pakar keamanan, jadi tidak akan membuat rekomendasi konkret di luar "Jangan memutar sistem otentikasi Anda sendiri." Temukan satu dari pemasok terkemuka, dan gunakan itu. Baik desain dan implementasi sistem keamanan adalah bisnis yang rumit.

Jon Skeet
sumber
2
Ya, ada metode lain, tetapi Anda perlu memahami apa yang dikatakan Jon di atas - 'Anda tidak boleh mengirim email kepada mereka kata sandi mereka - itu informasi sensitif yang mungkin tetap sensitif.' - pada tingkat terendah, email dapat dicegat dan informasi sensitif dapat diambil. Kata sandi harus tetap seaman mungkin - biasanya dengan menyimpannya sebagai hash hanya dalam database.
Daniel May
3
Dan juga fakta bahwa jika kata sandi dapat dibalik, itu berarti siapa pun yang mendapatkan akses ke basis data Anda dapat memperoleh kata sandi pengguna. Bukan ide yang bagus. Kata sandi satu arah harus menjadi norma; hanya simpan kata sandi asli (bahkan dienkripsi) jika Anda benar - benar harus (mis. untuk mengotentikasi dengan sistem lain yang tidak memiliki apa pun berbasis token).
Jon Skeet.
1
Saya telah melihat tindakan antispam di mana server web penerima menolak surat masuk hanya untuk menunggu server email pengirim mencoba lagi (robot spam biasanya hanya mencoba sekali). Itu bisa dengan mudah melebihi batas waktu 10 menit Anda.
sisve
1
@ravisoni: Itu ini menemukan sebuah nilai yang memiliki hash yang sama, mungkin melalui kekerasan atau tabel lookup. Tidak ada jaminan bahwa itu adalah nilai plaintext asli.
Jon Skeet
5
@ravisoni: Apa yang Anda maksud dengan "benar" di sini? Jika kata sandi tidak dikenal, Anda tidak bisa tahu apakah yang diungkapkan adalah yang asli atau tidak. Tetapi intinya adalah bahwa hash satu arah seperti MD5 secara definisi kehilangan informasi. Fakta bahwa situs seperti ini bisa datang dengan sebuah password yang cocok hanya bukti yang baik dari MD5 menjadi algoritma yang buruk digunakan untuk alasan keamanan.
Jon Skeet
52

Secara teknis, ini 'mungkin' , tetapi dalam kondisi yang sangat ketat ( tabel pelangi , pemaksaan kasar berdasarkan kemungkinan yang sangat kecil bahwa kata sandi pengguna ada dalam basis data hash).

Tapi itu tidak berarti itu

  • Layak
    atau
  • Aman

Anda tidak ingin 'membalikkan' hash MD5 . Dengan menggunakan metode yang diuraikan di bawah ini, Anda tidak perlu melakukannya. 'Membalikkan' MD5 sebenarnya dianggap berbahaya - beberapa situs web menawarkan kemampuan untuk 'membongkar' hash MD5 - tetapi semua itu adalah basis data masif yang berisi kata-kata kamus, kata sandi yang sebelumnya dikirimkan dan kata-kata lain. Ada kemungkinan yang sangat kecil bahwa hash MD5 yang Anda butuhkan akan dibalik. Dan jika Anda memberi garam hash MD5 - ini juga tidak akan berhasil! :)


Cara login dengan MD5 hashing harus bekerja adalah:

Selama Pendaftaran:
Pengguna menciptakan sandi -> Password hash MD5 menggunakan -> Hash disimpan dalam database

Selama Login:
Pengguna memasukkan nama pengguna dan kata sandi -> (Nama pengguna dicentang) Kata sandi di-hash menggunakan MD5 -> Hash dibandingkan dengan hash yang disimpan dalam basis data

Saat 'Kata Sandi Hilang' diperlukan:

2 opsi:

  • Pengguna mengirim kata sandi acak untuk login, kemudian disadap untuk mengubahnya saat login pertama kali.

atau

  • Pengguna dikirim tautan untuk mengubah kata sandi mereka (dengan pemeriksaan tambahan jika Anda memiliki pertanyaan keamanan / dll) dan kemudian kata sandi baru di-hash dan diganti dengan kata sandi lama di basis data
Daniel May
sumber
1
Saya punya beberapa nitpicks. Tabel pelangi tidak memaksa kasar. Sebenarnya ada program dan situs yang melakukan brute force (sangat sederhana) kata sandi dari beberapa karakter (umumnya mereka hanya mengulang selama beberapa jam atau hari, dan Anda dapat mengisi hash dan berharap itu muncul dalam loop). Dan sayangnya, mengingat kurangnya kualitas banyak kata sandi, kemungkinan seseorang muncul bukanlah "peluang yang sangat kecil".
Maarten Bodewes
32

Tidak secara langsung. Karena prinsip pigeonhole , ada (kemungkinan) lebih dari satu nilai yang di-hash ke keluaran MD5 yang diberikan. Dengan demikian, Anda tidak dapat membalikkannya dengan pasti. Selain itu, MD5 dilakukan untuk membuat sulit untuk menemukan setiap hash terbalik seperti (serangan namun ada telah bahwa hasil tabrakan - yang, menghasilkan dua nilai yang hash untuk hasil yang sama, tetapi Anda tidak dapat mengontrol apa nilai MD5 yang dihasilkan akan menjadi).

Namun, jika Anda membatasi ruang pencarian untuk, misalnya, kata sandi umum dengan panjang di bawah N, Anda mungkin tidak lagi memiliki properti irreversibilitas (karena jumlah output MD5 jauh lebih besar daripada jumlah string dalam domain yang menarik). Kemudian Anda dapat menggunakan meja pelangi atau mirip dengan membalik hash.

omong kosong
sumber
1
Saya akan menambahkan bahwa menemukan nilai lain yang hash ke output yang sama disebut "tabrakan". Ini adalah metode paling umum untuk memecahkan sistem hash MD5.
Nicole
5
@Renesis, menemukan data yang hash ke nilai yang sebelumnya dikenal disebut "preimage", sebenarnya, dan itu jauh, jauh lebih sulit daripada hanya tabrakan. Belum ada serangan preimage yang ditunjukkan terhadap MD5, tetapi serangan collision telah digunakan.
bdonlan
Inti dari fungsi hash (ketika digunakan untuk penyimpanan kata sandi) bukanlah bahwa ada banyak kata sandi yang mungkin memberikan hash yang sama (ada, tetapi kebanyakan dari mereka lebih panjang dari hash itu sendiri), tetapi sulit untuk menemukan bahkan salah satunya (yang akan cukup untuk mengakses sistem). Dan ya, karena meja pelangi Anda tidak menggunakan hash yang tawar. Dan karena ruang kata sandi yang kecil, Anda akan menggunakan hash yang lambat (seperti bcrypt atau scrypt) alih-alih yang cepat (seperti MD5 / SHA - * / ....)
Paŭlo Ebermann
1
Untuk teknis, Anda tidak dapat melakukan MD5 dengan pasti, karena perangkat kerasnya mungkin telah rusak. Dengan cara yang sama, Anda mungkin tidak dapat memastikan bahwa kata sandi itu passwordbukan semua input tak terbatas lainnya yang menghasilkan hash yang sama tetapi yang semuanya terlihat cukup acak, tetapi Anda bisa cukup dekat.
Olathe
Prinsip pigeonhole berlaku tentu saja, tetapi masih tidak layak secara komputasi untuk menemukan input kedua yang hash ke nilai tertentu, misalnya hash atas kata sandi normal. Jika Anda menemukan X yang hash ke H (X) yang diberikan maka Anda dapat yakin bahwa X adalah input yang benar. Ini membuat seluruh bagian pertama dari jawaban ini dan sebagian besar sisanya salah.
Maarten Bodewes
13

Tidak mungkin, setidaknya tidak dalam jumlah waktu yang wajar.

Cara ini sering ditangani adalah kata sandi "reset". Artinya, Anda memberi mereka kata sandi (acak) baru dan mengirimkannya melalui surel.

Matthew Groves
sumber
5
Jika hash tidak asin, Anda akan terkejut seberapa sering dibutuhkan adalah pencarian google untuk nilai hash ...
Michael Borgwardt
1
Tidak benar-benar praktis untuk sistem pencarian kata sandi meskipun, bahkan salah satu tawar :)
Matius Groves
12

Anda tidak dapat mengembalikan kata sandi md5. (Dalam bahasa apa pun)

Tapi kamu bisa:

berikan kepada pengguna yang baru.

periksa di beberapa meja pelangi untuk mungkin mengambil yang lama.

Nettogrof
sumber
1
Nix ide tabel pelangi. Jika Anda salting - dan Anda seharusnya - maka itu tidak akan berhasil, bagaimanapun.
Steven Sudit
1
@StevenSudit Jika mereka masih menggunakan MD5 untuk kata sandi hash daripada menggunakan hash kata sandi yang kuat, maka Anda tidak dapat berasumsi mereka menggunakan garam. Mungkin ya, mungkin juga tidak.
Maarten Bodewes
10

Tidak, dia pasti bingung tentang kamus MD5.

Hash kriptografi (MD5, dll ...) adalah salah satu cara dan Anda tidak dapat kembali ke pesan asli hanya dengan intisari kecuali Anda memiliki beberapa informasi lain tentang pesan asli, dll. Yang tidak seharusnya Anda pesan.

Robert Greiner
sumber
8

Dekripsi (langsung mendapatkan teks biasa dari nilai hash, dengan cara algoritmik), tidak.

Namun, ada metode yang menggunakan apa yang dikenal sebagai tabel pelangi . Sangat layak jika kata sandi Anda di-hash tanpa garam.

Sinan Taifour
sumber
7

MD5 adalah algoritma hashing, Anda tidak dapat mengembalikan nilai hash.

Anda harus menambahkan "ubah kata sandi fitur", di mana pengguna memberikan kata sandi lain, menghitung hash dan menyimpannya sebagai kata sandi baru.

Svetlozar Angelov
sumber
7

Tidak ada cara mudah untuk melakukannya. Ini adalah jenis hashing password di tempat pertama. :)

Satu hal yang harus Anda lakukan adalah mengatur kata sandi sementara untuk mereka secara manual dan mengirimkannya.

Saya ragu untuk menyebutkan ini karena itu adalah ide yang buruk (dan itu tidak dijamin untuk tetap bekerja), tetapi Anda dapat mencoba mencari hash di tabel pelangi seperti milw0rm untuk melihat apakah Anda dapat memulihkan kata sandi lama dengan cara itu.

Bill the Lizard
sumber
6

Lihat semua jawaban lain di sini tentang bagaimana dan mengapa itu tidak dapat dibalik dan mengapa Anda tidak mau melakukannya.

Namun untuk kelengkapan, ada tabel pelangi yang dapat Anda gunakan untuk mencari kecocokan. Tidak ada jaminan bahwa jawaban di tabel pelangi akan menjadi kata sandi asli yang dipilih oleh pengguna Anda sehingga akan sangat membingungkan mereka.

Juga, ini tidak akan bekerja untuk hash asin. Penggaraman direkomendasikan oleh banyak pakar keamanan.

Dina
sumber
Salah . Jika kecocokan ditemukan maka dipastikan itu akan menjadi kata sandi asli. Jika ini tidak terjadi maka akan mungkin untuk menghasilkan tabrakan diberikan setiap H (X) di mana X adalah pesan tanpa struktur yang telah ditentukan ditentukan oleh musuh. Secara komputasi tidak layak untuk menemukan tabrakan seperti itu untuk fungsi hash yang aman secara kriptografis, bahkan jika itu adalah fungsi hash yang rusak seperti MD5.
Maarten Bodewes
@MaartenBodewes: "Jika kecocokan ditemukan maka dipastikan itu akan menjadi kata sandi asli." Saya tidak bisa melihat bagaimana itu terjadi, jika kita mengasumsikan panjang kata sandi yang tidak terbatas. Saya akan mengatakan itu kemungkinan besar merupakan kata sandi asli, tetapi tidak harus demikian. Fakta bahwa ada lebih banyak kata sandi yang mungkin daripada hash MD5 berarti harus ada dua kata sandi dengan hash yang sama. Hanya karena tidak layak secara komputasi untuk menemukan tabrakan seperti itu tidak berarti mereka tidak ada. Atau apakah saya salah paham dengan Anda?
Jon Skeet
@ JonSkeet Jika secara komputasi tidak layak untuk menemukan tabrakan dengan sengaja maka menemukan satu secara kebetulan sama tidak mungkin atau lebih buruk. Karena ruang output terbatas MD5 dan masalah tanggal lahir, kemungkinan Anda akan menemukan tabrakan sekitar 1 dalam 2 ^ 64 (yaitu sekitar setengah dari ruang output) - dan itu setelah mencocokkan sekitar 2 ^ 64 hash. Dan ini bahkan tidak mempertimbangkan bahwa pesan itu mungkin harus kecil dan memiliki format khusus untuk dianggap sebagai kata sandi. Sebagian besar kata sandi memiliki entropi di bawah 2 ^ 64 bit.
Maarten Bodewes
1
@ MaartenBodewes: Tapi ada perbedaan besar antara "tidak mungkin secara astronomis" dan "tidak mungkin". Pernyataan Anda tentang hal itu memastikan bahwa kata sandi yang tepat terlalu kuat, IMO. Itu menunjukkan kepastian matematika yang tidak ada.
Jon Skeet
Anda juga dapat menebak kunci AES 2 ^ 128 bit dalam sekali jalan. Itu "hanya" sangat tidak mungkin. Kriptografi bergantung pada peluang semacam ini. Untuk semua tujuan praktis, jika Anda menemukan pesan input / kata sandi, itu akan menjadi yang Anda cari. Bahwa secara teori dimungkinkan untuk menemukan pesan input lain itu bagus, tetapi untuk pertanyaan ini di StackOverflow tidak perlu mempertimbangkannya. Dan tabel pelangi hanya diisi dengan kemungkinan kata sandi. Mereka tidak akan berisi data yang cukup di sana bahkan untuk kemungkinan tabrakan (mereka akan secara tidak sadar menimpa pemetaan atau menjadi terkenal).
Maarten Bodewes
4

Tidak ada cara "mengembalikan" fungsi hash dalam hal menemukan fungsi terbalik untuknya. Seperti yang disebutkan sebelumnya, ini adalah inti dari memiliki fungsi hash. Seharusnya tidak dapat dibalik dan harus memungkinkan untuk perhitungan nilai hash cepat. Jadi satu-satunya cara untuk menemukan string input yang menghasilkan nilai hash yang diberikan adalah dengan mencoba semua kombinasi yang mungkin. Ini disebut serangan brute force karena alasan itu.

Mencoba semua kombinasi yang mungkin membutuhkan banyak waktu dan ini juga merupakan alasan mengapa nilai hash digunakan untuk menyimpan kata sandi dengan cara yang relatif aman. Jika penyerang dapat mengakses database Anda dengan semua kata sandi pengguna di dalamnya, Anda kehilangan dalam hal apa pun. Jika Anda memiliki nilai hash dan kata sandi (secara ideal) kuat, akan jauh lebih sulit untuk mengeluarkan kata sandi dari nilai hash untuk penyerang.

Menyimpan nilai hash juga tidak ada masalah kinerja karena menghitung nilai hash relatif cepat. Jadi yang dilakukan kebanyakan sistem adalah menghitung nilai hash dari kata sandi yang diketik pengguna (yang cepat) dan kemudian membandingkannya dengan nilai hash yang tersimpan dalam basis data pengguna mereka.

Kage
sumber
Tidak ada yang salah dengan jawaban ini kecuali bahwa kecepatan fungsi hash adalah masalah karena sebagian besar kata sandi tidak cukup aman dan memungkinkan musuh untuk melakukan serangan kamus. Karena alasan itu fungsi hash kata sandi yang lambat digunakan alih-alih fungsi hash yang aman secara kriptografis cepat.
Maarten Bodewes
3

MD5 dianggap rusak, bukan karena Anda bisa mendapatkan kembali konten asli dari hash, tetapi karena dengan bekerja, Anda dapat membuat dua pesan yang hash ke hash yang sama.

Anda tidak dapat membatalkan hash MD5 hash.

Ned Batchelder
sumber
3
Secara desain, semua hash dengan panjang yang sama mengalami tabrakan. Tidak dapat dihindari saat menahan data panjang variabel. MD5 dianggap usang karena tingkat tabrakannya, bukan karena fakta tabrakan.
Jonathan Lonowski
MD5 dianggap rusak karena kemungkinan terbukti membangun input yang bertabrakan.
Ned Batchelder
3

Anda dapat menemukan alat online yang menggunakan kamus untuk mengambil pesan aslinya.

Dalam beberapa kasus, metode kamus mungkin tidak berguna:

  • jika pesan di-hash menggunakan pesan SALT
  • jika pesan tersebut hash lebih dari sekali

Sebagai contoh, berikut adalah salah satu alat online MD5 decrypter .

davitz38
sumber
Tabel pelangi - bukan serangan kamus - tidak berguna jika menggunakan garam. Hashing lebih dari sekali - tanpa garam - masih memungkinkan meja pelangi, meskipun menemukan yang sudah ada secara online tentu kurang mungkin.
Maarten Bodewes
2

Satu-satunya hal yang dapat berfungsi adalah (jika kami menyebutkan bahwa kata sandi hanya di-hash, tanpa menambahkan garam apa pun untuk mencegah serangan replay, jika memang demikian Anda harus tahu garamnya), dapatkan alat serangan kamus , file banyak kata, angka dll. kemudian buat dua baris, satu baris adalah kata, nomor (dalam kamus) yang lain adalah hash dari kata itu, dan bandingkan hash jika cocok Anda mendapatkannya ...

itulah satu-satunya cara, tanpa melakukan cryptanalysis.

berkay
sumber
2

Ya, persis apa yang Anda minta itu mungkin. Tidak mungkin untuk 'mendekripsi' kata sandi MD5 tanpa bantuan, tetapi dimungkinkan untuk mengenkripsi ulang kata sandi MD5 ke dalam algoritma lain, hanya saja tidak semuanya sekaligus.

Yang Anda lakukan adalah mengatur agar pengguna Anda dapat masuk ke sistem baru Anda menggunakan kata sandi MD5 lama. Pada saat itu mereka login mereka telah memberikan program login Anda sebuah unhashed versi password yang Anda membuktikan pertandingan hash MD5 yang Anda miliki. Anda kemudian dapat mengonversi kata sandi yang tidak rusak ini ke algoritma hashing baru Anda.

Jelas, ini adalah proses yang diperpanjang karena Anda harus menunggu pengguna untuk memberi tahu Anda apa kata sandinya, tetapi itu berhasil.

(NB: tujuh tahun kemudian, oh well semoga seseorang akan merasakan manfaatnya)

pengguna3710044
sumber
Terima kasih balasannya. Namun saya akan "1 up" Anda :) Saya tidak ingat apakah saya benar-benar melakukan ini, tetapi secara teori itu harus berhasil. Alih-alih menunggu setiap pengguna untuk masuk sehingga kami dapat mengenkripsi ulang kata sandi mereka, Anda dapat mengenkripsi versi kata sandi mereka. Jadi setiap kata sandi akan di-hash MD5, dan kemudian dienkripsi. Baru saja memperbarui pemeriksaan kata sandi untuk melakukan hal yang sama dan data pengguna harus aman tanpa memerlukan intervensi pengguna.
John Bubriski
Satu lagi peringatan atas komentar saya di atas. Saya bukan ahli enkripsi, jadi saya tidak yakin apakah ada implikasi keamanan lebih lanjut dari ini. Misalnya, mengenkripsi kata sandi yang lemah yang hashnya lemah sebelum dienkripsi dapat berpotensi membahayakan keamanan enkripsi (mungkin menggunakan garam lain juga?). Juga, Anda mungkin memiliki cadangan yang beredar dengan password hash MD5 tersebut. Mungkin lebih baik untuk melakukan pembatalan penuh atas semua kata sandi yang ada saat melakukan peningkatan jenis ini.
John Bubriski
Cryptographers khawatir tentang enkripsi ganda, tapi saya pikir mereka hanya menemukan kasus sepele di mana itu menjadi masalah. Tapi saya pikir itu tidak berguna dalam kasus ini karena MD5 masih aman untuk kata sandi (tidak terlalu lama, teks). Tetap saja, double hashing bisa berguna jika pengembang sebelumnya lupa menambahkan garam, jika tidak, saya tidak bisa memikirkan kasus di mana Anda tidak perlu memberi tahu semua orang bahwa kata sandi harus dianggap pwned. Semoga cadangan Anda tidak hilang, dan tetap dienkripsi.
user3710044
1

Tidak, itu tidak bisa dilakukan. Anda dapat menggunakan kamus, atau Anda dapat mencoba hashing nilai yang berbeda sampai Anda mendapatkan hash yang Anda cari. Tapi itu tidak bisa "didekripsi".

Vilx-
sumber
saya melihat situs web ini yang membalikkan md5 menjadi teks asli: md5.gromweb.com . Bagaimana mungkin?
samach
2
@ samach321 - Mudah: mereka memiliki DB string hash. Apa pun yang Anda masukkan di kotak "Konversi string ke hash MD5" akan ditambahkan ke DB. Coba dapatkan hash MD5 dari sumber lain dan masukkan itu. Kecuali itu adalah sesuatu yang ada di DB mereka, Anda tidak akan mendapatkan hasilnya.
Vilx-
1

MD5 memiliki kelemahannya (lihat Wikipedia ), jadi ada beberapa proyek yang mencoba untuk mengkomputasi Hash. Wikipedia juga memberi petunjuk pada beberapa proyek ini. Yang saya tahu (dan hormati) adalah ophrack. Anda tidak bisa memberi tahu pengguna kata sandi mereka sendiri, tetapi Anda mungkin bisa memberi tahu mereka kata sandi yang berfungsi. Tapi saya pikir: Kirimkan saja kata sandi baru jika mereka lupa.

dz.
sumber
Fakta bahwa MD5 rusak (untuk penggunaan fungsi yang spesifik tetapi penting) sama sekali tidak ada hubungannya dengan tabel pelangi (yang Anda beri petunjuk ketika menyebutkan perhitungan hash).
Maarten Bodewes
1

Algoritma MD5 Hash tidak dapat dibalik, jadi MD5 tidak dapat didekode, tetapi beberapa situs web memiliki kumpulan kata sandi yang sesuai, sehingga Anda dapat mencoba online untuk mendekode hash MD5.

Coba online:

Dekripsi MD5

md5online

md5decrypter

Girish Patidar
sumber
Ya, tetapi ini sudah tercakup oleh pertanyaan seperti pada kalimat "Saya tahu bahwa ada kamus". Oleh karena itu, hanya menunjukkan kamus tidak dihitung sebagai jawaban.
Maarten Bodewes
1

Secara teori tidak mungkin mendekripsi nilai hash tetapi Anda memiliki beberapa teknik kotor untuk mendapatkan kembali teks biasa.

  1. Bruteforcing : Semua algoritma keamanan komputer mengalami bruteforcing . Berdasarkan ide ini GPU saat ini menggunakan gagasan pemrograman paralel yang dapat digunakan untuk mendapatkan kembali teks biasa dengan secara besar-besaran memaksakannya menggunakan prosesor grafis apa pun. Alat ini hashcat melakukan pekerjaan ini. Terakhir kali saya memeriksa versi cuda -nya, saya dapat mengubah karakter sepanjang 7 huruf dalam waktu enam menit.
  2. Pencarian Internet : Cukup salin dan tempel hash di Google dan lihat Jika Anda dapat menemukan teks yang sesuai di sana. Ini bukan solusi ketika Anda mem-sesuatu sesuatu tetapi pasti patut dicoba. Beberapa situs web mempertahankan hash untuk hampir semua kata dalam kamus.
vikkyhacks
sumber
2
Serangan kamus adalah cara lain, atau membandingkan terhadap basis data lain yang Anda ketahui kata sandinya.
Maarten Bodewes
1

Tidak, tidak mungkin untuk membalikkan fungsi hash seperti MD5: mengingat nilai hash output tidak mungkin untuk menemukan pesan input kecuali informasi yang cukup tentang pesan input diketahui.

Dekripsi bukan fungsi yang didefinisikan untuk fungsi hash; enkripsi dan dekripsi adalah fungsi-fungsi sandi seperti AES dalam mode CBC; fungsi hash tidak mengenkripsi atau mendekripsi . Fungsi hash digunakan untuk mencerna pesan input. Sesuai namanya, tidak ada algoritma terbalik yang dimungkinkan oleh desain .


MD5 telah dirancang sebagai fungsi hash satu arah yang aman secara kriptografis . Sekarang mudah untuk menghasilkan collision untuk MD5 - bahkan jika sebagian besar dari pesan input telah ditentukan sebelumnya. Jadi MD5 secara resmi rusak dan MD5 tidak boleh dianggap sebagai hash yang aman secara kriptografis lagi. Namun masih mustahil untuk menemukan pesan input yang mengarah ke nilai hash: temukan X ketika hanya H (X) yang diketahui (dan X tidak memiliki struktur yang dihitung sebelumnya dengan setidaknya satu blok 128 byte dari data yang telah dikomputasi) . Tidak ada serangan pra-gambar yang diketahui terhadap MD5.

Secara umum juga memungkinkan untuk menebak kata sandi menggunakan brute force atau serangan kamus (augmented), untuk membandingkan basis data atau untuk mencoba dan menemukan hash kata sandi dalam apa yang disebut tabel pelangi. Jika kecocokan ditemukan maka secara komputasi yakin bahwa input telah ditemukan. Fungsi hash juga aman terhadap serangan tabrakan: menemukan X'sehingga H(X') = H(X)diberikan H(X). Jadi, jika Xditemukan, secara komputasi pasti bahwa itu memang pesan input. Kalau tidak, Anda akan melakukan serangan tabrakan setelah semua. Tabel pelangi dapat digunakan untuk mempercepat serangan dan ada sumber daya internet khusus di luar sana yang akan membantu Anda menemukan kata sandi yang diberikan hash tertentu.

Tentu saja dimungkinkan untuk menggunakan kembali nilai hashH(X) untuk memverifikasi kata sandi yang dihasilkan pada sistem lain. Satu-satunya hal yang sistem penerima harus lakukan adalah untuk menyimpan hasil dari fungsi deterministik Fyang mengambil H(X)sebagai masukan. Ketika Xdiberikan kepada sistem maka H(X)dan karenanya Fdapat dihitung ulang dan hasilnya dapat dibandingkan. Dengan kata lain, tidak perlu mendekripsi nilai hash hanya memverifikasi bahwa kata sandi itu benar, dan Anda masih dapat menyimpan hash sebagai nilai yang berbeda.


Alih-alih MD5, penting untuk menggunakan hash kata sandi atau PBKDF (fungsi penurunan kunci berbasis kata sandi). Fungsi semacam itu menentukan cara menggunakan garam bersama dengan hash. Dengan cara itu hash identik tidak akan dihasilkan untuk kata sandi identik (dari pengguna lain atau dalam basis data lain). Kata sandi hash karena alasan itu juga tidak memungkinkan tabel pelangi untuk digunakan selama garamnya cukup besar dan diacak dengan benar.

Kata sandi hash juga mengandung faktor kerja (kadang-kadang dikonfigurasi menggunakan hitungan iterasi ) yang secara signifikan dapat memperlambat serangan yang mencoba menemukan kata sandi yang diberi nilai garam dan nilai hash. Ini penting karena database dengan nilai garam dan hash bisa dicuri. Akhirnya, kata sandi hash mungkin juga hard-memory sehingga diperlukan sejumlah besar memori untuk menghitung hash. Ini membuatnya tidak mungkin untuk menggunakan perangkat keras khusus (GPU, ASIC, FPGA, dll.) Untuk memungkinkan penyerang mempercepat pencarian. Input atau opsi konfigurasi lain seperti lada atau jumlah paralelisasi mungkin juga tersedia untuk hash kata sandi.

Namun itu masih akan memungkinkan siapa pun untuk memverifikasi kata sandi yang diberikan H(X)bahkan jika H(X)kata sandi hash. Kata sandi hash masih bersifat deterministik, jadi jika ada yang tahu semua input dan algoritma hash itu sendiri maka Xdapat digunakan untuk menghitung H(X)dan - lagi - hasilnya dapat dibandingkan.

Hash kata sandi yang umum digunakan adalah bcrypt , scrypt dan PBKDF2 . Ada juga Argon2 dalam berbagai bentuk yang merupakan pemenang kompetisi hashing kata sandi yang cukup baru. Di sini, di CrackStation adalah posting blog yang bagus tentang melakukan keamanan kata sandi yang benar.


Dimungkinkan untuk membuat musuh tidak mungkin melakukan perhitungan hash untuk memverifikasi bahwa kata sandi itu benar. Untuk ini lada dapat digunakan sebagai input ke kata sandi hash. Atau, nilai hash tentu saja dapat dienkripsi menggunakan cipher seperti AES dan mode operasi seperti CBC atau GCM. Namun ini membutuhkan penyimpanan rahasia / kunci secara independen dan dengan persyaratan akses yang lebih tinggi daripada hash kata sandi.

Maarten Bodewes
sumber
0

MD5 adalah fungsi hash kriptografis (satu arah), jadi tidak ada cara langsung untuk memecahkan kode itu. Seluruh tujuan fungsi hash kriptografis adalah Anda tidak dapat membatalkannya.

Satu hal yang dapat Anda lakukan adalah strategi brute-force, di mana Anda menebak apa yang hash, kemudian hash dengan fungsi yang sama dan melihat apakah itu cocok. Kecuali jika data hash sangat mudah ditebak, itu bisa memakan waktu lama.

Ajanyan Pradeep
sumber
-1

Masih belum memungkinkan untuk memasukkan hash kata sandi ke dalam algoritma dan mendapatkan kata sandi kembali dalam teks biasa karena hashing adalah hal satu arah. Tetapi yang dilakukan orang adalah membuat hash dan menyimpannya di sebuah tabel besar sehingga ketika Anda memasukkan hash tertentu, ia memeriksa tabel untuk kata sandi yang cocok dengan hash dan mengembalikan kata sandi itu kepada Anda. Contoh situs yang melakukan itu adalah http://www.md5online.org/ . Sistem penyimpanan kata sandi modern melawan ini dengan menggunakan algoritma penggaraman sehingga ketika Anda memasukkan kata sandi yang sama ke dalam kotak kata sandi selama pendaftaran hash yang berbeda dihasilkan.

oziomajnr
sumber
-1

Tidak, Anda tidak dapat mendekripsi / membalikkan md5 karena ini adalah fungsi hash satu arah sampai Anda tidak dapat menemukan kerentanan yang luas di MD5. Cara lain adalah ada beberapa situs web yang memiliki sejumlah besar basis data kata sandi, sehingga Anda dapat mencoba online untuk memecahkan kode string hash MD5 atau SHA1 Anda. Saya mencoba situs web seperti http://www.mycodemyway.com/encrypt-and-decrypt/md5 dan berfungsi dengan baik untuk saya tetapi ini benar-benar tergantung pada hash Anda jika hash itu disimpan dalam database itu maka Anda bisa mendapatkan string yang sebenarnya .

Rafi Ahmad
sumber
1
Tidak, MD5 bukan enkripsi, bahkan enkripsi satu arah (yang tidak masuk akal sejak awal).
Maarten Bodewes
@ MaartenBodewes Itu kesalahan saya itu bukan fungsi enkripsi, ini fungsi hash Terima kasih.
Rafi Ahmad