Grundlagen der Symmetrischen Verschlüsselung in der Kryptographie

LinuxBeginner
Jetzt üben

Einführung

Die symmetrische Verschlüsselung ist ein fundamentales Konzept in der Kryptographie, bei dem ein einziger Schlüssel sowohl zur Verschlüsselung als auch zur Entschlüsselung von Informationen verwendet wird. Diese Methode ist schnell und effizient, was sie ideal für die Verschlüsselung großer Datenmengen macht.

In diesem Lab sammeln Sie praktische Erfahrungen mit symmetrischer Verschlüsselung unter Verwendung des leistungsstarken Befehlszeilenwerkzeugs openssl in einer Linux-Umgebung. Sie durchlaufen den gesamten Prozess: das Generieren eines geheimen Schlüssels, das Verschlüsseln einer Textdatei, deren Entschlüsselung und schließlich die Überprüfung, dass die entschlüsselte Datei mit dem Original identisch ist.

Konzept der Symmetrischen Verschlüsselung

In diesem Schritt werden wir kurz das Kernkonzept der symmetrischen Verschlüsselung überprüfen. Der „symmetrische“ Teil bedeutet, dass derselbe Schlüssel, der die Daten sperrt (verschlüsselt), auch zum Entsperren (Entschlüsseln) verwendet wird.

Stellen Sie sich vor, Sie haben eine physische verschließbare Box. Sie verwenden einen Schlüssel, um sie zu verschließen. Um sie wieder zu öffnen, müssen Sie exakt denselben Schlüssel verwenden. Bei der symmetrischen Verschlüsselung ist dieser Schlüssel ein Stück digitaler Information, und er muss sicher zwischen den Parteien ausgetauscht werden, die die Daten verschlüsseln und entschlüsseln müssen. Wenn dieser eine Schlüssel kompromittiert wird, geht die Sicherheit der verschlüsselten Daten verloren.

Für dieses Lab werden wir mit einer einfachen Textdatei arbeiten. Eine Datei mit dem Namen original.txt wurde bereits für Sie im Verzeichnis ~/project vorbereitet. Sie können ihren Inhalt einsehen und bestätigen, dass es sich um eine einfache, lesbare Textdatei handelt.

Listen wir die Dateien im aktuellen Verzeichnis auf, um sie zu sehen:

ls -l

Sie sollten die Datei original.txt in der Ausgabe sehen:

-rw-rw-r-- 1 labex labex 26 Oct 20 08:56 original.txt

Sehen wir uns nun ihren Inhalt an:

cat original.txt

Die Ausgabe wird die einfache Textnachricht in der Datei sein:

This is a secret message.

In den nächsten Schritten werden wir diese Datei verschlüsseln, um sie unlesbar zu machen, und sie dann wieder in ihre ursprüngliche Form entschlüsseln.

AES-Schlüssel generieren

In diesem Schritt generieren Sie einen sicheren, zufälligen Schlüssel für unseren Verschlüsselungsprozess. Die Stärke der symmetrischen Verschlüsselung hängt stark von der Geheimhaltung und Zufälligkeit des Schlüssels ab. Ein vorhersagbarer Schlüssel ist leicht zu erraten, was die Verschlüsselung nutzlos macht.

Wir verwenden den Befehl openssl rand, um kryptografisch starke Zufallsdaten zu generieren. Wir generieren einen 256-Bit-Schlüssel, was eine Standardlänge für den AES (Advanced Encryption Standard)-Algorithmus ist.

Führen Sie den folgenden Befehl aus, um einen 32-Byte (256-Bit) Schlüssel im Hexadezimalformat zu generieren und ihn in einer Datei namens aes.key zu speichern:

openssl rand -hex 32 > aes.key

Lassen Sie uns diesen Befehl aufschlüsseln:

  • openssl rand: Der Befehl zur Generierung von Zufallsdaten.
  • -hex: Formatiert die Ausgabe als hexadezimale Zeichenkette.
  • 32: Gibt die Anzahl der zu generierenden Bytes an Zufallsdaten an. Da jedes Hex-Zeichen 4 Bits (oder ein halbes Byte) darstellt, führt dies bei 32 Bytes Daten zu einer 64-stelligen Hex-Zeichenkette.
  • > aes.key: Leitet die Ausgabe des Befehls um und speichert sie in der Datei aes.key.

Sehen wir uns nun den generierten Schlüssel an. Denken Sie daran, dass Ihr Schlüssel von dem unten stehenden Beispiel abweichen wird, da er zufällig generiert wird.

cat aes.key

Sie sehen eine lange Zeichenkette von Hexadezimalzeichen, was Ihr 256-Bit-Geheimschlüssel ist:

2da75d4f284618ed6933d0e743757ed014ba39a1a8aa1879ebbbfe53b92d519a

Diese Datei, aes.key, enthält nun das Geheimnis, das wir verwenden werden, um unsere Daten sowohl zu verschlüsseln als auch zu entschlüsseln.

Datei mit AES verschlüsseln

In diesem Schritt verwenden Sie den generierten Schlüssel, um die Datei original.txt zu verschlüsseln. Wir verwenden den Befehl openssl enc, ein vielseitiges Werkzeug für Verschlüsselung und Entschlüsselung.

Wir werden den Cipher AES-256-CBC verwenden.

  • AES-256: Bezieht sich auf den Advanced Encryption Standard mit einem 256-Bit-Schlüssel.
  • CBC: Steht für Cipher Block Chaining (Blockkettenmodus), einen Betriebsmodus, der Zufälligkeit hinzufügt und sicherstellt, dass identische Klartextblöcke nicht zu identischen Chiffretextblöcken führen.

Führen Sie den folgenden Befehl aus, um die Datei zu verschlüsseln:

openssl enc -aes-256-cbc -pbkdf2 -salt -in original.txt -out encrypted.dat -pass file:./aes.key

Untersuchen wir die Befehlsoptionen:

  • openssl enc: Der Befehl für Verschlüsselungs-Ciphers.
  • -aes-256-cbc: Gibt den zu verwendenden Verschlüsselungsalgorithmus an.
  • -pbkdf2: Verwendet eine moderne, standardbasierte passwortbasierte Schlüsselerzeugungsfunktion (PBKDF2), um Deprecation Warnings (Warnungen vor veralteter Nutzung) zu vermeiden.
  • -salt: Fügt vor der Verschlüsselung ein zufälliges Salt zum Schlüssel hinzu. Dies ist eine entscheidende Sicherheitspraxis, die vor bestimmten Arten von Angriffen schützt.
  • -in original.txt: Gibt die zu verschlüsselnde Eingabedatei an.
  • -out encrypted.dat: Gibt den Namen der Ausgabedatei an, in der die verschlüsselten Daten gespeichert werden.
  • -pass file:./aes.key: Weist OpenSSL an, das Passwort (in unserem Fall den symmetrischen Schlüssel) aus der Datei aes.key zu lesen.

Nach Ausführung des Befehls wird eine neue Datei namens encrypted.dat erstellt. Versuchen wir, ihren Inhalt anzuzeigen:

cat encrypted.dat

Die Ausgabe wird ein Durcheinander unlesbarer Zeichen sein, was bestätigt, dass die Datei verschlüsselt ist.

Salted___Mi72j)NU_nJ_h9s(0]%

Sie haben nun Ihre geheime Nachricht erfolgreich verschlüsselt. Jeder, der diese Datei ohne den aes.key erhält, kann ihren Inhalt nicht lesen.

Datei mit AES entschlüsseln

In diesem Schritt entschlüsseln Sie die Datei encrypted.dat, um die ursprüngliche Nachricht wiederherzustellen. Da es sich um symmetrische Verschlüsselung handelt, verwenden wir denselben Schlüssel (aes.key) und denselben Basisbefehl (openssl enc), den wir für die Verschlüsselung verwendet haben.

Der wesentliche Unterschied ist das Hinzufügen des Flags -d, das OpenSSL anweist, die Entschlüsselung anstelle der Verschlüsselung durchzuführen.

Führen Sie den folgenden Befehl aus, um die Datei zu entschlüsseln:

openssl enc -d -aes-256-cbc -pbkdf2 -in encrypted.dat -out decrypted.txt -pass file:./aes.key

Dieser Befehl ähnelt stark dem Verschlüsselungsbefehl:

  • -d: Dieses Flag gibt an, dass wir die Eingabedatei entschlüsseln möchten.
  • -aes-256-cbc: Wir müssen denselben Cipher angeben, der für die Verschlüsselung verwendet wurde.
  • -pbkdf2: Sie müssen dieselbe Schlüsselerzeugungsfunktion (Key Derivation Function) verwenden, die auch für die Verschlüsselung verwendet wurde.
  • -in encrypted.dat: Die Eingabedatei ist nun unsere verschlüsselte Datei.
  • -out decrypted.txt: Die Ausgabedatei, in der der entschlüsselte, lesbare Text gespeichert wird.
  • -pass file:./aes.key: Wir stellen denselben Schlüssel bereit, der zum Verschlüsseln der Datei verwendet wurde.

Nach Abschluss des Befehls wird eine neue Datei namens decrypted.txt erstellt. Sehen wir uns ihren Inhalt an, um zu prüfen, ob die Entschlüsselung erfolgreich war.

cat decrypted.txt

Die Ausgabe sollte die ursprüngliche Nachricht sein, exakt wie in original.txt:

This is a secret message.

Herzlichen Glückwunsch! Sie haben einen vollständigen Verschlüsselungs- und Entschlüsselungszyklus erfolgreich abgeschlossen.

Dateintegrität überprüfen

In diesem letzten Schritt überprüfen wir, ob der Entschlüsselungsprozess einwandfrei war und ob die Datei decrypted.txt eine exakte Kopie der Datei original.txt ist. Obwohl wir dies bei einer kurzen Nachricht visuell bestätigen können, ist bei größeren Dateien oder automatisierten Skripten eine programmatische Überprüfung erforderlich.

Der diff-Befehl unter Linux ist das perfekte Werkzeug für diese Aufgabe. Er vergleicht zwei Dateien Zeile für Zeile und meldet alle Unterschiede. Wenn die Dateien identisch sind, erzeugt diff keine Ausgabe.

Führen Sie den diff-Befehl aus, um die Original- und die entschlüsselte Datei zu vergleichen:

diff original.txt decrypted.txt

Wenn der Befehl ausgeführt wird und Sie ohne Meldungen zur Eingabeaufforderung zurückkehren, bedeutet dies, dass die Dateien identisch sind. Diese Stille ist die Bestätigung des Erfolgs. Sie beweist, dass Ihre Daten während des gesamten Verschlüsselungs- und Entschlüsselungszyklus ihre Integrität bewahrt haben.

Um alle Dateien anzuzeigen, mit denen Sie in diesem Lab gearbeitet haben, können Sie noch einmal ls -l ausführen:

ls -l

Sie werden die Originaldatei, den Schlüssel, die verschlüsselten Daten und die endgültige entschlüsselte Datei sehen:

-rw-rw-r-- 1 labex labex 65 Oct 20 08:57 aes.key
-rw-rw-r-- 1 labex labex 26 Oct 20 08:57 decrypted.txt
-rw-rw-r-- 1 labex labex 48 Oct 20 08:57 encrypted.dat
-rw-rw-r-- 1 labex labex 26 Oct 20 08:56 original.txt

Dies bestätigt, dass Sie den gesamten Lebenszyklus der symmetrischen Verschlüsselung erfolgreich verwaltet haben.

Zusammenfassung

In diesem Lab haben Sie praktische Erfahrungen mit den Grundlagen der symmetrischen Verschlüsselung unter Verwendung von openssl in einer Linux-Umgebung gesammelt.

Sie haben erfolgreich einen vollständigen Verschlüsselungs- und Entschlüsselungs-Workflow durchgeführt:

  • Sie haben das Kernkonzept eines einzigen, gemeinsamen Schlüssels sowohl für die Verschlüsselung als auch für die Entschlüsselung kennengelernt.
  • Sie haben openssl rand verwendet, um einen starken 256-Bit AES-Schlüssel zu generieren.
  • Sie haben openssl enc verwendet, um eine Textdatei zu verschlüsseln und sie unlesbar zu machen.
  • Sie haben denselben Befehl mit dem Flag -d verwendet, um die Datei wieder in ihren ursprünglichen Zustand zu entschlüsseln.
  • Schließlich haben Sie den diff-Befehl verwendet, um programmatisch zu überprüfen, ob die entschlüsselten Daten identisch mit den Originaldaten waren, wodurch die Datenintegrität bestätigt wurde.

Diese praktische Übung bietet eine solide Grundlage für das Verständnis der Funktionsweise symmetrischer Chiffren und deren praktischer Anwendung zum Schutz von Daten.