Christian Theune
Jan Ulrich Hasecke
Martin v. Löwis
Thomas Lotze
Veit Schiele
2011-04-06
Da PyPI häufig von Clients wie zc.buildout, setuptools oder pip verwendet wird, sollten diese das Mirroring-Protokoll PEP381 unterstützen.
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:
Schädliche Pakete
Kompromittierung des Master-Index
Kompromittierung der Mirrors
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.
Für das dritte und vierte Szenario ist den Clients folgendes Vorgehen zum Überprüfen der Pakete empfohlen:
Überprüfung der Simple Pages
Herunterladen der Simple Page und Berechnen von deren SHA-1-Hash-Wert
Herunterladen der korrespondierenden /serversig-Datei, die einen mit dem geheimen Schlüssel des Master-Index verschlüsselten Hash-Wert enthält (DSA-Signatur).
Entschlüsselung des Hashwerts mit dem öffentlichen Schlüssels des Master-Index und Vergleich der beiden Hash-Werte.
Überprüfung aller heruntergeladenen Dateien.
Berechnen der MD-5-Hash-Werte aller Dateien, die von einem Mirror heruntergeladen werden.
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.