// Datei: ./werkzeuge/paketoperationen/bezogenes-paket-verifizieren.adoc
// Baustelle: Rohtext

[[bezogenes-paket-verifizieren]]

=== Bezogenes Paket verifizieren (GPG-Key) ===

// Stichworte für den Index
(((Paket, auf Vertrauenswürdigkeit prüfen)))
(((Paket, Signatur überprüfen)))
(((Paket, verifizieren)))
(((Paketsignatur, überprüfen)))
Installieren Sie ein Paket von einer Paketquelle, greifen eine ganze
Reihe von automatischen Überprüfungen, die sicherstellen, dass die von
Ihnen bezogenen Daten vertrauenswürdig sind. Mit den nachfolgend
beschriebenen Vorgehensweisen können Sie die entsprechenden
Einzelschritte selbst nachvollziehen und durchführen.

Diese Überprüfungen stellen sicher, dass ein von Ihnen bezogenenes
Debianpaket dem Paketmirror so entnommen wurde, wie es von der
Distribution in der Veröffentlichung zur Verfügung gestellt wurde. Sie
schließen damit aus, dass zwischenzeitlich Veränderungen von einer
dritten Partei oder auf dem Paketmirror stattgefunden haben. Weiterhin
wissen Sie danach ebenfalls, dass das Paket vollständig zu Ihnen
übertragen wurde und dass das Paket auf dem Weg vom Paketmirror zu Ihnen
nicht verändert wurde. U.a. bilden diese Schritte die Vertrauensbasis
für die von Ihnen bezogene Software.

// Stichworte für den Index
(((Debian, Vertrauenskette)))
(((Paketsignaturen)))
Aus diesem Grund sind sowohl die offiziellen Paketquellen von Debian,
als auch die darüber referenzierten Quellpakete signiert (siehe dazu
<<paketquelle-auf-echtheit-ueberpruefen>>). Die Signaturen werden
mithilfe der Public-Key-Kryptographie erststellt. Mit dem entsprechenden
öffentlichen Schlüssel (engl. 'Public Key') können Sie (und jeder andere
Benutzer ebenso) überprüfen, ob das Paket vertrauenswürdig ist.

==== Basis ====

// Stichworte für den Index
(((Debian, Vertrauenskette)))

Die Grundlage dazu bildet die Vertrauenskette bei Debian, die sich vom
Entwickler zum Build-Daemon (kurz ``buildd'') bis hin zum
FTP-Master-Server, den Paketlisten, dem Debian-Archive-Keyring und dem
Debian-Keyring erstreckt. Genutzt wird dabei eine Kombination aus
kryptographischen Hashsummen und einer digitalen Signatur.

Auf den Debian-Spiegelservern befindet sich pro Veröffentlichung eine
digital signierte Datei namens `Release`. Sie beinhaltet die
Namen der Paketlisten (heutzutage meist `Packages`,
`Packages.gz` und `Packages.xz`, früher oft auch noch
`Packages.bz2`) sowie deren Hashsummen als MD5-, SHA1- und
SHA256-Variante. Mit der digitalen Signatur der Release-Datei und den
darin enthalten Hashsummen wird sichergestellt, dass diese Dateien
nicht verändert wurden.

Die Datei `Packages` (wie auch deren komprimierten Varianten)
beinhaltet wiederum eine Liste von Paketen bzw. deren Dateien, die für
diese Veröffentlichung zur Verfügung stehen – und deren Hash-Summen.
Dies stellt wiederum sicher, dass die Paketdateien aus der Liste nicht
verändert wurden.

Durch die gesamte Kette aus Paket-Hashsummen in den Paketlisten und
Paketliste-Hashsummen in der Release-Datei garantiert die einzelne
digitale Signatur auf der Release-Datei die Integrität sämtlicher Pakete
einer Veröffentlichung.

// Stichworte für den Index
(((apt-key)))
(((apt-key, add)))
(((/etc/apt/trusted.gpg)))
(((Debianpaket, apt)))
(((Debianpaket, debian-archive-keyring)))
Vertrauenswürdige Schlüssel verwalten Sie mit dem Programm `apt-key` aus
dem Paket 'apt'. Dazu gehört ein Schlüsselring von öffentlichen
GnuPG-Schlüsseln, sog. ``Public Keys'', mit denen die Signaturen in der
Datei `Release.gpg` auf den Debian-Spiegelservern überprüft
werden können. Dieser Schlüsselring ist im Paket
'debian-archive-keyring' enthalten und lokal in Dateien im Verzeichnis
`/etc/apt/trusted.gpg.d` gespeichert.

Dazu kommt noch die Datei `/etc/apt/trusted.gpg`, welche
heutzutage nur noch manuell per `apt-key add` hinzugefügte Schlüssel
enthält. Bei früheren Veröffentlichungen war diese Datei die
alleinige Quelle zur Überprüfung von Veröffentlichungssignaturen.

// Stichworte für den Index
(((apt-key, finger)))
Die Signaturen der von Ihnen verwendeten Paketquellen zeigen Sie mit dem
Aufruf `apt-key finger'{empty}footnote:[Da die Datei `/etc/apt/trusted.gpg`
teilweise für normale User nicht lesbar ist, kann es sein, dass Sie dieses
Kommando mit Root-Rechten ausführen müssen.] an. Nachfolgend sehen Sie
beispielhaft die Signaturen zum Opera Software Archive, dem Mendeley
Desktop Team und dem Debian Archive für die beiden Veröffentlichungen
_Wheezy_ und _Jessie_.

.Liste der Signaturen (Ausschnitt)
----
# apt-key finger
/etc/apt/trusted.gpg
- -------------------
pub   1024D/30C18A2B 2012-10-29 [verfallen: 2014-10-29]
  Schl.-Fingerabdruck = ABCD 165A F57C AC92 18D2  872B E585 066A 30C1 8A2B
uid                  Opera Software Archive Automatic Signing Key 2013 <packager@opera.com>

pub   2048R/6F036044 2011-02-21
  Schl.-Fingerabdruck = 26BB 0219 1EF4 588D 3A7B  C30F D800 C7D6 6F03 6044
uid                  Mendeley Desktop Team <desktop@mendeley.com>
sub   2048R/F9CE0BFD 2011-02-21

/etc/apt/trusted.gpg.d/debian-archive-jessie-stable.gpg
- -------------------------------------------------------
pub   4096R/518E17E1 2013-08-17 [verfällt: 2021-08-15]
  Schl.-Fingerabdruck = 75DD C3C4 A499 F1A1 8CB5  F3C8 CBF8 D6FD 518E 17E1
uid                  Jessie Stable Release Key <debian-release@lists.debian.org>

/etc/apt/trusted.gpg.d/debian-archive-wheezy-automatic.gpg
- ----------------------------------------------------------
pub   4096R/46925553 2012-04-27 [verfällt: 2020-04-25]
  Schl.-Fingerabdruck = A1BD 8E9D 78F7 FE5C 3E65  D8AF 8B48 AD62 4692 5553
uid                  Debian Archive Automatic Signing Key (7.0/wheezy) <ftpmaster@debian.org>

/etc/apt/trusted.gpg.d/debian-archive-wheezy-stable.gpg
- -------------------------------------------------------
pub   4096R/65FFB764 2012-05-08 [verfällt: 2019-05-07]
  Schl.-Fingerabdruck = ED6D 6527 1AAC F0FF 15D1  2303 6FB2 A1C2 65FF B764
uid                  Wheezy Stable Release Key <debian-release@lists.debian.org>

#
----

// Stichworte für den Index
(((Debianpaket, gui-apt-key)))
(((gui-apt-key)))

**TODO:** gui-apt-key/curses-apt-key doppelt gemoppelt: Auch schon in
<<paketquelle-auf-echtheit-ueberpruefen>> aufgeführt.

Für eine graphische Darstellung nutzen Sie stattdessen das Werkzeug
`gui-apt-key` aus den gleichnamigen Paket <<Debian-Paket-gui-apt-key>>.
Es existiert auch eine TUI-Variante namens `curses-apt-key`
<<curses-apt-key>>. Diese ist aber zur Zeit noch nicht offizieller
Bestandteil von Debian, da dazu zuerst das Paket `gui-apt-key` in
Bibliothek und Frontend aufgespalten werden müsste. Details dazu finden
Sie im Debian-Bugtracker
<<curses-apt-key-braucht-gui-apt-key-aufsplittung>>. In
<<fig.gui-apt-key2-gpg>> sehen Sie `gui-apt-key` mit der Überprüfung des
(inzwischen abgelaufenen) Schlüssels für das Opera Software Archive.

.Informationen zu einem ausgewählten Schlüssel in `gui-apt-key` anzeigen
image::werkzeuge/paketoperationen/gui-apt-key2.png[id="fig.gui-apt-key2-gpg", width="50%"]

==== Nur ein Einzelpaket prüfen ====
* `apt-key` (siehe <<Debian-Wiki-SecureApt>>)
* empfohlene Vorgehensweise zur Validierung
** ToDo
* was passiert, wenn das Paket keinen gültigen GPG-Key hat
** wie erkenne ich das bzw. bekomme das heraus
** Ausgabe einer Warnung (W) bei `apt-get` und `aptitude` (siehe <<fig.aptitude-paket-ohne-gpg>>)

.Aktualisierung der Paketlisten mit erkanntem GPG-Fehler
----
# apt-get update
...
Hole:10 http://deb.opera.com squeeze/non-free i386 Packages [774 B]
Es wurden 1.250 kB in 3 s geholt (329 kB/s)
Paketlisten werden gelesen... Fertig
W: GPG-Fehler: http://deb.opera.com squeeze Release: Die folgenden Signaturen konnten 
nicht überprüft werden, weil ihr öffentlicher Schlüssel nicht verfügbar ist: 
NO_PUBKEY E585066A30C18A2B
#
----

.Ausgabe einer 'deutlichen' Warnung bei `aptitude`
image::werkzeuge/paketoperationen/aptitude-paket-ohne-gpg.png[id="fig.aptitude-paket-ohne-gpg", width="50%"]

==== Alle bereits installierten Pakete und Dateien prüfen ====

Um eine ganze Installation auf Korrektheit und bzgl. möglicher
Veränderungen zu überprüfen, müssen Sie nicht jedes Paket einzeln
anschauen. Wie Sie in dieser Situation vorgehen, lesen Sie unter
<<paket-auf-veraenderungen-pruefen>> nach.

// Datei (Ende): ./werkzeuge/paketoperationen/bezogenes-paket-verifizieren.adoc
