Tails PGP kann nicht verifiziert werden, wo ist das Problem?

In der Anleitung von capulfu habe ich folgendes gefunden um den Download eines Tails img zu verifizieren:

  1. Tails-Schlüssel von der Kommandozeile herunterladen und importieren:
wget https://tails.boum.org/tails-signing.key
gpg --import tails-signing.key

Die Ausgabe sollte wie folgt aussehen:

gpg: key 0xDBB802B258ACD84F: public key "Tails \
developers (offline long-term identity key) \
<tails@boum.org>" imported
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)

aber bei mir kommt folgendes:

~$ wget https://tails.boum.org/tails-signing.key
--2024-01-13 19:47:01--  https://tails.boum.org/tails-signing.key
Auflösen des Hostnamens tails.boum.org (tails.boum.org) … 204.13.164.63
Verbindungsaufbau zu tails.boum.org (tails.boum.org)|204.13.164.63|:443 … verbunden.
HTTP-Anforderung gesendet, auf Antwort wird gewartet … 200 OK
Länge: 1387192 (1,3M) [application/octet-stream]
Wird in ‘tails-signing.key’ gespeichert.

tails-signing.key   100%[===================>]   1,32M   466KB/s    in 2,9s    

2024-01-13 19:47:05 (466 KB/s) - ‘tails-signing.key’ gespeichert [1387192/1387192]

$ gpg --import tails-signing.key
gpg: Schlüssel DBB802B258ACD84F: 2172 Beglaubigungen wegen fehlender Schlüssel nicht geprüft
gpg: Schlüssel DBB802B258ACD84F: Öffentlicher Schlüssel "Tails developers (offline long-term identity key) <tails@boum.org>" importiert
gpg: Anzahl insgesamt bearbeiteter Schlüssel: 1
gpg:               importiert: 1
gpg: keine ultimativ vertrauenswürdigen Schlüssel gefunden

Jetzt frage ich mich, was habe ich falsch gemacht?

Direkte Entwarnung: Es hat alles geklappt, du hast nichts falsch gemacht.

Wget lief ohne Probleme durch, und GPG hat nur zusätzlich ein paar weitere Informationen gemeldet.

Diese Ausgabe stammt daher, dass du - logischerweise - nicht die öffentlichen Schlüssel der 2172 Personen/Organisationen besitzt, die sagen: „Vertrau mir/uns, Ich/wir haben geprüft, dass der Schlüssel wirklich dem angegebenen Besitzer gehört!“
Bei PGP lassen sich Schlüssel nämlich von (allen!) Dritten beglaubigen. Das wird für ein „Web of Trust“ verwendet.

Einfaches Beispiel/verkürzte Erklärung für WoT:

Dafür signiere Ich, mit Hilfe meines PGP-Schlüsselpaars, zur Beglaubigung den öffentlichen Schlüssel von Tails, um zu Bestätigen, dass dieser wirklich dem angegebenen Besitzer gehört.

Das tut man theoretisch nur, wenn man diesen Schlüssel vom verantwortlichen Entwickler direkt erhalten hat. Oder den Schlüssel vom Kommunikationspartner, der auch wirklich jener ist, der er im Schlüssel behauptet zu sein, (persönlich) erhielt. Also ganz sicher weiß, dass der Schlüssel zur richtigen Person gehört.
Praktisch sieht das häufig auch mal ganz anders aus, schließlich kann das erstmal jeder, auch ein Angreifer, tun, auch ohne richtig zu „prüfen“.
Deshalb sind viele Beglaubigungen kein Zeugnis dafür, dass ein Schlüssel vertrauenswürdig ist.

Diese Signatur/Beglaubigung kann dann dem öffentlichen Schlüssel von Tails hinzugefügt werden, wie das in diesen Fall eben mit den 2172 Beglaubigungen der Fall ist.
Wenn du nun diesen öffentlichen Schlüssel von Tails importierst, an dem die Beglaubigungen angehängt sind, kann GPG im Fall der 2172 Beglaubigungen nicht prüfen, ob diese gültig sind, da du die Schlüssel derjenige, die ihn beglaubigt haben, nicht hast.
Hättest du hingegen jedoch meinen öffentlichen Schlüssel aus diesem Beispiel, und in PGP eingestellt dass meinen Beglaubigungen vertraut wird, wäre der gerade importierte Schlüssel von Tails entsprechend „verifiziert“, was sich, je nach Einstellungen, in verschiedenen Anzeigen widerspiegeln würde.

Im Detail ist das komplexer, mit verschiedenen Vertrauensstufen, wenn Ich mich richtig erinnere, aber fundamental sollte die Erklärung/das Beispiel so passen.

Das ist für deinen Anwendungsfall, der in der Anleitung wohl das Ziel ist, aber nicht (so) wichtig, da hier nach dem „TOFU“ (Trust on first use) Prinzip gearbeitet wird:
Du lädst erstmalig den öffentlichen Schlüssel von Tails herunter, importierst ihn, und verwendest ihn ab dann. Für zukünftige Überprüfungen des Tails Images lädst du also keinen neuen öffentlichen Schlüssel herunter, solange er gültig ist (siehe aber den letzten Abschnitt, vor dem nächsten Zitat).

Denn: Wenn zu einen späteren Zeitpunkt der Schlüssel, und die Signaturen & Image Links, auf der Seite von Tails von einen Angreifer unbemerkt ausgetauscht werden, würde eine weitere Prüfung der Image-Datei mithilfe Ihrer Signatur mit dem öffentlichen Schlüssel den du bereits gespeichert hast nicht klappen. Mit einen dort ausgetauschten schon.

Ein regelmäßiges erneutes „Fetchen“ des Schlüssels wäre aber auch Ideal, um einen Widerruf des Schlüssels mitzubekommen. Dafür gibt es theoretisch mehrere Wege, welche größtenteils jedoch von den Einstellungen seitens der Tails-Entwickler abhängig sind, da kann Ich gerade nicht nachschauen.
Das „fetchen“ würde sich durch einen erneuten Import eines neue(re)n, heruntergeladenen Schlüssels in den Schlüsselbund auch umsetzen, dabei musst du dann aber darauf achten, dass dort von der Aktualisierung des Schlüssels die Rede ist, und nicht vom Import eines neuen Schlüssels. Das kann eventuell durch Unterschlüssel aber so klingen, und der genaue Wortlaut ist mir in beiden Fällen gerade nicht bekannt.

Dies hier ist eine Meldung, dass kein PGP-Schlüssel gefunden wurde, dem du „ultimativ vertraust“, das ist im Allgemeinen ein von dir selbst erstellter.

Dieser ist nützlich, falls du den öffentlichen Schlüssel von Tails mit ihm (lokal/öffentlich) signieren möchtest, um kryptographisch sicherzustellen, dass jemand mit Zugriff auf deinen Schlüsselring für öffentliche Schlüssel diesen z.B. nicht austauschen kann, ohne Zugriff auf deinen privaten Schlüssel zu haben. Und um beim z.B. Signaturen prüfen anzuzeigen, dass der Schlüssel nicht „unvertrauenswürdig“ ist, und die Echtheit nicht festgestellt werden kann.
Da du aber nicht viel Erfahrung mit GPG hast, würdest du eventuell nicht bemerken, wenn jemand einfach einen weiteren Schlüssel auf deinen Gerät generiert, und einen „gefälschten“ öffentlichen Schlüssel damit beglaubigt. Kannst du also wirklich ignorieren.

Die Meldung verschwindet, wenn du einen eigenen PGP Schlüssel erstellst. Dabei kannst du auch keinen Namen eingeben (einfach Enter drücken), und als E-Mail z.B. example@domain.invalid, oder mykey@localhost nehmen.
gpg --gen-key oder komplexer: gpg --full-generate-key
Alternativ kannst du die Meldung auch nur ignorieren.

2 „Gefällt mir“

Hallo,
vielen Dank für die schnelle Antwort.
In der Anleitung steht

0xDBB802B258ACD84F

und bei mir steht

DBB802B258ACD84F

macht das was?

Und beim nächsten Schritt hänge ich dann auch fest. In der Anleitung steht:
Wir überprüfen nun, ob der importierte Key echt, d.h. unverändert ist:

gpg --fingerprint 0xDBB802B258ACD84F | grep \ fingerprint

Wenn ich das im Terminal eingebe, dann passiert einfach nichts.
Bei dem abgeänderten Befehl passiert auch nichts.

gpg --fingerprint DBB802B258ACD84F | grep \ fingerprint

Die Ausgabe von gpg --fingerprint DBB802B258ACD84F wird an die Suche mit grep gepiped, wobei nach " fingerprint" gesucht wird (mit einem führenden Leerzeichen; durch den Backslash wird das Leerzeichen vor der Shell escaped).
Der String kommt (bei mir) allerdings in der Ausgabe von gpg nicht vor:

$ gpg --fingerprint 0xDBB802B258ACD84F
pub   rsa4096 2015-01-18 [C] [verfällt: 2025-01-25]
      A490 D0F4 D311 A415 3E2B  B7CA DBB8 02B2 58AC D84F
uid        [ unbekannt ] Tails developers (offline long-term identity key) <tails@boum.org>
uid        [ unbekannt ] Tails developers <tails@boum.org>
sub   rsa4096 2017-08-28 [S] [verfällt: 2025-01-25]
sub   ed25519 2017-08-28 [S] [verfällt: 2025-01-25]
sub   rsa4096 2021-10-14 [S] [verfällt: 2025-01-25]
sub   rsa4096 2023-10-03 [S] [verfällt: 2025-01-25]

Deshalb bleibt die Ausgabe leer. Es ist dabei augenscheinlich unerheblich, ob 0x als Prefix verwendet wird, oder nicht. Und auch bei einer englischen Spracheinstellung kommt bei mir kein " fingerprint" vor.

p.s. Ich hab leider nicht verstanden, auf welche Anleitung Du dich beziehst. Vielleicht könntest Du einen Link hinterlegen, dann würde ich auch auf semantischer und nicht nur auf syntaktischer Ebene antworten können :slight_smile:

Hey,
ja das wäre gut, weil jetzt habe ich nichts verstanden :sweat_smile:
Sorry für das nicht direkt verlinken. Hier gibt es die Anleitung:
https://capulcu.blackblogs.org/neue-texte/bandi/
Es steht auf Seite sieben.

Ich werfe mal in den Raum, dass die aktuellste Version dieser Anleitung knapp drei Jahre alt ist (Anfang 2021!) - das ist im Internetzeitalter ziemlich viel.

Gibt es einen Grund, wieso du für den Download und das Erstellen des TAILS-Bootmediums nicht die offizielle Anleitung verwendest?

also falls das hier die Anleitung ist: https://tails.net/install/linux/index.de.html
dann weil dort steht:

Überprüfen Sie Ihren Download mit unserem OpenPGP-Signaturschlüssel und OpenPGP-Signatur.
We don’t provide instructions to verify downloads with OpenPGP anymore.

und ich einfach nicht weiß wie ich das jetzt prüfen soll

Falls die offizielle Anleitung etwas anders ist, dann weil ich sie übersehen habe.

Genau das ist die Begründung, wieso für den 0815-User ohne PGP-Erfahrung die manuelle Verifizierung via OpenPGP nicht mehr der empfohlene Standardweg ist. Die aktuelle Leitlinie seitens TAILS ist: Wenn der Nutzer nicht versteht, was er da tut, ist das kein sicherer und zuverlässig funktionierender Weg.

Für Debian-basierte Systeme gibt es aber weiter eine „Experten“-Anleitung für die Installation via Kommandozeile, die auf GPG zurückgreift: https://tails.net/install/expert/index.en.html (Deutsche Übersetzung sehr unvollständig, daher direkt die englische Version verlinkt.)
Darauf basiert im wesentlichen wohl auch deine Anleitung - nur dass deine Anleitung mindestens drei Jahre alt ist.

Nicht böse gemeint, aber es bringt halt echt nichts, wenn du stumpf die (potentiell veraltete) Anleitungen von irgendwelchen Drittanbietern abarbeitest. Halte dich lieber an die Original-Anleitung und stelle dazu konkrete Fragen.

Wo steht das eigentlich? Diese Aussage finde ich -so wörtliche- nicht unter dem o.g. Link. Es macht mich immer ein bisschen misstrauisch, wenn die selbe Seite bei verschiedenen User unterschiedlichen Inhalt hat :wink:

WOW, jetzt mache ich mir auch Gedanken…
Gestern sah die Seite noch anders aus. Unter überpfüfen sie ihren Download stand man solle mit gtkhash die Prüfsumme prüfen und dann noch der Teil mit dem pgp checken. Das habe ich so per copy paste von der Website.

Entweder wurde die Website vom Betreiber geändert oder sie wurde manipuliert?

Der Button prüfen sie ihren Download war nicht da.


Wenn ich meinen Download mit dem Button Prüfe dann sieht es so aus. Die Prüfsumme mit GTKHash passt auch.

Dann kann ich dem Download jetzt vertrauen, oder?

Edit:
die Seite sieht mit / ohne Java Script anders aus.


Auf dem zweiten Screenshot sieht man die Seite, ohne JavaScript.
Am ersten sieht man die Online Verifizierung, die habe ich jetzt dreimal an drei Rechnern in drei Netzten gemacht. Bei dem letzten hier habe ich noch ein Browser Plugin, das anzeigt, dass DNSSEC/DANE auch passt. CheckSum passt auch, daher würde ich sagen es ist sicher.
Oder spricht etwas gegen diese Annahme?

Ehrlich gesagt, vergiss die verlinkte Drittanbieter Anleitung.

Da du keine weiteren PGP-Schlüssel hast, um über deren Beglaubigungen den öffentlichen Schlüssel von Tails zu verifizieren, musst du dich hierfür alleine darauf verlassen, dass die Seite Tails.net nicht manipuliert ist, und den richtigen Schlüssel liefert. Es sei denn, du kriegst den „richtigen“ Fingerprint von wo anders.

Aber wenn du das jetzt tust, dann kannst du auch jetzt nur die SHA Checksumme vergleichen, und hast dort ebenso die Gewissheit, dass Tails.net sagt, dass die heruntergeladene Datei korrekt ist.
Ebenso, wenn du die JavaScript Funktion verwendest.

Ein Angreifer würde wahrscheinlich alle 3 Dinge austauschen, deswegen wird das passen, wenn du nur eine der drei Möglichkeiten verwendest.

Siehe bei deaktiviertem JavaScript, bei Schritt 2:
„To verify your download, you can either:“ …

  1. Die JavaScript Funktion zum vergleichen der Checksumme verwenden
  2. Die Checksumme manuell abgleichen
  3. Oder die Imagedatei über die Signaturdatei per OpenPGP überprüfen

Siehe bezüglich der Sicherheit der Methoden dazu hier, auf der Seite von Tails „Download verification“, falls du gut in Englisch bist: https://tails.net/contribute/design/download_verification/


Falls du trotzdem den PGP Schlüssel verwenden möchtest, um das Image zu verifizieren:

Zu deiner Frage, ob das fehlende 0x einen Unterschied macht:
Dass vor der Schlüssel-ID/keyid bei dir kein 0x steht, ist Egal.

Das ist nur ein "Vorzeichen" für das Formatierungsformat, und lässt sich in GPG konfigurieren, ob es angezeigt wird.

Nämlich mithilfe der Option --keyid-format, deren Werte none, short, 0xshort, long, 0xlong sein können. --keyid-format long ist bei dir eingestellt, bei dem Schreiber des Blogs 0xlong.

Da du bereits vom Drittanbieterblog einen Teil des Fingerprints (nämlich die genannte keyid 0xDBB802B258ACD84F) hast, und der Fingerprint von Tails PGP Schlüssel auch bei mir A490D0F4D311A4153E2BB7CADBB802B258ACD84F (vergleiche die letzten 16 Zeichen, daraus besteht die „long“ keyid) ist, wirst du den korrekten Schlüssel haben. Das leite Ich aus deiner Konsolenausgabe im Startpost ab, wo die keyid dem entspricht.

In der Anleitung wurde zum Anzeigen des Fingerprints des Schlüssels ein „kleines Skript“ mit GPG geschrieben, das macht man nicht, da dessen Ausgaben sich von Version zu Version unterscheiden können.
Anstelle dessen solltest du gpg --fingerprint 0xDBB802B258ACD84F verwenden, ohne das durch Grep filtern zu lassen, damit der Fingerprint vom Schlüssel mit der verwendeten keyid angezeigt wird, der inzwischen kein „Fingerabdruck:“ als Text beinhaltet.
Dieser Fingerprint befindet sich an zweiter Stelle der Befehlsausgabe, und ist eine Reihenfolge von 10 Blöcken mit je 4 Zeichen von A-F & 0-9:

nutzer@debian:~$ gpg --fingerprint 0xDBB802B258ACD84F
pub   rsa4096 2015-01-18 [C] [verfällt: 2025-01-25]
      A490 D0F4 D311 A415 3E2B  B7CA DBB8 02B2 58AC D84F
uid        [ unbekannt ] Tails developers (offline long-term identity key) <tails@boum.org>
[U.S.W., der Rest der Ausgabe ist nicht weiter von Belang]

Diesen würdest du nun mit einen Fingerprint abgleichen, der dir bspw. von einem Dritten dem du vertraust gegeben wird.
Dafür nimmst du dann eben in diesen Fall meinen, den Ich angab. Den habe Ich schon vor einer Weile von der Tails Seite genommen.
Oder den aus der Anleitung, es ist der selbe. Besser als nichts, oder?

Ich nehme an, du hast bereits die Signaturdatei für „tails-amd64-5.21.img“ (mit der Endung „.sig“) heruntergeladen?
Denn danach überprüfst du mit GPG das Image und die Signaturdatei, in diesen Fall solltest du sie beide in den selben Ordner tun, und mit dem Terminal in diesen Ordner rein.

Ggf. kannst du im Dateimanager, während der Ordner mit den beiden Dateien offen ist, Rechtsklick machen, eventuell musst du Shift dabei gedrückt halten, dann hast du häufig die Option „Terminal/Konsole hier öffnen“, diese kannst du wählen, und einfach den Befehl verwenden:

gpg --verify tails-amd64-5.21.img.sig tails-amd64-5.21.img

(Du kannst auch den Dateinamen am Ende weglassen, dann wird diese automatisch gesucht)

Alternativ kannst du auch einfach das Terminal/die Konsole öffnen, und den Pfad zur Datei angeben, falls du Tails und die Signaturdatei mit dem Webbrowser in den Downloads Ordner heruntergeladen hast:

gpg --verify ~/Downloads/tails-amd64-5.21.img.sig ~/Downloads/tails-amd64-5.21.img

(~ wird durch dein Homeverzeichnis ersetzt)

Die Ausgabe sollte nun in etwa so lauten:

gpg: Signatur vom Do 21 Dez 2023 12:26:15 CET
gpg:                mittels EDDSA-Schlüssel CD4D4351AFA6933F574A9AFB90B2B4BD7AED235F
gpg: Korrekte Signatur von "Tails developers (offline long-term identity key) <tails@boum.org>" [unbekannt]
gpg:                     alias "Tails developers <tails@boum.org>" [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  = A490 D0F4 D311 A415 3E2B  B7CA DBB8 02B2 58AC D84F
Unter-Fingerabdruck  = CD4D 4351 AFA6 933F 574A  9AFB 90B2 B4BD 7AED 235F

Wichtig ist hierbei der Punkt:
Korrekte Signatur von "Tails developers (offline long-term identity key) <tails@boum.org>" [unbekannt]
Dieser wird angezeigt, weil du den öffentlichen Schlüssel von Tails hast (ohne den das nicht klappt), und die Signaturdatei die richtige Signatur für das Image besitzt.

Also ist ab diesen Zeitpunkt alles verifiziert.


Die Warnungen, und der [unbekannt] Zusatz am Ende der Zeilen, als auch die letzten Zeilen mit dem Fingerabdruck des Schlüssels (Der Haupt-Fingerabdruck) werden angezeigt, weil der Schlüssel nicht von dir selbst beglaubigt wurde. Das ist in diesen Fall Optional.

Das ließe sich aber lösen, indem du, wie im vorherigen Post von mir, einen eigenen privaten PGP Schlüssel erstellst, dir dessen Passwort merkst (oder aufschreibst), und mit folgenden Befehl den Schlüssel lokal Beglaubigst: (Auswahl per Fingerprint)

gpg --lsign-key A490D0F4D311A4153E2BB7CADBB802B258ACD84F

Das bestätigst du dann per j {enter}, wenn bei den letzten nummerierten (1., 2. …) Zeilen am Ende nur die „Tails developers“ angegeben werden.

Danach wäre die Ausgabe beim Verifizieren folgende:

nutzer@debian:~$ gpg --verify tails-amd64-5.21.img.sig ~/Downloads/tails-amd64-5.21.img
gpg: Signatur vom Do 21 Dez 2023 12:26:15 CET
gpg:                mittels EDDSA-Schlüssel CD4D4351AFA6933F574A9AFB90B2B4BD7AED235F
gpg: Korrekte Signatur von "Tails developers (offline long-term identity key) <tails@boum.org>" [vollständig]
gpg:                     alias "Tails developers <tails@boum.org>" [vollständig]

Das ist eventuell besser, falls du in Zukunft erneut ein Image verifizieren möchtest. Da es dann keine Zweifel hervorruft, ob die Signatur vertrauenswürdig ist. :wink:

2 „Gefällt mir“

Danke.

Das muss ich mir am Wochenende nochmal in Ruhe