ADMIN

2022

08

2022-07-28T12:00:00

Verzeichnisdienste und Benutzermanagement

PRAXIS

048

Security-Tipp

Sicherheit

Verschlüsselung

Mit Age Dateien verschlüsseln

Keep it simple

von Dr. Matthias Wübbeling

Veröffentlicht in Ausgabe 08/2022 - PRAXIS

Die Verschlüsselung von Dateien garantiert das IT-Sicherheit-Schutzziel der Vertraulichkeit. Je nachdem, welches Verfahren zum Einsatz kommt, lassen sich auch die Integrität und die Zurechenbarkeit sicherstellen. Mit Age ist eine asymmetrische Verschlüsselung dabei einfacher möglich als etwa mit GnuPG. In diesem Security-Tipp zeigen wir, wofür und wie Sie Age in der Praxis verwenden können.

Die Schutzziele der IT-Sicherheit definieren Anforderungen für Daten beziehungsweise die Inhalte von Dateien während der Speicherung oder Übertragung. Die Dateiverschlüsselung ist in vielen Unternehmensszenarien sinnvoll und wichtig. Nicht nur bei der Übertragung über unsichere Kanäle wie dem Internet sollten Sie eine Verschlüsselung einsetzen. Im Alltag nicht mehr benötigte oder in Backups gesicherte Daten müssen nicht mehr im Klartext vorliegen. Mit kryptografischen Verfahren lassen sich diese vertraulich lagern und die Integrität bei einer Wiederherstellung prüfen.
Verschlüsselte Backups oder routinemäßig verschlüsselte ältere Dateien in einem Archiv schützen vor allem davor, dass ein möglicher Angreifer große Mengen an Informationen kopieren und im Nachgang etwa veröffentlichen oder an andere Marktteilnehmer verkaufen kann. Vor dem Befall mit Ransomware schützt dies natürlich nicht. Ebenfalls sollte sichergestellt sein, dass der zugeordnete private Schlüssel beziehungsweise das genutzte Passwort für die Entschlüsselung nicht einfach auf der Festplatte des Computers oder Servers gespeichert ist.
Es muss nicht immer GnuPG sein
Viele Distributoren verwenden für die Signatur ihrer Pakete GnuPG und verteilen den öffentlichen Schlüssel entsprechend. Damit sind die meisten Distributionen per se in der Lage, Dateien zu verschlüsseln oder zu signieren. Auf der Kommandozeile signieren Sie ein File bei einem im Schlüsselbund hinterlegten privaten Schlüssel ganz einfach mit:
Die Schutzziele der IT-Sicherheit definieren Anforderungen für Daten beziehungsweise die Inhalte von Dateien während der Speicherung oder Übertragung. Die Dateiverschlüsselung ist in vielen Unternehmensszenarien sinnvoll und wichtig. Nicht nur bei der Übertragung über unsichere Kanäle wie dem Internet sollten Sie eine Verschlüsselung einsetzen. Im Alltag nicht mehr benötigte oder in Backups gesicherte Daten müssen nicht mehr im Klartext vorliegen. Mit kryptografischen Verfahren lassen sich diese vertraulich lagern und die Integrität bei einer Wiederherstellung prüfen.
Verschlüsselte Backups oder routinemäßig verschlüsselte ältere Dateien in einem Archiv schützen vor allem davor, dass ein möglicher Angreifer große Mengen an Informationen kopieren und im Nachgang etwa veröffentlichen oder an andere Marktteilnehmer verkaufen kann. Vor dem Befall mit Ransomware schützt dies natürlich nicht. Ebenfalls sollte sichergestellt sein, dass der zugeordnete private Schlüssel beziehungsweise das genutzte Passwort für die Entschlüsselung nicht einfach auf der Festplatte des Computers oder Servers gespeichert ist.
Es muss nicht immer GnuPG sein
Viele Distributoren verwenden für die Signatur ihrer Pakete GnuPG und verteilen den öffentlichen Schlüssel entsprechend. Damit sind die meisten Distributionen per se in der Lage, Dateien zu verschlüsseln oder zu signieren. Auf der Kommandozeile signieren Sie ein File bei einem im Schlüsselbund hinterlegten privaten Schlüssel ganz einfach mit:
gpg --detach-sign -o sig.gpg sicher.txt
Anschließend gibt es eine weitere Datei namens "sig.gpg" mit der Signatur, die Sie an den Empfänger weiterleiten können. Mit Ihrem öffentlichen Schlüssel lässt sich damit einfach prüfen, ob die Datei seit der Signatur verändert wurde. Damit ist die Integrität sichergestellt. Die Verschlüsselung einer Datei mit GnuPG funktioniert analog dazu, allerdings benötigen Sie nun den öffentlichen Schlüssel des Empfängers beziehungsweise bei mehreren Empfängern alle entsprechenden öffentlichen Schlüssel. Führen Sie also das folgende Kommando aus, um die Datei mit dem Namen "geheim.txt" zu verschlüsseln:
gpg --encrypt --armor -r empfaenger@it-administrator.de geheim.txt
Da GnuPG nicht nur Verschlüsselung, sondern auch viele andere Möglichkeiten bietet, eignet es sich nicht immer für den unkomplizierten Einsatz. Zwar gibt es sinnvoll gewählte Default-Werte, allerdings sind diese nicht immer transparent und die vielen Optionen ermöglichen durchaus Fehler bei der Verwendung. Möchten Sie auf Basis asymmetrischer Schlüssel einfach und sicher Dateien austauschen, sind Sie aber nicht auf die Nutzung von GnuPG angewiesen.
Einfach und schnell verschlüsseln mit Age
Der Begriff Age steht als Abkürzung für "Actually good encryption" und das ist, was der Entwickler verspricht. Age ist ein kleines Tool mit einer Implementierung in Go [1] und Unterstützung für alle klassischen Betriebssysteme. Die erste stabile Version 1.0 erschien vor gut einem Jahr. Alternativ lässt sich die Implementierung in Rust mit dem Namen rage verwenden [2]. Insbesondere bei großen Datenmengen hat die Go-Version im Hinblick auf Performance jedoch deutlich die Nase vorn.
Age besitzt einen sehr definierten Funktionsumfang mit nur wenigen Konfigurationsoptionen, was die Benutzung des Programms ebenso wie der API sehr einfach gestaltet und Konfigurationsfehler durch den User so gut wie ausschließt. Im weiteren Verlauf beschränken wir uns auf die Benutzung des Programms unter Linux.
Age unterstützt unterschiedliche Empfänger von Dateien. Diese Recipients werden anhand öffentlicher Schlüssel selektiert, die Sie jeweils mit dem Argument "-R" bei der Verschlüsselung angeben. Nach der Installation, die sich dank vorhandener Pakete für die gängigen Linux-Distributionen sehr einfach gestaltet, erstellen Sie mit folgendem Kommando einen neuen privaten Schlüssel:
age-keygen > private.key
Den öffentlichen Schlüssel kopieren Sie aus der Ausgabe oder entnehmen ihn den kommentierten Zeilen in der Datei "private.key". Einen Hinweis auf möglicherweise unsichere Zugriffsrechte der Datei können Sie für das Beispiel ignorieren. Im Produktiveinsatz sollten Sie mit "umask" vorher die resultierenden Rechte der neuen Datei anpassen. Möchten Sie für den privaten Schlüssel in der Datei nur den öffentlichen Schlüssel auf der Kommandozeile ausgeben, nutzen Sie das folgende Kommando:
age-keygen -y private.key
Die erzeugten Schlüssel liegen als Base32-formatierte X25519-Identitäten vor, basieren also auf elliptischen Kurven. Neben den Schlüsseln im Age-eigenen Format in der Version 1 akzeptiert Age für die Verschlüsselung auch SSH-Keys. Diese können sowohl als Schlüssel für die gleiche elliptische Kurve 25519 vorliegen (ssh-ed25519) oder als RSA-Schlüssel (ssh-rsa).
Die Nutzung von SSH-Schlüsseln mag auf den ersten Blick ungewöhnlich anmuten, bietet sich aber durchaus an und ist vor allem praktisch, weil diese Schlüssel bereits an vielen Stellen verteilt liegen. Vor allem im Entwicklerumfeld finden Sie viele öffentliche SSH-Schlüssel in den Profilen auf GitHub oder GitLab. Im Gegensatz zu GnuPG haben Sie bei der Nutzung von Age jedoch kein Web-of-Trust, um die vorliegenden Schlüssel zu verifizieren beziehungsweise das Vertrauen in die Schlüssel festzulegen.
Möchten Sie Ihre Daten regelmäßig mehreren Empfängern zur Verfügung stellen, können Sie diese in einer Empfängerdatei hinterlegen. Dabei lassen sich unterschiedliche Schlüsseltypen der Empfänger in einer Datei kombinieren. Nach dem Hinterlegen der öffentlichen Schlüssel als Empfänger in der Datei "empfänger.txt" – wie üblich einen Schlüssel pro Zeile – verschlüsseln Sie Ihre Daten wie in folgendem Beispiel:
echo IT-Administrator | age -R empfänger.txt -a
Mit "-a" wird die Ausgabe in eine ASCII-Hülle gepackt, das kennen Sie bereits von GnuPG. Die Entschlüsselung können Sie direkt mit dem folgenden Befehl testen:
echo IT-Administrator | age -R empfänger.txt -a | age -d -i private.key
Link-Codes
[1] Go-Implementierung von Age: https://github.com/FiloSottile/age
[2] Rust-Variante rage: https://github.com/str4d/rage/
Authentifizierte Daten
Auch wenn Age sehr simpel für die Dateiverschlüsselung nutzbar ist, eignet es sich vor allem in Szenarien, in denen Informationen als Datenstrom ver- oder entschlüsselt werden. Per Default verarbeitet Age Daten aus der Standardeingabe und gibt das Ergebnis auf der Standardausgabe wieder aus. Der Platz von Age ist damit auf der Kommandozeile sowie in Skripten beziehungsweise in Cronjobs.
Age stellt nicht nur die Vertraulichkeit der Daten sicher, sondern auch deren Authentizität und Integrität. Dabei prüft das Tool bei der Entschlüsselung unmittelbar den integrierten Message Authentication Code (MAC). Das "Authenticated Encryption with Associated Data" (AEAD) genannte Prinzip prüft dabei für jeden Block auf mögliche Veränderungen des Ciphertextes und verhindert damit unterschiedliche Angriffe auf die Verschlüsselung beziehungsweise die Integrität der Daten. Im Gegensatz zu GnuPG lassen sich die Files jedoch nicht kryptografisch signieren. Die Zurechenbarkeit zu einem Urheber durch eine Signatur unterstützt Age nicht.
Fazit
Der Security-Tipp in diesem Monat hat Ihnen mit Age eine einfache Alternative zu GnuPG vorgestellt, mit der Sie Daten einfach und zuverlässig asymmetrisch ver- und entschlüsseln. Das übersichtliche Design und der bewusste Verzicht auf Möglichkeiten zur Konfiguration der Verschlüsselung erlauben einen sicheren Einsatz für Alltagsaufgaben. Mit der Unterstützung unterschiedlicher Schlüsseltypen können Sie auch die weit verbreiteten SSH-Schlüssel der Empfänger verwenden.
(dr)