Schon gewusst?

OpenSSL

Hintergrund

Die Basis für das Plugin bietet die Open-Source-Software OpenSSL. Das weit verbreitete Toolkit dient in erster Linie dazu, eine sichere Datenübertragung im Web durch die Implementierungen der Veschlüsselungsprotokolle SSL/TLS zu gewährleisten. Zusätzlich verfügt OpenSSL über ein Kommandozeilenprogramm, welches verschiedene kryptographische Werkzeuge bereitstellt, darunter [1]:

  • Ver- und Entschlüsselung
  • Berechnung von Hash-Werten
  • Erzeugung kryptographischer Schlüssel
  • Erstellung und Verwaltung von digitalen Zertifkaten
  • SSL/TLS Client- und Server-Tests

Über das Plugin

Das Plugin ermöglicht eine benutzerfreundliche Verwendung kryptographischer Verfahren mit Hilfe des OpenSSL-Kommandozeilenprogramms. Dafür implementiert das Plugin die Funktionen aus dem Kommandozeilenprogramm auf zwei unterschiedliche Arten: in einer GUI und als Kommandozeilenprogramm (CLI = Command-line Interface, oft auch Terminal genannt).

Über die GUI ist es möglich, einige der Standardkommandos aus dem OpenSSL-Toolkit auszuführen, indem die jeweiligen Optionen zu dem Kommando über GUI-Steuerelemente angewählt werden können. Der ausgeführte Befehl wird anschließend in ein valides OpenSSL-Kommando umgewandelt und erscheint auf der Kommandozeile mit dem Ergebnis der Ausführung. Damit soll ein didaktischer Effekt erzielt werden, um die Funktionalitäten der Kommandozeile und einzelne Optionen der Kommandos näher kennenzulernen.

Gleichzeitig bietet das Plugin auch die Möglichkeit, alle Befehle, die in OpenSSL unterstützt werden, direkt in der dargestellten CLI auszuführen. Es soll ein gleiches Nutzungserlebnis geboten werden, wie die native Verwendung des Kommandozeilenprogramms im Desktop-Bereich. Hier ist allerdings zu beachten, dass die im Plugin dargestellte Kommandozeile keine OS-Shellbefehle unterstützt (mit Ausnahme von echo) und sich nur auf das Programm OpenSSL konzentriert.

Über die Implementierung des Plugins

Dieses Plugin bringt das OpenSSL-Toolkit als WebAssembly-Bytecode in den Browser. Der neue Web-Standard WebAssembly dient als Kompilierungsziel für Sprachen wie C/C++ und erlaubt die Client-seitige Ausführung im Browser. Im Vergleich zu einer interpretierten Sprache wie JavaScript profitiert der WebAssembly-Bytecode unter anderem von einer nahezu nativen Ausführungsgeschwindigkeit.

Für die Implementierung des Plugins wird das aktuell stabile Release von OpenSSL in der Version 3.0 verwendet.

Nähere Informationen zur Implementierung und Funktionsweise des Plugins


Graphical User Interface - GUI

Tab Symmetrische Verschlüsselung

Dieser Tab implementiert das enc-Kommando aus OpenSSL. Das Kommando erlaubt die datei- und textbasierte symmetrische Ver- und Entschlüsselung mittels verschiedener Chiffren. Folgende Optionen sind in der GUI verfügbar [2]:

Option/Argument GUI-Option Funktion
-e Modus Verschlüsselt die Eingabe
-d Modus Entschlüsselt die Eingabe
-in <Dateiname> Eingabe Name der Eingabedatei
-out <Dateiname> Ausgabedatei Name der Ausgabedatei
-<cipher> (bspw. -rc4) Chiffre Auswahl der Chiffre
-k <Passwort> Passphrase Passwort für die Schlüsselableitung
-kfile <Dateiname> Herkunft der Passphrase Passwort als Datei für die Schlüsselableitung
-iv <Hex-Wert> Initialisierungsvektor Eingangsparameter für die Ver- und Entschlüsselung
-pbkdf2 Schlüsselableitungsfunktion Verwendung des PBKDF2-Algorithmus
-nosalt Schlüsselableitungsfunktion Keinen Salt verwenden
Tab Hashes

Dieser Tab implementiert das dgst-Kommando aus OpenSSL. Das Kommando erlaubt die datei- und textbasierte Berechnung eines Hash-Werts. Folgende Optionen sind in der GUI verfügbar [2]:

Option/Argument GUI-Option Funktion
[filename] Eingabe Name der Eingabedatei
-<algorithm> (bspw. -md5) Hash-Funktion Auswahl des Algorithmus
-out <Dateiname> Ausgabedatei Name der Ausgabedatei
Tab RSA-Schlüsselgenerierung

Dieser Tab implementiert das genrsa- und rsa-Kommando aus OpenSSL. Das Kommando erzeugt einen privaten und öffentlichen RSA-Schlüssel als Datei mit der angegebenen Schlüssellänge. Folgende Optionen sind in der GUI verfügbar [2]:

Kommando Option/Argument GUI-Option Funktion
genrsa [numbits] Schlüssellänge Bitlänge des privaten Schlüssels
-out <Dateiname> Ausgabedatei Name der Ausgabedatei
rsa -in <Dateiname> Privater Schlüssel Ausgabe des privaten Schlüssels
-pubin Öffentlicher Schlüssel Ausgabe des öffentlichen Schlüssels
-pubout Öffentlicher Schlüssel Erzeugen des öffentlichen Schlüssels
-text Informationen Ausgabe von Schlüsselinformationen (privat u. öffentlich)
-noout Informationen Keine Ausgabe des Schlüssels (privat u. öffentlich)
Tab Dateien

Dieser Tab besitzt eine Übersicht aller erzeugten Dateien. Zusätzlich bietet der Tab die Option, lokale Dateien direkt in das Plugin zu laden, um als Eingabe für entsprechende Kommandos verwendet zu werden.


Command Line Interface - CLI

Das Programm OpenSSL kann im Plugin auch auf traditionelle Art verwendet werden. Dazu bietet das Plugin eine CLI, um OpenSSL-Kommandos direkt per Eingabe auszuführen. Hier ist zu beachten, dass OpenSSL-Kommandos lediglich in folgendem Format unterstützt werden:

openssl command [ command_opts ] [ command_args ]

Eine Übersicht aller Kommandos bietet der nachfolgende Befehl:

openssl help

Für ein spezifisches Kommando kann die gesamte Liste an Optionen/Argumenten wie folgt ausgegeben werden:

openssl command -help

Um eine Zeichenkette direkt auf der Kommandozeile zu verarbeiten, implementiert das Plugin das Kommando echo analog zur Bash-Shell. Dafür muss das Kommando echo in Kombination mit dem Umleitungsoperator “|” und dem jeweiligen OpenSSL-Kommando aufgerufen werden:

echo <text> | openssl command [ command_opts ] [ command_args ]

Im Unterschied zur nativen Verwendung einer Kommandozeile gibt es außerdem vereinzelt Einschränkungen in diesem Plugin bezüglich der Ausführung. Alle Kommandos, welche eine Netzwerkfunktionalität erfordern, werden nicht unterstützt (z.B. s_client).


Referenzen

[1] OpenSSL (GitHub): https://github.com/openssl/openssl