// Datei: ./werkzeuge/paketquellen-und-werkzeuge/paketquelle-auf-echtheit-ueberpruefen.adoc

// Baustelle: Rohtext

[[paketquelle-auf-echtheit-ueberpruefen]]

=== Paketquelle auf Echtheit überprüfen ===
==== Basiswissen ====

Paketquellen und Repositories sind im Prinzip Fileserver mit einer vorab
festgelegten, spezifischen Struktur, deren Inhalt öffentlich zugänglich
ist <<Debian-Wiki-Debian-Repository-Format>>. Vereinfacht betrachtet
muss bei dessen Abruf sichergestellt werden, dass die von dort bezogenen
Daten echt sind und auch mit den Originaldaten übereinstimmen, aus denen
die Distribution besteht. Daher sind in der Paketverwaltung mehrstufige
Mechanismen integriert, welche die Echtheit und Vollständigkeit der
empfangenen Paketlisten und Pakete überprüfen (Authentizität).

Hintergrund dafür ist einerseits, dass eine Paketquelle Paketarchive
unterschiedlichster Herkunft umfasst. Die Daten könnten aus einer wenig
vertrauenswürdigen Quelle stammen und auch Schadcode enthalten. Ebenso
nimmt die Zuverlässigkeit von Speichermedien (Datenträger) mit der Zeit
ab und sorgt für fehlerhafte Bitfolgen. Desweiteren erfolgt der
Transport über Leitungsnetze unterschiedlichster Art, wobei hier
gekippte Bits und somit Übertragungsfehler und verfälschte Daten auf dem
Transportweg nicht vollständig auszuschließen sind.

Daher sind sowohl alle Veröffentlichungen (siehe
<<veroeffentlichungen>>), als auch die Paketquellen (siehe
<<paketquellen>>) mit den Paketlisten und die darüber bereitgestellten,
einzelnen Pakete jeweils separat digital signiert. Eine digitale
Signatur (``Schlüssel'', GPG-Key) besteht aus zwei Teilen -- einem
öffentlichen und einem privaten, geheimen Schlüssel. Die Paketlisten
werden zunächst vom Verwalter des Repositories mit seinem privaten
Schlüssel signiert und der dazugehörige, öffentliche Schlüssel
bekanntgegeben bzw. als Paket hinterlegt. Mit Hilfe dieses
Signatur-Paares überprüfen Sie einerseits die Echtheit der Paketquelle
und andererseits über die Hashsummen jeden einzelnen Pakets in den
Paketlisten auch jedes einzelne Paket daraus (siehe auch ``Bezogenes
Paket verifizieren'' in <<bezogenes-paket-verifizieren>>).

APT und `aptitude` haben diesen Vorgang in ihre internen Abläufe
integriert und nehmen Ihnen diesen Verifizierungsschritt vollständig ab.
Falls die Signatur korrekt ist, dann wird der Paketmirror bzw. das
bezogene Paket als glaubwürdig eingeschätzt. Falls nicht, erhalten Sie
eine deutliche Warnung.

[[apt-key-ueberblick]]
==== Schlüsselverwaltung mit `apt-key` (Überblick) ====

// Stichworte für den Index
(((apt-key, Schlüsselverwaltung)))
(((Debianpaket, debian-archive-keyring)))
(((Schlüsselring, /etc/apt/trusted.gpg)))
(((Schlüsselring, Debian)))
(((Schlüsselring, DebianEdu/Skolelinux)))
(((Schlüsselring, Debian-Ports-Projekt)))
(((Schlüsselring, Ubuntu)))
(((Ubuntupaket, ubuntu-keyring)))
Die Verwaltung der Schlüssel erfolgt mit dem Programm `apt-key`. Dazu
gehört ein Schlüsselring mit allen GPG-Schlüsseln der Paketquellen, aus
denen Pakete bezogen wurden. Bei Debian sind diese Schlüssel Bestandteil des
Pakets 'debian-archive-keyring'
<<Debian-Paket-debian-archive-keyring>>, bei Ubuntu heißt das Paket
hingegen 'ubuntu-keyring' <<Ubuntu-Paket-ubuntu-keyring>>.

// Fixed:
// https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=619558
// **TODO:** `/etc/apt/trustdb.gpg` erklären. Gemäß gpg-Manpage sind
// Dateien mit dem Namen "trustdb.gpg" nur Caches.

Der primäre Schlüsselring für lokale, als vertrauenswürdig eingestufte
Schlüssel ist die Datei `/etc/apt/trusted.gpg`. Für zusätzliche
Schlüsselbunde und Dateifragmente weiterer vertrauenswürdiger Schlüssel
ist das Verzeichnis `/etc/apt/trusted.gpg.d/` vorgesehen. Insbesondere
o.g. Schlüsselbund-Pakete speichern ihre Schlüsselbund-Dateien in diesem
Verzeichnis.

Die einzelnen Dateien in `/etc/apt/trusted.gpg.d/` gelten als
Konfigurationsdateien, können also vom lokalen Administrator verändert
oder gelöscht werden. Deswegen sind diese Schlüssel zusätzlich auch noch
in der Datei `/usr/share/keyrings/debian-archive-keyring.gpg` gespeichert.

Die Schlüssel haben eine begrenzte Gültigkeit oder können auch
zurückgezogen werden. Daher sind in der Schlüsselbund-Datei
`/usr/share/keyrings/debian-archive-removed-keys.gpg` auch noch
die abgelaufenen oder zurückgezogenen Schlüssel vergangener
Debian-Veröffentlichungen verfügbar.

Ähnliche Schlüsselringe gibt es auch für andere Veröffentlichungen, bspw.
`debian-edu-archive-keyring` für Skolelinux/DebianEdu <<Skolelinux>> und 
`debian-ports-archive-keyring` für das Debian-Ports-Projekt (siehe 
<<debian-architekturen-ports-projekt>>).

[[apt-key-unterkommandos]]
==== Unterkommandos von `apt-key` ====

// Stichworte für den Index
(((apt-key, export)))
(((apt-key, exportall)))
(((apt-key, finger)))
(((apt-key, list)))
(((Schlüsselring, Informationen anzeigen)))
(((Schlüsselring, Schlüssel anzeigen)))
Mit `apt-key` greifen Sie auf ihren gespeicherten Schlüsselring zu.
Damit lassen Sie sich bspw. die gemerkten Schlüssel anzeigen, fügen neue
Schlüssel zum Schlüsselring hinzu oder entfernen diese daraus wieder.
Diese Vorgänge kommen meist dann zum tragen, wenn Sie Ihr Debian-System
von Ballast befreien und nicht mehr benötigte Schlüssel austragen oder
weitere Paketquellen einbinden möchten, deren Schlüssel (noch) nicht
offiziell hinterlegt ist.

Die vier Unterkommandos `list`, `finger`, `export` und `exportall` haben
rein informativen Charakter. Mit den ersten beiden zeigen sie zu den
gespeicherten, vertrauenswürdigen Schlüsseln deren Erstell- und
Verfallsdatum sowie den Eigentümer bzw. Aussteller des Schlüssels an. Im
vorliegenden Fall ist dieser keine Person, sondern eine
Debian-Veröffentlichung bzw. deren Verantwortlicher. Als E-Mail-Adresse
ist hier diejenige der FTP-Master hinterlegt (siehe <<fig.apt-key-list>>). 

.Auflistung der gespeicherten, vertrauenswürdigen Schlüssel
image::werkzeuge/paketquellen-und-werkzeuge/apt-key-list.png[id="fig.apt-key-list", width="50%"]

// Stichworte für den Index
(((apt-key, export)))
(((apt-key, exportall)))
(((apt-key, finger)))
(((Schlüsselring, Fingerabdruck anzeigen)))
(((Schlüsselring, Schlüssel exportieren)))

Mit dem Aufruf `apt-key finger` zeigen Sie zusätzlich deren Fingerabdruck 
an{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.]. 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>

#
----

Mit dem Aufruf `apt-key export` 'Schlüssel' geben Sie hingegen nur einen 
bestimmten Schlüssel auf der Standardausgabe als als PGP-Block aus. Der 
Schalter `apt-key exportall` führt das gleiche für alle Schlüssel durch.

// Stichworte für den Index
(((apt-key, add)))
(((apt-key, del)))
(((apt-key, update)))
(((apt-key, net-update)))
(((Schlüsselring, Schlüssel aktualisieren)))
(((Schlüsselring, Schlüssel hinzufügen)))
(((Schlüsselring, Schlüssel löschen)))
(((Schlüsselring, Schlüssel über das Netzwerk synchronisieren)))
Mit `apt-key add` 'Schlüsseldatei' und `apt-key del` 'Schlüssel-ID'
verändern Sie den Inhalt des Schlüsselbundes. Mit ersterem fügen Sie
einen neuen Schlüssel aus einer Datei hinzu, mit letzterem löschen Sie
den Schlüssel mit der angegebenen Schlüssel-ID aus dem Schlüsselring.

Die Option `update` synchronisiert hingegen den lokalen Schlüsselbund
mit dem Archivschlüsselbund. Dabei werden die Schlüssel aus dem lokalen
Schlüsselbund entfernt, die nicht mehr gültig sind. In Ubuntu ist auch
die Option `net-update` anwendbar, die eine Synchronisation mit einem
Schlüsselbund über das Netzwerk ermöglicht.

NOTE: Ab Debian 9 'Stretch' ist diese Option als veraltet markiert.

==== Beispiel: Ergänzung eines Schlüssels ====

Nutzen Sie beispielsweise den Webbrowser Opera, finden Sie dazu keine
Pakete in den offiziellen Debian-Paketquellen. Opera ist nicht als freie
Software eingeordnet, aber als `deb`-Paket von der Herstellerwebseite
beziehbar. Daher fügen Sie in Schritt eins die Paketquelle zur Datei 
`/etc/apt/sources.list` hinzu (siehe auch
<<etc-apt-sources.list-verstehen>>):

----
deb http://deb.opera.com/opera stable non-free
----

Als Schritt zwei benötigen Sie noch den dazugehörigen Schlüssel der
Paketquelle. Der Hersteller empfiehlt auf seiner Seite den Bezug
mittels `wget` wie folgt:

.Bezug des Schlüssels zur Paketquelle, hier für Opera mittels `wget`
----
# wget http://deb.opera.com/archive.key
--2014-06-17 23:54:43--  http://deb.opera.com/archive.key
Auflösen des Hostnamen »deb.opera.com (deb.opera.com)«... 185.26.183.130
Verbindungsaufbau zu deb.opera.com (deb.opera.com)|185.26.183.130|:80... verbunden.
HTTP-Anforderung gesendet, warte auf Antwort... 200 OK
Länge: 2437 (2,4K) [application/pgp-keys]
In »»archive.key«« speichern.

100%[=======================================================================>] 2.437       --.-K/s   in 0s      

2014-06-17 23:54:43 (63,0 MB/s) - »»archive.key«« gespeichert [2437/2437]
#
----

[IMPORTANT]
.Unverschlüsselte Übertragung von Schlüsseln
====
Bitte beachten Sie, dass dieser Schlüssel jedoch nicht über gesicherte
Kanäle (z.B. per HTTPS) heruntergeladen wurde und Sie damit nicht
hundertprozentig sicher sein können, dass dieser Schlüssel wirklich von
Opera ist. Leider scheint der Schlüssel auch nicht mit allzu vielen
Signaturen ausgestattet zu sein, sodass eine Verifizierung über die
Signaturen ebenfalls nicht möglich ist.
====

Der bezogene Schlüssel befindet sich nun im aktuellen Verzeichnis in der
lokalen Datei `archive.key`. Diesen Schlüssel fügen Sie nun über den
Aufruf `apt-key add archive.key` Ihrem lokalen Schlüsselbund hinzu:

.Hinzufügen des bezogenen Schlüssels mittels `apt-key`
----
# apt-key add archive.key 
OK
#
----

Hat alles geklappt, meldet sich `apt-key` mit einem schlichten `OK`
zurück. Von nun an werden alle Pakete von dieser Paketquelle als
vertrauenswürdig eingestuft. Auch Aktualisierungen über APT und
`aptitude` sind problemlos möglich.

Es bleibt jedoch ein unangenehmer Beigeschmack erhalten. Aufgrund der
ungesicherten Übertragung des bezogenen Schlüssels können Sie nicht
sicher sein, ob der bezogene Schlüssel wirklich von Opera ist und Sie
ihm vertrauen können, oder ob nicht zufällig eine
Man-in-the-Middle-Attacke im Gange ist.

==== Abkündigung von apt-key  ====

Seit APT 2.1.8 ist `apt-key` offiziell abgekündigt. Ersatz ist das
Ablegen von Keyring-Dateien im Verzeichnis `/etc/apt/trusted.gpg.d/`,
z.B. als Bestandteil eines Paketes. Solche Pakete heißen
typischerweise `<herausgeber>-archive-keyring`,
z.B. `debian-archive-keyring`, `ubuntu-archive-keyring` oder
`pkg-mozilla-archive-keyring`.

==== Alternative Benutzerschnittstellen zur APT-Schlüsselverwaltung ====

// Stichworte für den Index
(((curses-apt-key)))
(((gui-apt-key)))
Die Abkündigung von `apt-key` ist auch einer der Gründe, warum sich
niemand mehr darum gekümmert hat, `gui-apt-key`
<<Debian-Paket-gui-apt-key>>, das verwaiste GUI-Frontend zu `apt-key`,
weiterzuentwickeln. Entsprechend ist auch die darauf aufbauende,
curses-basierende TUI-Programm `curses-apt-key` <<curses-apt-key>>
nicht mehr weiterentwickelt wird.

// Datei (Ende): ./werkzeuge/paketquellen-und-werkzeuge/paketquelle-auf-echtheit-ueberpruefen.adoc
