Angenommen, ich möchte einen Text mit einem TripleDES
Algorithmus in CBC
Chiffre verschlüsseln, ich habe zwei Möglichkeiten.
1- Ein Online-Tool wie dieses
2- OpenSSL-Tool.
Im Online-Tool gebe ich den Text, das KEY
und das ein IV
.
In der OpenSSL gebe ich den folgenden Befehl ein:
OpenSSL> des-ede3-cbc -in MyText.txt -K <KEY> -iv <IV>
aber was passiert, wenn ich den folgenden Befehl verwende:
OpenSSL> des-ede3-cbc -in Mytext.txt
Erste Frage: Ich möchte wissen, KEY
ob das aus dem Passwort besteht, das ich in den beiden nächsten Zeilen eingegeben habe. Auf welchem Algorithmus basiert er?
und Wenn jemand nur ein Passwort hat, kann er meinen verschlüsselten Text entschlüsseln?
Zweite Frage: Was ist Salt
Parameter !? Was ist der Unterschied zwischen einem Verschlüsselungsbefehl mit -nosalt und einem Verschlüsselungsbefehl ohne -nosalt?
Dritte Frage: Wenn ich verwende -base64
, ist die Ausgabe in Base64-Form. Wenn ich diesen Parameter nicht verwende, in welchem Format wird ausgegeben?
Update: Vierte Frage: Was brauchen wir, um einen verschlüsselten Text zu entschlüsseln? nur passwort? beide von IV und KEY? oder alle?
Fünfte Frage:
Ich gebe "1" als Passwort in der Befehlszeile von openssl ein. und dann erstellen Sie dieses Online-Tool und MD5-Hash von "1". Wie Sie in der folgenden Abbildung sehen, entsprechen die ersten beiden Byes von 3DES KEY dem MD5-Hashing des von mir eingegebenen Passworts. Ich möchte wissen, was das letzte Byte im Schlüssel ist. wie entsteht es?
Und wenn jemand nur ein Passwort hat, wie kann er meinen verschlüsselten Text entschlüsseln?
quelle
Antworten:
OpenSSLs maßgeschneiderter Algorithmus zur Schlüsselableitung ist in der Funktion EVP_BytesToKey (3) enthalten .
Schlüssel:
IV:
Das IV ist also eine zusätzliche Eingabe, die zum Verschlüsseln der Datei verwendet wird. Es ist nicht der Schlüssel (ich denke, es ist nur Terminologie).
2 Ein Salt ist ein Zusatz (Präfix) zu dem von Ihnen angegebenen Schlüssel. (Siehe Wikipedia . Es ist unmöglich, Regenbogentabellen oder vorberechnete Hash-Tabellen für Ihren Schlüssel zu verwenden. Das Salz wird normalerweise unverschlüsselt gespeichert.
3 Die Ausgabe ist binär und enthält höchstwahrscheinlich nicht druckbare Zeichen. Ihr Terminal-Emulator wird versuchen, diese Bytewerte als druckbare Zeichen in der Standard-Zeichencodierung und -Schrift darzustellen, aber sie sehen wahrscheinlich wie "Garbage Text" aus und sind nicht sicher für Kopieren / Einfügen, FTP oder E-Mail.
4 Um einen verschlüsselten Text zu entschlüsseln, benötigen Sie den Schlüssel und IV. Wenn Sie keinen oder beide haben und die fehlenden aus dem Passwort abgeleitet wurden, können Sie den fehlenden Schlüssel und / oder IV aus dem Passwort ableiten, wenn Sie das Passwort haben. Sie brauchen das Salz nicht, weil Sie es bereits haben; Es wird an den Anfang des verschlüsselten Textes angehängt. Das Salt ist kein Geheimnis, es ist nur eine Möglichkeit, vorberechnete Hash-Tabellen und Regenbogentabellen zu vereiteln.
5 Wie in EVP_BytesToKey (3) definiert, lauten
--nosalt
die ersten 16 Bytes Ihres Schlüssels , wenn Sie ein Kennwort von "1" und "1" verwenden :(Beachten Sie, dass in diesem Zusammenhang
||
Verkettung bedeutet, nicht logischor
)das ist äquivalent zu
das ist äquivalent zu
Was sich herausstellt
Dieser Wert wird von der Manpage aufgerufen
D_1
.Die verbleibenden benötigten Bytes von Key und IV werden folgendermaßen generiert:
das ist äquivalent zu
das ist äquivalent zu
(Beachten Sie, dass die ASCII "1" am Ende des
D_1
Werts 0x31 verkettet wird.)was sich herausstellt:
Das ist, was diese Manpage D_2 nennt.
Der Schlüssel benötigt nur 8 Bytes mehr als
D_1
bereits bewiesen, also nimmt er die ersten 8 Bytes von D_2 und wird:Die IV benötigt nur 8 Bytes und da es 8 unbenutzte Bytes von D_2 gibt, werden sie zur IV:
Hier ist eine Befehlszeile zum Generieren von D_1, den ersten 16 Bytes des Schlüssels (am Beispiel des Passworts "1" und
--nosalt
):Hier ist eine Befehlszeile zum Generieren von D_2, den verbleibenden 8 Bytes des Schlüssels sowie allen 8 Bytes des IV (auch hier, wenn Sie die Beispieleingaben verwenden):
Dies funktioniert, indem die Ausgabe von D_1 (indem sichergestellt wird, dass sie binär bleibt, anstatt in ASCII-codierte Hexadezimalziffern übersetzt zu werden), "1" (0x31) angehängt und die Ausgabe daraus entnommen wird
md5
.quelle
-p
Parameter in meinem Befehl verwende, um anzuzeigenIV
undKEY
auszugeben, unterscheidet sich der Schlüsselwert von dem Passwort, das ich in der vorherigen Zeile eingegeben habe. [in diesem Befehl:OpenSSL> des-ede3-cbc -in Mytext.txt
]