Seseorang mengatakan kepada saya bahwa ia telah melihat sistem perangkat lunak yang:
- mengambil kata sandi terenkripsi MD5 dari sistem lain;
- mendekripsi kata sandi terenkripsi dan
- 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?
hash
cryptography
md5
encryption
John Bubriski
sumber
sumber
Jawaban:
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.
sumber
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:
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.
sumber
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
atau
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:
atau
sumber
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.
sumber
password
bukan semua input tak terbatas lainnya yang menghasilkan hash yang sama tetapi yang semuanya terlihat cukup acak, tetapi Anda bisa cukup dekat.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.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber
Anda dapat menemukan alat online yang menggunakan kamus untuk mengambil pesan aslinya.
Dalam beberapa kasus, metode kamus mungkin tidak berguna:
Sebagai contoh, berikut adalah salah satu alat online MD5 decrypter .
sumber
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.
sumber
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)
sumber
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".
sumber
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.
sumber
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
sumber
Secara teori tidak mungkin mendekripsi nilai hash tetapi Anda memiliki beberapa teknik kotor untuk mendapatkan kembali teks biasa.
sumber
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'
sehinggaH(X') = H(X)
diberikanH(X)
. Jadi, jikaX
ditemukan, 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 hash
H(X)
untuk memverifikasi kata sandi yang dihasilkan pada sistem lain. Satu-satunya hal yang sistem penerima harus lakukan adalah untuk menyimpan hasil dari fungsi deterministikF
yang mengambilH(X)
sebagai masukan. KetikaX
diberikan kepada sistem makaH(X)
dan karenanyaF
dapat 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 jikaH(X)
kata sandi hash. Kata sandi hash masih bersifat deterministik, jadi jika ada yang tahu semua input dan algoritma hash itu sendiri makaX
dapat digunakan untuk menghitungH(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.
sumber
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.
sumber
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.
sumber
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 .
sumber