OpenPGP im Berufsalltag – Teil 2: Bevor es los geht

Im ersten Teil dieser Serie ging es um die theoretische Grundlagen zu OpenPGP. Bevor wir loslegen, fehlt noch etwas praktisches Rüstzeug, sozusagen einige Werkzeuge und Begriffe, die ich kurz – allerdings mit Fokus auf die Windows-Welt – vorstellen möchte.
Wie verifiziere ich die Echtheit von Downloads? Wie benutze ich die Konsole – und was ist das überhaupt? Das Wissen wird später helfen, die Einrichtung von OpenPGP besser zu verstehen und bewerkstelligen zu können.

Verschlüsselung-E-Mails-Computer (1)


Windows Basics: Die Kommandozeile

Auch unter Windows und auch in 2018 ist die Nutzung der Kommandozeile für bestimmte Aufgaben sinnvoll. Es ist einfach schneller und man bekommt direkteres Feedback. Glücklicherweise ist sie nicht schwer zu erlernen. Für den täglichen Umgang mit E-Mails gibt es natürlich ausgereifte grafische Lösungen.

Windows enthält zwei eingebaute Kommandozeilen: Die PowerShell und cmd.exe.
Wir werden cmd.exe benutzen, die sogenannte Eingabeaufforderung (engl. Command Prompt), auch Konsole genannt.

Aufrufen kann man diese über Strg+R → Eingabe cmd → <Enter> oder über das Startmenü.

Windows Basics: Umgebungsvariablen

Einige Konfigurationseinstellungen des Betriebssystems befinden sich in sogenannten Umgebungsvariablen. Das sind Schlüssel-Wert-Paare, die entweder nur für einen bestimmten oder für alle Benutzer (systemweit) sichtbar sind. Der Schlüssel windir enthält beispielsweise auf meinem Rechner den Wert C:\Windows.

Mit dem Kommandozeilen-Befehl set lassen sich alle für den aktuellen Nutzer sichtbaren Paare ausgeben.

Umgebungsvariablen lassen sich folgendermaßen bearbeiten:


Mit den letzten Windows-Updates kam eine Abkürzung zu den eigenen Variablen hinzu:

Windows-Taste → Eingabe "Umgebungsvariablen" → Umgebungsvariablen für dieses Konto bearbeiten.

Windows Basics: Suchpfad für ausführbare Programme

Gibt man auf der Kommandozeile Befehle ein, sucht Windows im Hintergrund nach einem passenden Programm. Wenn ich z. B. gpg eingebe, sucht Windows nach dem Programm gpg.exe.

Wo überall gesucht wird, steht u. a. in der Umgebungsvariable Path [engl. für (Such-)Pfad]. Die Variable enthält eine mit Semikolon getrennte Liste von Verzeichnissen, in denen gesucht wird, beispielsweise C:\Windows;C:\Programme.

Will man neue Verzeichnisse aufnehmen, muss man diese also anhängen, z. B.:
C:\Windows;C:\Programme;C:\MeinVerzeichnis.

Aber Vorsicht: Die Änderung wird auf der Kommandozeile erst nach Neustart der Konsole wirksam.

Download und Verifikation

Langsam wird es ernst. Die aktuelle Version von gpg4win kann online herunter geladen. Aber halt: Bevor man mit der Installation fortfährt, sollte geprüft werden, ob die Datei den erwarteten Inhalt hat und von einer vertrauenswürdigen Quelle stammt. Dadurch wird sichergestellt, dass man keine Schadsoftware an Land gezogen hat. Das sollte heutzutage für jeden Download ausführbarer Dateien gemacht werden

Für viele Downloads gibt es eine Seite oder Datei mit Integritätsinformationen. Das können u. a. Zertifikatsinformationen, Datei-Hashes, oder PGP-Signaturen sein. Bei gpg4win gibt es dazu eine Übersichtsseite.


Zertifikate? Digitale Signaturen?

Ein Zertifikat kommt meist zusammen mit digital signierten Dateien. Das bedeutet: Eine Datei ist digital unterschrieben worden. Die Unterschrift wurde von einer vertrauenswürdigen Stelle, einer Zertifizierungseinrichtung, englisch Certification Authority (CA), mittels eines Zertifikats beglaubigt. Unterschriften und Zertifikate sind mathematisch eng mit dem Download verzahnt und können darin eingebaut sein. Dadurch fallen Manipulationen an Unterschriften oder Dateien schnell auf.

Woher aber weiß Windows, welcher Zertifizierungsstelle und damit, welcher Unterschrift zu trauen ist? Kurz: Die Menge vertrauenswürdiger Stellen ist öffentlich einsehbar und wird von den "großen" Internetfirmen und öffentlichen Gremien abgestimmt. Microsoft pflegt den Stand dann entsprechend in Windows ein und aktualisiert diesen. Ähnlich funktioniert es bei anderen Betriebssystemen. Unter Windows kann man die Korrektheit einer ausführbaren Datei recht einfach prüfen:

  1. Man navigiert im Windows Explorer zu der Datei und öffnet die Eigenschaften über Rechtsklick → Eigenschaften.
  2. Dann folgt man den Schritten auf den Grafiken:

      
       

 

Hash-Codes? SHA1? SHA256? MD5?

Für nicht Windows-spezifische Inhalte (Videos oder PDFs können ebenfalls Schadcode enthalten) gibt es noch eine andere Möglichkeit, Downloads zu prüfen: Hash-Codes. Ein Hash-Code ist eine Zahl, die aus einer Datenmenge, z. B. aus einer Datei, berechnet werden kann. Hash-Codes werden oft zusammen mit Downloads veröffentlicht. Führt man die Berechnung lokal nochmals durch und erhält die gleiche Zahl, ist der Download "echt".

Winzige Änderungen an der Datei führen zu einer großen Änderung im Hash-Code – Manipulationen fallen so schnell auf. Aus diesem Grund werden solchermaßen genutzte Hash-Codes auch als Prüfsummen (eng. Checksum) bezeichnet.

Ein Problem von Hash-Codes ist, dass unterschiedliche Dateien in seltenen Fällen die gleiche Prüfsumme erzeugen können. In diesem Fall spricht man von einer Kollision. Je einfacher es ist, Kollisionen zu erzeugen, desto einfacher ist es für einen Angreifer, eine gefälschte Datei anzubieten, die zu einem korrekten Hash-Code eines vertrauenswürdigen Anbieters führt.

SHA1, SHA256 und MD5 sind Bezeichnungen für unterschiedliche Verfahren zur Berechnung solcher Codes. Für uns ist der wichtigste Unterschied dieser Verfahren die Kollisionssicherheit. MD5 gilt als sehr unsicher, d. h. Kollisionen lassen sich vergleichsweise einfach erzeugen. Bei SHA1 ist es ebenfalls recht einfach, SHA256 gilt im Moment als recht sicher.

Wie überprüft man nun die Codes? Ich benutze unter Windows eine der folgenden Möglichkeiten:

  • FCIV – Ein von Microsoft breitgestelltes Kommandozeilen-Tool (kann nur SHA1 und MD5).
  • sha1sum, sha256sum und md5sum – Unter Unix-Betriebssystemen gängige Tools, die unter Windows z. B. über die git-bash verfügbar sind.


Beispiel mit gpg4win-3.1.1.exe und fciv:

Zunächst muss man das Tool herunterladen und installieren. Praktisch ist es, das Installationsverzeichnis in den Suchpfad für ausführbare Programme aufzunehmen. Dazu gibt es bei Stackoverflow eine Anleitung.

Angenommen, die zu prüfende Datei liegt im Download-Verzeichnis des Users, dann sollte folgende Eingabe erfolgen:

cd C:\Users\<USER>\Downloads
fciv gpg4win-3.1.1.exe -both


Das Ergebnis sieht dann wie folgt aus:

C:\Users\mosig_user\Downloads>fciv gpg4win-3.1.1.exe -both
//
// File Checksum Integrity Verifier version 2.05.
//
                MD5                             SHA-1
-------------------------------------------------------------------------
4396f97932eed0139b0f1771362cee6e 369040c292358d68d8328d5a9b97d71f80cdf3d7 gpg4win-3.1.1.exe


MD5 wird von gpg4win nicht angeboten, die SHA-1-Summe stimmt aber.


Beispiel mit gpg4win-3.1.1.exe und sha256sum:

Man lädt und installiert git-bashAngenommen, die zu prüfende Datei liegt im Download-Verzeichnis des Users, dann sieht die Eingabe folgendermaßen aus:

cd ~/Downloads # Die Tilde ~ steht für das Nutzerverzeichnis
sha256sum gpg4win-3.1.1.exe


Das ergibt:

mosig_user@T1000 MINGW64 ~/Downloads
$ sha256sum gpg4win-3.1.1.exe
b2144904f103dad48328fe125eb182c4dcfbe8093d48b74691613e0d2ed26033 *gpg4win-3.1.1.exe

 

Tipps und Tricks zu Hash-Codes

Sind MD5- und SHA1-Codes verfügbar, kann eine Überprüfung beider Summen ausreichend sein, obwohl die Verfahren einzeln genommen unsicher sind. Die Manipulation einer Datei, so dass Kollisionen für zwei Summen und zwei Verfahren gleichzeitig erzielt werden, dürfte zu aufwendig für die meisten Angreifer sein.

Weil bereits kleine Manipulationen große Änderungen an der Summe verursachen, reicht meist die optische Prüfung der 4-8 ersten und letzten Zeichen. Doch Vorsicht: Natürlich kann dieses Vorgehen ein Sicherheitsrisiko sein!

Mit den Unix-Tools ist es möglich, die Überprüfung der Summen zu automatisieren. Dazu sei auf sha256sum --help verwiesen.

PGP-Signaturen?

Im ersten Teil erwähnte ich, dass PGP nicht nur für E-Mails einsetzbar ist. Die Prüfung von Downloads auf Echtheit ist ein gutes Beispiel dafür. Genau wie bei E-Mails, kann man auch für beliebige andere Daten Signaturen erstellen und prüfen, z. B. für Downloads.

Auch PGP-Signaturen sind digitale Unterschriften. Allerdings sind diese nicht von einer Zertifizierungsstelle beglaubigt. Sie können mit dem öffentlichen Schlüssel des Absenders überprüft werden. Entscheidend ist, wie viel Vertrauen man in diesen Schlüssel hat. Weiß man, dass er wirklich dem Anbieter gehört, ist alles okay. Kann man dies aber nicht zweifelsfrei feststellen, könnte selbst eine richtige Signatur nichts wert sein, da sie von jemandem erstellt wurde, der nur vorgibt, der Anbieter zu sein. Deshalb ist es wichtig, die Quelle für Schlüssel-ID, Schlüssel und Signatur zu prüfen und sich von deren Echtheit zu überzeugen.

Dazu lädt man die zum Download gehörige Signaturdatei herunter und legt sie in dasselbe Verzeichnis. Für gpg4win-3.1.1.exe ist das beispielsweise gpg4win-3.1.1.exe.sig. Ich greife hier etwas vorweg und nehme an, PGP wäre bereits installiert. Eine PGP-Signatur kann man dann mit gpg auf der Konsole prüfen:

cd C:\Users\<USER>\Downloads
gpg --verify gpg4win-3.1.1.exe.sig gpg4win-3.1.1.exe


Man erhält folgende Ausgabe:

C:\Users\mosig_user\Downloads>gpg --verify gpg4win-3.1.1.exe.sig gpg4win-3.1.1.exe
gpg: Signatur vom 05/03/18 13:11:15 Mitteleuropõische Sommerzeit
gpg:                mittels RSA-Schlüssel 13E3CE81AFEA6F683E466E0D42D876082688DA1A
gpg: Signatur kann nicht geprüft werden: Kein öffentlicher Schlüssel
gpg: Signatur vom 05/03/18 13:11:25 Mitteleuropõische Sommerzeit
gpg:                mittels DSA-Schlüssel 61AC3F5EE4BE593C13D68B1E7CBD620BEC70B1B8
gpg: Signatur kann nicht geprüft werden: Kein öffentlicher Schlüssel


 Die Prüfung der Signatur schlug also fehl. Warum?

  1. Es gibt zwei öffentliche Schlüssel, mit denen man jeweils die Signatur prüfen kann.
  2. Keiner dieser Schlüssel befindet sich im lokalen Schlüsselbund. Aus diesem Grund ist eine Überprüfung nicht möglich.

Diese Situation ist normal und recht häufig. Um sie zu lösen, muss man die Schlüssel von einem Schlüsselserver laden. Auch das kann man mit gpg machen:

gpg --keyserver hkps://hkps.pool.sks-keyservers.net --recv-keys 13E3CE81AFEA6F683E466E0D42D876082688DA1A 61AC3F5EE4BE593C13D68B1E7CBD620BEC70B1B8


Damit werden die Schlüssel importiert:

C:\Users\mosig_user\Downloads>gpg --keyserver hkps://hkps.pool.sks-keyservers.net --recv-keys 13E3CE81AFEA6F683E466E0D42D876082688DA1A 61AC3F5EE4BE593C13D68B1E7CBD620BEC70B1B8
gpg: key 0x7CBD620BEC70B1B8: 121 Beglaubigungen wegen fehlender Schlüssel nicht geprüft
gpg: Schlüssel 0x7CBD620BEC70B1B8: Öffentlicher Schlüssel "Intevation File Distribution Key <distribution-key@intevation.de>" importiert
gpg: key 0x42D876082688DA1A: 72 Beglaubigungen wegen fehlender Schlüssel nicht geprüft
gpg: Schlüssel 0x42D876082688DA1A: Öffentlicher Schlüssel "Intevation File Distribution Key <distribution-key@intevation.de>" importiert
gpg: marginals needed: 3  completes needed: 1  trust model: pgp
gpg: Tiefe: 0  gültig:   2  signiert:   0  Vertrauen: 0-, 0q, 0n, 0m, 0f, 2u
gpg: nächste "Trust-DB"-Pflichtüberprüfung am 2019-01-28
gpg: Anzahl insgesamt bearbeiteter Schlüssel: 2
gpg:                              importiert: 2  


Jeder Schlüssel kommt mit Beglaubigungen durch andere OpenPGP-Teilnehmer. Diese lassen sich mit den öffentlichen Schlüsseln dieser Teilnehmer nachvollziehen.Diese Schlüssel werden aber nicht mit importiert, daher werden die Beglaubigungen beim Import nicht geprüft.

Jetzt können wir es noch einmal versuchen:

C:\Users\mosig_user\Downloads>gpg --verify gpg4win-3.1.1.exe.sig gpg4win-3.1.1.exe
gpg: Signatur vom 05/03/18 13:11:15 Mitteleuropõische Sommerzeit
gpg:                mittels RSA-Schlüssel 13E3CE81AFEA6F683E466E0D42D876082688DA1A
gpg: Korrekte Signatur von "Intevation File Distribution Key <distribution-key@intevation.de>" [unbekannt]
gpg: WARNUNG: Dieser Schlüssel trägt keine vertrauenswürdige Signatur!
gpg:          Es gibt keinen Hinweis, daß die Signatur wirklich dem vorgeblichen Besitzer gehört.
Haupt-Fingerabdruck  = 13E3 CE81 AFEA 6F68 3E46  6E0D 42D8 7608 2688 DA1A
gpg: Signatur vom 05/03/18 13:11:25 Mitteleuropõische Sommerzeit
gpg:                mittels DSA-Schlüssel 61AC3F5EE4BE593C13D68B1E7CBD620BEC70B1B8
gpg: Korrekte Signatur von "Intevation File Distribution Key <distribution-key@intevation.de>" [unbekannt]
gpg: WARNUNG: Dieser Schlüssel trägt keine vertrauenswürdige Signatur!
gpg:          Es gibt keinen Hinweis, daß die Signatur wirklich dem vorgeblichen Besitzer gehört.
Haupt-Fingerabdruck  = 61AC 3F5E E4BE 593C 13D6  8B1E 7CBD 620B EC70 B1B8


Die Signatur ist also korrekt. Die dazugehörige Warnung kann man hier ignorieren. Sie bestätigt nochmals den Umstand, dass der öffentliche Schlüssel technisch nicht nachweisbar dem Anbieter des Downloads gehört und auch keine vertrauenswürdige Beglaubigung existiert. 

Ausblick

Das war recht viel Information. Das Schöne ist, dass wir jetzt alle Grundlagen beisammen haben, um in den nächsten Teilen zügig voran kommen zu können. Als nächstes werden wir uns mit der Einrichtung von gpg4win und der Schlüsselgenerierung beschäftigen.
 

Über Jan Mosig

Jan Mosig arbeitet für die itemis AG am Standort Leipzig. Er beschäftigt sich mit Problemen im Projektalltag und setzt zu deren Lösung auf technische Softwarequalität, Agile und Mut zur Veränderung.