Fungsi hash OpenSSL untuk menghasilkan kunci AES


8

Apa fungsi hash yang digunakan OpenSSL untuk menghasilkan kunci untuk AES-256? Saya tidak dapat menemukannya di mana pun di dokumentasi mereka.

$ touch file
$ openssl aes-256-cbc -nosalt -P -in file

enter aes-256-cbc encryption password: (I type "a" and hit enter)
Verifying - enter aes-256-cbc encryption password: (I type "a" and hit enter)

key=0CC175B9C0F1B6A831C399E269772661CEC520EA51EA0A47E87295FA3245A605
iv =4FA92C5873672E20FB163A0BCB2BB4A4

Algoritma hash mana yang menghasilkan hash yang tidak diasah setelah key=pada baris terakhir kedua, untuk input "a"?

Jawaban:


9

Cukup yakin itu adalah algoritma SHA1 digest tetapi dalam semua kejujuran saya tidak bisa mengatakan dengan kepastian 100%.

Dan siapa yang akan mengira bahwa sesuatu yang dirancang untuk meningkatkan kemolosan akan memiliki instruksi tumpul;)

EDIT: Ini mungkin tidak membantu dalam keadaan Anda, tetapi saya kira Anda selalu bisa tahu dengan melakukan

openssl enc -d -a -md sha1 -aes-256-cbc -nosalt -p 

Saya telah menentukan bahwa ia menggunakan MD5 secara default, seperti ketika saya menggunakan perintah Anda (sidenote: tidak ada opsi yang didokumentasikan di halaman mage ...) dengan md5alih - alih sha1, saya mendapatkan hasil yang sama dengan yang saya posting sebelumnya. Pertanyaannya adalah, bagaimana cara mendapatkan 256 bit dari MD5 (algoritma hashing 128-bit)?
mk12

Salah satu cara ini dilakukan adalah dengan menggabungkan dua MD5 yang berbeda dalam bentuk biner yang menghasilkan kunci 256 bit yang benar. Ada beberapa metode lain untuk ini juga. Anda mungkin memeriksa paket php "md5_base64". Bahkan jika Anda bukan seorang pria php, dokumennya cukup informatif.
Snesticle

4

Ini adalah gabungan dari dua hash MD5.

Itu diturunkan seperti ini:

128bit_Key = MD5(Passphrase + Salt)
256bit_Key = 128bit_Key + MD5(128bit_Key + Passphrase + Salt)

Anda dapat memeriksanya dengan melakukan:

$ echo Testing > file
$ openssl enc -aes-256-cbc -p -in file -out file.aes -salt
: enter aes-256-cbc encryption password: abc
: Verifying - enter aes-256-cbc encryption password: abc
: salt=3025373CA0530C93
: key=E165475C6D8B9DD0B696EE2A37D7176DFDF4D7B510406648E70BAE8E80493E5E
: iv =B030394C16C76C7A94DC22FDDB6B0744
$ perl -e 'print pack "H*", "3025373CA0530C93"' > salt
$ echo -n abc > passphrase
$ cat passphrase > key.128.tmp
$ cat salt >> key.128.tmp
$ md5sum key.128.tmp 
: e165475c6d8b9dd0b696ee2a37d7176d  key.128.tmp
$ perl -e 'print pack "H*", "e165475c6d8b9dd0b696ee2a37d7176d"' > key.128
$ cat key.128 > key.256.tmp
$ cat passphrase >> key.256.tmp
$ cat salt >> key.256.tmp
$ md5sum key.256.tmp 
: fdf4d7b510406648e70bae8e80493e5e  key.256.tmp

Perhatikan bagaimana MD5 untuk 'key.128.tmp' dan 'key.256.tmp' digabungkan bersama-sama membentuk kunci yang sama dengan output pada perintah awal.


Dan jika Anda melakukan iterasi ketiga Anda akan mendapatkan IV. Kasing ini nyaman karena kunci dan data = ukuran IV (256 dan 128 bit) keduanya merupakan kelipatan tepat dari hasil hash; secara umum Anda menggabungkan output hash dan mengambil bit K pertama untuk kunci dan bit D berikutnya untuk IV.
dave_thompson_085

pembaruan: defaultnya adalah md5, tetapi pada 1.1.0 pada 2016 itu sha256. Rincian lengkap di crypto.stackexchange.com/questions/3298/...
dave_thompson_085

2

OpenSSL menggunakan AES dengan SHA1.

Jika Anda ingin memeriksa sumber yang ditulis lebih baik daripada OpenSSL, lihat artikel
C ++ kelas yang berinteraksi dengan cipher OpenSSL .

Artikel ini mencakup kode sumber yang sangat sederhana yang:

memungkinkan Anda untuk mengenkripsi dan mendekripsi file atau string menggunakan cipher OpenSSL AES-256-CBC dan algoritma digest SHA1. Ini interoperable dengan alat baris perintah openssl yang membuatnya menjadi pengantar yang baik untuk menggunakan OpenSSL untuk cipher.


1

Saya tidak tahu jawabannya, tetapi Anda mungkin dapat menemukannya dengan cukup mudah dalam kode sumber OpenSSL .


2
"Cukup mudah" —Fungsi main(di mana fungsi bertanya kata sandi tinggal) ~ 500 baris panjang dan penuh dengan gotos.
mk12

5
Wow. Saya hanya melihat kode sumbernya. Ini hampir tidak dapat dibaca. Tidak ada komentar. Nama variabel satu huruf. Ugh. Maaf saya menyarankan itu.
Fran
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.