Bagaimana untuk mengetahui apa jenis penyandian/enkripsi telah digunakan?

Apakah ada cara untuk menemukan apa jenis enkripsi/penyandian yang digunakan? Misalnya, saya menguji aplikasi web yang menyimpan password dalam database dalam format terenkripsi (WeJcFMQ/8+8QJ/w0hHh+0g==). Bagaimana saya menentukan apa yang hashing atau enkripsi yang digunakan?

Mengomentari pertanyaan (6)
Larutan

Contoh string (WeJcFMQ/8+8QJ/w0hHh+0g==) adalah Base64 encoding untuk urutan 16 byte, yang tidak terlihat seperti yang bermakna ASCII atau UTF-8. If ini adalah sebuah nilai yang disimpan untuk password verification (yaitu tidak benar-benar sebuah "dienkripsi" password, bukan "hash" password) maka ini mungkin adalah hasil dari fungsi hash dihitung atas password; salah satu klasik fungsi hash dengan 128-bit output MD5. Tapi itu bisa tentang apa saja.

"normal" cara untuk mengetahui adalah untuk melihat kode aplikasi. Aplikasi kode menjelma dalam nyata, cara lemak (executable file pada server, source code suatu tempat...) yang tidak, dan tidak dapat, karena banyak dilindungi sebagai rahasia kunci dapat. Jadi, reverse engineering adalah "cara untuk pergi".

Pembatasan reverse engineering, anda dapat membuat beberapa percobaan untuk mencoba untuk membuat dugaan:

  • Jika pengguna yang sama "perubahan" password-nya tapi reuses yang sama, tidak disimpan, perubahan nilai ? Jika ya, maka bagian dari nilai yang mungkin adalah rancangan acak kelompok "garam" atau IV (dengan asumsi enkripsi simetris).
  • Dengan asumsi bahwa nilai deterministik dari sandi untuk pengguna tertentu, jika dua pengguna memilih password yang sama, apakah hasil yang sama nilai yang disimpan ? Jika tidak, maka nama pengguna mungkin adalah bagian dari komputasi. Anda mungkin ingin mencoba untuk menghitung MD5("username:password") atau lain varian yang sama, untuk melihat apakah anda mendapatkan pertandingan.
  • Adalah panjang password tertentu ? Yaitu, jika anda menetapkan 40-karakter password dan tidak berhasil melakukan otentikasi dengan mengetik hanya 39 karakter, maka ini berarti bahwa semua karakter yang penting, dan ini menyiratkan bahwa ini benar-benar adalah password hashing, tidak encryption (nilai yang disimpan digunakan untuk memverifikasi password, tapi password tidak dapat dipulihkan dari nilai yang disimpan saja).
Komentar (4)

Edit: saya hanya melihat yang sangat dingin script bernama hashID. Nama yang cukup banyak menjelaskan hal itu.



Pada umumnya, menggunakan pengalaman untuk membuat dugaan adalah bagaimana hal ini dilakukan.

Berikut adalah daftar dengan jumlah yang sangat besar dari hash output sehingga anda tahu bagaimana masing-masing satu terlihat dan membuat tanda tangan/patters atau hanya optik verifikasi.

- [Online Crack Hash Hash Generator](https://www.onlinehashcrack.com/hash-generator.php)
- [InsidePro perangkat Lunak Forum > Jenis Hash](https://web.archive.org/web/20160403135857/https://forum.insidepro.com/viewtopic.php?t=8225) (via Archive.org)

Ada dua utama ** hal pertama yang anda perhatikan:

- panjang hash (masing-masing fungsi hash memiliki output tertentu panjang)
- abjad yang digunakan (semua huruf bahasa inggris? angka 0-9 dan A-F jadi hex? apa karakter khusus yang ada jika ada?)

Beberapa password cracking program (John the ripper misalnya) menerapkan beberapa pencocokan pola pada input untuk menebak algoritma yang digunakan, tapi ini hanya bekerja pada generic hash. Misalnya, jika anda mengambil hash output dan memutar setiap huruf dengan 1, paling pencocokan pola skema akan gagal.
Komentar (4)

Apa yang anda telah diposting adalah 16 byte (128 bit) dari base 64 data dikodekan. Fakta bahwa itu adalah basis 64 dikodekan doesn't memberitahu kita banyak karena basis 64 tidak enkripsi/hashing algoritma ini adalah cara untuk mengkodekan data biner ke dalam teks. Ini berarti bahwa blok ini termasuk salah satu sepotong berguna dari informasi, yaitu bahwa output adalah 16 byte panjang. Kita dapat membandingkan hal ini dengan ukuran blok yang umum digunakan skema dan mencari tahu apa yang dapat't akan. Sejauh ini skema yang paling umum adalah:

Hal berikutnya yang perlu kita lakukan adalah untuk melihat di blok lain dari cipher teks untuk mencari tahu jawaban untuk pertanyaan berikut:

  • Semua cipher teks yang sama panjang, bahkan untuk input yang berbeda panjang?

Jika tidak semua blok yang sama panjang maka anda tidak't melihat sebuah algoritma hashing, tapi enkripsi satu. Karena output akan selalu ada beberapa yang mendasari ukuran blok adanya blok yang tidak merata dibagi dengan 16 byte berarti bahwa itu tidak bisa menjadi AES dan oleh karena itu harus DES atau 3DES.

Jika anda memiliki kemampuan untuk dimasukkan ke dalam password dan mengamati output ini dapat ditentukan dengan sangat cepat. Hanya dimasukkan ke dalam 17 karakter password dan melihat panjang. Jika 16 byte yang anda miliki MD5, 20 byte berarti SHA-1, 24 byte berarti DES atau 3DES, 32 bytes berarti AES.

Komentar (6)

Hal ini tergantung pada format - beberapa protokol untuk menyimpan teks terenkripsi yang memiliki cleartext bagian yang mendefinisikan bagaimana itu's dienkripsi. Dari contoh anda, saya'm diragukan sejak string referensi anda sangat pendek yang terlihat seperti itu's hanya teks terenkripsi.

I'd menyarankan beberapa pemikiran:

  • "==" pada akhir pasti akan padding, jadi don't seperti yang di dekripsi upaya.

  • Anda mungkin berurusan dengan hash atau asin hash, daripada enkripsi. Dalam hal ini, mencoba untuk "decrypt" data-data yang tidak't bekerja - anda perlu untuk mencocokkan password dengan menggunakan hash yang sama dan/atau nilai salt yang digunakan awalnya. Tidak ada cara dengan asin password untuk mendapatkan nilai asli.

  • Mutlak anda bertaruh terbaik adalah untuk mendapatkan salinan dari kode yang digunakan untuk menyimpan password. Di suatu tempat di sana, password yang menjalani operasi kriptografi. Menemukan kode untuk mempelajari apa's terjadi di sini. 9 kali dari 10, mereka menggunakan semacam API untuk hashing/pengasinan/enkripsi dan anda dapat meniru atau sebaliknya dengan menggunakan API yang sama.

Komentar (2)

Pengkodean pada umumnya dapat ditebak. Sebagai contoh, string anda diposting di pertanyaan anda adalah Base64 encoded. Yang tanda sama dengan padding dalam Base64 skema. Yang's sesuatu yang saya tahu pada-pandangan dari pengalaman.

Jika anda memberi saya sebuah string yang dienkripsi, saya dapat memberitahu anda pengkodean tapi aku bisa't memberitahu anda algoritma yang digunakan untuk mengenkripsi itu kecuali beberapa jenis metadata yang tersedia. Alasannya adalah ini: algoritma enkripsi bekerja dengan memproduksi apa yang tampaknya menjadi data acak. Jika saya dienkripsi dua kalimat yang masing-masing dengan dua cipher (empat output), anda tidak akan mampu untuk memberitahu saya dengan kepercayaan diri yang ciphertext milik yang cipher kecuali anda didekripsi atau memecahkan cipher.

Dalam hal tertentu misalnya, password biasanya hash. Itu berarti anda dapat't memulihkan password dari hash, tetapi anda dapat menguji untuk melihat jika hash yang cocok untuk password. Dalam hal itu, @john's jawaban adalah emas. Jika anda dapat memasukkan password yang anda tahu, dan kemudian mencoba skema umum terhadap hal itu, anda dapat mempelajari apa hash yang digunakan adalah.

Komentar (0)

Jika ini memang sederhana password hash, kita mungkin bisa gunakan Google untuk memecahkannya. Base64 adalah sulit untuk menemukan, meskipun, dengan semua orang-orang garis miring dan tanda plus, jadi let's pertama mengkonversi hash yang ke heksadesimal:

$ perl -MMIME::Base64 -le 'print unpack "H*", decode_base64 "WeJcFMQ/8+8QJ/w0hHh+0g=="'
59e25c14c43ff3ef1027fc3484787ed2

OK, sekarang kita dapat Google untuk itu. Pada saat ini, saya'm mendapatkan hanya satu hit, dari md5this.com — meskipun jelas tidak akan cukup segera menjadi lebih banyak, termasuk posting ini.

Sayangnya (atau mungkin untungnya, tergantung pada perspektif anda), we're tidak cukup beruntung untuk benar-benar menemukan operasi (situs saat ini daftar hash ini sebagai "retak..."), tapi fakta bahwa itu's pada daftar itu sama sekali tidak sangat menyarankan bahwa itu's benar-benar tawar MD5 hash dari real password.

Komentar (1)

Satu-satunya cara adalah untuk menebak. Dengan pengalaman, menebak karya akan lebih benar.

Misalnya: Berdasarkan panjang output: output MD5 adalah 128 bit atau 16 byte, SHA1 output adalah 160 bit, atau 20 byte. Berdasarkan charset output: BASE64 menghasilkan output dengan karakter yang dapat dicetak.

Pada akhir hari, itu's try-and-error pendekatan yang mengajarkan anda bagaimana.

Komentar (0)

Satu-satunya cara adalah ketika ada's beberapa metadata yang memberitahu anda. Misalnya, saya've telah bekerja dengan Pdf akhir-akhir ini, dan format termasuk kamus yang berisi filter, algoritma, ukuran kunci dll. Tetapi jika semua yang anda've got adalah ciphertext, maka semua yang anda've mendapat beberapa buram blob data.

Komentar (0)