Kennst du das auch, du möchtest mit jemanden sicher eine Nachricht austauschen und dafür nur vorhandene und erprobte Programme verwenden. Hier gibt es eine einfache Lösung die ssh-Schlüssel verwendet.
Alles was dazu nötig ist, ist im allgemeinen schon installiert, openssh
und
libressl
oder openssl
.
Ihr braucht nun nur noch von dem vorhandenen Öffentlichen-Schlüssel eures Kommunikationspartner einen Schlüssel im PEM-Format zu erzeugen und diesen für die Verschlüsselung zu verwenden.
Die Entschüsselung erfolgt mit dem Privaten-Schlüssel des Partners.
Hier ein Beispiel-Script was das Vorgehen verdeutlicht. Es erzeugt die pem-Datei und zeigt euch wie ver- und entschlüsselt wird.
#!/bin/sh
if [ $# -lt 1 ]; then
KEY=id_rsa
else
KEY=$1
fi
if [ -f ~/.ssh/"$KEY".pub ]; then
if [ ! -f ~/.ssh/"$KEY".pub.pem ]; then
ssh-keygen -f ~/.ssh/"$KEY".pub -e -m PKCS8 > ~/.ssh/"$KEY".pub.pem
fi
fi
if [ -f ~/.ssh/$KEY ] || [ -f ~/.ssh/$KEY.pub.pem ]; then
echo "echo msg | openssl rsautl -encrypt -pubin -inkey ~/.ssh/$KEY.pub.pem > /tmp/emsg"
echo "cat /tmp/emsg | openssl rsautl -decrypt -inkey ~/.ssh/$KEY"
else
echo $KEY not found
exit 1
fi
Eine Einschränkung bei dieser Methode ist, dass die Nachricht recht kurz und die maximale Nachrichtenlänge vom Schüsseltyp abhäbgig ist.
Eine Nachrichtengröße von 244 Bytes sollten mit aktuellen Schlüsseln aber immer gehen.
Die Methode kann z.B. auch dafür verwendet werden um z.B. einen symetrichen Schlüssel sicher auszutauschen, womit sich dann auch größere Blöcke ver- und entschlüssel lassen.
Es gibt age was auch ssh-Schlüssel verwenden kann.