OpenSSL 3DES-Verschlüsselungsparameter


2

Angenommen, ich möchte einen Text mit einem TripleDESAlgorithmus in CBCChiffre verschlüsseln, ich habe zwei Möglichkeiten.

1- Ein Online-Tool wie dieses

2- OpenSSL-Tool.

Im Online-Tool gebe ich den Text, das KEYund 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, KEYob 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 SaltParameter !? 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?

Bildbeschreibung hier eingeben


1
Abraham, hör auf, deine Frage zu bearbeiten, um Unterfragen zu entfernen. Du machst ein Chaos daraus. Ich habe Ihre Frage zurückgesetzt, um die Reihenfolge der Unterfragen zu vereinheitlichen, und ich habe Ihre Bearbeitung auf die Antwort von @ mtak zurückgesetzt, um sie ebenfalls zu vereinheitlichen.
Spiff

@Spiff warum? !! Einige Teile von Fragen und Antworten sind übertrieben und nutzlos! Zum Beispiel ist die fünfte Frage fast dieselbe erste Frage mit mehr Details. Die zweite Frage ist keine gute Frage! und so weiter ... warum hast du das getan ?! : /
Abraham

1
Abraham, weil diese Seite nicht gut funktioniert, wenn du das tust. Es ist wirklich für eine Frage pro Frage gedacht. @mtak hat Ihre vorherigen Unterfragen 1, 2 und 3 bereits beantwortet, und als Sie dann Unterfrage 1 entfernt haben, stimmte seine Unterantwort 1 nicht mit der neuen Unterfrage 1 (die zuvor Unterfrage 2 war) überein.
Spiff

Antworten:


1
  1. Der Schlüssel und die IV werden mithilfe eines OpenSSL-spezifischen Algorithmus, auf den das OpenSSL-Team nicht stolz ist, aus dem von Ihnen angegebenen Kennwort abgeleitet. Sie behalten es aus Gründen der Abwärtskompatibilität bei, empfehlen jedoch die Verwendung besserer kennwortbasierter Funktionen zur Schlüsselableitung, z. B. PBKDF2 von PKCS.

OpenSSLs maßgeschneiderter Algorithmus zur Schlüsselableitung ist in der Funktion EVP_BytesToKey (3) enthalten .

Schlüssel:

-K key der tatsächlich zu verwendende Schlüssel: Dies muss als Zeichenfolge dargestellt werden, die nur aus Hexadezimalziffern besteht.

IV:

In der Kryptographie ist ein Initialisierungsvektor (IV) oder eine Startvariable (SV) [1] eine Eingabe mit fester Größe in ein kryptografisches Grundelement, das typischerweise zufällig oder pseudozufällig sein muss.

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 :

md5( D_0 || password || salt)

(Beachten Sie, dass in diesem Zusammenhang ||Verkettung bedeutet, nicht logisch or)

das ist äquivalent zu

md5 ( `null` || "1" || `null`)

das ist äquivalent zu

md5("1")

Was sich herausstellt

0xc4ca4238a0b923820dcc509a6f75849b

Dieser Wert wird von der Manpage aufgerufen D_1.

Die verbleibenden benötigten Bytes von Key und IV werden folgendermaßen generiert:

md5( D_1 || password || salt)

das ist äquivalent zu

md5( 0xC4CA4238A0B923820DCC509A6F75849B || "1" || `null` )

das ist äquivalent zu

md5( 0xC4CA4238A0B923820DCC509A6F75849B31 )

(Beachten Sie, dass die ASCII "1" am Ende des D_1Werts 0x31 verkettet wird.)

was sich herausstellt:

0x7976c7161415c830816dd4068a1d9a52

Das ist, was diese Manpage D_2 nennt.

Der Schlüssel benötigt nur 8 Bytes mehr als D_1bereits bewiesen, also nimmt er die ersten 8 Bytes von D_2 und wird:

Key: C4CA4238A0B923820DCC509A6F75849B7976c7161415c830

Die IV benötigt nur 8 Bytes und da es 8 unbenutzte Bytes von D_2 gibt, werden sie zur IV:

IV: 816dd4068a1d9a52

Hier ist eine Befehlszeile zum Generieren von D_1, den ersten 16 Bytes des Schlüssels (am Beispiel des Passworts "1" und --nosalt):

echo -n "1" | openssl md5

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):

echo -n "$(echo -n "1" | openssl md5 -binary)1" | md5

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.


1
aber ich denke das Passwort ist nicht der Schlüssel! Denn wenn ich -pParameter in meinem Befehl verwende, um anzuzeigen IVund KEYauszugeben, 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]
Abraham

Wenn das Ausgabeformat binär ist, warum werden einige unlesbare Zeichen angezeigt? (Herz, ein paar Smileys und so weiter)?
Abraham

1
Dies liegt daran, dass Ihr Terminal diese Zeichen nicht interpretieren kann (es ist binär, kein Text) und versucht, sie mit Ihrem Standardzeichensatz anzuzeigen.
Mtak

@mtak Ihre Antworten (zumindest auf die ursprünglichen Unterfragen 2 und 3) waren großartig. Bitte vergib mir, dass ich in deine Antwort gesprungen bin, anstatt meine eigene zu schreiben. Ich wollte sicherstellen, dass Sie den Repräsentanten für Ihre Antwort haben, anstatt mit Ihnen zu konkurrieren und möglicherweise das Guthaben zu stehlen.
Spiff

1
Lieber @Spiff und lieber mtak, danke euch beiden. sehr :)
Abraham
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.