Hash dan Enkripsi? Apa itu hash, apa itu enkripsi hash, apa itu hash dekripsi

Hashing vs Enkripsi

Ada kesalahpahaman umum bahwa hash dan enkripsi adalah hal yang sama. Mereka tidak. Hash tidak dapat diubah. Ambil contoh berikut:

$ echo-n Password123 | md5sum
42f749ade7f9e195bf475f37a44cafcb-

Kami meneruskan string "Password123" ke algoritma MD5 (algo), yang melakukan operasi matematika dan mengembalikan hash berkode heksadesimal yang dihasilkan. Satu-satunya cara untuk mendapatkan nilai output hash yang sama adalah dengan memasukkan algo mentah. Ada konflik, tapi kita bisa membahasnya nanti.

Keluaran dari sebagian besar algoritma hash adalah string biner berkode heksadesimal dengan panjang tetap. Yang lain, seperti contoh ini, menggunakan string yang dikodekan base64 sebagai output. Perhatikan bahwa panjangnya selalu sama:

{SHA} uNF8eZRJ8jmr8WTjyocRJPVpe7w =
{SHA} lqdu/Zr6o2dgIER8Up1/7lcUtgw =
{SHA} qYUOwLMlDEuukA5HCT4LR1kQzco =
{SHA} MXZBCpyWJ7TTs1w2kgGJslwNwTg =
{SHA} 2sAPLaUh9Mz0bI + XxKEg7qyABe8=

TL; Dr.

Enkripsi reversibel, hash tidak


Saya tidak ingin berbicara terlalu banyak tentang enkripsi (karena hal-hal itu untuk buku), tetapi penting untuk dapat membedakan antara string hash dan string enkripsi. Enkripsi biasanya mengisi string untuk memenuhi panjang tertentu sebelum enkripsi terjadi. Ini juga memerlukan kunci (atau kata sandi) untuk mendekripsi. Jika kata sandi terenkripsi digunakan, string akan berubah tergantung pada panjang input. Jika Anda melihat sekumpulan kata sandi ciphertext, yang panjangnya bervariasi, Anda mungkin berurusan dengan enkripsi daripada hash. AES-256-CBC Contoh string terenkripsi dan teks biasa terkait (kunci adalah "ASDF"):

 foobar                           |   U2FsdGVkX19G + KtytNHdj6yH2AVvX26pEmtunS/PRnU = 
foobarfoobar               |   U2FsdGVkX18sPpIvN6nVh68lOUCcb3gR2fKbCCnBxog = 
foobarfoobarfoobar   |   U2FsdGVkX1/EOnUt57TCW4Rh0EdNnWX ldatuqv2xexeaeoww0xg/EXJUe9aSUz 

$   kucing   sandi_terenkripsi 
U2FsdGVkX19G KtytNHdj6yH2AVvX26pEmtunS/PRnU = 
U2FsdGVkX18sPpIvN6nVh68lOUCcb3gR2fKbCCnBxog = 
U2FsdGVkX1/EOnUt57TCW4Rh0EdNnWX lDatuQv2xEXXeAeowW0XG/EXJUe9aSUz 

$   untuk   i   di   `cat   encrypted_passwords`;   do   echo   $i   |   openssl   enc   -base64   -d   -aes-256-cbc   -pass   lewat:asdf;   gema;   Selesai 
foobar 
foobarfoobar 
foobarfoobarfoobar 

Sekarang Anda mungkin berpikir: Anda mungkin benar. Namun, materi kunci harus tersedia untuk akses sistem berarti pada dasarnya kata sandi master teks biasa berada di suatu tempat-baik sebagai kunci RSA atau kata sandi atau file, tertanam dalam database, hardcoded dalam aplikasi, atau di suatu tempat dalam memori. pfft, tidak ada yang akan menggunakan asdf sebagai kunci untuk mengenkripsi kata sandi pengguna mereka '

Gunakan string yang sama untuk MD5:

 foobar                           |   3858f62230ac3c915f300c664312c63f 
foobarfoobar               |   59faa421729e846dd800dce59943bfc0 
foobarfoobarfoobar   |   1352aadab322d1a033c27964be0965db 

Kata sandi hash jauh dari sempurna, sebenarnya agak buruk, tetapi lebih buruk daripada enkripsi karena apa yang mencoba dicapai. Pengguna memilih persyaratan minimum absolut lebih sering daripada tidak, dan dapat menggunakannya di beberapa situs. Banyak "hack" sebenarnya tidak lebih dari serangan penggunaan kembali kredensial. Jika kompromi awal adalah menggunakan enkripsi, maka satu-satunya upaya yang harus dilakukan penyerang adalah menemukan kunci untuk mendekripsi semua kata sandi. Untuk hash, mereka setidaknya harus bekerja keras untuk memecahkannya. Ketika digunakan dengan algoritma modern seperti sha512crypt, bcrypt, scrypt, atau argon2, nilai hash dapat membutuhkan banyak upaya untuk memecahkan.



Acar

Menambahkan garam adalah menambahkan string ke kata sandi sebelum hash. Garam untuk setiap hash harus unik dan biasanya dipilih secara acak, karena intinya adalah untuk membuat nilai hash "kata sandi" plaintext yang sama memiliki nilai yang berbeda setiap saat. Hal ini membuat kehidupan pemecah kata sandi menjadi sulit, karena untuk memeriksa kata "kata sandi" untuk setiap pengguna dari 1.000 pengguna, setiap pengguna memiliki SALT yang unik, dan mereka harus melakukannya sebanyak 1.000 kali-sekali per pengguna/SALT. Ini juga berarti bahwa mereka tidak dapat menggunakan kamus pra-kompilasi atau tabel pelangi secara efisien (biasanya...) karena mereka membutuhkan per-garam kustom.

Situs web kadang-kadang mengacaukan ini dan menggunakan garam universal untuk semua pengguna; Ini bertentangan dengan tujuan. Berikut adalah hash SHA1 dengan garam:


 b353977827f67a4ae0318f3a9447fae1c13d9d90:b8d18ca 
|___________________________________________| 
                                    hash                                     | 
                                        | 
                                                                        separator 

Teks plain untuk hash ini adalah "password". Nilai garamnya adalah "b8d18ca" dan digunakan dalam API SHA1 ($salt.$pass). Ini berarti bahwa algoritma mengambil plaintext dari kata sandi, menghasilkan garam, dan menambahkannya di depan plaintext. Ketika situs web atau aplikasi mencoba memverifikasi kata sandi Anda di masa depan, ia akan mengambil kata sandi plaintext Anda sebagai input, membaca nilai salt dalam Hash yang disimpan, menambahkannya di depan kata sandi yang Anda pilih, dan membandingkan Hash yang dihasilkan dengan Hash yang disimpan. Cracking Jika tidak diketahui bahwa bagiannya adalah garam, hash akan menghasilkan teks biasa berikut:

b8d18capassword

Karena algoritma membuat input teks biasa, garam dan hash yang dihasilkan Nilai dapat tetap transparan bagi pengguna. Saat memecah, jika algoritma itu garam, kita perlu mengetahui garam sehingga kita dapat menyediakan kandidat plaintext saat menghasilkan.

Garam dapat membuat retak lebih memakan waktu jika diterapkan dengan benar. Dengan garam acak, Anda memaksa Cracker untuk membuang waktu mencoba memecahkan hash yang tidak cocok dengan garam. Ini kira-kira menyelesaikan upaya yang dibutuhkan untuk kecepatan perangkat/nomor_garam_karena kita perlu menghasilkan kandidat untuk setiap garam. Jika garam itu statis, maka operasi matematikanya sama... speed_of_device/1. Cara lain untuk melihat ini:

 kami   GTX   980   cracks   SHA1 ($salt.$pass)   pada   3576,8   MH/s   atau   3,5   miliar   kandidat   per   detik 
  hashlist kami   berisi   1000   unik   garam 

3.500.000.000   /   1000   =   3.500.000   kandidat   per   detik 

Ini tiga orde besarnya lebih lambat dan kehilangan 99,9%. Saat menggunakan garam statis, terlihat seperti ini:

 kami   GTX   980   cracks   SHA1 ($salt.$pass)   pada   3576,8   MH/s   atau   3,5   miliar   kandidat   per   detik 
hashlist   kami   berisi   1   unik   garam 
               
3.500.000.000   /   1   =   3.500.000.000   kandidat   per   detik 

Jika ini tidak masuk akal, baca terus dan kita akan memiliki bagan yang bagus nanti...


iterasi

Perbaikan umum lainnya dibandingkan dengan hanya "hash plaintext ini" adalah, "hash plaintext ini, lalu hash hasil itu, lalu hash hasil itu" diulang ribuan kali. Dengan cara ini, Anda dapat mencoba satu kata sandi kandidat yang harus dilakukan ribuan kali oleh pemecah kata sandi. Ini disebut iterasi, loop, atau biaya variabel. Beberapa algoritma hash kata sandi menggunakan putaran iterasi yang dikodekan keras; Git lainnya. membuatnya dapat dikonfigurasi sebagai bagian dari Hash itu sendiri. Misalnya, md5crypt () menggunakan MD5, termasuk salt, dan bersiklus persis 1000 kali. sha512crypt () menggunakan sha512, termasuk garam, dan berputar sejumlah kali yang dapat dikonfigurasi (default adalah 5.000).

Iterasi terutama mempengaruhi biaya siklus komputasi algoritma hash, bukan penggunaan memori atau faktor lainnya. Ini juga merupakan serangan penting ketika merancang yang dioptimalkan untuk menahan beberapa jenis hash, tetapi ini terlalu rumput untuk dibahas di sini.


Pengaruh tipe hash pada kecepatan crack

Mari kita lihat beberapa contoh untuk menunjukkan pengaruh pemilihan algoritma hash, baik itu salted, menggunakan beberapa iterasi, dll. Misalkan penyerang mengumpulkan 1.000 hash pengguna dari situs web yang terinfeksi dan mereka hanya ingin melakukan serangan sederhana, menguji hash per kata sandi-143 juta kandidat kata sandi.

Jenis hash yang digunakan oleh situs web yang terinfeksi akan berdampak besar pada waktu yang dibutuhkan penyerang untuk melewati serangan ini. Ini adalah grafik (relatif, kira-kira) berapa banyak detik yang diperlukan untuk menyelesaikan serangan ini, tergantung pada jenis hash yang digunakan, di mana kartu grafis standar:

Nah, itu tidak berguna! Jenis hash terkuat jauh lebih lambat, tetapi jenis yang lebih cepat hanya dihancurkan hingga tidak ada apa-apa. Mari kita coba lagi dengan skala data yang sama menggunakan logaritmik x-axis time. Ketika bar bergerak dari kiri ke kanan, mereka akan bertambah dengan kekuatan 10:

Jadi beberapa poin penting adalah: putaran tunggal lebih mudah daripada putaran ganda dan tanpa garam daripada menambahkan garam ketika Anda ingin memecahkan beberapa hash password. Sebaliknya, ketika perusahaan atau situs web tertentu mengumumkan pelanggaran data yang berisi data pengguna, a) kata sandi sebaiknya telah dihash, bukan hanya teks biasa; b) Mereka lebih baik diasinkan, bukan hanya dihash; c) Mereka lebih baik memiliki hash garam multi-putaran yang kuat yang digunakan sepanjang waktu, bukan hanya satu putaran.



Mengidentifikasi tipe hash

Sebelum mencoba untuk memecahkan hash password yang diberikan, terserah kepada pemecah untuk mencari tahu algoritma hash mana yang digunakan untuk mengimplementasikannya. Mengidentifikasi tipe hash biasanya sederhana, tetapi tidak selalu. Crackers biasanya membuat tebakan berdasarkan petunjuk, seperti panjang hash dan format. Pada akhirnya, satu-satunya cara untuk yakin bahwa tebakan tipe hash benar adalah jika hash telah dipecahkan atau tidak.

Ada beberapa sumber daya yang sangat baik untuk tugas ini di sini dan di sini, dan keduanya menunjukkan seperti apa hash umum.

Paket "hash-identifier" (tersedia di sini) tersedia di Kali Linux untuk membantu mengidentifikasi tipe hash yang tidak diketahui.



Tabrakan

Konflik terjadi ketika dua input berbeda menghasilkan output hash yang sama. Ini sangat buruk (jelas). Untuk kata sandi, ini mungkin berarti bahwa saya mungkin tidak memecahkan kata sandi Anda yang sebenarnya, tetapi karena saya menemukan input yang menghasilkan nilai hash yang sama, saya dapat menggunakan nilai teks biasa untuk menipu sistem agar berpikir bahwa kata sandi itu sah. Microsoft Office menggunakan algoritma dalam perlindungan dokumennya yang rentan terhadap konflik selama bertahun-tahun. Tidak jarang menemukan beberapa konflik untuk satu hash, yang semuanya membuka kunci dokumen.

Setelah konflik ditemukan, algoritma benar-benar rusak. Jika terjadi sekali, secara statistik kemungkinan besar akan terjadi lagi. Satu-satunya hal yang menghalangi kita adalah waktu dan kemampuan pemrosesan. Karena algoritma menjadi lebih kuat, membutuhkan lebih banyak kemampuan dan waktu untuk menghasilkan algoritma kandidat dan membandingkan output hash untuk mencarinya. Akibatnya, para desainer semakin pandai membuat algoritma yang kurang rentan terhadap konflik.


Yang sebelumnya:Hashcat sandi crack hardware
Berikutnya:Apa itu Hashcat? Langkah pertama untuk memecahkan kata sandi [Pengantar Dasar]
  • Word/Excel/Pdf/PPT/RAR/zip/7z在线密码破解
  • offfice、PDF、压缩文件、WPS、在线密码恢复
  • hashcatonline.com在线密码破解版权所有2010-2025