• [^] # Re: Mauvais facteur

    Posté par . En réponse à la dépêche PyPI déploie le système 2FA pour les projets critiques écrits en Python. Évalué à 5.

    Pourquoi pas les deux ? Authentification à deux facteurs et enrôlement de la machine ?

    C’est justement ce que fait PyPI. Tu peux avoir une authentification à deux facteurs (que ce soit via une application TOTP ou via une clef FIDO U2F) pour te connecter à ton compte PyPI et utiliser un jeton (token) propre à chaque machine pour télécharger des paquets sur le serveur via l’API.

    Le jeton te permet d’utiliser l’API de PyPI indépendamment de ton mot de passe (et de l’authentification à deux facteurs qui y est éventuellement associée) et a plusieurs avantages par rapport à un mot de passe :

    • ce qu’il est possible de faire avec le jeton est limité ; en gros, tu ne peux que t’en servir pour télécharger des paquets vers PyPI via l’API, il ne donne pas accès au compte lui-même (en particulier, il ne permet donc pas de changer le mot de passe du compte, ou de générer/révoquer des jetons) ;
    • tu peux même limiter encore plus le « rayon d’action » du jeton, en le limitant à un projet précis ;
    • le jeton peut être révoqué à tout moment, sans aucun effet sur ton mot de passe et ton second facteur.

    Du coup, il devient acceptable de faire avec le jeton ce qu’il ne faut jamais faire avec un mot de passe, à savoir l’écrire quelque part dans un fichier de configuration — typiquement, le fichier de configuration de twine, utilisé pour télécharger des paquets vers PyPI depuis la ligne de commande.

    Ça te permet donc de télécharger des paquets aussi souvent que tu en as besoin sans jamais avoir besoin de saisir ni mot de passe ni code de vérification. Si jamais ta machine venait à être compromise, il te suffit de te connecter à ton compte via l’interface web (où tu auras besoin de ton mot de passe et du second facteur associé) et de révoquer le jeton incriminé.

    Avec cette configuration, la « pénibilité » de l’authentification à deux facteurs est considérablement réduite, puisque j’ai beaucoup plus souvent besoin de télécharger un paquet via twine (ce qui ne nécessite aucun mot de passe, le jeton est suffisant) que de me connecter à mon compte sur PyPI (la dernière fois que j’ai eu à faire ça, c’était justement pour générer un nouveau jeton pour enrôler une nouvelle machine).