Grundlegendes AES-Entschlüsselungsproblem

1270
Bennett Yeates

Ich arbeite durch das Buch Cryptography Engineering, und das aktuelle Problem sieht ungefähr so ​​aus:

Entschlüsseln Sie mithilfe einer vorhandenen Kryptografiebibliothek den folgenden Chiffretext (in Hex-Form):

539b333b39706d149028cfe1d9d4a407

mit dem folgenden 256-Bit-Schlüssel (auch in Hex):

8000000000000000000000000000000000000000000000000000000000000001

mit AES.

Ich bin hier ein bisschen verblüfft. Ich verwende OpenSSL, aber bei Verwendung des -aes256Parameters wird nach einer IV gefragt, die in diesem Problem eindeutig nicht angegeben ist. Das Einfügen aller Nullen für die IV führt zu einer schlechten Entschlüsselung. Der Versuch, andere AES-Verschlüsselungsmethoden zu verwenden, brachte mich nicht weiter. Ich bin vielleicht über meinen Kopf hier, aber ich versuche einfach zu erfahren, wie dieses Zeug zum Spaß funktioniert. Ich bin ein Programmierer für Videospiele, also ist das alles neu für mich. Jede Hilfe bei diesem Lehrbuch-Problem wäre sehr dankbar!

Hinweis: Ich habe die umfassende Stapelüberlauf- und Google-Suche durchgeführt, kam aber nach etwa einer Stunde nicht weiter.

1

1 Antwort auf die Frage

3
Ilmari Karonen

Da keine Betriebsart angegeben ist und die Chiffretextlänge der Größe eines AES-Chiffrierblocks entspricht (128 Bits = 32 Hexadezimalstellen = 16 Bytes), ist es wahrscheinlich, dass Sie die Rohblockchiffre verwenden (aka " EZB-Modus ").

Sie können dies tatsächlich mit openssl enc tun . Die Optionen müssen Sie sind -aes-256-ecb, was die AES-256 - Chiffre im ECB - Modus wählen, und -nopad, das wird ausgeschaltet Nachricht padding . *

Natürlich müssen Sie auch zuerst den verschlüsselten Text aus Hex in rohe Bytes konvertieren. (Sie können die -KOption verwenden, um den Schlüssel direkt in Hex anzugeben.) Der Ausgabe-Klartext kann nicht als ASCII-Zeichen gedruckt werden. Wenn Sie ihn jedoch wieder in Hex umwandeln, sollte dies ein klares Muster ergeben.

*) Tatsächlich endet Ihr Klartext mit einer gültigen PKCS # 7-Auffüllung, so dass sie von openssl auch ohne entschlüsselt wird -nopad. Ich gehe jedoch davon aus, dass dies nur ein Zufall ist.

Interessant! Ich habe die ecb-Methode ausprobiert (obwohl ich vergessen habe, sie zu erwähnen), aber die Ausgabe schien irreführend zu sein. Es scheint, dass ich diesen Schritt der Umwandlung in ein Hex verpasst habe. Was ist der bevorzugte Weg, dies zu tun? Bennett Yeates vor 8 Jahren 0
Jedes Werkzeug, das Sie verwendet haben, um das Hex in rohe Bytes umzuwandeln, sollte vermutlich auch das Gegenteil tun können. Oder Sie können die Ausgabedatei über ein Tool [hexdump] (https://en.wikipedia.org/wiki/Hex_dump) wie [xxd] (http://linux.die.net/man/1/xxd) ausführen. . Ilmari Karonen vor 8 Jahren 1
Es scheint, dass ich diesen Schritt auch verpasst habe. Danke für die Information! Bennett Yeates vor 8 Jahren 0
Frage mich, ob ich das immer noch falsch mache. Dies ist mein Befehl: openssl.exe enc -d -aes-256-ecb -K 80000000000000000000000000000000000000000000000000000000000001 -in ../Excersizes/AES-decrypt-256bitkey/output.bin -out ../Excersizes/AES-decrypt-256bitkey/pins .bin -nopad Ohne das Nopad bekomme ich "schlechte Entschlüsselung" Bennett Yeates vor 8 Jahren 0
Dieser Befehl sieht gut aus für mich. Wie viele Bytes ist Ihre Geheimtextdatei? Und wenn Sie einen Hex-Dump machen, sieht der Inhalt wie der Hex-String in der Übung aus? Ilmari Karonen vor 8 Jahren 1
Gute Frage, sieht aus wie meine Textdatei, die den Hex-String enthält, in einen Hex-Dump umgewandelt werden muss? Der xxd-Befehl, den ich für die Textdatei ausgeführt habe, hat die output.bin erstellt, die 0 Byte beträgt. Bennett Yeates vor 8 Jahren 0
Ok noch schlecht entschlüsselt, aber ich habe ein lesbares Hex im Klartext. Ich erhielt: 00000000: 372c e188 d0e4 c58d a352 1629 fee6 4f49 7, ....... r.) .. oi 00000010: 9cdb 878c 6d0e 30de 2402 4b6c 4711 384b .... m.0. $ KlG. 8K Hast du etwas Ähnliches gesehen? Bennett Yeates vor 8 Jahren 0
Es sieht so aus, als ob Ihre Geheimtextdatei immer noch falsch ist. Wenn Sie sich unter Linux befinden (oder [xxd für Windows haben] (http://superuser.com/questions/497953/convert-hex-dump-of-file-to-binaryprogram-file-on-windows)), versuchen Sie es die Befehle "echo 539b333b39706d149028cfe1d9d4a407> cipher.hex" und "xxd -r -p <cipher.hex> cipher.bin". Die resultierende `cipher.bin`-Datei sollte genau 16 Byte lang sein. Ilmari Karonen vor 8 Jahren 0
Das hat es behoben. Seltsam, ich vermute mal, dass xxd zum Erstellen des Hex-Dumps dieses Problem verursacht hat? Den Klartext als 80706050403020100807060504030201 sehen Bennett Yeates vor 8 Jahren 0
Ich bin mir nicht sicher, wie Sie "xxd zum Erstellen des Hex-Dumps" verwendet haben, da Sie zunächst einen Hex-String hatten. Haben Sie den verschlüsselten Text vielleicht versehentlich doppelt verschlüsselt? Wie auch immer, froh zu sehen, dass Sie es jetzt geschafft haben, es zu lösen. Ilmari Karonen vor 8 Jahren 0
Ja, genau das habe ich getan. Ursprünglich habe ich versucht, es binär zu konvertieren, aber da die Binärdateien 0 Byte waren, habe ich versucht, den Hex-Dump mit xxd unter Verwendung des Chiffretextes zu erstellen. Bennett Yeates vor 8 Jahren 0