La crypto ça sert à tout

Cet article se veut vulgarisateur. On va vous expliquer comment on a utilisé des technologies de cryptographie pour envoyer des autocollants, tracts et affiches  gratuites aux groupes d’action certifiés de la France insoumise.

Un peu de contexte :

Les groupes d’action certifiés ont droit chaque mois à une certaine quantité de tracts et d’affiches qui leurs sont livrés gratuitement dans toute la France par les volontaires du local. Ceci se fait au moyen d’un code utilisé au moment de la commande sur le site matériel.

Auparavant, ces codes était générés chaque mois et envoyés par e-mail aux groupes d’action. Cela occasionnait beaucoup de travail pour l’équipe opérationnelle, et de nombreux désagréments : ainsi un groupe qui était certifié au cours du mois devait attendre le mois suivant pour obtenir un code.

Dorénavant, les codes seront affichés directement sur la page de gestion de chacun des groupes d’action. Ils sont renouvelés chaque 1er du mois.

En gros, il s’agit d’afficher sur la page de chaque groupe un code, qui pourra être utilisé sur le site matériel pour ne pas payer les tracts et les affiches.

Les contraintes sont les suivantes :

  1. On ne veut pas avoir à créer les codes manuellement à chaque fois.
  2. Les animatrices et animateurs de groupes d’action doivent pouvoir trouver leur code sur leur page de gestion.
  3. Le site matériel fonctionne avec un système qui possède déjà une fonctionnalité de « codes promo » : autant s’y intégrer afin d’éviter du travail supplémentaire.
  4. Le site qui gère les groupes d’action et le site matériel sont deux systèmes différents, donc pas d’accès aux mêmes disques durs (donc pas de possibilité de partager une base de données).
  5. On veut éviter au maximum le « couplage », c’est à dire le fait que si un des deux sites (matériel ou groupe d’action) tombe en rade, l’autre soit entraîné avec lui.

La méthode qui vient le plus naturellement à l’esprit pour quelqu’un qui fait de l’informatique est la suivante. Elle consisterait à créer automatiquement des codes (1) pour chaque groupe d’action, et les enregistrer dans la base de données à côté des groupes. On peut ainsi les afficher (2) sur la page de chaque groupe. Ensuite, lors de l’achat sur le site matériel, si l’utilisateur rentre un code (3), on interroge le site de groupes d’action via une communication inter-serveurs (4). Problème, si le site de groupes d’action ne répond pas (à cause d’un problème réseau, parce qu’il est planté), alors le site matériel ne fonctionnera pas. Du coup, le point (5) n’est pas respecté.

C’est là que la cryptographie vient à la rescousse : elle va permettre que le site matériel puisse vérifier la validité d’un code sans contacter le système de groupe d’appui.

Voici comment est composé un code :

ThXRdZhJ9TzaI4

Th : les deux premiers caractères représentent la date de validité du code

XRdZhJ : les six caractères suivants identifient le groupe d’appui

9TzaI4 : ces six derniers caractères sont une signature

Tout le système repose dans cette signature. Lorsque le site de groupe d’action crée un code, il génère la partie rouge et la partie verte à partir de la date et d’un numéro unique associé à chaque groupe d’appui.

Puis, il utilise une clé secrète pour générer la partie bleue. Nous n’allons pas détailler l’algorithme ici, mais c’est comme si l’on multipliait la partie rouge et verte par la clé secrète pour obtenir la partie rouge. Si on ne connaît pas la clé secrète, impossible de générer cette signature.

Le site matériel connaît aussi la clé secrète. Lorsque que quelqu’un entre un code, l’opération est simple. Le site matériel commence par séparer le code en ses trois parties. Il reprend la partie de gauche, et recalcule la signature avec la clé.

Si la signature calculée par le site matériel correspond à la partie de droite du code fourni par l’utilisateur, c’est bon ! C’est forcément que le code provient bien du site de gestion des groupes d’action, puisque c’est le seul à connaître la clé secrète qui permet de générer cette signature.

En clair, si vous êtes un peu maligne ou malin (ou que vous allez directement voir comment ça marche) vous pouvez deviner les huit premiers caractères d’un code. Mais vous ne pourrez jamais deviner les suivants si vous n’avez pas la clé 😉