Diese Website lässt sich nachprüfen

Was im signierten Inventar dieser Website steht, wie es täglich neu entsteht, wie Sie die Signatur prüfen und was sie nicht beweist.

Was Sie von außen nicht sehen

Wenn Sie eine Website aufrufen, sehen Sie das Ergebnis: Text, Bilder, ein Schloss in der Adresszeile. Sie sehen nicht, welches Betriebssystem darunter läuft, welche Programme installiert sind, womit die Seiten gebaut wurden und ob die Datei, die Sie laden, noch dieselbe ist wie gestern. Bei einem Anbieter, dem man seine Post anvertraut, sind das keine Nebensachen.

Für diese Website veröffentlicht privymail.eu deshalb ein Inventar, das Sie herunterladen und selbst prüfen können: das Manifest. Es ist datiert und digital signiert. Dieser Beitrag erklärt, was darin steht, wie es entsteht und wo seine Aussagekraft endet.

Sieben Dateien, eine Signatur

Unter Transparenz stehen sieben Dateien zum Herunterladen.

DateiInhalt
manifest.jsondie Momentaufnahme: Erfassungszeitpunkt, Release, Adressen des Servers, Versionen von Betriebssystem und Werkzeugen, bestätigte Betreiberangaben, dazu die Prüfsummen von vier weiteren Dateien
manifest.sigdie Signatur über genau diese Datei (Ed25519)
manifest-public-key.pemder öffentliche Schlüssel, mit dem Sie die Signatur prüfen
manifest.schema.jsondas Schema, das den Aufbau des Manifests festlegt
website.cdx.jsonStückliste der Website: Werkzeuge und Schriftdateien (CycloneDX)
host-packages.cdx.jsondie installierten Debian-Pakete des Servers (CycloneDX)
public-files.jsonPrüfsumme und Größe jeder veröffentlichten Datei

Signiert ist nur das Manifest. Es enthält aber die Prüfsummen von vier der anderen Dateien: beider Stücklisten, der Dateiliste und des Schemas. Die Dateiliste nennt wiederum für jede Seite, jede Schrift und jedes Bild eine SHA-256-Prüfsumme. So reicht eine einzige Signatur bis zu jeder Datei, die Ihr Browser von hier lädt. Die sieben Dateien selbst stehen nicht in der Dateiliste, sonst müsste eine Liste ihre eigene Prüfsumme enthalten.

Das Manifest stützt sich auf das, was sich auf dem Server feststellen lässt, und auf bestätigte Angaben. Wofür beides fehlt, das bleibt leer und ist als unbekannt benannt; aus einer IP-Adresse oder einer Vermutung wird nichts ergänzt.

Jeden Morgen neu. Erst prüfen, dann umschalten.

Ein Programm auf dem Server erzeugt das Manifest aus dem tatsächlichen Bestand: was dort installiert ist und welche Dateien zum Release gehören. Jede Veröffentlichung entsteht in einem neuen Verzeichnis neben dem laufenden Stand, in fester Reihenfolge:

  1. Bestand des Servers aufnehmen.
  2. Interne Links prüfen und die Website bauen.
  3. Die gebauten Dateien erfassen, das Manifest signieren und die Signatur sofort gegenprüfen.
  4. Die Regeln der Website prüfen, etwa: kein Skript, keine fremde Adresse.
  5. Umschalten. Erst danach liefert der Webserver den neuen Stand aus, in einem einzigen Schritt.

Scheitert ein Schritt, bleibt der vorherige Stand online.

Der Server spielt täglich Aktualisierungen des Betriebssystems ein. Ein Paketinventar von gestern wäre also schnell falsch. Deshalb läuft derselbe Ablauf jeden Morgen gegen 5 Uhr (Zeitzone Europe/Berlin) von selbst und veröffentlicht eine neue, neu signierte Momentaufnahme. Hat inzwischen jemand von Hand einen neueren Stand veröffentlicht, verwirft der Tageslauf seinen Entwurf. Es bleibt ein Tageslauf: keine Zusage, dass das Inventar unmittelbar nach jedem Update stimmt.

Selbst prüfen: drei Dateien, zwei Befehle

Sie brauchen einen Linux-Rechner mit OpenSSL 3 und drei der sieben Dateien: Manifest, Signatur und Schlüssel. Laden Sie sie unverändert herunter. Die Signatur gilt für die genauen Bytes; formatiert ein Editor die Datei neu, passt sie nicht mehr.

openssl pkey -pubin -in manifest-public-key.pem -outform DER | sha256sum
openssl pkeyutl -verify -pubin -inkey manifest-public-key.pem -rawin -in manifest.json -sigfile manifest.sig

Der erste Befehl berechnet den Fingerabdruck des Schlüssels: die SHA-256-Prüfsumme seiner DER-Form, nicht der PEM-Datei. Vergleichen Sie ihn mit dem Fingerabdruck auf der Seite Transparenz und notieren Sie ihn. Der zweite Befehl prüft, ob die Signatur zu Manifest und Schlüssel passt. Wechselt der Stand genau während Ihres Abrufs, können die Dateien zu verschiedenen Momentaufnahmen gehören; laden Sie dann alle drei noch einmal.

Der Preis: jede Änderung ist ein Release

Auch ein korrigierter Tippfehler durchläuft Bau, Prüfung und Signatur, bevor er sichtbar wird. Den laufenden Stand von Hand nachzubessern verbietet sich: Die Prüfsummen im Inventar würden nicht mehr stimmen.

Das Inventar zeigt, was läuft. Wer die Paketliste liest, sieht die installierten Versionen, und das gilt auch für jemanden, der nach verwundbaren Versionen sucht. Dagegen steht, dass der Server seine Updates täglich einspielt. Ein Nachweis, dass jede bekannte Lücke geschlossen ist, ist die Liste nicht.

Was die Signatur nicht beweist

  • Nicht, dass die Angaben stimmen. Das Manifest ist eine Eigenangabe der Betreiberin. Die Signatur zeigt nur, dass es seit dem Signieren unverändert ist.
  • Nicht die Herkunft, solange Sie den Schlüssel nur von hier kennen. Wer diese Website verändern könnte, könnte Schlüssel und Fingerabdruck gleich mit austauschen. Erst ein Fingerabdruck, den Sie auf einem anderen Weg kennen, ordnet die Herkunft zu. Ein früher notierter zeigt immerhin, ob derselbe Schlüssel unterschreibt wie beim letzten Mal.
  • Kein Audit. Die Signatur ersetzt weder die Prüfung von Verträgen und Rechenzentren noch ein externes Sicherheits- oder Datenschutz-Audit.
  • Keine Verfügbarkeit. Eine Momentaufnahme sagt nichts darüber, ob die Website gestern erreichbar war.
  • Keine Lieferkette. Aus den Adressen eines Servers lässt sich keine vollständige Lieferkette ableiten, und die Stücklisten erfassen nicht jede Bibliothek, die in einem Programm steckt.
  • Nichts über den Maildienst. Das Manifest beschreibt ausschließlich die Website und ihren Server.

Weiterlesen

Die Downloads stehen unter Transparenz, die Software und die Grenzen der Stücklisten unter Open Source. Die Transparenzdateien und ihre Signatur gehören zum Rahmen für Meldungen von Sicherheitslücken. Daran schließt der Beitrag Eine Website ohne JavaScript und ohne fremde Server an.