Eigenschaften eines Clients

Authors:
  • Christian Theune
  • Jan Ulrich Hasecke
  • Martin v. Löwis
  • Thomas Lotze
  • Veit Schiele
Date:

2011-04-06

Motivation

Da PyPI häufig von Clients wie zc.buildout, setuptools oder pip verwendet wird, sollten diese das Mirroring-Protokoll PEP381 unterstützen.

Authentizität

Bei einem verteilten System sollten PyPI-Clients überprüfen können, ob die gespiegelten Kopien der Pakete authentisch sind. Zudem sollten sie auf die folgenden Bedrohungen vorbereitet sein:

  1. Schädliche Pakete
  2. Kompromittierung des Master-Index
  3. Kompromittierung der Mirrors
  4. Man-in-the-middle-Angriff zwischen Master-Index/Mirrors und PyPI-Clients

Um auf das erste Szenario vorbereitet zu sein, können die Autoren ihr Paket mit ihrem PGP-Schlüssel signieren, sodass die Nutzer zumindest überprüfen können, ob das Paket von einem Autor kommt, dem sie vertrauen.

Die PyPI-Clients sollten in der Lage sein, zu überprüfen, ob die Pakete mit dem PGP-Schlüssel des angegebenen Autors signiert sind.

Authentizität der Mirrors

Für das dritte und vierte Szenario ist den Clients folgendes Vorgehen zum Überprüfen der Pakete empfohlen:

  1. Überprüfung der Simple Pages
    1. Herunterladen der Simple Page und Berechnen von deren SHA-1-Hash-Wert
    2. Herunterladen der korrespondierenden /serversig-Datei, die einen mit dem geheimen Schlüssel des Master-Index verschlüsselten Hash-Wert enthält (DSA-Signatur).
    3. Entschlüsselung des Hashwerts mit dem öffentlichen Schlüssels des Master-Index und Vergleich der beiden Hash-Werte.
  2. Überprüfung aller heruntergeladenen Dateien.
    1. Berechnen der MD-5-Hash-Werte aller Dateien, die von einem Mirror heruntergeladen werden.
    2. Vergleich der errechneten MD-5-Hash-Werte mit den Werten in den Simple Pages.

Eine Beispielimplementierung finden Sie in verify.py

Diese Überprüfung ist jedoch nicht notwendig, wenn vom Master-PyPI heruntergeladen wird.