Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#1 13-12-2016 23:35:03

ludendo
Invité

Machine ENIGMA

Bonjour à tous, j'aurais besoins d'aides pour comprendre le fonctionnement d'une machine ENIGMA, je suis en train d'en codé une en python mais mon résultat reste faut:
- lorsque j'essaie de coder à la main avec une feuille de papier, en prenant les 3 premiers rotors dans l'ordre classique, avec le réflecteur B, la positions des 3 anneaux sur A ainsi que le nombres de permutations de lettres sur 0:
  -> le message est "PAPA": d'après les simulateurs que j'ai pu trouver en ligne cela donne "LDSG"
  -> http://users.telenet.be/d.rijmenants/En … Manual.pdf
  -> dans le liens ci-dessus, page 14, il y les changements de lettres en fonction des rotors et du réflecteur

pour le codage de la première lettre:
       P --> H - U - K - N - N - T - L     ici je trouve bien la bonne lettre, mais c'est pour les suivantes que j'aurais besoins d'aides, Merci d'avance


Ludendo

#2 14-12-2016 10:47:28

Rossignol
Membre
Inscription : 19-06-2015
Messages : 290

Re : Machine ENIGMA

Bonjour ludendo,

Je ne sais pas si ça peut vous aider, mais avez-vous regardé le module Python Py-Enigma ?


from enigma.machine import EnigmaMachine

machine = EnigmaMachine.from_key_sheet(
       rotors='I II III',
       reflector='B',
       ring_settings=[0, 0, 0],
       plugboard_settings='')

machine.set_display('AAA')

print(machine.process_text('PAPA'))   # affiche LDSG
 

Le meilleur simulateur papier d'Enigma que je connaisse est là : Paper_Enigma.
(imprimante couleur recommandée !)

@+

Hors ligne

#3 27-12-2016 06:35:53

ludendo
Invité

Re : Machine ENIGMA

Bonjour,
Merci beaucoup Rossignol pour votre réponse...

désespérer par mes tentatives infructueuses d'essayer de comprendre cette machine ENIGMA, j'étais content d'avoir une réponse, et surtout une manière différente de faire avec la Paper_Enigma

J'ai évidemment imprimé en couleurs les constituants de la machine et j'ai essayé avec différente lettre en gardant toujours les rotors I, II et III dans cet ordre là, j'ai gardé aussi le réflecteur B, les rotors démarrent tous à la lettre A (pas de décalage) ainsi qu'aucune permutations de lettre:

lettre à codé -- r_III -- r_II -- r_I -- réfB -- r_I -- r_II -- r_III

         A        ->   B   ->   J  ->  Z ->  T  ->  L  ->   K  -> U

         P        ->   E   ->   S  ->  S ->  F  ->  D  ->   C  -> G

         D        ->   H   ->   U  ->  A ->  Y  ->  O  ->   Y  -> O


Voilà j'ai codé ça avec le Paper_Enigma, je vous ai mis ici le détail car en vérifiant avec un simulateur sur internet je trouve B, L et M
Si vous pouviez essayer vous aussi avec votre Paper_Enigma et me dire, peut etre que je fais pas ca de la bonne manière... je ne sais plus ou chercher...

Merci d'avance

Ludendo

#4 27-12-2016 11:54:23

Rossignol
Membre
Inscription : 19-06-2015
Messages : 290

Re : Machine ENIGMA

Bonjour,

La machine Enigma étant initialisée comme indiqué précédemment, quand on appuie sur la touche A, le rotor le plus à droite (rotor III) tourne d'un cran : on tourne donc ce rotor d'un cran vers soi comme pour desserrer une vis.
Quand la touche arrive en bout de course, le courant est établi et suit le parcours :

  A  ->  D  ->  D  ->  F  ->  S  ->  S  ->  F  ->  B

Quand on appuie sur la touche P, le rotor de droite tourne encore d'un cran et le parcours du courant électrique est :

  P  ->  W  ->  P  ->  H  ->  D  ->  G  ->  T  ->  H

Même chose quand on appuie sur la touche D :

  D  ->  C  ->  E  ->  L  ->  G  ->  F  ->  Z  ->  J

La chaîne de caractères APD est donc chiffrée par BHJ.

Pour votre simulateur, faites attention au double avancement du rotor du milieu. Voir Wikipedia.

@+

Hors ligne

#5 05-01-2017 12:16:50

ludendo
Invité

Re : Machine ENIGMA

Bonjour,
merci pour votre réponse, cela m'a bien aider, mais je comprend par le double avancement du rotor milieu
Pourriez vous m'expliquer comment ca marche étape  par étape avec un exemple

Merci d'avance pour votre réponse

Ludendo

#6 06-01-2017 16:56:14

Rossignol
Membre
Inscription : 19-06-2015
Messages : 290

Re : Machine ENIGMA

Bonjour ludendo,

Il n'est pas facile d'expliquer avec des mots un appareil mécanique comme la machine Enigma.

Je vous conseille de lire la page web suivante, d'examiner les dessins et de regarder la vidéo à la fin : Réplique Enigma
(une autre vidéo sur YouTube )

Un exemple :

On suppose, comme précédemment, les rotors I, II, III dans l'ordre de gauche à droite à la position initiale AAA.
Le rotor III entraîne le II quand il passe de V à W.
Le rotor II entraîne le I quand il passe de E à F.
(l'encoche sur le rotor I n'entraîne rien quand il passe de Q à R car c'est le dernier rotor !)

La séquence obtenue à chaque frappe d'une touche est :

AAA AAB AAC AAD AAE AAF AAG AAH AAI AAJ AAK AAL AAM AAN AAO AAP AAQ AAR AAS AAT AAU AAV

en passant de V à W le rotor III entraîne d'un cran le rotor II :

ABW ABX ABY ABZ ABA ABB ABC ... ABV

Le rotor III passe de V à W donc

ACW ACX ACY ACZ ACA ...

Tout se passe comme pour un compteur kilométrique d'automobile, mais on est modulo 26 au lieu de modulo 10.

C'est quand le rotor II entraîne le I que c'est différent :

... ADM ADN ADO ADP ADQ ADR ADS ADT ADU ADV

Le rotor III passe de V à W : il incrémente le rotor II

AEW

ici on va avoir le double avancement : la came qui est entre les rotors II et I est dans l'encoche correspondant à E.
Quand on appuie sur une touche, la came va monter et pousser le rotor II par son encoche et le rotor I par sa roue à rochet : les deux rotors avancent d'un cran.
On obtient :

BFX BFY BFZ BFA BFB BFC ...

On voit que la séquence attendue
AEX AEY AEZ AEA AEB AEC AED AEE AEF AEG AEH AEI AEJ AEK AEL AEM AEN AEO AEP AEQ AER AES AET AEU AEV BFW
est sautée, on passe directement à BFX

La période de la machine Enigma est donc $26\times 25\times 26 = 16\,900$  et non $26\times 26\times 26 = 17\,576$.

Notez bien que le même phénomène apparait pour les rotors III et II : quand le rotor III entraîne le rotor II il est lui aussi poussé par son encoche, mais comme il est dans le même temps entraîné par sa roue à rochet à chaque frappe de touche, il n'y a aucun effet supplémentaire.

Pour votre programme il faut donc veiller, quand le rotor II est sur sa lettre de "turnover" (E dans l'exemple), à incrémenter les rotors II et I en même temps (pour passer de AEW à BFX dans l'exemple).

Le module Python Py-Enigma permet de vérifier la double avancée :


from enigma.machine import EnigmaMachine

machine = EnigmaMachine.from_key_sheet(
       rotors='I II III',
       reflector='B',
       ring_settings=[0, 0, 0],
       plugboard_settings='')

machine.set_display('ADM')  # on part de là

for _ in range(20):         # 20 premiers résultats demandés
    machine.key_press('A')                   # on appuie sur une touche
    print(machine.get_display(), end = ' ')  # position des rotors
 

On obtient : ADN ADO ADP ADQ ADR ADS ADT ADU ADV AEW BFX BFY BFZ BFA BFB BFC BFD BFE BFF BFG

Bon courage et ...

Bonne année 2017 à ceux qui m'ont lu jusque là !

Hors ligne

Réponse rapide

Veuillez composer votre message et l'envoyer
Nom (obligatoire)

E-mail (obligatoire)

Message (obligatoire)

Programme anti-spam : Afin de lutter contre le spam, nous vous demandons de bien vouloir répondre à la question suivante. Après inscription sur le site, vous n'aurez plus à répondre à ces questions.

Quel est le résultat de l'opération suivante (donner le résultat en chiffres)?
trente trois plus trente cinq
Système anti-bot

Faites glisser le curseur de gauche à droite pour activer le bouton de confirmation.

Attention : Vous devez activer Javascript dans votre navigateur pour utiliser le système anti-bot.

Pied de page des forums