Hitung garam dengan plaintext dan hash yang dikenal?

2

Saya memiliki string yang digunakan dalam aplikasi web dengan hashing md5 untuk menghasilkan hash. Saya juga punya hash. Tetapi md5 dari string tidak cocok dengan hash, jadi saya kira ada garam yang terlibat. Apakah ada perangkat lunak yang dapat membantu saya menentukan garam?

Neil
sumber
Apakah Anda hanya memiliki hash, atau entri authdb penuh?
Ignacio Vazquez-Abrams
Saya hanya memiliki hash.
Neil

Jawaban:

1

Dalam fungsi hashing standar (mis., Kata sandi UNIX di / etc / shadow) garam disimpan sebagai bagian dari hash.

Lewati nilai hash yang disimpan sebagai garam dan Anda harus mendapatkan hasil yang benar.

Nilai kata sandi hash di / etc / shadow sebenarnya adalah $ delimited record. Misalnya, kami memiliki hash kata sandi 'blarg' ini:

$1$KfcI/JTQ$b5VTf4i9Mnf6QFgLuVZNM0

Ada tiga bidang yang dipisahkan oleh $ 's yaitu

  1. Fungsi hash (dalam hal ini '1', mewakili MD5)
  2. Garam (yaitu 'KfcI / JTQ')
  3. Nilai hash (yaitu 'b5VTf4i9Mnf6QFgLuVZNM0')

Jika Anda menggunakan mkpasswd beberapa kali, hash akan berubah.

$ mkpasswd -m md5 blarg
$1$Gst52IWk$8ARVeSlpkcZOlyKV10Slu/

$ mkpasswd -m md5 blarg
$1$JeqRviA/$GnH/AvGnZEG9wLfJjiaAt1

Namun, dengan menambahkan garam (yaitu, bidang kedua) dari nilai hash di atas, kita dapat mencocokkannya dengan hash asli:

$ mkpasswd -m md5 -S KfcI/JTQ blarg
$1$KfcI/JTQ$b5VTf4i9Mnf6QFgLuVZNM0

Anda juga dapat meneruskan hash seluruh kata sandi (meskipun menghilangkan fungsi hash).

$ mkpasswd -m md5 -S KfcI/JTQ$b5VTf4i9Mnf6QFgLuVZNM0 blarg
$1$KfcI/JTQ$b5VTf4i9Mnf6QFgLuVZNM0

Di Linux jenis hash dapat dikontrol di /etc/login.defs. Berhati-hatilah saat mengubah ini, Anda dapat sepenuhnya mengunci diri dari sistem. Saya sarankan membaca halaman manual dengan cermat khusus melihat judul MD5_CRYPT_ENAB dan ENCRYPT_METHOD.

bahamat
sumber
Dalam hal ini, garam akan diawali sebelum hash yang sebenarnya. Dan kemudian string yang dihasilkan tidak akan menjadi hash MD5 (seperti 32 digit heksadesimal), tetapi sesuatu yang lebih panjang dari itu. Dan apa yang Anda maksud dengan kalimat terakhir?
Arjan
Saya akan menambahkan komentar untuk ini, tetapi apa yang saya ingin katakan tidak mudah untuk ditulis di kotak komentar. Saya menambahkan jawaban lain untuk lebih teliti.
bahamat
Seperti yang saya sebutkan dalam pertanyaan saya, ini dari webapp, yang menggunakan sistem otentikasi kode kustom mereka sendiri. Bukan Unix kata sandi sistem. Kata sandi ini di-hash oleh beberapa kode PHP sebelum disimpan dalam basis data relasional. Jadi, seperti yang dikatakan Arjan, saya memiliki string 32 digit dan teks untuknya. Adakah metode yang dapat dihitung dari garam ini, selain dengan kasar memaksa semua kemungkinan garam?
Neil
Garam harus dimasukkan sebagai bagian dari hash, atau di suatu tempat yang terkubur dalam kode adalah garam tunggal yang digunakan untuk semuanya.
bahamat