openssl-verschluesselung_mit_passwort

OpenSSL-Verschlüsselung mit Passwort

Allgemeines

Leider kann OpenSSL kein Serpent (der meiner Kenntnis nach, z.Z. sicherste Cipher) und kein Twofish (ist auch sehr sicher), deshalb müssen wir BlowFish (ist eigentlich veraltet und wurde durch Twofish abgelöst) verwenden.

Das sind alles Synonyme für BlowFish:

  • blowfish
  • bf
  • bf-cbc
  • BF-CBC

Leider musste ich Anfang des Jahres 2024 (mit FreeBSD 14.0) feststellen, dass OpenSSL 3 die hier genannten Beispiele mit BlowFish (bf/bf-cbc) nicht mehr ausführt (das ging nur mit OpenSSL 1.1.1). Um diese Kommandos weiterhin ausführen zu können, muß man stattdessen den schwächeren Cipher AES (aes-256-cbc) oder CHACHA20 (-chacha20) verwenden.

Alle Cipher, die von dem Kommando openssl list -cipher-commands ausgegeben werden, können für die hier genannten Beispiel verwendet werden.

> openssl ciphers -v | grep -F TLSv1.3
TLS_AES_256_GCM_SHA384         TLSv1.3 Kx=any      Au=any   Enc=AESGCM(256)            Mac=AEAD
TLS_CHACHA20_POLY1305_SHA256   TLSv1.3 Kx=any      Au=any   Enc=CHACHA20/POLY1305(256) Mac=AEAD
TLS_AES_128_GCM_SHA256         TLSv1.3 Kx=any      Au=any   Enc=AESGCM(128)            Mac=AEAD

ein kurzes Beispiel für eine symetrische Datenverschlüsselung (mit dem Parameter -k kann man das Passwort an der CLI direkt mit übergeben, muß das aber nicht tun):

> echo 'Hallo' | openssl enc -salt -pbkdf2 -bf -a -e -k geheim
U2FsdGVkX18ouNc6jFzkBRSQ9T28w9pW

> echo 'U2FsdGVkX18ouNc6jFzkBRSQ9T28w9pW' | openssl enc -pbkdf2 -bf -a -d -k geheim
Hallo

Bei symetrischer Verschlüsselung (z.B. nur mit Passwort), sollte immer die Option -salt verwendet werden!

HASH

Mit OpenSSL eine Zeichenkette base64-kodieren:

> echo 'Hallo' | openssl enc -a -e
SGFsbG8K

> echo 'SGFsbG8K' | openssl enc -a -d
Hallo

Linux und FreeBSD 14.0

nutzbare Verschlüsselungsalgorithmen anzeigen lassen:

> openssl enc -list
> openssl list -cipher-commands
> openssl list -cipher-algorithms

AES

mit AES256 (OpenSSL 3.0.12) ver- und entschlüsseln:

> echo "Hallo Welt!" | openssl enc -salt -pbkdf2 -aes-256-cbc -a -e -k geheim
U2FsdGVkX1+IQzl442cG6a0/3e4wpCH2BqZ+8WoXYbQ=

> echo 'U2FsdGVkX1+IQzl442cG6a0/3e4wpCH2BqZ+8WoXYbQ=' | openssl enc -pbkdf2 -aes-256-cbc -a -d -k geheim
Hallo Welt!

CAMELLIA

Japans erste 128-Bit-Blockchiffre „Camellia“ wurde als neuer Standard-Verschlüsselungsalgorithmus im Internet zugelassen. Camellia ist international als Vertreter japanischer Verschlüsselungsverfahren und als einzigartige 128-Bit-Blockverschlüsselung anerkannt, der über die gleiche Sicherheitsstufe und Verarbeitungsfähigkeit wie AES verfügt. Tatsächlich wurde Camellia 2003 als von der EU empfohlene Verschlüsselung und von E-Government empfohlene Verschlüsselung ausgewählt und wurde kürzlich auch als internationale ISO/IEC-Standard-Verschlüsselung übernommen.

mit Camellia256 (OpenSSL 3.0.12) ver- und entschlüsseln:

> echo "Hallo Welt!" | openssl enc -salt -pbkdf2 -camellia-256-cbc -a -e -k geheim
U2FsdGVkX19bASuy32qe9FoA4yOSI/42fpdG93XSTU8=

> echo 'U2FsdGVkX19bASuy32qe9FoA4yOSI/42fpdG93XSTU8=' | openssl enc -pbkdf2 -camellia-256-cbc -a -d -k geheim
Hallo Welt!

Firefox und Opera deaktivieren CAMELLIA. Warum? Ist er zu schwach oder ist es ein anderer Grund? Laut dieser Quelle sollen AES und CAMELLIA in etwa gleich stark sein…

Die Verschlüsselungen, die standardmäßig mit den Webbrowsern ausgestattet sind, beschränken sich auf diejenigen, die von der IETF als SSL/TLS-Standard übernommen wurden. Das heißt, wenn Camellia nicht vom SSL/TLS-Standard übernommen würde, könnte Camellia selbst im E-Government-System nicht mit den Webdiensten verwendet werden, obwohl Camellia bereits als von E-Government empfohlene Verschlüsselung ausgewählt wurde. Kurz gesagt, allein aufgrund der technischen Überlegenheit des Algorithmus und der Übernahme als De-jure-Standard usw. war er als Umgebung, die für Produkte und Dienstleistungen umfassend genutzt werden kann, unzureichend. Im Hinblick auf die wichtigsten verschlüsselten Kommunikationsprotokolle wie SSL/TLS und S/MIME hat die IETF die Internet-Verschlüsselungen Triple DES, IDEA, RC2 und RC4 als Standard übernommen, die vor 1995 erstellt wurden und daher zum Zeitpunkt der Standardisierung der Protokolle verfügbar waren. Unter diesen werden derzeit noch Triple DES und RC4 als Standards verwendet. Mit den jüngsten Fortschritten in der Chiffrierforschung sind jedoch Bedenken hinsichtlich der Sicherheit dieser Standardchiffren entstanden. Um dieses Problem anzugehen, hat die IETF zusätzliche Untersuchungen zu den Verschlüsselungsschemata der nächsten Generation durchgeführt, insbesondere zu den 128-Bit-Blockchiffren, die international als Verschlüsselungsverfahren der nächsten Generation empfohlen werden und sicherer sind als die 64-Bit-Blockchiffren Triple DES und RC4, von denen die Schwachstellen bereits bekannt sind.

CHACHA20

mit CHACHA20 (OpenSSL 3.0.12) ver- und entschlüsseln:

> echo "Hallo Welt!" | openssl enc -salt -pbkdf2 -chacha20 -a -e -k geheim
U2FsdGVkX1/hibFsrIC4XDMF7MJNrsH6sO96fg==

> echo 'U2FsdGVkX1/hibFsrIC4XDMF7MJNrsH6sO96fg==' | openssl enc -pbkdf2 -chacha20 -a -d -k geheim
Hallo Welt!

Da die verschlüsselte Ausgabe mit dem Cipher CHACHA20 etwas kürzer ist als die Aus gaben mit den Ciphern AES und CAMELLIA, könnte man annehmen, das der Cipher CHACHA20 schwächer ist…?

XChaCha20 ist ein 256-Bit-Stream-Verschlüsselungstyp und AES ist ein Block-Verschlüsselungstyp (128, 192 oder 256 Bit). Wie AES verschlüsselt XChaCha20 symmetrisch, indem es einen einzigen Schlüssel zum Verschlüsseln und Entschlüsseln von Daten verwendet. (Obwohl es auch eine asymmetrische Version davon gibt.) Anstatt Daten in Blöcke aufzuteilen, verschlüsselt XChaCha20 jedes Datenbit separat. Dadurch ist der Prozess deutlich schneller und weniger komplex als bei AES. Einige argumentieren, dass XChaCha20 dadurch eine bessere Wahl als AES ist.

Im Gegensatz zu 256-Bit-AES kann XChaCha20 ohne spezielle Hardware reibungslos ausgeführt werden, wodurch die Verschlüsselung einfacher zu implementieren und weniger anfällig für technische und menschliche Fehler ist.

älteres FreeBSD

> openssl enc -ciphers
> openssl list -cipher-commands
> openssl list -cipher-algorithms

mit Blowfish (OpenSSL 1.1.1) ver- und entschlüsseln:

> echo "Hallo Welt!" | openssl enc -salt -pbkdf2 -bf-cbc -a -e -k geheim
U2FsdGVkX1+aDaO1UN6wTrpmTHwQnMRlGhUPlbYPDC8=

> echo 'U2FsdGVkX1+aDaO1UN6wTrpmTHwQnMRlGhUPlbYPDC8=' | openssl enc -pbkdf2 -bf-cbc -a -d -k geheim
Hallo Welt!

The -salt option should ALWAYS be used if the key is being derived from a password.

Das Passwort in einer Datei speichern, um automatisiert zu verschlüsseln:

> touch passwortdatei.txt
> chmod 0600 passwortdatei.txt
> echo "geheim" > passwortdatei.txt
> echo 'Hallo' | openssl enc -salt -pbkdf2 -iter 4567890 -bf-cbc -a -e -pass file:passwortdatei.txt
U2FsdGVkX1+8DaWoHh1YJFtX6qlnkBjL

das Geheimnis von der CLI verschlüsseln:

> echo "Hallo" | openssl enc -salt -pbkdf2 -iter 1234567 -bf-cbc -a -e
enter bf-cbc encryption password:
Verifying - enter bf-cbc encryption password:
U2FsdGVkX1/RdDv9u2fRJtSGwATuvHEu

> echo "U2FsdGVkX1/RdDv9u2fRJtSGwATuvHEu" | openssl enc -pbkdf2 -iter 1234567 -bf-cbc -a -d
enter bf-cbc decryption password:
Hallo

Das Passwort direkt an der CLI übergeben, um automatisiert zu verschlüsseln:

> export MYPW="geheim"
> echo 'Hallo' | openssl enc -salt -pbkdf2 -iter 4567890 -bf-cbc -a -e -pass env:MYPW
U2FsdGVkX1+G87gXFRuojo9Nt6Z0Wfne

> echo 'Hallo' | openssl enc -salt -pbkdf2 -iter 4567890 -bf-cbc -a -e -pass pass:geheim
U2FsdGVkX1+G87gXFRuojo9Nt6Z0Wfne

> echo 'Hallo' | openssl enc -salt -pbkdf2 -iter 4567890 -bf-cbc -a -e -k geheim
U2FsdGVkX1+G87gXFRuojo9Nt6Z0Wfne
/home/http/wiki/data/pages/openssl-verschluesselung_mit_passwort.txt · Zuletzt geändert: von manfred