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.