Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
OpenSSL-Verschlüsselung von Zeichenketten
Leider musste ich Anfang des Jahres 2024 (mit FreeBSD 14.0) feststellen, dass OpenSSL die hier genannten Beispiele mit BlowFish (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 AES (aes-256-cbc) verwenden.
Alle Cipher, die von dem Kommando openssl list -cipher-commands ausgegeben werden, können für die hier genannten Beispiel verwendet werden.
Bei symetrischer Verschlüsselung (z.B. nur mit Passwort), sollte immer die Option -salt verwendet werden!
Symetrische Verschlüsselung
> echo "Hallo Welt!" | openssl enc -aes-256-cbc -pbkdf2 -nosalt -a -kfile passwort.txt -e QvccGfCKCYHw7WHsnGbZow== > echo "QvccGfCKCYHw7WHsnGbZow==" | openssl enc -aes-256-cbc -pbkdf2 -nosalt -a -kfile passwort.txt -d Hallo Welt!
eine Zeichenkette verschlüsseln:
> echo "Hallo Welt!" | openssl enc -aes-256-cbc -nosalt -a -e -K '2222233333232323' -iv '5a04ec902686fb05a6b7a338b6e07760' hex string is too short, padding with zero bytes to length QZ8W91RPs0K10JhdpvwJMA==
eine Zeichenkette entschlüsseln:
> echo "QZ8W91RPs0K10JhdpvwJMA==" | openssl enc -aes-256-cbc -nosalt -a -d -K '2222233333232323' -iv '5a04ec902686fb05a6b7a338b6e07760' hex string is too short, padding with zero bytes to length Hallo Welt!
mit Blowfish (OpenSSL 1.1.1) ver- und entschlüsseln:
> echo "Hallo Welt!" | openssl enc -salt -pbkdf2 -bf -a -e -k geheim U2FsdGVkX1/oS1c7fyZtWAULrvS4Q1UmgMqwjynPiwk= > echo 'U2FsdGVkX1/oS1c7fyZtWAULrvS4Q1UmgMqwjynPiwk=' | openssl enc -salt -pbkdf2 -bf -a -d -k geheim Hallo Welt!
Asymetrische Verschlüsselung
mit S/MIME (E-Mail-Format)
zur Vorbereitung müssen wir einen privaten Schlüssel mit dazugehörigem Zertifikat erzeugen:
> openssl req -rand /dev/urandom -new -x509 -newkey rsa:4096 -sha3-512 -nodes -keyout openssl_private_key.pem -keyform PEM -out openssl_public_zertifikat.pem -outform PEM -days 7000 -subj /emailAddress=email@adresse.de/C=DE/ST=Hessen/L=Frankfurt/O=Firma/OU=Abteilung/CN=Hostname > ls -1 *.pem openssl_private_key.pem openssl_public_zertifikat.pem
einen dazugehörigen öffentlichen SSL-Schlüssel erzeugen (den brauchen wir hierfür aber nicht):
> openssl pkey -in openssl_private_key.pem -out openssl_public_key.pem -outform PEM -pubout
Das Zertifikat schicke ich meinem Kommunikationspartner, damit er mir verschlüsselte Nachrichten schicken kann. Der private Schlüssel darf niemals den Rechner verlassen, auf dem er erzeugt wurde, weil jede Art der Datenübertragung, Angriffsflächen für eine kompromittierung bietet.
eine Zeichenkette mit einem Zertifikat verschlüsseln:
> echo "Hallo Welt!" | openssl smime -encrypt -aes256 openssl_public_zertifikat.pem > verschluesselte_nachricht.txt
die verschlüsselte Zeichenkette mit dem privaten Schlüssel entschlüsseln:
> cat verschluesselte_nachricht.txt | openssl smime -decrypt -inkey openssl_private_key.pem openssl_public_zertifikat.pem Hallo Welt! oder so > cat verschluesselte_nachricht.txt | openssl smime -decrypt -inkey openssl_private_key.pem Hallo Welt!
mit ED25519-Schlüssel/Zertifikat
einen privaten SSL-Schlüssel mit Zertifikat erzeugen:
> openssl req -rand /dev/urandom -new -x509 -newkey ED25519 -sha3-512 -nodes -keyout openssl_private_key.pem -keyform PEM -out openssl_public_zertifikat.pem -outform PEM -days 7000 -subj "/emailAddress=email@adresse.de/C=DE/ST=Hessen/L=Frankfurt/O=Firma/OU=Abteilung/CN=Hostname" > ls -1 *.pem openssl_private_key.pem openssl_public_zertifikat.pem
The smime utility uses PKCS#7 which doesn't support anything other than RSA for the enveloped data type.
Also kann man derzeit mit OpenSSL (noch) keine Zeichenketten und keine Dateien verschlüsseln.
