Asymmetrische Verschlüsselung mit RSA in der Kryptographie

LinuxBeginner
Jetzt üben

Einführung

In diesem Lab werden Sie die Prinzipien der asymmetrischen Verschlüsselung erkunden, einem Eckpfeiler der modernen Kryptographie. Im Gegensatz zur symmetrischen Verschlüsselung, die denselben Schlüssel für Ver- und Entschlüsselung verwendet, nutzt die asymmetrische Verschlüsselung ein Schlüsselpaar: einen öffentlichen Schlüssel (public key) und einen privaten Schlüssel (private key).

Der öffentliche Schlüssel wird zur Verschlüsselung verwendet und kann mit jedem geteilt werden. Der private Schlüssel wird geheim gehalten und zur Entschlüsselung verwendet. Dieser Mechanismus ermöglicht eine sichere Kommunikation, ohne dass vorher ein gemeinsamer geheimer Schlüssel ausgetauscht werden muss.

Wir werden den weit verbreiteten RSA-Algorithmus und das leistungsstarke Kommandozeilen-Tool openssl verwenden, um diesen Prozess zu demonstrieren. Sie lernen, wie man ein Schlüsselpaar generiert, eine Nachricht mit dem öffentlichen Schlüssel verschlüsselt und sie mit dem privaten Schlüssel entschlüsselt. Alle Operationen werden im Terminal innerhalb Ihres Verzeichnisses ~/project durchgeführt.

Grundlagen der Asymmetrischen Verschlüsselung

In diesem Schritt lernen Sie die Kernkonzepte der asymmetrischen Verschlüsselung kennen, auch bekannt als Public-Key-Kryptographie. Dies ist ein konzeptioneller Schritt ohne auszuführende Befehle, aber das Verständnis dieser Prinzipien ist entscheidend für die folgenden praktischen Aufgaben.

Die asymmetrische Verschlüsselung basiert auf zwei unterschiedlichen, aber mathematisch miteinander verbundenen Schlüsseln:

  • Öffentlicher Schlüssel (Public Key): Dieser Schlüssel wird jedem zur Verfügung gestellt. Seine Hauptfunktion ist die Verschlüsselung von Daten. Jeder, der den öffentlichen Schlüssel besitzt, kann eine Nachricht verschlüsseln, aber er kann ihn nicht verwenden, um dieselbe Nachricht zu entschlüsseln. Stellen Sie es sich wie einen offenen Briefkastenschlitz vor: Jeder kann einen Brief einwerfen.

  • Privater Schlüssel (Private Key): Dieser Schlüssel muss vom Eigentümer geheim und sicher aufbewahrt werden. Seine Funktion ist die Entschlüsselung von Daten, die mit seinem entsprechenden öffentlichen Schlüssel verschlüsselt wurden. Nur die Person, die den privaten Schlüssel besitzt, kann die Nachricht entschlüsseln. In unserer Briefkasten-Analogie ist der private Schlüssel der einzigartige Schlüssel, mit dem der Briefkasten geöffnet und die Briefe entnommen werden können.

Diese Einweg-Beziehung ist die Grundlage für sichere Kommunikation über unsichere Netzwerke. In den folgenden Schritten werden Sie Ihr eigenes Public/Private-Schlüsselpaar generieren und es verwenden, um eine Nachricht zu ver- und entschlüsseln.

RSA-Schlüsselpaar generieren

In diesem Schritt generieren Sie ein RSA-Schlüsselpaar mithilfe des Kommandozeilen-Tools openssl. Dieser Befehl erstellt eine einzelne Datei, die sowohl die Komponenten des privaten als auch des öffentlichen Schlüssels enthält.

Führen Sie den folgenden Befehl in Ihrem Terminal aus. Alle Befehle in diesem Lab sollten vom Standardverzeichnis ~/project aus ausgeführt werden.

openssl genrsa -out private.pem 2048

Lassen Sie uns diesen Befehl aufschlüsseln:

  • openssl: Der Befehl zum Aufrufen des OpenSSL-Toolkits.
  • genrsa: Der spezifische Befehl zur Generierung eines RSA-Privatschlüssels.
  • -out private.pem: Dieses Flag gibt den Ausgabedateinamen für den Schlüssel an. Wir nennen ihn private.pem.
  • 2048: Dies ist die Schlüssellänge in Bits. 2048 Bit ist eine standardmäßige, sichere Länge für RSA-Schlüssel.

Überprüfen Sie nun mit dem Befehl ls, ob die Datei private.pem in Ihrem aktuellen Verzeichnis erstellt wurde.

ls

Sie sollten private.pem in der Ausgabe aufgelistet sehen.

private.pem

Öffentlichen Schlüssel extrahieren

In diesem Schritt extrahieren Sie den öffentlichen Schlüssel aus der Datei private.pem, die Sie erstellt haben. Obwohl die Datei des privaten Schlüssels alle notwendigen Komponenten enthält, benötigen Sie eine separate Datei für den öffentlichen Schlüssel, die Sie sicher mit anderen zur Verschlüsselung von Nachrichten teilen können.

Verwenden Sie den folgenden Befehl, um den öffentlichen Schlüssel zu extrahieren:

openssl rsa -in private.pem -pubout -out public.pem

Hier ist eine Aufschlüsselung des Befehls:

  • openssl rsa: Dieser Befehl wird zur Verarbeitung von RSA-Schlüsseln verwendet.
  • -in private.pem: Gibt die Eingabedatei an, nämlich unseren privaten Schlüssel.
  • -pubout: Dieses Flag weist openssl an, den öffentlichen Teil des Schlüssels zu extrahieren und auszugeben.
  • -out public.pem: Gibt den Namen der Ausgabedatei für den öffentlichen Schlüssel an.

Der Befehl erzeugt eine kurze Ausgabe, die den Vorgang bestätigt.

writing RSA key

Listen Sie nun erneut die Dateien in Ihrem Verzeichnis auf, um sowohl den privaten als auch den öffentlichen Schlüssel zu sehen.

ls

Sie sollten nun sowohl private.pem als auch public.pem sehen.

private.pem  public.pem

Sie können den Inhalt der Datei des öffentlichen Schlüssels anzeigen. Es handelt sich um eine Textdatei im PEM-Format.

cat public.pem
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...
...
-----END PUBLIC KEY-----

Nachricht mit öffentlichem Schlüssel verschlüsseln

In diesem Schritt erstellen Sie eine geheime Nachricht und verschlüsseln diese anschließend mit dem gerade extrahierten öffentlichen Schlüssel. Nur jemand mit dem entsprechenden privaten Schlüssel wird sie entschlüsseln können.

Erstellen wir zunächst eine einfache Textdatei, die unsere geheime Nachricht enthält.

echo "This is a secret message." > message.txt

Dieser Befehl erstellt eine Datei namens message.txt mit dem angegebenen Inhalt. Nun verschlüsseln wir diese Datei mit dem öffentlichen Schlüssel.

openssl pkeyutl -encrypt -pubin -inkey public.pem -in message.txt -out encrypted.bin

Untersuchen wir diesen Befehl:

  • openssl pkeyutl: Ein Dienstprogramm für Operationen mit öffentlichen Schlüsseln wie Verschlüsselung und Entschlüsselung.
  • -encrypt: Gibt an, dass wir eine Verschlüsselungsoperation durchführen möchten.
  • -pubin: Zeigt an, dass der Eingabeschlüssel (-inkey) ein öffentlicher Schlüssel ist.
  • -inkey public.pem: Gibt den für die Verschlüsselung zu verwendenden öffentlichen Schlüssel an.
  • -in message.txt: Die Eingabedatei, die die Klartextnachricht enthält.
  • -out encrypted.bin: Die Ausgabedatei, in der die verschlüsselten Daten (Chiffretext) gespeichert werden.

Nach Ausführung des Befehls wird eine neue Datei encrypted.bin erstellt. Wenn Sie versuchen, deren Inhalt anzuzeigen, sehen Sie unlesbare Binärdaten, was die verschlüsselte Form Ihrer Nachricht ist.

cat encrypted.bin

Die Ausgabe wird eine Zeichenfolge von unsinnigen Zeichen sein, was bestätigt, dass die Nachricht verschlüsselt ist.

Nachricht mit privatem Schlüssel entschlüsseln

In diesem letzten Schritt entschlüsseln Sie die verschlüsselte Nachricht mithilfe Ihres privaten Schlüssels, um den ursprünglichen Klartext wiederherzustellen. Dies demonstriert, dass nur der Inhaber des privaten Schlüssels auf die geheimen Informationen zugreifen kann.

Verwenden Sie den folgenden Befehl, um encrypted.bin zu entschlüsseln:

openssl pkeyutl -decrypt -inkey private.pem -in encrypted.bin -out decrypted.txt

Überprüfen wir die Befehlsoptionen:

  • openssl pkeyutl: Das gleiche Dienstprogramm wie zuvor.
  • -decrypt: Dieses Mal geben wir die Entschlüsselungsoperation an.
  • -inkey private.pem: Gibt den für die Entschlüsselung zu verwendenden privaten Schlüssel an.
  • -in encrypted.bin: Die Eingabedatei, die den verschlüsselten Chiffretext enthält.
  • -out decrypted.txt: Die Ausgabedatei, in der der wiederhergestellte Klartext gespeichert wird.

Dieser Befehl erstellt eine neue Datei namens decrypted.txt. Um zu überprüfen, ob die Entschlüsselung erfolgreich war, zeigen Sie den Inhalt dieser neuen Datei an.

cat decrypted.txt

Sie sollten Ihre ursprüngliche Nachricht perfekt wiederhergestellt sehen.

This is a secret message.

Herzlichen Glückwunsch! Sie haben erfolgreich einen vollständigen asymmetrischen Ver- und Entschlüsselungszyklus mit RSA und OpenSSL durchgeführt.

Zusammenfassung

In diesem Lab haben Sie praktische Erfahrungen mit asymmetrischer Verschlüsselung unter Verwendung des RSA-Algorithmus und des OpenSSL-Toolkits gesammelt.

Sie haben den grundlegenden Unterschied zwischen öffentlichen und privaten Schlüsseln und deren jeweilige Rolle bei der Sicherung der Kommunikation kennengelernt.

Insbesondere haben Sie die folgenden Schlüsselkompetenzen geübt:

  • Generieren eines 2048-Bit RSA-Schlüsselpaars mit openssl genrsa.
  • Extrahieren eines öffentlichen Schlüssels aus einer privaten Schlüsseldatei mit openssl rsa.
  • Verschlüsseln einer Klartextnachricht mit einem öffentlichen Schlüssel mit openssl pkeyutl.
  • Entschlüsseln des resultierenden Chiffretextes mit dem entsprechenden privaten Schlüssel mit openssl pkeyutl.

Diese Fähigkeiten sind grundlegend für das Verständnis und die Implementierung sicherer Systeme in verschiedenen Anwendungen, vom sicheren Surfen im Web (HTTPS) bis hin zu verschlüsselter E-Mail und digitalen Signaturen.