Partager des codes TOTP sans partager le secret

Donner à ses collègues un code TOTP valide en gardant le secret au même endroit, et ce que chaque approche implique le jour où il faut retirer un accès.

Le secret et l’heure courante sont les seules entrées d’un code TOTP : on ne peut donc pas en calculer un sans le secret. L’astuce n’est pas de partager le secret autrement, elle est de faire en sorte que l’appareil de chacun n’en ait plus besoin : quelque chose détient le secret et distribue les codes à la demande. Cette distinction fait tout le sujet de comment partager des codes 2FA en équipe en toute sécurité ; cet article-ci parle de mécanique.

Pourquoi la différence compte autant

Un code vaut une trentaine de secondes. L’envoyer à un collègue est à peu près aussi sensible que lire un numéro de suivi de colis : le temps qu’il fuite, il est déjà invalide, et il n’aurait de toute façon servi qu’à une seule tentative de connexion.

Un secret vaut tout ce que vaut le compte, aussi longtemps que la 2FA reste configurée. Il fait généralement 16 à 32 caractères, c’est lui que contient le QR code, et ses copies sont invisibles : rien dans la page de sécurité du compte ne vous dira jamais que quatre personnes ont scanné l’écran de configuration en 2024.

C’est cette asymétrie qui fait que « on partage les codes » et « on a partagé le QR code une fois » décrivent deux postures de sécurité complètement différentes, même si les deux ressemblent à du partage de 2FA.

Trois façons de distribuer des codes, pas des secrets

Un coffre partagé qui affiche les codes

Le secret est saisi une fois, par la personne qui administre le compte, et stocké chiffré. Les collègues à qui l’accès a été donné ouvrent l’entrée et voient le code courant avec son décompte. Ils ne voient jamais la chaîne derrière, et ne peuvent pas enrôler leur propre application à partir de là.

C’est la réponse polyvalente, et celle qui survit aux arrivées et aux départs, parce que l’accès est une liste qu’on modifie plutôt qu’un secret qu’on ne peut pas rappeler.

Sous forme de produit, c’est une application d’authentification partagée : le coffre détient le secret, les gens ne détiennent rien.

Un appel d’API depuis vos propres outils

Si la connexion est faite par un script, un export nocturne, un job de CI ou un robot qui publie sur un compte client, le code n’a pas besoin d’arriver jusqu’à un humain. Vos outils demandent le code courant au moment de se connecter, et le secret reste côté serveur.

La règle : l’identifiant que votre script utilise pour demander le code doit être aussi protégé que le compte lui-même, et limité au seul compte dont il a besoin.

Le lire à voix haute, délibérément

Quelqu’un qui a l’accès lit le code à un collègue au téléphone. Ça mérite d’être nommé, parce que c’est ce que font déjà la plupart des équipes, et que ce n’est pas faux. On partage exactement la chose éphémère, et rien d’autre.

Ses limites sont pratiques et non cryptographiques : il faut deux personnes éveillées en même temps, ça ne laisse aucune trace de qui s’est connecté, et ça fait d’une personne le goulot d’étranglement de toutes les autres.

Ce qu’on perd à partager le secret à la place

Si le secret sort, collé dans un canal, capturé en image ou déposé dans une note partagée, trois choses deviennent vraies d’un coup, et le restent jusqu’à la réinitialisation de la 2FA :

  • On perd le compte. Impossible de savoir combien d’appareils le détiennent.
  • On perd la révocation. Retirer quelqu’un d’un canal ne retire pas le secret de son application d’authentification.
  • On perd l’indépendance du second facteur. Partout où le secret se trouve à côté du mot de passe, un attaquant qui atteint cet endroit tient les deux facteurs.

Rien de tout cela n’est théorique, et rien n’apparaît dans un audit du compte lui-même. Ça se voit des mois plus tard, quand quelqu’un qui a quitté l’entreprise dispose toujours d’un générateur de codes fonctionnel.

Une courte liste de contrôle

  • Le secret est saisi une fois, à un seul endroit, par un administrateur du compte.
  • Tous les autres ont accès aux codes, accordé personne par personne et compte par compte.
  • Les consultations sont journalisées, pour que « qui s’est connecté mardi » ait une réponse.
  • Les codes de récupération sont rangés avec le secret, pas distribués avec lui.
  • Tout secret qui a été publié quelque part est considéré comme brûlé : réinitialiser la 2FA sur ce compte et réenrôler.

Questions fréquentes

Pas sur son propre appareil : le secret est la seule entrée, avec l’heure. Ce qu’on peut faire, en revanche, c’est laisser autre chose détenir le secret et produire le code à la demande, ce que fait un coffre partagé ou un appel d’API.

À lire aussi · Partager des codes en équipe