Passage obligé pour décrire le fonctionnement électrique de chaque module, nous allons nous contenter ici du stricte minimum. Ce type d’explications pullule sur la toile et si j’en fais ici un résumé ultra condensé, c’est pour vous éviter d’effectuer des recherches et de faire de ce tutoriel un ensemble cohérent et surtout autonome. Ultra produit et reproduit, le schéma de la Fig.4 explicite le cheminement du courant électrique dans la machine et précise la transformation effectuée sur la lettre qui est frappée sur le clavier de l’ensemble. Le chiffrage s’effectue lettre à lettre. Dans cet exemple, pour le codage initial de la journée envisagée, on a introduit les deux Fiches croisées du schéma de la Fig.3
respectivement sur la lettre S et la lettre D. Ainsi, une lettre S sera transcodée en D et réciproquement une lettre D sera codée S. On satisfait ainsi le cryptage et le décryptage avec une configuration initiale identique. Supposons par exemple que l’opérateur radio frappe sur la touche A . L’électricité partant de a et arrivant en b transite par le contact travail de l’inverseur en c. Du plot en d sur la prise double A le courant traverse la palette P poussée sur les deux plots par le ressort symbolisé en vert clair. Partant du plot en e le courant se retrouve en f. Il traverse alors le Brouilleur pour arriver en g. (Noter au passage que la ligne noire représente un autre cheminement non utilisé dans cet exemple.) Dans le Réflecteur le circuit se poursuit en h pour retraverser le Brouilleur et ressortir en i. La ligne électrique correspondant au barillet de sortie arrive alors sur la prise double S. Hors la Fiche croisée pousse avec les broches b la plaquette P par les isolants i. Du coup la tension en j transite par la ligne croisée en k. Puis de k elle arrive alors en i sur le commun de l’inverseur D dont le contact repos alimente l’ampoule D en m. Lorsque l’opérateur relâche la touche A le mécanisme fait changer le Rotor de droite d’une position. Du coup les croisements internes de la zone coloriée en vert pastel changent de configuration. Si on clique à nouveau sur la lettre A, le cheminement ne sera plus identique et la sortie du brouilleur se fera sur
une autre ligne mais plus en i. Lorsque l’on frappera 26 fois la lettre A, chaque fois la transposition dans le Brouilleur sera différente. Un caractère A de plus et c’est le rotor central qui se décale d’une position. Les 26 lettre A qui suivent seront encore différentes. Pour qu’un cycle dans le brouilleur se répète, il faut 26 x 26 x 26 = 17 576 caractères frappés sur le clavier. Tant que le message à encrypter ne dépasse pas les 17 576 caractères, il n’y a aucune répétition de l’alphabet de substitution. La Fig.4B précise la répartition des touches sur le clavier ou des ampoules électriques sur le tableau de transcription des caractères. C’est la même clé d’initialisation de la machine qui sert à coder et à décoder. En effet, si la lettre U est transformée en B, réciproquement le B est permuté en U. Dans le cas d’Enigma, cette clé indique le réglage de départ des mécanismes de la machine émettrice. Puisque le codage est réversible, seule la connaissance de la configuration initiale des rotors, du réflecteur et du tableau de connexions de l’Enigma suffit. Noter que par conception de la machine il est impossible qu’une lettre soit transposée en elle même.
La combinatoire explosive d’ENIGMA.
Bien que ce ne soit strictement pas utile du tout pour développer un émulateur de cette machine à coder, il me semble important de souligner ici le génie des techniques mises en Å“uvre pour générer un transcodage dont le nombre de clefs possibles soit tellement grand que l’on puisse affirmer que « craquer » son code par la méthode brute soit totalement impossible. (Et montrer au passage le génie d’Alan Turing qui en 1940 à cassé le code de cette codeuse supposée « inviolable ».)
• Le Brouilleur permet 17 576 possibilités pour positionner initialement les trois Rotors.
• Trois Rotors à utiliser dans un ordre quelconque parmi cinq : 60 possibilités.
• Le tableau de connexions avec les dix câbles permute 20 lettres deux-à -deux, seulement 6 d’entre elles restent inchangées. Cette technique engendre 150738274937250 permutations possibles. Le nombre total de combinaisons, soit le produit des combinaisons des choix des rotors, de leurs positions de départ et du tableau de connexion, est donc de
Difficile d’imaginer la grandeur de ce nombre. Et encore, il faudrait le doubler car on dispose de deux Réflecteurs différents. Par exemple considérons un Giga, soit un milliard. On calculera facilement qu’un milliard de secondes représente 11574 jours. Il nous faut vivre 31,7 années pour compter ces 1000000000 secondes. Et sur la Fig.5 nous n’en sommes qu’aux chiffres violets. Si l’on veut compter l’intégralité du nombre, il faut 159 milliard de fois ces 1000000000 secondes. Le chronomètre en comptant une fois par seconde devrait fonctionner durant 5.039.113.000.379 années. (Il faudra changer ses piles un sacré nombre de fois.) Et pourtant durant le deuxième conflit mondial, Alan Turring a réalisé la prouesse qui dès 1940 cassait le code d’Énigma en moins de deux heures …
La route à suivre pour émuler une ENIGMA.
Dans ce tutoriel, le but recherché consiste à nous « amuser » à programmer en C++ d’Arduino tout en cherchant à coder avec méthodes et rigueur. Pour mémoire, on ne veut « rien investir ». On va donc se contenter de n’utiliser qu’une carte Arduino NANO. Dans ce contexte, nous n’aurons aucun circuit imprimé à souder sauf si on désire passer à une version de luxe et intégrer la petite carte électronique dans un boitier. (Voir le chapitre suivant.) Toutefois, il faut bien avoir une interface Homme/Machine pour la conditionner et s’en servir au Cryptage / Décryptage. Dans le cadre d’un investissement nul, c’est le Moniteur de l’IDE qui va servir à établir le dialogue entre l’opérateur et le module NANO. On peut dans ce cadre établir un plan de bataille. On va devoir :
1) Programmer une fonction dialogue par la ligne série USB d’ARDUINO. (C’est cette ligne USB qui alimente la carte NANO, qui permet de téléverser le code et qui par le Moniteur de l’IDE va nous autoriser à envoyer des consignes avec le clavier de l’ordinateur et afficher les « résultats ».)
2) Créer du code qui se comportera comme un Rotor de la machine. Il faut envisager cinq Rotors.
3) Agencer deux Réflecteurs virtuels différents.
4) Émuler le tableau de branchement des Fiches croisée.
5) Organiser le mouvement des rotors lors de la frappe virtuelle des caractères. Il importe de noter que tous ne tournent pas au passage de la même lettre ce qui va compliquer notre tâche :
Le chemin est tout tracé. On peut raisonnablement commencer à programmer en soulignant que mis à part le dialogue sur la ligne série, l’intégralité des séquences de (1) à (5) seraient directement réutilisables si l’on envisageait un simulateur matériel avec clavier, écran etc.
la suite est ici.