Python >> Tutoriel Python >  >> Python Tag >> PIP

Le pip de python fournit-il une authentification cryptographique et une validation d'intégrité ?

La réponse courte est :pip utilise toujours TLS, ce qui est en fait assez utile ici. Cela signifie que tant que personne n'a réussi à compromettre PyPI lui-même ou à voler le certificat du site, vous pouvez être certain que les packages que vous téléchargez sont ceux que les administrateurs PyPI jugent corrects. Et il est difficile de faire mieux que cela :après tout, les administrateurs PyPI sont les seuls à savoir quels utilisateurs sont autorisés à télécharger quels packages, vous devez donc leur faire confiance.

Comme le mentionne match, il existait également un moyen de télécharger des signatures PGP pour les packages. Cependant, cela a été supprimé, car il ne s'agissait essentiellement que d'un théâtre de sécurité - compliqué et donne l'impression que vous êtes en sécurité, mais n'améliore pas réellement la sécurité. L'un des principaux administrateurs de PyPI a publié un ancien message à ce sujet :https://caremad.io/posts/2013/07/packaging-signing-not-holy-grail/

Qu'est-ce que serait le mieux est d'utiliser un framework comme TUF qui peut fournir des garanties telles que :"la personne qui a téléchargé ceci était approuvée par les administrateurs PyPI au moment du téléchargement , et si PyPI est compromis par la suite, l'attaquant ne peut pas revenir en arrière et modifier quoi que ce soit qui s'est passé avant la compromission". TUF est à peu près similaire à la signature de paquet utilisée par les distributions Linux, mais un peu plus puissante. Les responsables de PyPI ont obtenu une subvention pour l'implémenter et le travail est en cours :https://wiki.python.org/psf/PackagingWG#Warehouse:_Facebook_gift

L'un des défis est que pour démarrer un système cryptographique comme celui-ci, vous avez besoin d'une cérémonie de signature de clé, qui devait avoir lieu en personne à PyCon cette année... mais bon. Merci de patienter :-)

En attendant, vous pouvez obtenir un effet similaire localement en mettant des hachages de paquets dans votre requirements.txt :cela garantit que si un attaquant se faufile d'une manière ou d'une autre dans un faux paquet après que vous ayez exécuté cette commande, il sera rejeté. Ou certains outils de gestion des dépendances comme pipenv ou poetry le fera automatiquement pour vous.


En quelque sorte...

Tout d'abord, Pypi inclut un hachage du fichier en cours de téléchargement, afin que toute modification/erreur entre le serveur et le client soit repérée.

Deuxièmement, pip prend en charge un mode de vérification de hachage dans lequel vous pouvez spécifier le hachage requis pour le package demandé dans requirements.txt sous la forme :

Foo==1.2.3 --hash=sha256:xxxxxxx

pip vérifiera alors que le package téléchargé est haché à cette valeur, et les erreurs si ce n'est pas le cas. https://pip.pypa.io/en/stable/reference/pip_install/#hash-checking-mode

Troisièmement, Pypi a un mécanisme où une signature peut être téléchargée avec un paquet. twine prend en charge cela.

Vous pouvez ensuite télécharger la signature à côté du colis et la vérifier. Le fichier de signature se trouve à la même URL, mais avec .asc annexé - par ex. https://pypi.python.org/packages/py2.py3/p/pip/pip-7.1.2-py2.py3-none-any.whl et sa signature en https://pypi.python.org/packages/py2.py3/p/pip/pip-7.1.2-py2.py3-none-any.whl.asc

Vous pouvez effectuer la vérification manuellement en téléchargeant les deux fichiers et en exécutant par exemple

gpg --verify mypackage.whl.asc mypackage.whl

Cependant, à l'heure actuelle, il n'y a pas de mécanisme intégré au pip outils pour effectuer cette étape automatiquement en votre nom - bien qu'il y ait eu récemment des discussions à propos de cela comme une fonctionnalité indispensable à plusieurs reprises parmi les développeurs.