Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
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 2005 als neuer Standard-Verschlüsselungsalgorithmus im Internet zugelassen. Camellia wurde als Verschlüsselungsschema mit dem weltweit höchsten Maß an Sicherheit und Leistung als internationale Standardisierungsspezifikation ü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…
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…?
ä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
