Crypto

Introduction §

Le chiffre Enigma était un chiffre de terrain utilisé par les Allemands pendant la Seconde Guerre mondiale. L’Enigma est l’une des machines de chiffrement historiques les plus connues, et il fait en fait référence à une gamme de machines de chiffrement similaires. La première machine Enigma a été inventée par un ingénieur allemand nommé Arthur Scherbius à la fin de la première guerre mondiale. Elle a été utilisée à des fins commerciales à partir du début des années 1920 et a également été adoptée par les services militaires et gouvernementaux d’un certain nombre de nations, notamment par l’Allemagne nazie avant et pendant la Seconde Guerre mondiale. Une variété de différents modèles d’Enigma ont été produits, mais le modèle militaire allemand, le Wehrmacht Enigma, est la version la plus communément discutée.

Si vous souhaitez crypter certains de vos propres messages Enigma, jetez un coup d’œil à l’exemple javascript.

L’algorithme §

Cette section parlera de l’Enigma I alias Wehrmacht Enigma, les autres variantes ont un fonctionnement similaire. La « clé » de l’énigme se compose de plusieurs éléments :

  1. Les rotors et leur ordre
  2. Les positions de départ des rotors
  3. L’ringstellung, ou réglages des anneaux
  4. Steckerverbindungen, ou réglages de la planche à fiches

Pour des informations sur les procédures utilisées par les Allemands pendant la Seconde Guerre mondiale lors de l’envoi de messages Engima, y compris la façon dont les indicateurs étaient réglés, voir cette description.

Les rotors §

Supposons que nos rotors sont I,II,III se déplaçant de gauche à droite, et que nous essayons de chiffrer la lettre ‘A’. Nous supposerons pour l’instant que lorsque la lettre ‘A’ est chiffréechaque rotor est dans sa position de départ (‘AAA’).Comme nos rotors sont I,II,III se déplaçant de gauche à droite, le caractère A passera d’abord par le rotor III. Chaque rotor applique une opération de substitution simple. Le tableau de substitution pour le rotor III peut être vu ci-dessous.

ABCDEFGHIJKLMNOPQRSTUVWXYZBDFHJLCPRTXVZNYEIWGAKMUSQO

B est remplacé par D, C est remplacé par F, etc. Ainsi, après que la lettre ‘A’ ait traversé le rotor, elle sort sous la forme d’un ‘B’. La lettre ‘B’ est maintenant entrée par le rotor II, où elle est remplacée par ‘J’, etc. Ceci est mieux représenté à l’aide d’un tableau (pour une description complète des câblages de chaque rotor, voir cette page wikipedia) :

III II I Réflecteur inv(I) inv(II) inv(III)
A -> B B -> J J -> Z Z -> T T -> L L -> K K -> U

Après que la lettre soit passée par les rotors III,II, I, elle frappe le réflecteur et subit une autre substitution simple. Après être sortie du réflecteur, la lettre est renvoyée à travers les rotors dans la direction inverse (ce qui signifie que la substitution inverse est appliquée). Nous pouvons voir dans le tableau qu’après que la lettre chiffrée soit sortie du rotor III à la fin, nous nous retrouvons avec la lettre U. Une étape importante que je n’ai pas encore mentionnée est le fait que les rotors s’incrémentent avant que chaque lettre soit chiffrée. Si les positions de départ des rotors sont ‘FEQ’, alors ils seront d’abord incrémentés à ‘FER’ avant que la première lettre ne soit chiffrée.

Incrémentation des rotors §

Une erreur commune lors de la mise en œuvre de l’énigme est de supposer que les rotors agissent comme un odomètre standard, il y a cependant quelques différences clés. Chaque rotor a une encoche qui provoque le pas du rotor à sa gauche. Le rotor I fait avancer le rotor suivant lors de la transition de Q à R, le rotor II lors de la transition de E à F, etc. Les rotors I à V sont utilisés dans l’énigme de la Wermacht, plus tard d’autres rotors ont été ajoutés qui avaient deux encoches.

I II III IV V VI VII VIII
Q E V J Z Z,M Z,M Z,M

Il y a un détail supplémentaire déroutant, celui du « double pas ». Lorsqu’un rotor fait un pas, il entraîne également le pas du rotor situé à sa droite. Ceci n’est pas remarqué lorsque le second rotor fait un pas, puisque le premier rotor fait un pas à chaque pression de touche. Cependant, lorsque le troisième rotor (le plus à gauche) fait un pas, le deuxième rotor fait de même. Cela signifie que la période des machines n’est pas 26x26x26, mais seulement 26x25x26.

The Ringstellung §

Les Ringstellung (réglages des anneaux) sont généralement fournis sous la forme d’une chaîne de 3 lettres, par exemple ‘FAM’ (ou alternativement sous la forme de chiffres entre 1 et 26, représentant les lettres). Dans la discussion précédente, j’ai supposé que le chiffre de substitution simple de chaque rotor était fixe. Les anneaux permettent de décaler le chiffre de substitution comme suit. Avec un réglage d’anneau de ‘A’ (ou 1), la substitution du rotor I ressemble à ceci:

ABCDEFGHIJKLMNOPQRSTUVWXYZEKMFLGDQVZNTOWYHXUSPAIBRCJ

Avec un réglage d’anneau de ‘B’ (ou 2), la substitution du rotor I ressemble à ceci:

ZABCDEFGHIJKLMNOPQRSTUVWXYEKMFLGDQVZNTOWYHXUSPAIBRCJ

Les Steckerverbindungen §

Le steckerverbindungen (plugboard) est une couche supplémentaire de sécurité qui consiste en 13 fils qui se branchent dans des douilles sur le devant de la machine enigma.Chaque fil relie deux lettres, par exemple P à O. Ces paires sont spécifiées dans le matériel de la clé. Lorsqu’une lettre est tapée, avant d’entrer dans le premier rotor, elle subit la substitution selon le tableau de branchement, puis après que la lettre soit sortie, elle subit à nouveau la substitution du tableau de branchement avant d’être sortie. Voici un exemple de configuration du plugboard : PO ML IU KJ NH YT GB VF RE AC (Cela signifie que P et O sont intervertis, M et L sont intervertis etc…).

Si nous reprenons l’exemple ci-dessus où la lettre ‘A’ a été chiffrée avec les rotors I, II et III avec les positions de départ AAA, nous avions la lettre A chiffrée comme un U. Si nous prenons maintenant en compte le plugboard, en utilisant les paramètres du plugboard du paragraphe précédent, le ‘A’ est d’abord traduit en un ‘C’ avant le chiffrement. Le chiffrement se poursuit comme d’habitude, mais cette fois le ‘C’ est converti en ‘J’. Cette lettre est ensuite acheminée à travers le panneau de connexion pour être remplacée par un ‘K’. Nous avons donc maintenant un ‘A’ qui est chiffré en ‘K’ avec le plugboard utilisé. Le plugboard augmente de manière significative la force du chiffrement de l’énigme dans son ensemble, plus que l’ajout d’un autre rotor ne pourrait le faire.

Exemple de Javascript §

Plaintexte

paramètres de clé :
Réglages des anneaux :
Rotors :
Paramètres de la carte de connexion :

Ciphertext

Autres implémentations §

Pour chiffrer vos propres messages en python, vous pouvez utiliser le module pycipher. Pour l’installer, utilisez pip install pycipher. Pour chiffrer des messages avec le chiffrement Enigma (ou un autre chiffrement, voir ici pour la documentation), voir l’exemple ici.

Cryptanalyse §

Pour du code permettant de casser automatiquement les messages Enigma, voir Cryptanalyse d’Enigma.

De nombreux travaux ont été réalisés pour casser Enigma, certaines méthodes comme le rodage et le boutonnage ont été utilisées pendant la Seconde Guerre mondiale, mais nécessitent des  » cribs « , ou des morceaux connus de texte en clair. Ces méthodes sont discutées sur la page wikipedia.

Des approches plus modernes incluent l’article de Jim Gillogly ‘Ciphertext only Cryptanalysis of the Enigma’. Une lettre de suivi corrigeant certaines erreurs dans l’article peut être trouvée ici. Un autre article qui s’appuie sur celui de Jim Gillogly est « Applying Statistical Language Recognition Techniques in the Ciphertext only Cryptanalysis of Enigma » par Heidi Williams. Une autre ressource intéressante est The Cryptographic Mathematics of Enigma.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.