Kurznachricht Ende zu Ende verschüsselt mit ssh Schlüsseln

von Markus Berger am Freitag, 1. Januar 2021

Einleitung

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

Einschränkung

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.

Erweiterung

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.