OpenSSL-Hashfunktion zum Generieren eines AES-Schlüssels

21092
mk12

Welche Hash-Funktion verwendet OpenSSL, um einen Schlüssel für AES-256 zu generieren? Ich kann es nirgendwo in ihrer Dokumentation finden.

$ 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 

Welcher Hash-Algorithmus generiert den ungesalzenen Hash nach key=der vorletzten Zeile für die Eingabe "a"?

8

4 Antworten auf die Frage

7
Snesticle

Ziemlich sicher ist es ein SHA1-Digest-Algorithmus, aber ehrlich gesagt kann ich es nicht mit hundertprozentiger Sicherheit sagen.

Und wer hätte gedacht, dass etwas, das die Unauffälligkeit erhöhen soll, stumpfe Anweisungen hätte;)

BEARBEITEN: Dies ist unter Umständen nicht hilfreich, aber ich denke, Sie könnten es immer wissen

openssl enc -d -a -md sha1 -aes-256-cbc -nosalt -p 
Ich habe festgestellt, dass standardmäßig MD5 verwendet wird. Wenn ich Ihren Befehl verwende (Nebenanmerkung: Keine dieser Optionen ist auf der Magierseite dokumentiert ...) mit "md5" anstelle von "sha1", erhalte ich dieselben Ergebnisse wie ich ursprünglich gepostet. Die Frage ist, wie bekommt man 256 Bit von MD5 (ein 128-Bit-Hash-Algorithmus)? mk12 vor 12 Jahren 0
Eine Möglichkeit besteht darin, zwei unterschiedliche MD5s in binärer Form zu verketten, was zu einem echten 256-Bit-Schlüssel führt. Es gibt auch einige andere Methoden dafür. Sie könnten das PHP-Paket "md5_base64" auschecken. Auch wenn Sie kein Php-Typ sind, sind die Dokumente ziemlich informativ. Snesticle vor 12 Jahren 0
4
user3281907

Es ist eine Verkettung von zwei MD5-Hashes.

Es ist wie folgt abgeleitet:

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

Sie können dies überprüfen, indem Sie Folgendes tun:

$ 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 

Beachten Sie, dass die MD5s von 'key.128.tmp' und 'key.256.tmp' zusammengefügt den gleichen Schlüssel bilden wie die Ausgabe beim ersten Befehl.

Und wenn Sie eine dritte Iteration durchführen, erhalten Sie die IV. Dieser Fall ist praktisch, da die Schlüssel- und Datengröße = IV (256 und 128 Bit) beide genau ein Vielfaches der Hash-Ausgabe sind. Im Allgemeinen verketten Sie die Hash-Ausgaben und nehmen die ersten K-Bits für den Schlüssel und die nächsten D-Bits für die IV. dave_thompson_085 vor 9 Jahren 0
Update: Der Standardwert war bisher md5. Seit 1.1.0 in 2016 ist es sha256. Vollständige Details unter https://crypto.stackexchange.com/questions/3298/is-there-a-standard-for-openssl-interoperable-aes-encryption dave_thompson_085 vor 6 Jahren 0
2
harrymc

OpenSSL verwendet AES mit SHA1.

Wenn Sie eine besser geschriebene Quelle als OpenSSL untersuchen möchten, lesen Sie den Artikel
C ++ - Klasse, die eine Schnittstelle zu OpenSSL-Chiffren herstellt .

Der Artikel enthält sehr einfachen Quellcode, der:

ermöglicht das Ver- und Entschlüsseln von Dateien oder Strings mit den OpenSSL-Algorithmen AES-256-CBC Cipher und SHA1 Digest. Es ist mit dem Befehlszeilentools openssl interoperabel und daher eine gute Einführung in die Verwendung von OpenSSL für Chiffren.

1
Fran

Ich kenne die Antwort nicht, aber Sie könnten sie im OpenSSL-Quellcode leicht genug finden .

"Leicht genug" - Die "Haupt" -Funktion (in der die Kennwort-Abfragefunktion lebt) ist ~ 500 Zeilen lang und mit "goto`s" übersät. mk12 vor 12 Jahren 2
Beeindruckend. Ich habe mir nur den Quellcode angesehen. Es ist praktisch unlesbar. Keine Kommentare. Ein-Buchstaben-Variablennamen Pfui. Es tut mir leid, dass ich das vorgeschlagen habe. Fran vor 12 Jahren 5