La machine Enigma et la machine de Lorenz



Documents pareils
IV- Comment fonctionne un ordinateur?

Cryptologie à clé publique

L ordinateur quantique

Cryptologie et physique quantique : Espoirs et menaces. Objectifs 2. distribué sous licence creative common détails sur

TD n o 8 - Domain Name System (DNS)

Aspects de la cryptologie au cours de l'histoire. Aspects de la cryptologie au cours de l'histoire

Calculateur quantique: factorisation des entiers

Cryptographie et fonctions à sens unique

Des codes secrets dans la carte bleue. François Dubois 1

Principes de cryptographie pour les RSSI

COMMUNICATION ENTRE DEUX ORDINATEURS PAR LASER MODULE EN CODE MORSE OU BINAIRE.

Qu est-ce qu un ordinateur quantique et à quoi pourrait-il servir?

Travail d intérêt personnel encadré : La cryptographie

Projet Matlab : un logiciel de cryptage

La sécurité dans un réseau Wi-Fi

Support pour les langues s écrivant de droite à gauche

Aristote Groupe PIN. Utilisations pratiques de la cryptographie. Frédéric Pailler (CNES) 13 janvier 2009

Steganos présente Security Suite 2007, son incontournable suite de sécurité pour PC.

Informatique et Société : une brève histoire

Cours 14. Crypto. 2004, Marc-André Léger

Algorithme. Table des matières

Module 16 : Les fonctions de recherche et de référence

RÉALISATION D UN SITE DE RENCONTRE

ÉPREUVE COMMUNE DE TIPE Partie D

Cryptographie et Sécurité informatique

Représentation des Nombres

DM 1 : Montre Autoquartz ETA

HISTOIRE / FRANCAIS CYCLE 3 TITRE : L UNION FAIT LA FORCE (1915), LA FRANCE ET SES ALLIÉS

TECHNIQUES DE CRYPTOGRAPHIE

TABLE DES MATIÈRES CHAPITRE I. Les quanta s invitent

Sécurité de l'information

La physique quantique couvre plus de 60 ordres de grandeur!

0x700. Cryptologie Pearson France Techniques de hacking, 2e éd. Jon Erickson

Petit lexique de calcul à l usage des élèves de sixième et de cinquième par M. PARCABE, professeur au collège Alain FOURNIER de BORDEAUX, mars 2007

Sécurisez votre serveur Web Internet Information Services de Microsoft (MS IIS) avec un certificat numérique de thawte thawte thawte thawte thawte

Petite introduction aux protocoles cryptographiques. Master d informatique M2

V- Manipulations de nombres en binaire

Les 3 erreurs fréquentes qui font qu'un site e-commerce ne marche pas. Livret offert par Kiro créateur de la formation Astuce E-commerce

VOCABULAIRE LIÉ AUX ORDINATEURS ET À INTERNET

Campagne de Communication Prévisionnelle. Web Intelligence & Réputation Internet

La vie de cour au château de Versailles avant la Révolution Française (1789)

CRÉER UN COURS EN LIGNE

TOUT SAVOIR SUR LE SATELLITE

Protocoles cryptographiques

LE MARKETING DIRECT, SUPPORT DU MARKETING CLIENT

Installation de Windows 2003 Serveur

LAURENT FABIUS, MINISTRE DES AFFAIRES ETRANGERES

L authentification de NTX Research au service des Banques

Introduction à l algorithmique et à la programmation (Info 2)

Utilisez Toucan portable pour vos sauvegardes

Audit des risques informatiques. Introduction à la Cryptographie Pierre-François Bonnefoi

nom : Collège Ste Clotilde

Débuter avec Excel. Excel

Cours 1 : Qu est-ce que la programmation?

Défi 1 Qu est-ce que l électricité statique?

Initiation à l informatique. Module 7 : Le courrier électronique ( , mail)

majuscu lettres accent voyelles paragraphe L orthographe verbe >>>, mémoire préfixe et son enseignement singulier usage écrire temps copier mot

Mon aide mémoire traitement de texte (Microsoft Word)

Le poste de travail, les dossiers et les fichiers

Informatique Générale

La pratique des décisions dans les affaires

SOMMAIRE AIDE À LA CRÉATION D UN INDEX SOUS WORD. Service général des publications Université Lumière Lyon 2 Janvier 2007

Révision de l ombudsman du texte sur le camp d extermination nazi de Sobibor en Pologne, diffusé au Téléjournal le 30 novembre 2009.

1.1 L EXPLORATEUR WINDOWS

Guide d utilisation des fichiers bonus accompagnant le guide «L Argent est une science exacte»

1 Introduction C+ + Algorithm e. languag. Algorigramm. machine binaire. 1-1 Chaîne de développement. Séance n 4

Les puissances La notion de puissance La puissance c est l énergie pendant une seconde CHAPITRE

Compte rendu sur la communication et la téléphonie

DNSSEC. Introduction. les extensions de sécurité du DNS. Les dossiers thématiques de l AFNIC. 1 - Organisation et fonctionnement du DNS

Directives pour l évaluation des participations d astrophilatélie

Remise de l Ordre National du Mérite à M. David LASFARGUE (Résidence de France 7 novembre 2014)

Infolettre #18 : Les graphiques avec Excel 2010

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Ad-exchanges & RTB (avec la participation de Fabien Magalon, La place

[WINDOWS 7 - LES FICHIERS] 28 avril Logiciel / Windows

manuel de l'utilisateur

Dalla TCIAAA2 DOSSIER SMART

DOSSIER FLASH. «Path - Tango»

Table des matières A. Introduction... 4 B. Principes généraux... 5 C. Exemple de formule (à réaliser) :... 7 D. Exercice pour réaliser une facture

LPP SAINT JOSEPH BELFORT MODE OPERATOIRE ACTIVINSPIRE. Bonne utilisation à toutes et tous! UTILISATION DES TBI LE LOGICIEL ACTIVINSPIRE

HORLOGE ET MONTRE IN SITU : MÉCANIQUE 2

Informatique. Les réponses doivent être données en cochant les cases sur la dernière feuille du sujet, intitulée feuille de réponse

Cours Informatique 1. Monsieur SADOUNI Salheddine

TOUT CE QU IL FAUT SAVOIR POUR LE BREVET

Le graphisme et l écriture, en lien avec les apprentissages en maternelle

Stagiaire Ecole professionnelle supérieure (EPS)

Enquête internationale 2013 sur le Travail Flexible

Notions de sécurités en informatique

Cryptographie Quantique

Une ergonomie intuitive

Utiliser un tableau de données

I/ Qu est-ce que l aphasie? French

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

243 La Belgique, le contrôle démocratique et la prolifération nucléaire

Comment créer votre propre lampes LED

Chapitre 13 Numérisation de l information

CORRIGE LES NOMBRES DECIMAUX RELATIFS. «Réfléchir avant d agir!»

Société Louis GRAMA Tentes et Toiles S.A. Capital FF

Transcription:

TRAVAIL DE MATURITÉ La machine Enigma et la machine de Lorenz De la théorie à la simulation Léa Bommottet, 3M8 Maître référent : Laurent de Schoulepnikoff Gymnase Auguste-Piccard, Lausanne Le 28 octobre 2013

Résumé Ce travail de maturité commence par un historique de la cryptologie. Il faut en retenir que dès son apparition, elle pourra être utilisée selon deux techniques : les codes qui transforment les mots et les chiffres qui transforment les lettres; la technique du chiffre se divise en deux parties : la transposition et la substitution. C est cette dernière qui sera préférée par les utilisateurs car elle est plus difficile à cryptanalyser. C est au moyen-âge que les Arabes trouveront justement le moyen de cryptanalyser les chiffres utilisant la substitution, ceci grâce à l analyse de fréquences. Pour pallier à cette découverte de nouveaux algorithmes seront inventés, notamment le carré de Vigenère et le chiffre homophonique. Ils seront à leur tour cryptanalysés à la fin du XIX e siècle. Des machines de cryptage, par exemple Enigma et Lorenz, qui sont le sujet de ce TM, leur succéderont et influeront grandement sur le cours de la seconde guerre mondiale. Ces deux machines fonctionnent toutes deux à l aide de rotors. Pour Enigma, ils constituent un circuit électrique, qui va être constamment modifié. Une lettre entre à un certain endroit du circuit et en ressort à un autre, elle est alors chiffrée. Pour Lorenz, les rotors définissent une clé constituée de 5 bits, des 0 ou des 1. Chaque lettre claire a une correspondance également de 5 bits A l aide d un «ou exclusif», qui est une opération logique, cette correspondance sera «mixée» avec la clé. Le résultat donnera la correspondance d une autre lettre, c est la lettre chiffrée. Ce travail traitera ensuite de la manière dont ces machines ont été cryptanalysées. Enigma le sera grâce à ses failles, notamment le fait qu une lettre ne puisse être chiffrée par elle-même ; Lorenz, grâce au Colossus, véritable ancêtre de l ordinateur, permettant de tester toutes les possibilités pour trouver la clé de chiffrage, les possibilités étant déjà limitées par des mots probables. J aborderai également quelques méthodes utilisées durant la même période par d autres pays, afin de les mettre en relation avec les deux machines allemandes. Ce dossier se terminera par une partie consacrée à la programmation. Tout d abord, il y aura un lexique des différentes fonctions utilisées dans le Visual Basic, langage que j utilise pour mes deux simulations, suivi d une explication du fonctionnement de mes deux programmes. Vu que je simule ces deux machines, qui sont, à la base, des machines mécaniques, uniquement avec un ordinateur et un langage de programmation, je dois simuler des procédés mécaniques, tels que la rotation des rotors, à l aide de calculs en m aidant également de l interface graphique que m offre Excel et des fonctions natives déjà contenues dans le Visual Basic. D une certaine manière je reproduis le procédé inverse des inventeurs de ces machines ; ils avaient conçu un algorithme de chiffrage, une recette à suivre, et ils ont construit une machine mécanique qui mette cet algorithme en application, alors que je suis partie du fonctionnement de la machine pour faire un programme qui la simule et donc j ai, d une certaine manière, réécrit l algorithme de chiffrage. Pour tester mes deux programmes, j ai contrôlé que les programmes soient symétriques : si on place les rotors dans la même position que pour le chiffrage, on doit retomber sur le texte clair. Et j ai également testé le fait qu avec Enigma, une lettre ne puisse être chiffrée par elle-même. 2

Sommaire : Résumé 2 1. Introduction 6 2. Introduction à la cryptographie 7 2.1 Définitions 7 2.2 Historique des codes secrets 7 2.2.1 Notions théoriques 8 2.3 La sécurité d un chiffre 9 2.3.1 Chiffre ou code? 9 2.4 L invention de la cryptanalyse par les Arabes. 9 2.5 Le Besoin d un nouveau système de cryptage 10 2.5.1 Le carré de Vigenère 10 2.5.2 Les chiffres, les codes et leurs utilisateurs 11 2.5.3 Chiffre de substitution homophonique 12 2.6 Le passage au chiffre polyalphabétique 12 2.7 Vigenère se fait cryptanalyser 13 2.8 La cryptographie moderne 13 2.8.1 Le chiffrement symétrique 13 2.8.2 Le chiffrement à clé publique 14 2.9 Evolution de la cryptographie 15 3. Codes utilisés durant la première guerre mondiale par l Allemagne 16 3.1 Le chiffre ADFGX 16 3.2 Le Télégramme de Zimmermann 17 4. La machine Enigma 19 4.1 Son invention 19 4.2 Utilisation prévue 19 4.4 Le fonctionnement d Enigma 20 4.4.1 Description 20 4.4.2 Fonctionnement 21 4.5 Mode opératoire des Allemands 22 5. Le déchiffrement d Enigma par les Alliés 22 3

5.1 Des débuts polonais 22 5.2 Enigma, les Français et les Anglais 24 5.3 La réussite de Bletchley Park 24 5.3.1 Alan Turing 25 5.3.2 Mots probables et «jardinage» 26 5.3.3 Principe de fonctionnement des bombes 26 5.3.4 Premiers messages décryptés et Boniface 27 6. Les failles d Enigma et l influence de la cryptographie sur la fin de la guerre 27 7. Les autres méthodes de cryptages utilisées durant la seconde guerre mondiale 28 7.1 La sténographie 28 7.1.1 L encre invisible 28 7.1.2 Le micropoint 28 7.2 Le chiffre d Hitler ou la machine de Lorenz 29 7.2.1 Fonctionnement 29 7.2.1 Cryptanalyse de Lorenz par les Alliés 31 8. Les codes étrangers 32 8.1 Les «code talkers» navajos 32 8.2 Purple 32 8.3 Synthèse 33 9. Programmation 33 9.1 Les langages de programmation 33 9.1.1 Notions théoriques 33 9.2 Le Visual Basic (vba) 34 9.2.1 Pourquoi avoir choisi le Visual Basic? 34 10. Description du code 34 10.1 Les Fonctions 34 10.1.1 Les boucles 34 10.1.1.2 la boucle do While 35 10.1.1.3 La boucle do Until 35 10.1.2 Les conditions 35 10.2 Autres Notions 36 4

10.2.1 Les variables 36 10.2.1 Les tableaux 36 10.3 Les arguments 37 10.4 Description du code 37 10.5 Enlever les accents et autres caractères spéciaux 37 10.5.1 Le code ASCII 37 10.5.2 Dans le Programme 38 10.6 Traiter une lettre après l autre 38 10.6.1 Transformation en caractère télégraphique 39 10.7 L influence des rotors dans le chiffrement 39 10.7.1 Chez Enigma 39 10.7.2 Chez Lorenz 42 10.8 Les steckers ou sockets d Enigma 44 10.8.1 Contrôle des steckers 44 10.8.2 Les steckers dans le cryptage 45 10.9 Test de fonctionnement 45 10.10 Test comparatif des deux machines 48 10.10.2 Le temps 48 10.10.3 La sécurité 49 10.10.4 Quel programme choisir? 50 10.11 Remarques Bibliographiques 50 11. Conclusion 50 12. Bibliographie 51 12. Remerciements 53 13. Listing des deux Programmes 54 13.1 Enigma 54 13.2 Lorenz 66 5

1. Introduction Dans un monde où les ordinateurs font désormais partie de la vie de tous les jours, j ai décidé de m intéresser à leurs origines. On peut les situer dès la fin de la seconde guerre mondiale, et c est notamment les machines utilisées par les Anglais pour cryptanalyser les chiffres Allemands, surtout la machine de Lorenz et la machine Enigma, qui ont posé les bases de l informatique. Afin de mieux comprendre comment ces machines de cryptage ont été réalisées et imaginées, je vais également aborder brièvement le sujet de l histoire de la cryptologie, ainsi que les autres méthodes de cryptographies utilisées durant la première et la seconde guerre mondiale. Dans ce travail de maturité, j ai simulé, de manière informatique, une machine Enigma et une machine de Lorenz. J ai réalisé ces deux simulations en Visual Basic, qui est un langage de programmation utilisé par Microsoft dans ses logiciels tels que Word ou Excel. Pour ma part, j'ai utilisé Excel, notamment pour son interface visuelle plus adaptée à mon projet. J ai choisi ce sujet car il me permettait de concilier un intérêt naissant pour l informatique, plus particulièrement la programmation, et la cryptographie. Il y a deux aspects de la cryptologie que je trouve particulièrement intéressants : premièrement son histoire et les anecdotes qui l accompagnent, et l influence que la cryptologie a pu avoir dans le dénouement de certaines affaires de plus ou moins grande envergure ; deuxièmement, la course que se livrent les cryptanalystes pour casser un code et la manière dont ils réalisent ceci. Cela demande de grandes connaissances dans plusieurs domaines comme les mathématiques et la linguistique. De plus, lorsqu ils réussissent, cela permet de faire avancer des domaines scientifiques, par exemple, le Colossus, qui en décryptant la machine de Lorenz, a posé les principes des futurs ordinateurs. Au cours de mes deux premières années de gymnase, j ai eu l occasion d étudier quelques sujets de cryptologie en cours d applications des maths. Ceci a réveillé l intérêt que j avais eu pour ce sujet lors de ma huitième année d école. J avais alors réalisé un exposé sur la machine Enigma, dans le cadre d une étude générale de la cryptographie. Ce sujet m avait passionnée, mais je ne possédais à l époque ni les moyens mathématiques et encore moins informatiques pour mieux comprendre son fonctionnement. Ce que ce travail m a permis de faire. Ce qui me plait particulièrement dans la programmation est le fait de pouvoir réaliser quelque chose de ses propres mains, d arriver d une certaine manière à communiquer avec les ordinateurs, ces machines qui deviennent de plus en plus indispensables dans notre société. De plus pour pouvoir programmer et simuler un procédé ou une machine, il faut en avoir parfaitement compris le fonctionnement général. Ainsi on ne s arrête pas à la surface des choses, mais cela nous pousse à creuser et à plus réfléchir sur le sujet. Mon intérêt pour la cryptographie est d ailleurs ce qui m a poussé à m intéresser de plus près à l informatique. C est en voulant réaliser un tableur chiffrant à la manière du chiffre de Hill, que j ai pris conscience de tout ce qui était possible de faire avec Excel et les ordinateurs en général. 6

2. Introduction à la cryptographie 2.1 Définitions La cryptologie est la science des codes et chiffres secrets. Elle regroupe la cryptanalyse, qui est l action de décoder un message sans en posséder la clé, et la cryptographie qui est le fait de crypter des messages. Un message crypté est un message dont le contenu est brouillé par un algorithme de cryptage, une recette à suivre, que seul l opérateur, celui qui envoie le message, et son interlocuteur connaissent. Il existe de multiples codes et chiffres, du chiffre de César à l antiquité jusqu au RSA de nos jours. En situation de conflit, on peut dire que la cryptologie poursuit deux buts, éviter que l ennemi comprenne vos messages et comprendre ceux de l ennemi, en cassant ses codes. 2 De tous temps, l homme a voulu protéger ses communications. Pour cela il avait deux choix : -La sténographie, l art de cacher quelque chose, du grec steganos : couvert; et graphein : écriture. Par exemple, durant l antiquité, on pouvait raser un esclave, lui tatouer le message à transmettre sur le crâne, puis attendre que ses cheveux repoussent avant de l envoyer au récepteur, ce dernier n aurait plus qu à le raser à nouveau pour pouvoir prendre connaissance du message. -La cryptographie, du grec kryptos : caché. Par exemple, le chiffre de César consiste à décaler les lettres de l alphabet toujours selon le même décalage. La cryptographie est visible, on sait que quelqu un a cherché à cacher quelque chose, mais si l on ne possède pas la clé, dans l exemple précédent, le décalage opéré, on ne peut pas comprendre le message, à moins de trouver le moyen de casser le chiffre ou code. On peut évidemment combiner ces deux méthodes. Ainsi, si le message est découvert ; imaginons que notre même esclave soit atteint d une calvitie expresse ; le message possède encore la protection de la cryptographie. 2.2 Historique des codes secrets Ainsi tout au long de notre histoire, la cryptologie a été utilisée, les codes devenant de plus en plus compliqués à chaque fois que le précédent avait été cassé par l autre camp. Mais c est surtout avant et pendant la deuxième guerre mondiale qu elle connut son essor, qui ne s arrêta pas en si bon chemin. A l heure d internet, il nous est inimaginable que nos données ne soient pas protégées par des codes, entre autres le RSA. C est pourquoi je vous propose un bref historique des codes secrets de l antiquité à nos jours, ainsi qu une explication des différents algorithmes utilisés afin de mieux saisir le rôle important que la cryptographie et la cryptanalyse, qui est la capacité à casser un chiffre ou un code sans en connaître la clé, ont joué tout au long de l histoire. 7

2.2.1 Notions théoriques 2.2.1.1 Code et chiffre Les codes et les chiffres sont tous deux des moyens de crypter le contenu d un message, mais ils ne le font pas de la même manière. Les chiffres vont s attaquer aux lettres qui constituent les mots cryptés. Par exemple le chiffre de César, qui consiste à décaler toutes les lettres selon un même décalage, agit sur les lettres qui composent les mots et non sur les mots en eux-mêmes. Les mots code secret, avec un décalage de 3 dans le sens alphabétique, seront chiffrés de la manière suivante : ergh vheuhw. Alors que le code consiste à remplacer une phrase ou un mot, par un autre mot, phrase, groupe de lettres ou de caractères quelconques. Imaginons que l on ait préétabli un code avec son interlocuteur où le mot «code» est remplacé par le mot "toupie", et le mot "secret" par "32rt". Lorsque l on voudra crypter «code secret» on écrira «toupie 32rt». 15 Ainsi Enigma, Lorenz, Purple ou encore le chiffre ADFGX sont des chiffres alors que le code 0075 ou le code navajo sont des codes. 2.2.1.2 Substitution et transposition La substitution et la transposition sont des techniques de chiffrage, elles portent sur les lettres et non les mots. La transposition consiste à garder l identité de la lettre, un A restera un A, mais il changera de place dans la phrase chiffrée, on formera ainsi une anagramme du texte clair. 15 Ainsi la phrase «Je suis allée au panama» pourra être chiffrée de cette façon : «Aj emsa nuias pu alaele» Le nombre de A présents dans le texte clair est le même que dans le texte chiffré. Il en est de même pour toutes les lettres constituant le texte clair. La substitution consiste à garder la place de la lettre dans la phrase chiffrée mais de changer son identité, ainsi un A se transformera en B. 15 Le chiffre de César utilise la technique de la substitution. Si l on reprend la phrase utilisée dans l exemple précédent. On pourrait obtenir ce chiffre-là : «Mt zqoz bhhtt bq kbubfb» On peut évidement combiner ces deux méthodes pour plus de sécurité, on obtiendrait alors : «Bm tfzb uqobz kq bhbtht» La substitution, avec plusieurs méthodes, fut fortement utilisée durant le premier millénaire, on la croyait incassable, et de ce fait, les gens ne ressentaient pas le besoin urgent de créer une autre méthode de chiffrement. Il en a toujours été ainsi, tant que personne ne menaçait un code ou un 8

chiffre, il n y avait aucune raison d en chercher une plus sécuritaire. On peut faire une analogie avec l évolution des armes et de moyens de défense. Les fortifications ne sont apparues que lorsque le canon a été inventé. 15 2.3 La sécurité d un chiffre La sécurité d un chiffre, c est-à-dire la difficulté que l on aurait à le casser, dépend de la méthode de chiffrement utilisée, c est-à-dire de l algorithme de chiffrement. Ainsi le chiffre de César est facilement cassable, il n y a que 25 possibilités de décalage, sa sécurité est donc faible. Dès que l on a compris son algorithme de cryptage, sa clé est relativement facile à trouver. Or selon Auguste Kerckhoffs Van Nieuwnhof, un linguiste hollandais du XIX e siècle, "La sécurité d'un système de cryptage ne doit pas dépendre de la préservation du secret de l'algorithme. La sécurité ne repose que sur le secret de la clef" 15. La sécurité d un code ou chiffre peut aussi avoir des effets traîtres, ainsi, si deux interlocuteurs ont une totale confiance en leur code ou chiffre, ils révéleront plus de secrets que s'ils entretenaient une correspondance normale. De ce fait, la sécurité d un code/chiffre est primordiale. Marie Stuart, reine d Ecosse à la fin du XVI e siècle, emprisonnée depuis plus de 18 ans en Angleterre par sa cousine Elisabeth, reine d Angleterre, en fit les frais. En ayant fait trop confiance au code qu elle utilisait, elle livra les noms des personnes qui faisaient partie du complot pour assassiner Elisabeth. Marie, à l issue d un procès, sera condamnée à mort par Elizabeth. 15 On peut voir dans cet exemple l importance de la cryptanalyse et les conséquences qu elle peut avoir. 15 2.3.1 Chiffre ou code? Théoriquement, un code est plus sécuritaire. Il est impossible de tester des milliers de mots pour un signe. Mais dans la pratique, l élaboration d un code demande beaucoup de temps, il faut créer un lexique, penser à tous les mots qui seront nécessaires dans l échange de message. De plus si le lexique tombe entre les mains d une autre personne que l interlocuteur voulu, le code est réduit à néant. Alors qu un chiffre ne nécessite pas forcément une trace écrite de la clé. C est pourquoi dès le XVI e siècle, le chiffre sera souvent préféré au code. 15 2.4 L invention de la cryptanalyse par les Arabes. Au milieu du VIII e siècle après J.-C., l Islam est un réel foyer d arts et de sciences avec une grande concentration de savoir. C est dans ce contexte qu aura lieu l invention de la cryptanalyse. 15 Pour ceci, il y a besoin de trois éléments : des connaissances en linguistique, en statistique et en mathématiques. Ce sont dans des écoles religieuses que ces connaissances seront développées jusqu au moment où les Arabes vont s intéresser aux fréquences d apparition des lettres dans un texte rédigé dans une langue. C est le début de l analyse de fréquence. 15 L analyse de fréquence consiste, à l aide d un texte dans la même langue que le message crypté et d une même longueur, à compter le nombre de fois qu apparaissent les lettres, puis de regarder le pourcentage que chacune représente par rapport à toutes les lettres utilisées. Ensuite, en procédant de la même manière sur le texte crypté, on peut mettre en relation les lettres qui ont des pourcentages relativement proches. 15 Il fallait bien évidement avoir un texte d une certaine longueur afin de retrouver les mêmes fréquences que dans la langue en question. L étape suivante de l analyse de fréquence fut de repérer des binômes connus, ou des spécificités propres aux lettres. Par exemple, on trouve rarement quatre consonnes à la suite, ou dans ce cas-là, la dernière est le «s» du pluriel. 15 9

Pour fausser l analyse de fréquence, certains ajoutèrent des «nuls», des caractères, tels que des chiffres, qui n avaient aucune utilité dans le texte clair, mais qui pouvaient décontenancer le cryptanalyste qui tenterait de casser le chiffre. Certains orthographiaient faux les mots avant de les crypter. 15 2.5 Le Besoin d un nouveau système de cryptage 2.5.1 Le carré de Vigenère Blaise de Vigenère est un diplomate français né durant le XVI e siècle. Il s intéressa de près aux écrits des auteurs italiens traitant de la cryptographie, notamment Alberti qui était un artiste, philosophe et scientifique. On doit notamment à Alberti la fontaine de Trevi à Rome, et dans le domaine de la cryptologie, un algorithme de cryptage qui utilisait deux alphabets chiffrés, passant de l un à l autre, à chaque lettre chiffrée, pour chiffrer un message. 15 On lui doit également le cadrant chiffrant d Alberti. Ce cadran est composé de deux disques, un à l intérieur, il correspond à l alphabet «clair», l autre à l extérieur, il figure l alphabet chiffré. Pour chiffrer un message, on cale une lettre de chaque disque ensemble, cela constitue la clé. On peut aussi changer de clé au sein d un même message ce qui rend la cryptanalyse beaucoup plus difficile. Pour indiquer ce changement, Alberti propose de noter la nouvelle clé en majuscule 33 a b c d e f g h i j k l m n o p q r s t u v w x y z Q W E R T Z U I O P A Y S X D C F V G B H N J M K L P L O K M I J N U H B Z G V T F C R D X E S Y W A Q Algorithme de cryptage à deux alphabets Ainsi si l on veut chiffrer la phrase «je suis allée au panama», on obtiendrait : «PM GEOD QZYMT PH FQVQGQ» Fig. n 1, Cadran chiffrant d Alberti Source : http://www.apprendre-en-ligne.net 10

Vigenère s en inspira pour créer un code qui n utilisait non-pas deux, mais 26 alphabets pour crypter des messages. On arrivait donc à un tableau comme celui-là : Fig. n 2, Le carré de Vigenère Source : http://theudericus.free.fr On remarque que les alphabets cryptés sont des alphabets standards décalés de 1 par rapport à l alphabet qui le précède. Pour crypter un message, on n utilisait pas tous les alphabets, mais seulement certains désignés à l aide d une clé, par exemple BLEU. On utilisera alors les alphabets commençant par B, L, E et U, en passant de l un à l autre à chaque nouvelle lettre chiffrée. Ainsi pour la phrase exemple et le mot clé BLEU, on obtiendrait. «Kp xpje egmpi uv beibye» Ce chiffre, appelé carré de Vigenère, était insensible à l analyse de fréquence, une lettre n étant pas toujours chiffrée de la même manière, suivant les alphabets utilisés. De plus, le nombre de clés utilisables est presque infini et donc impossible de toutes les vérifier. 15 Le carré de Vigenère est une forme de substitution polyalphabétique, au contraire des autres méthodes utilisées auparavant, qui elles, sont monoalphabétiques ; elles n utilisent qu un seul alphabet. 15 2.5.2 Les chiffres, les codes et leurs utilisateurs Bien que très sécuritaire à l époque, le carré de Vigenère ne fut pas forcément utilisé partout. Ceci s explique par le fait qu il était plutôt compliqué et long d utilisation. Ce qui n était pas forcément en 11

adéquation avec les besoins militaires ou diplomatiques qui envoient et reçoivent des messages plusieurs fois par jour. Il y a donc une nouvelle donne qui entre en jeu : en plus d être le plus sécuritaire possible, les codes/chiffres doivent s adapter aux besoins de leurs utilisateurs : 15 Un élève qui voudra transmettre un message à un camarade, sans qu un autre puisse en comprendre le sens, n aura pas besoin d une grande sécurité, à moins évidemment d être dans une classe de cryptologues. Par contre il voudra un code simple et rapide d utilisation. Au contraire, un gouvernement, par exemple, pour transmettre une information hautement sensible recherchera le code le plus sécuritaire possible, peu importe la complexité et dans une certaine mesure le temps mis pour crypter/décrypter. Les instances militaires ou diplomatiques doivent, quant à elles, trouver un équilibre entre ces deux facteurs. 2.5.3 Chiffre de substitution homophonique Sans pour autant utiliser un chiffre polyalphabétique, les cryptographes trouvèrent un nouveau chiffre. Pour éviter d être déchiffré avec l analyse de fréquence, ils utilisaient plusieurs signes pour un même caractère en fonction de sa fréquence. Si une lettre avait 7 % de fréquence, ils utilisaient 7 signes différents. Ce qui anéantissait toute possibilité d analyse de fréquence des lettres seules, mais sans pour autant éviter l analyse de binômes. Par exemple, avec le binôme «qu», le «q» ayant une fréquence inférieure à 1, il ne sera remplacé que par un seul signe. Le u ayant une fréquence proche de 6, il en aura 6. De ce fait, si un cryptanalyste trouvait un signe qui n était suivi que de 6 signes, il pouvait arriver à déterminer l identité de ces 7 signes. 15 Le chiffre de substitution homophonique est donc moins sûr que le chiffre de Vigenère mais il est plus rapide d utilisation, ce qui représente un réel avantage pour certains utilisateurs. 15 D autres méthodes virent le jour pour éviter les chiffres polyalphabétiques, par exemple une substitution monoalphabétique qui ne s appliquerait pas aux lettres mais aux syllabes. Ce fut la méthode utilisée par les Rossignols, les cryptanalystes de Louis XIII et XIV. Ce chiffre ne fut brisé qu à la fin du XIX e siècle par le commandant Etienne Bazeries qui y consacra trois ans de sa vie. La cryptanalyse de ce chiffre permit notamment d apporter de nouvelles révélations sur le masque de fer. 15 Le masque de fer fait écho à un prisonnier qui portait un masque de fer ayant été emprisonné pendant plusieurs décennies. Son identité secrète a généré de nombreuses hypothèses dont la plus connue est certainement celle d Alexandre Dumas qui prétendit dans une de ses œuvres que c était le frère jumeau de Louis XIV. 22 2.6 Le passage au chiffre polyalphabétique Dès le XVIII e siècle, de nombreux bureaux de cryptanalystes virent le jour. Ils étaient appelés «cabinets noirs». Ils surveillaient le contenu des courriers adressés aux ambassades en les ouvrant avant eux. Cette recrudescence dans le cassage de codes fit tomber toute forme de chiffres monoalphabétiques, ce qui força progressivement les cryptographes à utiliser le chiffre de Vigenère. De plus, avec l apparition du télégramme, il était de plus en plus important de surveiller ses communications. En effet, il suffit de se caler sur la même fréquence d émission pour capter les messages de l ennemi. Ceci va donc augmenter le nombre de messages interceptés, ce qui rend indispensable le cryptage de ces derniers. 15 12

2.7 Vigenère se fait cryptanalyser Mais la course à la cryptanalyse rattrapa bientôt Vigenère en la personne de Babbage. Babbage était un inventeur prolifique anglais, on lui doit le compteur de vitesse comme le pare-buffle des locomotives. Il posa également les bases de l ordinateur grâce à ses plans de calculateurs, qui n ont malheureusement jamais aboutis, faute de financement, mais qui ont certainement aidé les Alliés lors de la seconde guerre mondiale à casser les codes du camp adverse. Il s intéressa aussi à de divers et hétéroclites domaines comme la biologie, les statistiques ou encore la politique. 15 Passionné par la cryptologie depuis son plus jeune âge, c est tout naturellement qu il s intéressa au carré de Vigenère. Pour ce faire, il s intéressa aux séquences qui se répétaient dans un texte chiffré. Par ce biais-là, il arriva à déterminer la longueur de la clé (notons cette longueur par x pour la suite du texte). Ceci étant fait, il pouvait appliquer la méthode d analyse de fréquence, car ayant déterminé le nombre de lettres avant que l on retombe sur le même alphabet que la première, il avait simplement x chiffres monoalphabétiques à résoudre. 15 On suppose que c est en 1854 que Babbage arriva au bout du carré de Vigenère. Pourtant sa découverte ne fut pas publiée, probablement en raison de la guerre de Crimée pour ne pas désavantager les Anglais par rapport aux Russes. Son travail ne fut découvert dans ses écrits qu au XX e siècle. Un Prussien du nom de Kasiski arriva au même résultat une dizaine d années après, et fut, quant à lui, publié. 15 2.8 La cryptographie moderne La cryptographie après la seconde guerre mondiale va connaître une grande évolution, tant par les moyens dont elle va disposer, que par son utilisation. 28 Suite à la seconde guerre mondiale, les premiers ordinateurs vont progressivement faire leur apparition. Tout comme les premières machines de cryptage mécaniques, fonctionnant à l aide de rotors ou de commutateurs, ont permis d accélérer et d éviter des erreurs lors du processus de cryptage, les ordinateurs vont amplifier ce phénomène. Grâce à ce nouveau matériel, la cryptographie va pourvoir se complexifier sans pour autant rendre son utilisation plus compliquée ou plus longue. 28 De plus, tout comme le télégramme sans fil, dont les messages pouvaient être plus facilement interceptés, nos messages le sont encore, plus que ce soit sur internet ou sur nos téléphones, d où l intérêt d avoir des méthodes de chiffrement encore plus fiables que par le passé. 28 On voit apparaitre plusieurs méthodes qui vont remplacer les méthodes de substitution et de transposition. 28 2.8.1 Le chiffrement symétrique Le chiffrement symétrique doit son nom au fait que tant l émetteur ou le récepteur utilisera le même algorithme de chiffrement, pour chiffrer/déchiffrer. Pour ce faire la clé doit rester secrète sinon la sécurité du code est compromise. Ainsi des institutions diplomatiques peuvent se le permettre, car elles ont des moyens sûrs à disposition, tels que des valises diplomatiques, pour transmettre la clé. 28 13

2.8.2 Le chiffrement à clé publique Pour les civils, il est impossible d utiliser des codes à chiffrement symétriques, car ils ne possèdent pas de moyens sûrs pour se transmettre la clé. Donc pour chiffrer des documents, par exemple lors de transactions en ligne, les civils ont besoin d un autre système de cryptage. 28 Le chiffrement à clé publique consiste à créer deux clés, une privée, que seul le récepteur possède, et une clé publique qui peut être connue de tous. On peut se représenter la clé publique comme un cadenas ouvert et la clé privée comme la clé de ce cadenas, elle seule pourra l ouvrir une fois le cadenas fermé. L émetteur utilise le cadenas que lui transmet le récepteur, il enferme son message à l intérieur d une boîte qu il ferme à l aide du cadenas. Désormais seul le récepteur pourra avoir accès au message, vu qu il est le seul à en posséder la clé. 28 2.8.2.1 Le RSA Fig. n 3, les trois créateurs du RSA Source : http://www.ugr.es Le RSA est un exemple de chiffre à clé publique. Il fut inventé en 1977 par Rivest, Shamir et Adleman. Son fonctionnement repose sur le principe suivant : Il est facile de multiplier deux grands chiffres premiers, mais à l inverse il est très difficile de trouver, à partir du produit, les deux facteurs premiers qui le composent. On appelle ce genre de fonctions une fonction à sens unique au contraire des fonctions réciproques. 33 C est sur cette asymétrie que repose toute la sécurité de ce chiffre. Le produit constitue la clé publique, alors que les deux facteurs constituent la clé privée. 28 Si on venait un jour à découvrir un moyen mathématique de trouver les deux facteurs premiers composant la clé publique, tout le système RSA serait inefficace. Cela poserait un sérieux problème, car il n existe pas tant de fonctions à sens unique, permettant de créer la clé privée. 28 2.8.2.2 Cryptosystème hybride Ces chiffres étant longs à mettre en place pour un texte d une certaine longueur, dans l utilisation courante, on préférera transmettre la clé d un chiffre symétrique en la codant à l aide d un chiffre asymétrique. On appelle cette combinaison de deux systèmes de chiffrement un cryptosystème hybride. 28 14

2.9 Evolution de la cryptographie En résumé, on peut délimiter quatre périodes dans l histoire de la cryptographie : 1. Avant l analyse de fréquence : Les chiffres étaient simples et rapides à mettre en place. On voit l apparition de la transposition et de la substitution. Son utilisation est majoritairement politique. 2. Après l analyse de fréquence et avant la cryptanalyse de Vigenère : Les codes furent complexifiés, afin de trouver une parade à l analyse de fréquence. Leur complexité nécessita une mise en place plus compliquée et plus longue, comme c est le cas avec le carré de Vigenère. C est à ce moment-là que l on voit l apparition de plusieurs classes d utilisateurs en fonction de leurs besoins. On n a pas besoin de la même sécurité suivant le contenu du message que l on souhaite transmettre. Son utilisation reste politique, mais elle s intensifie. Simultanément, la cryptanalyse prend également de l ampleur. 3. Puis après la cryptanalyse de Vigenère et l invention du télégramme jusqu à l utilisation des ordinateurs : On voit l apparition des premières machines à coder, telles qu Enigma ou Lorenz, qui ont pour but d accélérer le processus de cryptage et d éviter les erreurs humaines. Mais les chiffres en eux-mêmes restent basés sur les mêmes principes, la transposition et la substitution. Son utilisation reste principalement politique mais on voit l apparition du concept de protéger les données d une entreprise ; c était le but de Scherbius avec Enigma. 4. Puis après l apparition de l ordinateur : L utilisation des ordinateurs va faire apparaître de nouveaux besoins, notamment pour les civils. Elle est donc désormais utilisée dans trois principaux domaines : la politique, l économie et le domaine privé. Les principes de cryptage vont changer, le chiffrement symétrique et celui à clé publique succèdent à la transposition et à la substitution. Le chiffrement à clé publique va assurer une plus grande sécurité aux opérations effectuées sur internet, par exemple. Il faut donc retenir que la cryptologie est une science, en constante évolution, qui intervient dans de nombreux domaines, que ce soit politique, économique ou simplement pour protéger nos données sur différents supports. Elle n est pas toujours visible et, on a, à l heure actuelle, tendance à oublier que la sécurité de nos données repose entièrement sur elle. On ne peut savoir comment elle évoluera dans le futur, mais il est certain qu elle va évoluer, contrainte par de nouveaux besoins ou de nouvelles avancées au niveau mathématique. Il est aujourd hui difficile de savoir où la cryptologie se situe. Effectivement, le RSA a peut-être déjà été cryptanalysé, mais pour pouvoir garder la main mise sur les données envoyées par des tiers, celui qui aurait réussi à casser le RSA, aurait tout avantage à se taire. Il est donc préférable pour garder cet avantage de faire croire à son concurrent que son système de cryptage est toujours sûr. Il est aussi à noter que les cryptanalystes ont toujours tendance à avoir une longueur d avance par rapport à ceux qui utilisent les chiffres ou codes. Incontestablement, les utilisateurs ne voient pas l intérêt de créer un nouvel algorithme, tant que celui utilisé n est pas menacé. Ce fait là inclut qu il 15

faut donc accepter que l on ne bénéficie jamais d une sécurité totale. Il est donc plus sécuritaire de prendre ce fait là en compte, plutôt que de croire que son chiffre ou code est infaillible. De plus, les ordinateurs, véritables avantages pour la cryptanalyse, ne cessent d être améliorés. Ils possèdent une puissance de calcul de plus en plus grande, qui permet de toujours accélérer le processus de factorisation d un produit de deux nombres premiers qui est la base du RSA. Pour s en protéger on augmente toujours la grandeur des nombres premiers utilisés, cela permet de garder une certaine sécurité quant à cet algorithme de chiffrage. Mais si les ordinateurs quantiques apparaissent, ces derniers pourraient réaliser plusieurs milliers de calculs à la fois grâce à la théorie quantique, le RSA ne pourra alors plus être utilisé de manière sure. 3 La théorie quantique dit que si on s intéresse à des objets très petits, à l échelle microscopique, tels que des photons, on ne peut prévoir leur parcours et que de ce fait là ils sont à plusieurs endroits différents en même temps. C est une superposition d états ou une multitude d univers interagissant entre eux, selon les points de vue. Ainsi si l on demande à un ordinateur d effectuer une série de calcul avec comme variable un nombre de 1 à 32, par exemple ; un ordinateur classique fera trentedeux suite de calculs l une après l autre. Par contre si les bits composant les codes binaires des nombres à tester, dépendent de la polarisation d un atome, polarisation qui est du domaine du microscopique et donc du quantique, l ordinateur quantique réalisera les 32 suites de calculs simultanément ce qui représente un gain de temps important. 3 3. Codes utilisés durant la première guerre mondiale par l Allemagne Bien que les renseignements aient joué un rôle plus que majeur durant la seconde guerre mondiale, il ne faut pas négliger le fait que la cryptanalyse a toujours joué un rôle important durant les périodes de guerre. 3.1 Le chiffre ADFGX Ce code est une combinaison de deux autres, la transposition et le carré de Polybe. Il fut inventé par le colonel Fritz Nebel et utilisé dès mars 1918. La clé du carré de Polybe changeait tous les jours, ce qui ne facilitait pas la tâche aux cryptanalystes. Le carré de Polybe est une technique de chiffrage qui consiste en un tableau carré. A D F G X A p e o d h D x j c u f F l r g n z G k q v s t X a b i y m Si l on veut chiffrer une lettre, on prend ses coordonnées dans le tableau et on note ce binôme de lettre à la place de la lettre claire. La partie violacée correspond à la clé. Si l on chiffrait «je suis allée au Panama» on obtiendrait ceci : DDAD GGDGXFGG XAFAFAADAD XADG AAXAFGXAXXXA 16

Après cette étape, pour complexifier le chiffre et en améliorer sa sécurité, on y appliquait une transposition. C est un Français, Georges-Jean Painvin, qui cassa ce code le 5 avril 1918. Lorsqu en juin, le code se complexifia par l ajout du V, Painvin n eut besoin que d une journée pour le casser à nouveau. A la fin de la guerre, Painvin continua une carrière dans l industrie minière. Il reçut la Légion d honneur en 1918 mais il ne fut déclaré officier qu en 1973. C est le cas de nombreux héros de la cryptanalyse. 4 3.2 Le Télégramme de Zimmermann Fig. N 4 ;Arthur Zimmermann Source : http://www.nndb.com Ce télégramme contenait des informations hautement sensibles qui ont poussé les États-Unis à s engager dans la première guerre mondiale. Il a été intercepté le 17 janvier 1917 3 il était codé selon le code 0075 4, qui est un code utilisé pour les relations diplomatiques. Ce code est en fait un répertoire de 10'000 mots et phrases qui sont associés à un nombre au hasard. Il y avait plusieurs codes du même type. Le code 0086 était utilisé pour les missions dans le sud du continent américain alors que le code 0064 était utilisé pour les communications entre Madrid et Berlin. Pour pouvoir coder ou décoder ces codes, chacun devait avoir un manuel, mais afin de simplifier les choses il y avait en réalité deux sortes de manuels. A l instar d un lexique d une langue étrangère, il y avait une partie où les mots étaient classés de façon alphabétique afin de faciliter le codage, et l autre partie recensait par ordre croissant les numéros pour faciliter le déchiffrement. Il était effectivement clairement trop long et pénible de devoir chercher à quoi les numéros pouvaient bien correspondre dans la partie alphabétique (comme il serait incongru d aller chercher un mot allemand dans la partie français-allemand d un lexique). 3 Si le mot à coder ne se trouvait pas dans le manuel, ils coupaient le mot en syllabes et les codaient chacune séparément. 3 Les Alliés réussirent à décrypter ce télégramme grâce à des manuels qu ils avaient saisis. Le message contenait des informations de première importance, à propos d une attaque sous-marine de grande envergure. L Allemagne avait réussi à garder jusqu à lors, les Etats-Unis dans la neutralité, elle voulait éviter qu ils s y engagent ce qui aurait constitué un déséquilibre dans le conflit. Ainsi, si les Etats-Unis étaient au courant de leurs intentions ils s engageraient dans le conflit. Si cela se trouvait être le cas, le télégramme spécifiait de proposer une alliance avec le Mexique pour qu il puisse acquérir certains états du sud des USA et qu il ne s allie pas avec les Etats-Unis, mais avec l Allemagne. Le télégramme faisait également mention d une possible demande d adhésion immédiate du Japon au conflit. 4 17

C est le ministre des affaires étrangères allemand, Arthur Zimmermann, qui envoya ce télégramme, et qui lui donna son nom par la suite, à l ambassadeur allemand basé au Mexique. Les Anglais, après avoir déchiffré ce message, durent décider s ils devaient en informer les USA, ce qui aurait alors signifié son engagement obligatoire dans la première guerre mondiale, mais qui révélerait aux Allemands que le code avait été craqué. Cela aurait convaincu les Allemands de ne plus l utiliser, ce qui aurait replongé les Alliés dans l ignorance de certains plans des Allemands. Ils n eurent pas à choisir l option à suivre, car un espion anglais basé au Mexique se trouvant en possession du message le transmit aux USA. Le télégramme fut publié le 1 er mars 1917, et début avril les Etats-Unis entrèrent en guerre contre l Allemagne et ses alliés. Il apparait donc relativement clairement que, sans ce télégramme, les USA ne se seraient sûrement pas engagés, ne se sentant pas concerné et voulant se préserver d une telle guerre. Le président de l époque, Woodrow Wilson, déclarait à sa réélection en 1916 que les USA étaient neutres, bien qu il ait plus d affinité avec l Angleterre et les Alliés. 3 Ainsi leur engagement a raccourci la guerre et changea le cours le cours de l histoire. C est donc dans cet exemple, ainsi que d autres, que l on peut voir l importance de la cryptographie et de la cryptanalyse sur le déroulement de l histoire. D ailleurs, le fait que la cryptanalyse ait joué un rôle aussi important remit en question beaucoup de pays sur leurs propres services de renseignements, en particulier pour ceux qui n en avaient pas de permanant : ce fut le cas pour l Allemagne, les Etats-Unis et la Grande-Bretagne. 7 On peut se demander pourquoi il a fallu attendre la première guerre mondiale pour que le fait de posséder un bureau de renseignements devienne la norme, le passé ne manquant en aucun cas de guerres où les messages cryptés ont joué une importance notable. Mais la différence est, que depuis l invention de la radio ou du télégraphe sans fil, par l Italien Marconi en 1894 3, les communications se sont simplifiées et sont devenues bien plus rapides (presque immédiates). En contrepartie il était beaucoup plus facile qu'auparavant pour l autre camp d intercepter les messages, d où la nécessité de les crypter de façon sûre. Grâce à la facilité d envoi des messages cryptés, ceux-ci ont augmenté en nombre, prenant de plus en plus d importance, ce qui rendit indispensable d essayer de les casser. 7 18

4. La machine Enigma 4.1 Son invention La machine Enigma a été construite par Arthur Scherbius au début des années 20, selon les plans d Hugo Koch, un Néerlandais habitant à Delft, qui, après la faillite de son entreprise de vente de machine à coder, en céda les droits à Scherbius 10. Scherbius était le co-fondateur d une entreprise allemande. Il est l inventeur d un certain nombre de machine à coder, dont Enigma, qu il nomma ainsi en référence aux «Variations sur une Enigme» de sir Edward Elgar, un compositeur anglais de la fin du XVIII e siècle 11. Il présentera Enigma à Vienne au «Universal Postal Union Congress» en 1923. 4.2 Utilisation prévue Scherbius destinait sa machine à un usage commercial, comme le montre cette publicité : "La curiosité naturelle de vos concurrents sera déjouée par une machine qui vous permettra de garder entièrement secrets tous vos documents, tout au moins les plus importants d'entre eux, sans occasionner de dépenses notables. Un secret bien protégé peut vous faire récupérer totalement le prix de la machine..." 10 Mais elle n eut pas le succès escompté dans ce domaine. Effectivement elle était trop chère, et dans le contexte de l'époque, les entreprises n avaient pas le besoin de protéger toutes leurs données. Enigma était donc trop en avance sur son temps. 1,2 Ainsi Scherbius fit faillite à l instar de Koch, mais sa machine allait connaitre un tout autre destin. 10 4.3 Utilisation par l armée allemande Mais si les entreprises de l époque n en voyaient pas la nécessité, l Allemagne avait toutes les raisons de s y intéresser. Effectivement l Allemagne apprit que la british Navy, durant la première guerre mondiale, avait cassé les codes qu elle avait utilisés, notamment le chiffre ADFGX 4, ou encore le code 0075, qui a été utilisé pour chiffrer le Télégramme de Zimmermann. Cela devenait donc urgent de changer cette situation, et d améliorer la sécurité de leurs communications, en prévision et pendant la seconde guerre mondiale. C est le colonel Fellgiebel, qui s y intéressa le premier. Il n y vit que des avantages : elle était relativement bon marché à produire, était transportable, solide et simple d utilisation. De plus elle était réputée inviolable à l époque. 10 Ce fut d abord la marine qui adopta une version modifiée d Enigma, qui fonctionnait néanmoins toujours selon le même système, puis ce fut au tour l armée de terre et de l air de l'adopter. 2 Chaque section avait sa propre machine, afin qu elle soit le plus possible adaptée à leurs besoins spécifiques. 2 19

4.4 Le fonctionnement d Enigma 4.4.1 Description Le couvercle Les trois rotors et le réflecteur Tableau de 26 ampoules Clavier Tableau des sockets Fig. n 5, machine Enigma à 3 rotors Source : http://www.extravaganzi.com/ Enigma est une machine mécanique composée de 3 à 6 rotors mobiles à 26 crans, en fonction des versions. Chacun des ces rotors est recouvert d un ruban alphabétique. La machine Enigma possède également un réflecteur fixe, un clavier à 26 touches et un tableau de 26 ampoules, chacune correspondant à une lettre codée. Enigma tient dans une boîte de 34 cm sur 28 cm sur 15 cm et pèse une douzaine de kilos. 3 Lorsque son couvercle était refermé, on pouvait voir le clavier, les ampoules, et, par une petite fenêtre, la position des rotors. En 1930 23, l armée allemande rajouta à la version originale, un tableau de «sockets» ou «steckers» 4 qui permettent d intervertir 2 lettres. Ainsi si l on tape A et que le «socket» du A est lié avec celui du S, la lettre qui passera dans la machine et sera codée sera le S. 1,3 Fig. n 6, Tableau de sockets ou steckers Source : http://www.cryptomuseum.com 20

Les rotors sont parcourus de fils électriques, arrangés de manière aléatoire, mais toujours de la même manière pour chaque machine, du moins entre des machines qui communiquaient entre elles, sinon le décodage ne serait pas possible. 1 Fig. n 7, exemple de parcours à travers des rotors Source : enigma-v2.fr - On voit sur cette représentation simplifiée (il n y a que 4 lettres au lieu de 26) que les rotors mis bout à bout forment une boucle de courant. Pour «fermer la boucle» il y a le réflecteur, qui est immobile, et qui relie, également, par des fils électriques, deux entrées/sorties du dernier rotor, celui qui est en contact avec le réflecteur. Ainsi il renvoie le courant jusqu au tableau d ampoule afin d allumer la lettre codée. A l instar des rotors, les fils électriques y sont aussi disposés au hasard. 1 Fig. n 8, le réflecteur Source : www.bibmath.net - 4.4.2 Fonctionnement Le fonctionnement d Enigma est le suivant : à chaque lettre tapée un courant électrique partira depuis l entrée propre à la lettre dans les trois rotors plus le réflecteur, le courant ressortira par une autre entrée propre à une autre lettre, cette dernière étant la lettre codée. Puis le premier rotor va tourner d un cran, ce qui aura pour effet de changer totalement la disposition des circuits électriques. Ainsi un A ne sera jamais codé de la même manière jusqu à ce que l on retombe sur la position des rotors au départ. Lorsque le premier rotor aura fait un tour complet, ce sera au tour du deuxième de tourner d un cran. Puis le premier recommencera ses rotations. Quand le deuxième rotor aura lui aussi fait un tour, le troisième tournera d un cran. 21

Pour déchiffrer un message codé, on repositionne les rotors selon la position de départ, qui est la clé de déchiffrement, puis on tape le texte chiffré pour retomber sur le texte clair. Car si A se transforme en G, G serait aussi transformé en A à la même position. 1 Ainsi, si l on souhaitait coder le mot «BAC» selon la figure n 7, on procéderait de la manière suivante. Si l on suit le parcours du B, il sera chiffré en D. Puis le rotor 1 va tourner d un cran. Le A ira désormais aussi sur la lettre D. Le rotor 1 tourne à nouveau d un cran. Le C sera chiffré en B. Notre mot «BAC» s écrirait donc ainsi «DDB». 4.5 Mode opératoire des Allemands Pour envoyer des messages codés, les Allemands devaient suivre une démarche très précise. Ils choisissaient un trio de lettres, prenons par exemple GAP. Puis ils regardaient dans un registre les clés à utiliser, connu par l émetteur et le récepteur, celles-ci changeant chaque jour, ou parfois plusieurs fois par jour, afin de préserver la sécurité du code. Imaginons que la clé du jour soit PIN. L émetteur du message codait avec pour position de départ : PIN. La position de départ correspond à la position active de chacun des rotors, c est cette combinaison de la lettre apparente de chacun des rotors que l on voit à travers la fenêtre du couvercle de la machine. Donc avec PIN, il chiffrait deux fois de suite la clé qu il avait choisie au hasard, dans notre cas GAP. On obtient VOXHKM. Puis il codait le texte qu il devait envoyer avec la clé qu il s était choisi, c est-à-dire GAP, sans avoir oublié de placer VOXHKM au début du texte. Celui qui recevait le message décodait VOXHKM avec la clé du jour, afin de savoir la clé que l émetteur avait utilisée, ce qui lui permettait de déchiffrer le reste du texte. 1 5. Le déchiffrement d Enigma par les Alliés Avant la guerre, les Allemand n avaient pas le même mode de fonctionnement pour crypter leur message : ils cryptaient la clé du jour deux fois à l aide de la clé du jour. 5.1 Des débuts polonais Fig. n 9 Rejewski, Rozycki et Zygalski Source : http://fr.poland.gov.pl C est à partir de 1932 4, que trois mathématiciens polonais, Marian Rejewski, Jerzy Rozycki et Henryk Zygalski, tentèrent de briser Enigma en y appliquant la théorie mathématique des ensembles. Effectivement, ils se rendirent compte que chaque lettre étant codée par une autre lettre ; une lettre ne peut être codée par elle-même, le courant ne pouvant revenir en sens inverse dans les rotors à cause du réflecteur. Les lettres codées en d autres lettres formaient des boucles (A se code en B ; B 22

se code en C ; C se code en A, par exemple). Ils remarquèrent alors que les boucles qui composaient l alphabet se trouvaient toujours par paires d égales longueurs (deux de trois, deux de deux, deux de huit par exemple). Ce fait-là permettait de réduire considérablement le temps de déchiffrement à la main pour trouver la clé du jour. 4 C est après avoir fait cette découverte qu ils constituèrent un document qui recensait plus de 100'000 paramétrages des rotors. 4 L élaboration de ce document demanda énormément de temps, les ordinateurs n existant pas à l époque! Ensuite, à l aide de deux rotors d une machine Enigma, ils en construisirent une autre qu ils nommèrent Cyclomètre. Cette machine permettait de raccourcir le temps pour tester les permutations. Ce gain de temps leur permit de constituer un autre fichier qui recensait le nombre et la taille des boucles pour chaque paramétrage possible de la machine, c est-àdire 17'576, nombre qui correspond à 26 3. Ce fichier colossal leur permit de ne passer qu un quart d heure pour trouver les clés du jour. 4 Puis en 1938 4, les Allemand changèrent leur mode de cryptage pour utiliser celui décrit dans la partie «utilisation par les Allemands» : ce changement réduisit à néant les efforts du trio polonais, mais ils s en relevèrent et développèrent une nouvelle méthode toujours fondée sur la théorie des ensembles. Ils remarquèrent des paires de lettres, qui une fois codées, donnaient la même lettre sur un court intervalle; ils appelèrent ces paires des «femelles». 4 Par la suite, ils construisirent des machines, appelées "bombas", ancêtre des «bombes» de Bletchley Park, qui testaient les paramétrages engendrant des femelles. Le problème de cette méthode venait du fait qu elle tablait sur le principe qu il n y ait aucun socket, aucune liaison entre deux lettres, et qu'à cette époque le nombre de sockets ne cessa d augmenter pour passer de trois au début de la guerre jusqu à dix par la suite. 4 Ils constituèrent des cartes perforées, des cartes de Zygalski. Il y en avait 26 pour chacune des positions du premier rotor, elles étaient constituées d un quadrillage de 26 cases sur 26 afin de représenter chacun des paramétrages possibles de la machine Enigma. Les cases qui étaient perforées correspondaient à un paramétrage qui engendrait des femelles. Lorsqu ils recevaient plusieurs messages du même opérateur, qui avait la même clé tout au long de la journée, ils pouvaient empiler les cartes. Lorsque les trous coïncidaient, cela signifiait que ce réglage était possible. La technique des cartes de Zygalski permettait de réduire considérablement les possibilités. 4 Après avoir triomphé du changement de méthode, les efforts des Polonais furent à nouveau réduits à néant. En décembre 1938, les Allemands pouvaient choisir 3 rotors parmi 5, ce fait là augmentait considérablement le nombre de possibilités, ce qui impliquait un plus grand nombre de cartes perforées, ce qui n étaient pas dans les moyens du trio (il faut se rendre compte que les cartes étaient faites à la main, à l aide d une lame de rasoir). 4 De plus, malgré un pacte de non agression signé en 1934 entre la Pologne et l Allemagne, la Pologne se fait envahir le 1 er septembre 1939 5. Ayant bien senti le danger qui pesait sur eux, les Polonais arrivèrent à la conclusion, à la conférence au château de Vignolle en France, que pour protéger le décryptement partiel des codes d Enigma 10, ils devaient absolument faire part de leur travail à d autres pays. Ils transmirent leurs travaux, ainsi que des machines Enigma de leur propre 23

fabrication, au GCCS (Government Code and Cypher School) en Angleterre, et au service de renseignements français. 4 5.2 Enigma, les Français et les Anglais Il est important de préciser que les Anglais et les Français avaient déjà réussi à se procurer des machines Enigma militaires, au contraire des Polonais qui ne possédaient que des modèles commerciaux. 10 Les Français y parvinrent grâce à un Allemand qui se présenta à l ambassade française à Berne, comme un ancien employé du service de cryptage allemand. Bien que les Français soient méfiants quant à ce genre de renseignement, ils acceptèrent de le rencontrer. Bien leur en prit, car cet espion leur fournit premièrement la confirmation que les Allemands utilisaient un système de machines Enigma pour garder leurs communications secrètes ; de plus, il leur fournit un manuel secret d'instructions pour l'utilisation de la machine. Cela leur permit de construire une réplique exacte d Enigma. 10 Les Anglais obtinrent des informations grâce à un Allemand juif, caché sous le nom d emprunt de Lewinski, ayant travaillé comme ingénieur à l usine qui fabriquait les machines. Il avait été chassé d Allemagne à cause de sa religion. Il demandait en l échange de renseignements une certaine somme d argent, un passeport britannique et un permis de séjour en France pour sa femme et lui. Le chef de la section allemande au renseignement militaire du War Office, Stewart Menzies, ordonna à deux mathématiciens, Alfred Knox et Alan Turing, d aller à Varsovie, où se trouvait Lewinski, pour le rencontrer et déterminer si l on pouvait lui faire confiance ou si c était un espion allemand qui aurait pour but de les mener sur une fausse piste. Ayant été jugé digne de confiance, Lewinski fut rapatrié en France, et fournit une mine d informations à propos d Enigma, il en expliqua le fonctionnement et en construisit également un modèle. 10 5.3 La réussite de Bletchley Park Fig. n 10 Bletchley Park Source: http://www.hdwallpapersinn.com Bletchley Park (abrégé par "BP" dans la suite du texte), un petit manoir, situé à mi-distance entre Oxford et Londres est le siège du GCCS ; Gouvernement Code and Cypher School, qui est la réunification du MI1b et du bureau 40. 26 Le MI1b s occupait durant la première guerre mondiale de 24

l interception des messages et de la cryptanalyse. 26 Le bureau 40 était chargé par l amirauté britannique, le service de la marine, de décrypter les codes ennemis. 27 La station X, son nom de code, employait 186 personnes peu avant la guerre et 9 000 en 1945. 4 En 1943, une délégation américaine les rejoignit lors de l engagement des Etats-Unis dans la seconde guerre mondiale. Afin de loger tous ses employés, BP se vit agrandir par la construction de nombreuses baraques dans son parc. Chaque baraque avait sa propre spécialité, la 8 était dédiée au brisement des codes de la marine allemande, la 6 ceux de l infanterie et de l aviation ou encore le bâtiment E qui avait la mission de transmettre les messages décodés aux forces alliées. La baraque qui allait contenir les bombes de cryptanalyse était la baraque numéro 3. 10 Ce qui posait le plus de problèmes aux cryptanalystes était le nombre de sockets, de connexions entre deux lettres, toujours plus grand. Rien que pour un seul paramétrage des rotors, il y avait 2,5 milliards de milliards 4 de possibilités. C est grâce à la «bombe» une machine inventée par deux mathématiciens, Alan Turing et Gordon Welchman, que ce problème put être surmonté. Ces Bombes fonctionnaient selon le même principe que les «bombas» polonaises, elles recherchaient des boucles. Le nombre de possibilités était réduit par l émission d hypothèses sur le contenu du message. Ces bombes étaient une réelle aide, elles accéléraient le processus de déchiffrage ce qui permettait de déchiffrer les messages plus rapidement et permit ainsi et que leur contenu puisse encore influencer les décisions des Alliés. 5.3.1 Alan Turing Fig n 11 Alan Turing Source: http://www.rutherfordjournal.org Alan Turing est sûrement la personne la plus connue dans le déchiffrement de la machine Enigma. C était un mathématicien brillant; il sera l élève d Einstein à l institut d études supérieures de Princeton 10. C est aussi l un des pères de l ordinateur et de l informatique moderne. 6 Il inventa notamment la théorie dite de la machine Turing qui permettait d avoir un «automate programmable capable de résoudre tous les problèmes mathématiques ou logiques qui ont une solution» 6. Il participera après la guerre à la course à la construction du premier ordinateur, il quittera le NPL (National Physical Laboratory, en Angleterre) avant que l ACE se construise, bien qu il soit fondé sur un rapport de Turing. 6 L ACE ; Automatic Computing Engine ; est le troisième ordinateur sur sol anglais et le plus rapide au monde à l époque. 25 25

Sa contribution majeure à la cryptanalyse fut son idée des «bombes», qui au contraire des bombas polonaises prenaient en compte le tableau des steckers ou sockets. 23 Il participa également à la conception du Colossus, il s occupa plutôt de la partie théorique alors que Thomas Flowers s occupa plus du montage et de sa réalisation. 23 Alan Turing se suicidera en 1954 à l âge de 43 ans. Persécuté pour son homosexualité, il avait dû suivre un traitement hormonal qui le conduira jusqu à la dépression et au suicide. 6 5.3.2 Mots probables et «jardinage» Afin de trouver la clé du jour et ainsi déchiffrer les messages allemands, les cryptanalystes avaient besoin de prédire, de supposer des mots contenus dans le texte. Ils pouvaient par exemple s appuyer sur les formules de salutations souvent présentes au début et à la fin d un texte. Ils utilisaient aussi le paramètre de la météo dans les messages émis par la marine. Il y avait aussi les «failles» humaines, certains opérateurs choisissaient toujours le même paramètre, le mot «ist» ou encore le prénom de la copine. A défaut de les trouver, les déchiffreurs essayaient de provoquer l apparition de certains mots, par exemple en reposant des mines sur un terrain qui avait déjà été déminé, afin d interpeller les Allemands et augmenter les chances qu ils placent le mot «Minien» dans leurs messages. On appelle cette technique le "jardinage". 4 5.3.3 Principe de fonctionnement des bombes Fig. n 12 Une des bombes ayant servis à la cryptanalyse d Enigma Source : http://www.neatorama.com Ces mots probables, «jardinés» ou non, étaient appelés des «cribs». Le but des cryptanalystes était de trouver la partie du message qui correspondait à ces cribs. Pour ceci, ils se basaient sur l une des failles d Enigma : une lettre ne peut jamais être codée par elle-même. Ainsi, si une lettre d un «cribs» était identique à la lettre par laquelle elle aurait dû être chiffrée, on savait que ce n était pas la place du «cribs». Cette situation, quand une lettre est la même que son hypothétique chiffrage, était appelée un «crash». Par exemple si les cryptanalyste soupçonnaient un message de commencer par «Guten Tag» et que le message chiffré commençait ainsi : FRTZHIKR. Ils savaient que cela ne pouvait pas être possible, car il y a un «crash» sur la lettre T. 31 G U T E N T A G F R T Z H I K R 26

Ainsi plus le «cribs» était long, plus il était facile d éliminer les endroits où il pouvait être placé dans la phrase. Avec ces renseignements, les cryptanalystes pouvaient désormais utiliser les bombes pour rechercher les clés possibles. 31 Alan Turing remarqua que certains mots étaient toujours suivis du même type de mots, par exemple «FORT» était exclusivement suivi de chiffres. Le clavier d Enigma ne possédant pas de chiffres, ils étaient écrits en toutes lettres, ainsi 21 ne s écrivait pas «einundzwanzig» mais «zweieins». Il suffisait alors au cryptanalyste de tester plusieurs possibilités, ce qui lui permettait d augmenter la longueur de son «cribs» et ainsi augmenter la probabilité de trouver sa place dans le texte chiffré. 30 5.3.4 Premiers messages décryptés et Boniface C est le 20 janvier 1940 que le premier message fut décrypté à BP, et en conséquence la question de ce qu'il fallait faire avec ces messages se posa. Effectivement, si les Allemands venaient à découvrir que leurs codes avaient été craqués, ils auraient sans-doute changé de méthode de cryptage, ce qui aurait réduit à néant tous les efforts faits depuis 8 ans. Ainsi, malgré le fait que le gouvernement était au courant de certaines attaques, il n agissait pas forcément pour contrer ces dernières, et de ce fait de nombreuses vies ont été sacrifiées afin de garantir la pérennité de l utilisation d Enigma par les Allemands, et ainsi de pouvoir continuer à déchiffrer leurs codes. 7 Les alliés avaient aussi inventé tout un réseau d espionnage en Allemagne sous le nom de code "Boniface" afin de ne pas éveiller les soupçons des Allemands quand une attaque ne se passait pas comme ils l avaient prévue. 4 6. Les failles d Enigma et l influence de la cryptographie sur la fin de la guerre La cryptanalyse d Enigma a permis, notamment grâce à la saisie d un sous-marin nommé le «Krebs», le crabe en Allemand, qui contenait des manuels de clés et des machines Enigma, de savoir où allaient se dérouler les attaques sous-marines. Ceci a donné l opportunité aux Alliés de mieux se préparer et d éviter des pertes autant humaines que matérielles. 29 La cryptanalyse de Lorenz, quant à elle, a permis d avoir un avantage lors du débarquement, effectivement les Alliés savaient les informations que les Allemands avaient en leur possession et pouvaient adapter leurs plans en fonction de ce paramètre Enigma comporte deux types de failles : Celles qui sont inhérentes à la machine, telles que le fait qu une lettre ne soit jamais codée par elle-même. cela a permis d y appliquer la théorie des ensembles, ce que les Polonais ont fait. Puis il y a les failles humaines, le fait d utiliser toujours le même positionnement des rotors ou de parler de choses facilement identifiables comme la météo etc. C est grâce à ces deux types de failles que les Alliés ont réussi à trouver des méthodes leur permettant de déchiffrer ces messages et ainsi d être au courant des plans de l ennemi. La cryptanalyse a permis de réduire considérablement la durée de la guerre. Selon Sir Harry Hinsley, un cryptanalyste et historien anglais 9, la guerre n aurait pas fini en 1945 mais en 1948, ce qui aurait peut-être permis à Hitler d utiliser ses V-weapons. 3 Les V-weapons ou V1, V2 et V3, sont des fusées blindées d explosif. La fusée V2 mesurait 14 mètres de haut et contenait 740 kg d explosif. 14 Ces armes, qui vont à l encontre du traité de Versailles, signé à la fin de la première guerre mondiale, sont envisagées dès 1930. Après de nombreux prototypes et essais, un premier test est effectué en 27

1942 : il est catastrophique, mais Hitler ne veut pas abandonner l idée de ces armes ayant une portée de 350 km et donc un potentiel certain pour attaquer l Angleterre. Ce projet ne pourra pas être mené à son but final à cause du trop peu temps restant et du coût gigantesque de ces armes. Ainsi, malgré le sacrifice de vies pour garder secret le fait que les codes avaient été cassés, la cryptanalyse a sauvé de nombreuses vies, pas seulement celles des Alliés mais aussi celles des Allemands et Japonais du fait de l'abrégement de la durée de la guerre. 3 Il est bien évidemment difficile de prédire ce que la guerre aurait été sans la cryptanalyse, l issue de la guerre dépendant de beaucoup de paramètres, mais comme le disait Patrick Beesly, qui travailla dans la partie de BP qui supervisait le déchiffrage des codes de la Marine, Ultra était l un des paramètres qui ont constitué la victoire mais pas le seul paramètre. 7 Ultra est l ensemble des moyens mis en place par l Angleterre pour déchiffrer les codes ennemis. 7. Les autres méthodes de cryptages utilisées durant la seconde guerre mondiale 7.1 La sténographie Bien qu elle soit moins sûre que la cryptographie, la sténographie avait des avantages : personne ne doutait qu un message leur passait sous le nez, le message étant dissimulé, rien ne montrait qu une information y était cachée. Ainsi, si le porteur du message était pris, personne ne se doutait de ce qu il détenait. La sténographie ne pouvait par contre être utilisée qu à petite échelle et demandait un contact presque direct entre l émetteur et le récepteur. 7.1.1 L encre invisible Cette technique fut utilisée en juin 1942. Les Américains virent un membre d un groupe allemand se rendre, lequel groupe pouvait se révéler dangereux du fait de la quantité d explosif dont les membres étaient en possession. Il avait dans ses affaires un mouchoir qui s'est révélé contenir une liste de noms compromettants écrits à l encre invisible. Cette découverte leur permit de découvrir le complot qui consistait à saboter la production de matériel et de nourriture américaine dans le but de semer la panique dans le pays. 4 L encre invisible est un vieux principe qui consiste à écrire à l aide d un fluide transparent mais dont la composition brunit plus rapidement que son support quand il est soumis à une source de chaleur. Cela peut être du jus de citron, d oignon ou encore du lait. Pour éviter d attirer l attention, il est conseillé d écrire sur une feuille contenant déjà un texte lambda afin de ne pas attirer l attention par une feuille blanche. 4 7.1.2 Le micropoint Cette technique consistait à réduire de façon significative un texte jusqu à qu il n y ait que la taille d un point que l on pouvait placer sur un i d un texte lambda. Le récepteur du message n avait plus qu à utiliser un microscope pour avoir connaissance du message. 4 28

7.2 Le chiffre d Hitler ou la machine de Lorenz Fig. n 13 La machine de Lorenz Source : http://www.colindaylinks.com/ Bien qu Enigma soit le moyen de cryptage le plus connu, il n était pas le seul utilisé par les Allemands. Ce chapitre décrit un autre code, qui a changé la fin de la guerre ainsi que l histoire de l informatique, par sa cryptanalyse faite par les Anglais à Bletchley Park. C est à partir de 1940 que d autres messages non-cryptés avec Enigma parvinrent aux Alliés. Ils ne savaient pas quelle machine les avait produits, ce n est que plus tard qu ils découvrirent la machine de Lorenz, la Lorenz SZ 40. Cette machine servait à envoyer des messages très sensibles qui nécessitaient encore plus de sécurité que les messages transmis par l armée, qui utilisait des machines Enigma. 4, 6 7.2.1 Fonctionnement Cette machine contenait 12 rotors ; en comparaison, la machine Enigma n en contenait généralement que 3 et en a contenu au maximum 6. Ces 12 rotors possédaient plus ou moins de crans, de 23 à 61. Les 5 premiers rotors, nommés «chi», en référence à la lettre grecque χ, tournaient de 1 cran à chaque lettre tapée tout comme le premier rotor moteur. Si ce dernier était actif, c est-à-dire que la position témoin (qui sert à définir la clé de cryptage) est un 1, le deuxième rotor moteur tourne d un cran. Les 5 autres rotors, appelés psi, en référence à la lettre grecque ψ, ne tournent que si ce deuxième rotor moteur est actif. Ce mode de rotation a pour but de choisir une 12, 13 clé additive de manière presque aléatoire. L abréviation SZ signifie «Schlüsselzusatz» c est-à-dire «clé additive». Chaque lettre possédait un code de 5 chiffres, chacun d eux était soit un 1 ou un 0. C est sur l opération logique XOR (symbole: ), le «ou exclusif», dont voici la table de vérité, que le principe de cette machine repose 4, 6. Une table de vérité sert à représenter tous les cas possibles de l interaction de deux, ou plusieurs, facteurs selon une opération logique. Un facteur est soit juste (1) soit faux (0) on utilise donc un système binaire. : 29

0 0 0 0 1 1 1 0 1 1 1 0 Comme on peut le voir dans la table de vérité, le «ou exclusif» n est vrai que si un seul des deux facteurs est vrai. On peut aussi représenter les opérations logiques selon un diagramme de Venn. Les zones rouges représentent les cas où le «ou exclusif» est vrai. Diagramme de Venn de (zones en rouge) Lorsqu une lettre était tapée, on ajoutait à son code binaire, issu de l alphabet télégraphique international n 2 12, celui d une autre lettre qui était définie par la machine. 6 Les positions témoins des 5 rotors chi, et des 5 rotors psi étaient «additionnées» par le ou exclusif, afin de définir la clé additive. 12 Ainsi, s il l on tapait la lettre A, dont le code est 11000 et que la machine lui ajoutait le code du L, c est-à-dire 01001, on obtenait grâce au ou exclusif le code de la lettre Z, 10001 : 4 1 0 1 1 1 0 0 0 0 0 0 0 0 1 1 Pour décrypter le message on utilisait la même technique, et du Z on retombait sur la A grâce au L. 4 On remarque, qu au contraire d Enigma, une lettre peut très bien être chiffrée par elle-même. Effectivement si la clé additive est 00000 et qu on veut coder la lettre A. On additionnera à l aide d un «ou exclusif» 00000 et 11000 et on retombera sur 11000. De ce fait, les cryptanalystes ne peuvent pas compter sur cette faille pour tenter de casser le chiffre. 30

7.2.1 Cryptanalyse de Lorenz par les Alliés Fig. n 14, Le Colossus Source : http://www.turing.org.uk Son fonctionnement est clairement plus compliqué mais les alliés réussirent tout de même à casser ce code grâce à une erreur humaine. Un opérateur, après avoir transmis un long message qui n aboutit pas, le renvoya avec la même clé mais en utilisant des abréviations pour raccourcir le message. En possession de ces deux messages les Alliés purent comprendre le principe de fonctionnement de la machine. 4 C est ainsi qu ils construisirent la machine Colossus, c est le premier calculateur électronique et programmable de l histoire 6. C est la petite sœur plus perfectionnée de la machine «Heath Robinson», qui tient son nom d un dessinateur humoristique 6, construite par Max Newman, un ancien professeur de Turing. Cette machine teste à l aide de deux rubans environ 1 000 caractères à la seconde. Mais ces rubans se désynchronisent souvent, ce qui réduit à néant les résultats de la machine, et consomme beaucoup de temps. 6 Tommy Flowers, qui avait déjà participé à l élaboration des bombes 4, décida de supprimer l un des rubans, celui qui donne les instructions. Une machine doit donc jouer le rôle des rubans afin de les remplacer. Il la construisit exclusivement avec du matériel électronique et non pas avec des roues dentées comme dans d autres machines de l époque, notamment les bombes. Il lui inclut par la suite une horloge interne pour rythmer les opérations réalisées par la machine. On retrouve ce principe dans les microprocesseurs de nos ordinateurs actuels. Il utilisa également, grâce à son intuition, le système binaire qui permet l utilisation de seulement deux chiffres. Tous ces éléments constituent un réel pas en avant vers les futurs ordinateurs. Le ruban du Colossus ne défile plus à 1 000 caractères par seconde mais 5 000, soit à la vitesse impressionnante de 50 kilomètres par heure! Puis, par la suite, Flowers imagina un second Colossus, cette fois-ci doté de 5 rubans qui défilent de façon parallèle, ce qui amène à un défilement de 25'000 caractères par seconde. Au total une dizaine de Colossus seront construits tout au long de la guerre, chacun étant une amélioration de la précédente. Ils se virent affublés de registres provisoires de mémoires qui étaient les ancêtres de la mémoire-tampon qui permet de stocker brièvement des données avant leur traitement. 6 Le rôle le plus important du Colossus fut sûrement celui qu il joua dans le déroulement du D-Day (débarquement de Normandie) : il révéla des informations capitales comme le fait qu Hitler soit 31

persuadé que le débarquement en Normandie était un leurre, ce qui permit à Eisenhower, le commandant en chef des forces alliées, de lancer l assaut en sachant qu aucun renfort allemand ne serait envoyé. 8. Les codes étrangers 8.1 Les «code talkers» navajos Les «code talkers» navajos prennent place durant la guerre du Pacifique qui oppose les Etats-Unis au Japon. Cette technique a été imaginée en 1942 par Philip Johnston, qui avait vécu durant son enfance au milieu du peuple Navajo. De ce fait, il parlait couramment leur langue. Son idée était de remplacer des mots anglais par les des mots navajos et d en faire un lexique, comme le 0075 utilisé par Zimmermann, il contenait 274 mots. Les avions correspondaient à des noms d oiseau et les bateaux à des noms de poissons. Par exemple le mot avion correspondait à hirondelle dont la traduction navajo était Tas-chizzie. Pour les noms propres ou des noms qui ne seraient pas contenus dans le lexique, ils l épelaient d une façon particulière : chaque lettre de l alphabet était associé à un nom en anglais (B pour Bear, C pour Cat etc.) et ces noms étaient traduit en navajos. Ainsi si l on veut coder GAP en navajos on procédera de la façon suivante : G correspond à goat (chèvre) qui se traduit en navajos par Klizzie A correspond à ant (fourmi) qui se traduit en navajos par Wol-la-chee P correspond à pig (cochon) qui se traduit en navajos par Bi-sodih Ainsi on traduirait GAP ainsi : Klizzie-Wol-la-chee-Bi-sodih Après avoir soumis ce code au service de renseignements de la marine, qui n arriva pas à le casser, la langue étant impossible à prononcer et encore moins à transcrire par écrit, les Etats-Unis déclarèrent ce code apte à être utilisé sur un champ de bataille. Sur le terrain il y avait six «code talkers» qui se relayaient, ils reçurent et transmirent à eux six plus de 800 messages sans aucune erreur en deux jours. Selon le commandant Connor, sans eux ils n auraient jamais pu prendre Iwo Jima, qui est une île où prit place une bataille qui se déroula en 1945 et qui opposa les Américains aux Japonais. 8.2 Purple La machine 97-shiki oobun Inji-ki, utilisée depuis 1938 et durant la seconde guerre mondiale, est plus connue sous le nom donné par les Américains : Purple. Il s'agit d'une machine utilisant l alphabet latin et non pas japonais, qui n'était pas constituée de rotors mais de commutateurs qui avaient chacun 25 positions. Il y avait 4 commutateurs, l un servait pour les voyelles et les trois autres, tournant à la manière des rotors d Enigma, étaient dédiés aux consonnes. 4 Les failles de Purple étaient les mêmes que celle d Enigma : les formulations de politesse ainsi que les erreurs dues à l opérateur. Bien qu ils en aient compris le fonctionnement, les Américains ne trouvaient pas automatiquement les clés de chiffrement, ce qui ne permettait pas de décoder tous 32

les messages reçus. De plus, ceux qui déchiffraient ces codes n en saisissaient pas forcément l importance, ainsi certains signes de tensions auraient pu être vus si le contenu de ces messages avait été mieux interprétés. 4 On peut donc en conclure que de pouvoir décoder les messages de l ennemi constitue un grand avantage. Encore faut-il savoir en tirer parti. 8.3 Synthèse Les machines Enigma et de Lorenz prennent place dans un contexte riche en machines et algorithmes de cryptage en tout genre, que ce soit Purple pour les Japonais ou le code Navajo pour les USA. Et ces dernières ne sont qu une infime partie des chiffres et codes utilisés durant la seconde guerre mondiale. L Angleterre avait elle aussi ses codes que d autres ont réussi à déchiffrer, c est le cas des Allemands qui, en 1935, ont réussi à cryptanalyser les codes utilisés par la Navy. 29 Il faut donc retenir que, les grandes puissances se battaient sur plusieurs front, sur le champ de bataille et par le biais de la cryptanalyse. Ces deux points ont eu leur importance dans le dénouement de la guerre, et ont agi l un sur l autre, on ne peut donc pas dire que c est seulement la cryptanalyse qui a donné la victoire aux Alliés, mais c est un facteur qui a influencé l issue de la guerre. On peut voir que toutes ces méthodes poursuivent le même but, cacher à l ennemi le contenu de ses communications, mais ils ne le font pas de la même manière. Les Allemands avec Enigma et Lorenz ont compté sur le pseudo aléatoire des clés crées par leurs machines, les Japonais avec Purple se sont basés sur le même principe de l aléatoire mais en n utilisant pas cet aléatoire de la même façon. Alors que les Etats-Unis ont préféré tabler sur une langue que personne, en dehors des USA, ne pouvait comprendre. Il est à noter que les méthodes basées sur l aléatoire n ont pas résisté à l action des cryptanalystes au contraire du code navajo, de ce fait cela prouve bien que les codes sont plus sécuritaires que les chiffres bien que plus délicats d utilisation. 9. Programmation 9.1 Les langages de programmation 9.1.1 Notions théoriques Avant d écrire des instructions que l ordinateur doit exécuter, dans un langage lambda, l informatique a dû doter les ordinateurs de deux éléments. Le premier élément est un assembleur, inventé en 1950 par Maurice V.Wilkes 16, qui sert à transformer le binaire, un langage exclusivement composé de 0 et de 1. Le binaire est le seul langage que comprend l ordinateur. Ecrire en binaire peut vite entraîner beaucoup d erreurs, dues à des fautes de frappes ou d inattention. Ces fautes sont difficiles à repérer, ainsi le langage assembleur permet de simplifier la programmation tout en la rendant plus rapide. L assembleur associe des mots à des instructions souvent utilisées. Le langage Assembleur est malgré tout un langage de bas-niveau c est-à-dire qu il est plus proche du langage des machines que de l homme, au contraire des langages de haut-niveau 33

Le second élément est le compilateur, qui est utilisé pour les langages de haut-niveau afin des les traduire en langage compréhensible par l ordinateur. On peut dire que le compilateur possède en luimême un assembleur. 9.2 Le Visual Basic (vba) Le Visual basic est une adaptation du Basic par Microsoft, on peut l utiliser dans les parties développeurs des programmes de Microsoft, tels que Word ou Excel. Dans mon TM je vais justement l utiliser sur Excel. Le Vba fonctionne avec des Macros que l on commence avec : Sub nom_de_la_macro(arguments) Et finit avec un End sub On peut aussi écrire des Fonctions à l aide de Function nom_de_la_fonction(arguments ) Qui, tout comme une fonction normale, pourra être utilisée dans le tableur. 9.2.1 Pourquoi avoir choisi le Visual Basic? J ai décidé d utiliser ce langage de programmation car il permettait, grâce au tableur Excel, d avoir une interface graphique, ce qui est intéressant pour pouvoir voir les rotors etc. J ai également fait ce choix car j avais déjà quelques connaissances dans ce langage, ce qui a permis d arriver plus facilement à me mettre dans la programmation de mes deux programmes. 10. Description du code 10.1 Les Fonctions 10.1.1 Les boucles Les boucles sont des fonctions qui exécutent des instructions, choisie par le programmeur, pendant un temps, ou un nombre de fois défini préalablement. 10.1.1.1 La boucle for C est une boucle à incrémentation, elle va s exécuter un certains nombre de fois, que l on aura défini au début de la boucle. De manière générale, un paramètre des instructions dépendra de l incrémentation. Dans le cas ci-dessus, la boucle va s exécuter huit fois. Et la variable «addition» va additionner les nombre de 0 à 7. 34

10.1.1.2 la boucle do While Cette boucle est liée à une condition, tant que cette dernière est vérifiée, la boucle s exécutera. Ainsi pour exécuter la même opération qu avec la boucle for, on aurait le résultat suivant : Au contraire de la boucle for, cette fois on doit incrémenter le i et lui donner sa valeur de base manuellement, mais nous obtiendrons au final le même résultat. 10.1.1.3 La boucle do Until Cette boucle est très proche de la boucle do While, à la différence que les instructions ne s exécuteront que tant que la condition liée à la boucle ne sera pas remplie. 10.1.2 Les conditions 10.1.2.1 La condition if La condition if, possède comme son nom l indique une condition. Si cette dernière est vérifiée les instructions de la condition s exécuteront. On peut aussi ajouter à la condition un Else, qui regroupe les instructions à réaliser si la condition n est pas remplie, typiquement dans le cas, où il n y a que deux résultats possibles pour la condition ou qu un seul cas de la condition nous intéresse, mais que tout résultat demande des instructions. Dans le cas contraire on peut rajouter un Elseif, qui aura exactement la même syntaxe qu un if, qui nous permettra de traiter un deuxième cas et même d un troisième cas. Par contre s il y a plus de cas à traiter on préférera utiliser une autre condition. 10.1.2.2 Le Select Case Le Select Case permet justement d avoir une condition à beaucoup de cas. On commence par définir la variable à analyser. Puis pour chaque cas ou cas remplissant une même condition, on écrit les instructions à suivre. Comme pour la condition if, on utilise le Case Else pour les cas non-traités qui nécessitent malgré tout des instructions. 35

10.2 Autres Notions 10.2.1 Les variables 10.2.1.1 La déclaration Le vba ne demande pas forcément la déclaration des variables utilisée, ainsi des indices, par exemple utilisés dans les boucles for, ne seront souvent pas déclarés. Pour déclarer une variable on utilise la fonction dim puis on écrit le nom de notre variable et ensuite éventuellement son type de données. 10.2.1.2 Les types de données Il y a de nombreux types de données, je ne vais parler ici que de ceux que j ai utilisés dans mes programmes. Les entiers (Integer) Les chaînes de caractère (String) Les Booléen (Boolean) o Un Booléen est le résultat d une opération logique, de ce fait son résultat est soir vrai soit faux. Certaines fonctions ne peuvent agir que sur un certains type de donnée, on peut, par exemple, mesurer la longueur d une chaîne de caractères mais pas d un entier. 10.2.1 Les tableaux Un tableau est une base de données possédant plusieurs dimensions, tous ceux que j ai utilisés dans mes programmes n en possédaient au maximum que deux. Ils peuvent être dynamiques, leurs dimensions changent dans le programme, ou fixes, leurs dimensions sont alors définies lors de la déclaration des variables. Je n en ai utilisés que des fixes. Pour enregistrer les valeurs d un tableau, on peut utiliser une boucle for. 36

10.3 Les arguments Les arguments se situent entre les parenthèses des macros ou des fonctions, ils servent à préciser une variable qui sera traitée par la fonction. Par exemple si l on veut inverser une chaine de caractère, on pourra créer une fonction indépendante du code principal, et l appeler en précisant dans ces arguments la variable que l on veut inverser. Le fait de passer par une macro extérieure permet de gagner des lignes de codes si on a besoin de l utiliser à plusieurs reprises. 10.4 Description du code J ai décidé de traiter la description du code de la simulation d Enigma et de La machine de Lorenz simultanément afin de voir quelles sont les différences et les similitudes entre elles. J ai décidé de faire un programme pour ces deux machines car elles sont toutes deux proches au niveau du fonctionnement ; elles fonctionnent avec des rotors. Mais les rotors n interviennent pas de la même façon dans le processus de chiffrement. J ai trouvé donc intéressant de pouvoir rentrer plus en détail dans le fonctionnement de ces deux machines afin de les comparer sur plusieurs points. 10.5 Enlever les accents et autres caractères spéciaux La machine Enigma n étant pourvue que d un clavier à 26 lettres, il faut que le programme enlève tous les caractères qui ne font pas partie des 26 lettres de l alphabet afin d éviter de faire boguer le programme avec des caractères qu il ne sait pas traiter. La machine de Lorenz se repose sur l alphabet télégraphique international n 2, composé de 33 entrées possibles. Il admet deux alphabets en parallèle, avec deux signes qui indiquent de passer de l un à l autre. Afin de simplifier la machine au maximum j ai décidé de n utiliser que les 26 lettres de l alphabet, tout comme Enigma, et de remplacer les 6 caractères restant par des chiffres et non pas par des espaces ou des retours à la ligne par exemple. Ceci par souci de lisibilité. Pour filtrer les textes inscrits, il faut bien comprendre comment l ordinateur comprend les lettres. 10.5.1 Le code ASCII Ce code signifie «American Standard Code for Information Interchange» 6. Chaque lettre correspond à un octet, composé de 8 bits, ce qui permet à 256 (2 8 ) caractères d être répertoriés. Excel utilise les 128 premiers caractères du code ASCII et les 128 suivant correspondent au code ANSI. 37

10.5.2 Dans le Programme Grâce aux fonctions natives suivantes on peut filtrer le texte : Chr(x), où x correspond à un nombre entre 0 et 255, qui donne la lettre correspondant à x Replace(le_texte_à_filtrer, le_caractère_à_remplacer, «le_caractère_remplacé») Cette fonction remplace les caractères indiqués par d autres, dans une chaîne de caractères précisée. Pour le caractère à remplacer on utilise la fonction Chr(x) On peut donc remplacer, ou éliminer, les caractères indésirables. Si une suite de caractères dont les codes ASCII/ANSI se suivent sont remplacés par le même caractère, per exemple tous les accents du «e», on peut utiliser une boucle for ce qui simplifie et réduit le nombre de lignes de code. Pour la machine de Lorenz, j ai légèrement modifié ce code afin que les chiffres de 1 à 6 ne soient pas éliminés. 10.6 Traiter une lettre après l autre Ces deux machines à chiffrer demandaient à taper une lettre puis avoir son chiffrement, puis taper la suivante. Afin de simplifier l utilisation des deux programmes, j ai trouvé plus simple de taper tout le texte à coder puis lancer le chiffrement afin de récupérer le chiffre en un bloc. Malgré tout le programme ne traite qu une lettre après l autre, chaque lettre impliquant un changement dans le positionnement des rotors. Pour ce faire, j ai utilisé une boucle for et la fonction native suivante : Mid(la_chaîne_de_caractère, le_rang, la_longueur_de_l_échantillon) Le rang dépendra de l incrémentation de la boucle. La longueur de l échantillon sera toujours de 1 dans ces programmes, comme il est dit plus haut, le programme ne peut traiter qu une seule lettre à la fois. 38

10.6.1 Transformation en caractères télégraphiques Pour Lorenz, il faut encore transformer cette lettre en série de 5 bits, correspondant à l alphabet télégraphique. Pour ce faire, j ai aussi utilisé la fonction native Replace(), pour les 33 caractères utilisés, j ai lié à chacun son code grâce à une autre fonction native Select Case. Elle permet de choisir un paramètre à analyser dans ce cas là le caractère à transformer. Puis pour chaque cas possible elle exécutera les instructions données, ici le Replace(). 10.7 L influence des rotors dans le chiffrement 10.7.1 Chez Enigma Les trois rotors d Enigma constituent un circuit électrique qu un courant parcourt. Ce circuit à chaque rotation va être modifié. Les rotors dans mon programme ne sont pas affiliés à des lettres mais à des nombres de 0 à 25. 10.7.1.1 Rotation des rotors Il y a deux moments où les rotors peuvent tourner. a) Lorsque l opérateur met en place la clé, à ce moment là les rotors tourneront individuellement. b) Lors du chiffrage où les rotors sont liés lors de leur rotation. 10.7.1.1.1 Rotation individuelle Pour faire tourner un rotor dans le programme, on décale simplement l entier du rotor d un cran vers le bas et on prend la dernière cellule et on la copie dans la première cellule. 39

Pour faire tourner le rotor de plusieurs crans en une seule manipulation, on utilise la fonction native suivante, qui va demander à l utilisateur jusqu où il veut faire tourner le rotor : InputBox(«texte_affiché_dans _la _fenêtre, «titre_de_la_fenêtre», valeur_par_défaut) On aura déclaré avant que le résultat de l InputBox est un entier (Integer). La valeur par défaut est l actuelle position du rotor. Lorsque l on a cette valeur, on lui soustrait la valeur par défaut (ici base), dans le cas ou ce résultat serait inférieur à 0, on lui rajoute 26. Ceci, parce que le rotor ne tourne que dans un sens, de ce fait si la base est égale à 25 et que l on veut placer le rotor à la position 23, on ne procédera pas à 2 rotations, mais à 24. Quand le nombre de rotations à effectuer est déterminé, on crée une boucle qui va de 1 au nombre de rotations, et qui à chaque incrémentation fera tourner le rotor d un cran. 10.7.1.1.2 Rotations liées Les rotors d Enigma tournent comme un compteur de vitesses, quand le premier rotor a effectué une rotation complète, c est-à-dire que 26 lettres ont été codées, le deuxième rotor tournera d un cran, puis le premier recommencera une rotation complète. A l instar du premier rotor, quand le deuxième sera revenu à son point de départ le troisième tournera d un cran. Pour rendre ce principe dans le programme, j ai utilisé deux conditions que j ai imbriquées l une dans l autre. La première exécute ses instructions seulement si la cellule active du premier rotor, celle qui définit la clé, est égale à la position de base, qui peut être changée dans le tableur, ici j ai utilisé 0. Les instructions de cette première condition consistent à faire tourner le second rotor d un cran. La seconde condition est aussi contenue dans ces dernières, elle n exécute ses propres instructions, faire tourner le troisième rotor d un cran seulement si la cellule active du deuxième rotor est égale à 0. 40

10.7.1.2 Le parcours d une lettre dans les rotors Pour cette explication je vais omettre l influence des steckers ou sockets, dont je parlerai plus tard, afin de rendre cela le plus compréhensible possible. Il y a deux tableaux, un qui est redéfini à chaque rotation, c est le tableau que forment les trois rotors ainsi que le réflecteur, l autre est un tableau fixe, c est le tableau des décalages qui correspond à chaque cran de chacun des rotors et du réflecteur. Prenons une lettre en exemple, le D. Chaque lettre entre toujours au même endroit dans les rotors, le D entre au quatrième cran. Le programme va donc regarder le contenu de la quatrième entrée du premier rotor dans le tableau des rotors. Puis, ceci étant fait, il va regarder le décalage qui incombe à ce cran et à ce rotor dans le tableau des décalages, imaginons que cela soit 23. Cela signifie que, depuis le quatrième rang où était entrée la lettre, elle va devoir subir un décalage de 23 sur le deuxième rotor. On additionne donc 4 et 23, ce qui nous donne un résultat de 27. On lui fait subir un modulo 26, ce qui nous donne 1. L ordinateur va donc devoir regarder dans la première case du tableau du deuxième rotor. Et ainsi de suite. 41

10.7.2 Chez Lorenz Dans la machine de Lorenz il y a 12 rotors de tailles différentes. Chez les rotors χ «chi», il y en a un de 41, de 31, de 29, de 26 et de 23 crans. Chez les rotors ψ «psi», il y en a un de 43, de 47, de 51, de 53 et de 59 crans. Il y a deux rotors moteurs de 61 et 37 crans. Ces rotors sont composés théoriquement de 1 et de 0 disposés au hasard, j ai choisi la composition proposée par le site internet «practical cryptography» 17 10.7.2.1 Rotation des rotors 10.7.2.1.1 Rotation individuelle Pour faire tourner les rotors individuellement, le même genre de programme est utilisé que pour Enigma. Le problème étant, que chez Enigma, chacun des crans d un rotor avait un numéro différent ce qui permettait à l utilisateur d indiquer la position qu il voulait. Au contraire chez Lorenz il n y a que des 1 et des 0. Pour remédier à ce problème, j ai utilisé la fonction native mid(), ainsi pour le programme en luimême elle n utilise que le premier chiffre. Alors que pour demander à l utilisateur la position voulue et les faire tourner elle utilise le reste de la chaîne de caractères. Vu que l on ne peut pas écrire, par exemple, 035, dans une cellule Excel, j ai remplacé les 0 par des 2. On ne peut pas appliquer par la suite la même technique que pour la machine Enigma, car elle utilisait des entiers ce qui permettait de faire des opérations. Alors que l utilisation de la fonction Mid() implique l utilisation de chaîne de caractères (String). De ce fait pour arriver au même résultat j ai utilisé une boucle doublée d une condition do Until. C est-à-dire que ma boucle va s exécuter, dans le cas présent faire tourner un rotor d un cran, tant que la condition ne sera pas remplie. Cette condition est que la fin de la chaîne de caractères de la cellule active du rotor doit être la même que celle demandée par l utilisateur. J utilise la fonction Call, qui appelle et exécute une autre fonction tant que celle-ci se trouve dans le même classeur. 42

Afin d éviter que le programme bogue car l utilisateur aurait rentré une valeur trop grande, par exemple 27 pour un rotor de 23 crans, je contrôle la valeur rentrée avec une condition if et une boucle doublée d une condition do while. Au contraire de la condition do until, la boucle s exécutera tant que la condition est remplie. Les instructions de la boucle demande à l utilisateur de rentrer une autre valeur jusqu à ce qu elle soit comprise dans la bonne fourchette. 10.7.2.1.2 Rotations liées Les 5 rotors chi ainsi que le grand rotor moteur tournent d un cran à chaque lettre chiffrée. On appelle donc la fonction qui les fait tourner, elle fonctionne de la même manière que pour la machine Enigma. Puis à l aide d une condition if, dans le cas présent si le premier caractère de la chaîne de caractères contenue dans la cellule active du grand rotor moteur est égal à 1, on fait tourner d un cran, si la condition est remplie, le petit rotor moteur. Si le premier caractère de la chaîne de caractères contenue dans la cellule active de ce dernier est égale à un, c est notre nouvelle condition if, on fait tourner les 5 rotors psi d un cran en appelant à l aide de Call, les fonctions qui réalisent ces opérations. 10.7.2.2 La création de la clé additive La clé additive est créée à partir des cellules actives des deux séries de 5 rotors. On réalise donc, pour chaque bit, un «ou exclusif» à l aide de la fonction native Xor et on comparera les deux premières cases actives de chacune des deux séries. C est un Booléen, le résultat d un Booléen est soit vrai soit juste, ensuite on attribue le résultat de ce booléen à une variable. Puis on crée une condition if, si la variable susmentionnée est vraie, la valeur du premier bit de la clé additive sera de 1, sinon il sera de 0. Et ainsi de suite pour les quatre autres bits. 43

10.7.2.3 Chiffrement final Pour finalement chiffrer la lettre on va procéder de la même manière que pour la création de la clé additive. On va comparer à l aide d un ou exclusif la clé additive et le code télégraphique de la lettre à chiffrer. Dans une boucle à incrémentation for, on place deux fonctions Mid() dont le rang dépendra de l incrémentation. Puis à l aide d un Xor et d une condition if, comme pour la clé additive, on crée bit après bit notre lettre chiffrée. Lorsque cela est fait, il ne reste plus qu à retransformer cette chaîne de caractère en un caractère latin. Pour ceci on crée une fonction exactement à l inverse de celle qui transformait des caractères latin en alphabet télégraphique international n 2, à l aide d un Select Case. 10.8 Les steckers ou sockets d Enigma Dans ce programme, j ai décidé d avoir la possibilité de lier au maximum 6 paires de lettres, historiquement il y en a eu plus, mais je pense que pour comprendre le principe de la machine, 6 suffisent largement. 10.8.1 Contrôle des steckers Premièrement je vais effectuer un contrôle, pour savoir si une lettre n a pas été steckée deux fois, ce qui ferait boguer le programme. Pour ce faire, j imbrique 4 boucles for, afin que chacune des cases sois comparées avec toutes les autres cases du tableau, elle comprise. Chaque fois qu il y a une égalité entre deux cases, j incrémente de 1 une variable. À la fin de cette opération, s il n y a aucune répétition cette variable doit être égale au double du nombre de paires utilisées. Ainsi, si 5 paires ont été utilisées, cette variable devrait être égale à 10, vu qu il y aurait 10 cases de remplies, qui chacune aura été comparée avec elle-même, donc aura incrémenté la variable de 1. De ce fait, je crée une condition qui, si ce nombre est supérieur, arrête la fonction et affiche à l aide d une fenêtre un message avertissant l utilisateur du problème. 44

10.8.2 Les steckers dans le cryptage Le passage dans les steckers va devoir se faire deux fois, avant le passage dans les rotors pour éventuellement changer la lettre à coder, puis après le chiffrage si la lettre chiffrée se trouve être liée à une autre. Ce double passage est obligatoire si l on veut pouvoir retomber sur le texte initial, ce qui est bien l objectif de la machine Enigma, si l on veut pouvoir échanger des messages. Pour ce faire, j ai utilisé une boucle for, qui a chaque incrémentation examinera une ligne du tableau des liaisons. Puis une condition if, qui si la lettre se trouve dans une case, lui donnera la valeur de sa case voisine. Un Exit for, qui permet de sortir de la boucle for sans qu elle se soit exécutée en entier, est aussi contenue dans les instructions de la condition if. 10.9 Test de fonctionnement Pour savoir si mes programmes fonctionnent, j utilise le principe de base des deux machines : pour déchiffrer un message on utilise le même algorithme de cryptage que pour crypter. Cela signifie que, si je chiffre le texte que je viens de faire chiffrer par la machine, que je repositionne les rotors dans leur position initiale, je dois retomber sur le texte initial, sauf s il contenait des caractères spéciaux tels que des accents ou des chiffres ou encore simplement des espaces. Puis pour Enigma, je peux tester le fait qu une lettre ne soit jamais chiffrée par elle-même. Pour ce faire je compare, à l aide d un programme, le texte clair et le texte chiffré pour repérer les éventuels dysfonctionnements. 10.9.1 Test de la symétrie de l algorithme de cryptage Si je code la phrase «Je suis allée au Panama» avec pour position initiale, pour Enigma, de 2/5/9 et pour Lorenz 20/20/20/20/20/20/20/20/20/20/20/20. Pour Enigma j ai également deux sockets : le y est lié avec le t, et le c avec le z. J obtiendrais : 45

Avec Enigma : «vracgbyfeibhvuzzixo» Avec Lorenz : «q5uajzc15bbdtnhtgwi» Puis, je retourne le message chiffré dans les deux machines. Donc j utilise les mêmes positions initiales et je garde les sockets utilisés pour Enigma. Je trouve : «jesuisalleeaupanama» qui correspond au résultat attendu, effectivement c est la phrase codée sans les accents, les espaces et les majuscules. Pour Enigma : Pour Lorenz : On a donc la preuve que les deux programmes fonctionnent correctement. 10.9.2 Test de la présence de possibles «crash» Je crée une macro en Visual Basic qui me servira à contrôler qu aucune lettre ne soit chiffrée par ellemême. Cette macro va comparer lettre après lettre le texte clair, qui aura été débarrassé de tous les caractères spéciaux préalablement, avec le texte chiffré. Si un crash s y trouve la macro affiche dans une cellule le mot «erreur» au contraire elle affichera dans la même case «aucune erreur». 46

Mon tableur ressemble donc à cela : Voici le code en Visual Basic correspondant à cette macro : Sub test() 'déclaration des variable Dim chiffre As String, clair As String, resultat As Boolean Dim nb As Integer, test As String, test2 As String 'enregistrement des valeurs 'on récupère le texte chiffré et le texte clair clair = Range("G33") Call remplacelettre(clair) chiffre = Range("G36") 'on compte le nombre de caractères nb = Len(chiffre) 'on test si chaque lettre n'est pas identique à celle du texte clair For i = 1 To nb test = Mid(chiffre, i, 1) test2 = Mid(clair, i, 1) If test = test2 Then 'si oui on affiche l'erreur Range("G40") = "erreur" 'si il y a un crash on sort de la boucle for Exit For End If If Range("G40") = "erreur" Then Else: Range("G40") = "aucune erreur" End If End Sub J appelle cette macro à l aide de la fonction native Call, à la fin de ma macro Enigma. 47

10.10 Test comparatif des deux machines On peut à présent se demander laquelle de ces machines est la plus performante. Je vais essayer d analyser les différences entre ces deux machines en me basant sur mes programmes, sur trois aspects qui me semblent avoir le plus d importance : la vitesse d exécution, la sécurité et la facilité d utilisation, ce dernier paramètre ne dépendant pas forcément de la complexité de l algorithme de cryptage. Pour ce dernier point je pense que la facilité d utilisation est la même, car l interface graphique a été pensée de la même façon, de ce fait je ne vais pas l analyser plus en profondeur. 10.10.1 Le programme comparé à la machine dans la réalité Il faut d abord bien distinguer ces deux aspects. Mes programmes simulent le plus précisément possible le fonctionnement d Enigma et de Lorenz, bien que pour cette dernière j ai décidé d en simplifier légèrement le fonctionnement. Mais malgré tout, cela ne permet pas d être totalement fidèle à la réalité. J ai décidé que le texte à chiffrer serait écrit en intégralité par l utilisateur, avant que le programme chiffre ce texte. J aurais pu faire que, comme sur Enigma ou Lorenz, chaque lettre doit être tapée l une après l autre, qu il n y ait aucune mémoire des lettres venant d être chiffrées, et qu il faille pour remédier à cela écrire la lettre chiffrée sur un document extérieur. J'ai préféré améliorer ces points-là par rapport à la réalité, en profitant de la technologie offerte par l ordinateur. De ce fait je vais comparer, pour certains facteurs, mes deux programmes et non pas les deux machines en elles-mêmes. 10.10.2 Le temps Le paramètre du temps est évidement un facteur important. Pour faire, j inscris un chronomètre dans mes deux codes afin de mesurer le temps pour chiffrer une même phrase. Dans ce but, mes connaissances en Visual basic n étant pas assez grandes, j ai copié le code indiqué sur le forum du site «hardware.fr» 24. Je l ai inscrit au début et à la fin du code. J ai choisi un texte de 279 caractères, quand tous les caractères spéciaux ont été enlevés, contenant des accents et de la ponctuation. Enigma met 38,5 secondes pour le tout soit 0.13 secondes par lettre chiffrée. Lorenz met 409,8 secondes, c est-à-dire presque 7 minutes, pour le même texte soit 1.5 secondes par lettre chiffrée. Cela signifie que pour transmettre un message de la longueur d une page d un traitement de texte, soit environ 2 700 caractères, il faudrait à Enigma un peu moins de 6 minutes alors que Lorenz aurait besoin de plus d une heure! Lorenz met plus de temps, car il doit transformer tous les caractères en caractères de l alphabet télégraphique puis faire l opération inverse, alors qu Enigma doit juste les changer en fonction de leur rang dans l alphabet. Puis chacun des 5 bits composant un caractère télégraphique devra être comparé avec la clé des rotors ce qui prend également plus de temps. De plus, on peut raisonnablement penser que lorsqu un humain utilise la machine, et qu il doit à chaque lettre chiffrée la noter sur un papier annexe, il utilisera encore plus de temps. La machine Enigma est donc plus pratique d utilisation surtout si l'on doit envoyer de nombreux messages en un temps limité. 48

10.10.3 La sécurité Il est évident que c est l un des facteurs les plus importants. La machine de Lorenz possède plus de rotors qu Enigma, mais elle n a pas de tableau de steckers qui augmentent considérablement le nombre de possibilités. Il est donc plus difficile de déterminer la position initiale des rotors de Lorenz et de ce fait plus difficile de casser les codes qu elle engendre. Rien qu'en considérant les moyens qui ont dû être mis en place par les Alliés pour la décoder, cela tend à montrer que Lorenz est plus sécuritaire qu Enigma. Aujourd hui, avec un ordinateur assez puissant il serait relativement aisé de tester toutes les possibilités, sans forcément avoir besoin d hypothèses sur le contenu du message. On ne pourrait donc plus utiliser ce système de cryptage aujourd hui. On pourrait tester, sur un message très court, le temps qu il faudrait à un ordinateur pour le décoder et comparer les deux temps pour les deux programmes, celui qui demanderait le plus de temps serait le plus sécuritaire. Si l on se base sur les temps mesurés auparavant, il faut, pour un mot de 5 lettres, 0,7 secondes pour une possibilité de positionnement des rotors pour Enigma et 7,3 secondes pour Lorenz. Sans prendre en compte les steckers, il y a 26 possibilités de positionnement des rotors pour Enigma. Il y a 4,636 10 possibilités d arrangement des 6 steckers, c est-à-dire 26! 14!. Donc au total il y a 8,13 10 possibilités pour la machine Enigma. Pour Lorenz il y a 1,603 10 possibilités. Il faut donc environ 1.77 10 années pour Enigma et 3,73 10 années pour Lorenz. C est une durée inimaginable, mais il faut bien penser, que s il on utilisait des supercalculateurs qui possèdent des processeurs avec une puissance de calcul bien plus grande que celle d un ordinateur domestique, le processus serait plus rapide. De plus, si l on voulait optimiser un maximum le programme, on utiliserait un autre langage que le Visual basic, qui doit interagir avec l interface d Excel et les cellules du tableur, ce qui ralentit également l exécution du programme. Il serait difficile de calculer le temps que mettrait un supercalculateur pour casser Enigma ou Lorenz en se basant sur la vitesse de calcul du processeur de mon ordinateur et celle d un autre ordinateur un peu plus puissant. Ceci parce qu il y a deux facteurs qui entrent en jeu pour calculer la vitesse d exécution : la fréquence des calculs qui est mesurée en FLOP, et la fréquence maximale mesurée en GHz. Ces deux paramètres agissant d une façon inconnue sur la vitesse d exécution, il m est difficile de théoriser sur le temps que mettrait un supercalculateur pour briser Enigma ou Lorenz. De plus, cela demanderait que l ordinateur reconnaisse les mots qu il trouverait lorsqu il testerait toutes les possibilités, afin qu il puisse s arrêter lorsqu il a trouvé la bonne solution. De ce fait on ne pourrait pas utiliser ces deux machines pour protéger des informations hautement sensibles, car les personnes désirant en savoir le contenu pourraient avoir accès à des supercalculateurs. Mais à une échelle plus basse il est encore tout à fait possible de les utiliser. 49

10.10.4 Quel programme choisir? De ces deux comparaisons, il apparait que le programme d Enigma semble être plus approprié pour une utilisation optimale. Sa sécurité ne semble pas être beaucoup plus faible que celle de Lorenz, de plus le delta de vitesse entre les deux programmes incite tout naturellement à choisir Enigma. Je voudrais aussi aborder le point de la facilité dans la programmation. J ai programmé Enigma au tout début de mon apprentissage du Visual basic. Il est donc tout à fait naturel que j aie mis plus de temps à la programmer que la machine de Lorenz. Mais malgré tout, je pense qu Enigma est plus difficile à programmer, notamment à cause des deux tableaux (qui décrivent les décalages et des rotors), qu il faut lier et bien en comprendre le fonctionnement. Alors que Lorenz n a nul besoin de tableau. Bien que ces deux machines possèdent toutes deux des rotors qui permettent une substitution polyalphabétique, on remarque qu ils n agissent pas de la même manière sur l algorithme de cryptage. On peut aussi mettre en évidence que ce n est pas parce qu un algorithme est plus compliqué qu un autre à mettre en place ou à programmer, qu il est forcément plus sécuritaire. 10.11 Remarques bibliographiques Pour la réalisation de ces programmes, je suis souvent allée chercher des renseignements sur internet, afin de savoir, par exemple, la syntaxe précise d une fonction. Je ne peux malheureusement pas préciser exactement d où viendraient ces aides pour telle partie ou telle partie de mon code. Mais ayant souvent utilisé les même sites je les précise de manière générale dans la bibliographie. 11. Conclusion On peut voir à travers ce travail, que la cryptologie a de multiples liens avec de nombreux domaines et, qu elle a, aujourd hui plus que jamais, une place importante dans notre quotidien. De plus la partie programmation montre qu il n est pas nécessaire d avoir des connaissances poussées en programmation pour se lancer dans ce projet. Ce TM m a permis d approfondir mes connaissances dans sur le sujet, notamment dans l histoire de la cryptologie. J ai trouvé également très enrichissant de voir la seconde guerre mondiale d un autre point de vue. On oublie souvent cet aspect, tout comme les héros de la cryptanalyse, n ont pas été reconnus, ou que très tard, afin de préserver la sécurité d un pays à long terme. De plus, ils ont dû parfois subir des remarques quant à leur inaction présumée durant la guerre. Si j avais eu plus de temps à disposition, j aurais aimé traiter des implications sociales qu à eu la cryptanalyse, notamment à Bletchley Park. J aurais également cherché à améliorer la vitesse de mes programmes, surtout celui simulant la machine de Lorenz. Un programme n étant jamais fini et pouvant toujours être amélioré, j aurais pu aller plus loin, par exemple faire une fonction Enigma sur Excel qui n aurait pas besoin de tableaux de cellules. Elle pourrait se présenter sous la forme suivante : 50

= (22 ;1 ;16 ;! "#$%& ;$ ; ;& ;") Positions des rotors Texte que l on désire chiffrer Liaisons de lettres (on pourrait en réaliser plus) Il serait également possible de faire de même pour la machine de Lorenz. Je pourrais également améliorer l interface graphique. Ce TM a également permis de consolider mes connaissances en Visual basic et plus généralement de comprendre les bases de la programmation. Quant à l avenir de la cryptographie les spécialistes pensent que le RSA devrait rester sécuritaire jusqu à l avènement possible de l ordinateur quantique. La question reste la suivante, lors de cet avènement, combien de temps resterons-nous sans aucune sécurité? La cryptographie quantique aura-t-elle déjà pris le relais? Cet algorithme repose sur le fait que la séquence de photons, polarisés de façons aléatoire, constituant la clé ne peuvent être interceptés et décrypté par autrui et que si quelqu un tente de l intercepter l émetteur et le récepteur pourront en être au courant. Cette méthode si elle trouve le moyen d être applicable devrait être la méthode infaillible et donc l ultime algorithme que nous utiliserons, car si quelqu un trouve le moyen de briser cet algorithme, cela remettrait en question toute la théorie de la physique quantique, qui, pour l instant, ne semble pas pouvoir être prise en défaut. 3 Il est clair qu il est rassurant de savoir que nos données pourront, normalement, continuer à être sécurisées malgré une possible chute du RSA, mais malgré cela, l idée que cette course à la cryptanalyse et à la sécurité soit finie ne me semble pas possible et pas forcément souhaitable nonplus. À chaque nouvelle avancée cryptographique, l homme a cru que c était une technique infaillible et pourtant elle ne l était pas, les connaissances en physique quantique ne permettent peut-être pas encore de dire s il existe un moyen de savoir les comportements des photons. Les recherches des cryptanalystes ont permis de faire avancer certains domaines scientifiques, il serait alors dommage que cette recherche s arrêtent. De plus l idée que l on puisse atteindre la perfection dans un domaine n est-elle pas vaniteuse et quelque peu dangereuse? 12. Bibliographie Source de l image de la page de titre : http://www.ilord.com 1 «codes and ciphers» de Robert Churchhouse ed. Cambridge pp. 110-132 2 «Coding theory and cryptography» de David Joyner ed. Springer pp 53-60 3 «The science of secrecy» de Simon Singh 4 «Casseurs de code» de Stephen Pincock et Marc Frary ed. Acropole pp. 91-129 5 «Encyclopédie multimédia de la Shoah», l invasion de la Pologne, septembre 1939 http://www.ushmm.org/wlc/fr/article.php?moduleid=3 6 Science et vie Junior hors-série n 87 «La folle histoire des ordinateurs», avril 2011 51

7 «The German cipher machine, beginnings, success and ultimate failure» de Brian J.Winkel, Cipher A. Deavours, David Kahn et Louis Kruh ed. Editors 8 «The Hut six story, Breaking the enigma codes» de Gordon Welchman ed. M&M Baldwin 9 «Harry Hinsley» sur Wikipédia http://en.wikipedia.org/wiki/harry_hinsley 10 «La guerre secrète» de Anthony Cave Brown ed. Pygmalion 11 Biographie de sir Edward Elgar http://www.elgar.org/2french.htm 12 «Lorenz Cipher» sur Wikipédia http://en.wikipedia.org/wiki/lorenz_cipher 13 Simulateur de la machine de Lorenz http://adamsgames.com/lorenz/index.htm 14 «Lignes de Front» n 25 septembre-octobre 2010, dossier «Les armes de terreur du Reich» par Xavier Tracol. 15 «Histoire des codes secrets» de Simon Singh ed. Le Livre de Poche 16 «les langages de programmation» sur l histoire de l informatique http://histoire.info.online.fr/prog.html 17 «Lorenz Cipher» sur Practical Cryptology http://practicalcryptography.com/ciphers/lorenz-cipher/ 18 Le site du zéro http://www.siteduzero.com 19 Excel-Downloads http://www.excel-downloads.com 20 Developpez.com www.developpez.net 21 Excel-Pratique www.developpez.net 22 Le masque de fer sur Hérodote http://www.herodote.net/19_novembre_1703-evenement-17031119.php 23 Alan Turing, codebreaker and Computer Pioneer de J. Copeland et D. Proudfoot http://www.alanturing.net/turing_archive/pages/reference%20articles/codebreaker.html 24 forum hardware.fr http://forum.hardware.fr/hfr/programmation/vb-vba-vbs/mesurer-execution-millisecondessujet_84852_1.htm 25 L ACE sur Alanturing.net http://www.alanturing.net/turing_archive/archive/infopages/london1st.html 26 MI1 sur Wikipédia http://fr.wikipedia.org/wiki/mi1 27 Room 40 sur Wikipédia 52

http://fr.wikipedia.org/wiki/room_40 28 méthodes modernes de cryptographies sur Bibmath.net http://www.bibmath.net/crypto/index.php?action=affiche&quoi=moderne/index 29 Code Breaking sur History.co http://www.history.co.uk/study-topics/history-of-ww2/code-breaking 30 La cryptanalyse d Enigma sur Wikipédia http://fr.wikipedia.org/wiki/cryptanalyse_d'enigma 31 «Turing» de Jack Copeland ed. Oxford University Press 32 Coloration syntaxique d un code http://charles.racaud.free.fr/code-syntaxing/index 33 «cryptologie» Les cahiers de la CRM, par Nicolas Martignoni 12. Remerciements Premièrement, je tiens à remercier mon maître référent, M. Laurent de Schoulepnikoff, pour l aide apportée tout au long de ce travail et pour la nombreuse documentation qu il m a fournie. Je remercie également Thibaut Loiseau et Kévin Mury pour leurs conseils rédactionnels et leurs réponses à mes questions dans le domaine de la programmation, mon père pour m avoir initiée au Visual Basic et transmis la passion de la programmation ainsi que pour la documentation qu il a trouvée et finalement ma mère et ma sœur pour leur relecture attentive. 53

13. Listing des deux Programmes 13.1 Enigma Sub tournerotor1() 'pour pouvoir tourner les rotors independament les uns des autres Dim choix As Integer 'le rotor auquel on veut se rendre Dim base As Integer ' la position ou se trouve le rotor Dim nombretour As Integer 'le nombre de tour que va devoir faire le rotor base = Range("A2") choix = InputBox("introduisez la position du rotor ou vous voulez vous rendre", "rotor 1", base) 'on demande à l'utilisateur nombretour = choix - base If nombretour < 0 Then 'si le resultat est négatif on lui rajoute 26 nombretour = nombretour + 26 End If For i = 1 To nombretour 'va effectuer un tour à chaque fois Range("A2").Select Selection.Cut Destination:=Range("A28") Range("A3:A28").Select Selection.Cut Destination:=Range("A2:A27") End Sub Sub tournerotor2() 'idem rotor1 mais pour rotor2 Dim choix As Integer Dim base As Integer Dim nombretour As Integer base = Range("B2") choix = InputBox("introduisez la position du rotor ou vous voulez vous rendre", "rotor 2", base) nombretour = choix - base If nombretour < 0 Then nombretour = nombretour + 26 End If For i = 1 To nombretour Range("B2").Select Selection.Cut Destination:=Range("B28") Range("B3:B28").Select Selection.Cut Destination:=Range("B2:B27") End Sub Sub tournerotor3() 'idem rotor1 et rotor2 Dim choix As Integer Dim base As Integer Dim nombretour As Integer base = Range("C2") choix = InputBox("introduisez la position du rotor ou vous voulez vous rendre", "rotor 3", base) 54

nombretour = choix - base If nombretour < 0 Then nombretour = nombretour + 26 End If For i = 1 To nombretour Range("C2").Select Selection.Cut Destination:=Range("C28") Range("C3:C28").Select Selection.Cut Destination:=Range("C2:C27") End Sub Sub enigma2() 'fonctionne avec une chaine de caractère aussi longue que possible 'on efface le chiffrement et la position initiale des rotors Range("G36").Select Selection.ClearContents Range("G38").Select Selection.ClearContents 'on déclare les variables Dim texte As String 'texte que l'on va coder Dim nombrelettre As Integer ' le nombre de lettres contenues dans texte Dim lettreacoder As String ' la lettre qui passera dans le programme Dim tableaurotor(25, 3) 'le tableau de l'adressage des rotors qui va aller chercher dans le tableau des decalages Dim code As String 'la lettre codée Dim precedent As String ' la lettre déjà contenue dans l'espace où l'on inscrira code Dim decalage(25, 6) 'le tableau des decalage Dim asciilettre As Integer 'renvera le nombre ascci de la lettre Dim rotor1 As String, rotor2 As String, rotor3 As String ' la position initiale des rotors Dim steckers(5, 1) 'tableau des décalages Dim steckersplage Dim nbcells As Integer Dim sngchrono As Single sngchrono = Timer steckersplage = Range("U29:U34") 'on compte le nombre de lignes remplies pour les liaisons vu que l'on est pas obligé d'utiliser les 6 à disposition nbcells = Application.WorksheetFunction.CountA(steckersplage) 55

'enregistrement des variables qui ne dépendent pas du for ou de la rotation des rotors rotor1 = Range("A2") rotor2 = Range("B2") rotor3 = Range("C2") Range("G38") = rotor1 + " " + rotor2 + " " + rotor3 'pour garder trace de la position de départ avant de chiffrer Range("Q33") = rotor1 Range("R33") = rotor2 Range("S33") = rotor3 texte = Range("G33") Call remplacelettre(texte) 'on enlève tous les accents et autres caractères nombrelettre = Len(texte) ' calcule la longueur du string pour la fonction for pour qu'il sache où s'arreter ceci grâce à la fonction Len() 'on enregistre le tableau des décalages For k = 0 To 25 decalage(k, 0) = Range("I" & k + 1) decalage(k, 1) = Range("J" & k + 1) decalage(k, 2) = Range("K" & k + 1) decalage(k, 3) = Range("L" & k + 1) decalage(k, 4) = Range("M" & k + 1) decalage(k, 5) = Range("N" & k + 1) decalage(k, 6) = Range("O" & k + 1) 'on enregistre le tableau des liaisons For i = 0 To nbcells - 1 steckers(i, 0) = Range("U" & i + 29) steckers(i, 1) = Range("V" & i + 29) 'test pour controler qu'une lettre ne revienne pas deux fois dans le tableau des liaisons For g = 0 To (nbcells - 1) For h = 0 To 1 For i = 0 To (nbcells - 1) For j = 0 To 1 If steckers(g, h) = steckers(i, j) Then 'si une case est égale à une autre il incrémente le nombre de valeur identiques [nombreidentique] nombreidentique = nombreidentique + 1 End If 56

If nombreidentique > (nbcells * 2) Then 'le nombre de valeur identiques va être au minimum de 2 * le nombre de lignes car il compare les valeurs une fois avec elles-mêmes à chaque fois MsgBox ("vous avez introduit plusieurs fois une même lettre dans le tableau de liaisons, veuillez changer ce paramètre") Exit Sub 'on arrête la macro si le if se vérifie End If 'fin du test For e = 1 To nombrelettre 'le for va selectionner une lettre après l'autre dans la chaine de caractère que l'on a entré d'où l'importance de savoir le nombre de lettres contenues dans la chaîne 'on enregistre les valeurs des retors For i = 0 To 25 'on doit placer l'enregistrement des variables dans le for pour que le for prenne en compte le changement des rotors tableaurotor(i, 0) = Range("A" & i + 2) 'il prendra la valeur qui se trouve dans la colonne A et en fonction de i qui représente les lignes tableaurotor(i, 1) = Range("B" & i + 2) tableaurotor(i, 2) = Range("C" & i + 2) tableaurotor(i, 3) = Range("D" & i + 2) lettreacoder = Mid(texte, e, 1) 'selectionne la lettre qui passe dans les rotors en fonction de e qui dépend du for For i = 0 To nbcells - 1 'on va regarder si des liaisons, des échanges de lettres ont été fait pour les changer dans la chaîne à coder If lettreacoder = steckers(i, 0) Then lettreacoder2 = steckers(i, 1) Exit For ElseIf lettreacoder = steckers(i, 1) Then lettreacoder2 = steckers(i, 0) Exit For Else: lettreacoder2 = lettreacoder End If asciilettre = Asc(lettreacoder2) - 97 'on la transforme en chiffre grâce au code ascci precedent = Range("G36") 'on enregistre les lettres déjà codées 'passage dans les rotors arriveerotor1 = tableaurotor(asciilettre, 0) 'le asciilettre nous donne le point d'arrivée l = (asciilettre + decalage(arriveerotor1, 0)) 'on part de la position ou était arriveerotor1 puis on y rajoute le décalage en utilisant le tableau annexe s = l Mod 26 'on sépare la "modulation" car sinon elle ne s'opère pas 57

arriveerotor2 = tableaurotor(s, 1) 'on part de la ligne de sortierotor1 (ici 0) puis on ajoute le décalage puis on module et ainsi de suite pour tout les rotors 'la sortie du rotor 1 est aussi l'arrivée du rotor2 m = (s + decalage(arriveerotor2, 2)) t = m Mod 26 arriveerotor3 = tableaurotor(t, 2) n = (t + decalage(arriveerotor3, 4)) u = n Mod 26 arriveereflecteur = tableaurotor(u, 3) o = (u + decalage(arriveereflecteur, 6)) v = o Mod 26 arriveerotor3_2 = tableaurotor(v, 3) arriveerotor3_22 = tableaurotor(v, 2) 'on utilise cette variable pour que la case qui va chercher le dacalage soit dans la même colonne que celle du decalage pour rendre l'operation symetrique p = (v + decalage(arriveerotor3_22, 5)) w = p Mod 26 arriveerotor2_2 = tableaurotor(w, 2) arriveerotor2_22 = tableaurotor(w, 1) q = (w + decalage(arriveerotor2_22, 3)) x = q Mod 26 arriveerotor1_2 = tableaurotor(x, 1) arriveerotor1_22 = tableaurotor(x, 0) r = (x + decalage(arriveerotor1_22, 1)) y = r Mod 26 sortierotor1_2 = tableaurotor(y, 0) 'fin du passage dans les rotors 'on transforme la cellule d'arrivée en lettre grâce au code ascii For j = 0 To 25 If sortierotor1_2 = tableaurotor(j, 0) Then 'la lettre dépend de la case de sortie donc si sortie1_2 est égale à la sortie qui dépend de j qui dépend du for le if s'execute et arrête la boucle for code = Chr(97 + j) 'on utilise le code ascii + j car 97 = "a" si on voulait en majuscule ce serait 65 Exit For ' si le if est juste alors il n'ira pas chercher plus loin c'est pourquoi il sort de la boucle End If 58

'on recomence pour faire passer la lettre suivante su string dans les rotors For i = 0 To nbcells - 1 'on reechange les liaisons If code = steckers(i, 0) Then code2 = steckers(i, 1) Exit For ElseIf code = steckers(i, 1) Then code2 = steckers(i, 0) Exit For Else: code2 = code End If 'on inscrit code dans une cellule, il y a le code déjà présent puis la lettre qui vient d'être codée Range("G36") = precedent + code2 'on fait tourner les rotors Call tourner ' on recommence pour passer la lettre suivante dans les rotors 'pour mesurer le temps d'execution de la manoeuvre sngchrono = Timer - sngchrono Range("R47") = CStr(sngChrono) Range("S47") = nombrelettre Range("R49") = CStr(sngChrono) / nombrelettre Range("S49") = nombrelettre / CStr(sngChrono) End Sub Sub tourner() Dim positiondebase As Integer positiondebase = Range("F2") Range("A2").Select Selection.Cut Destination:=Range("A28") Range("A3:A28").Select Selection.Cut Destination:=Range("A2:A27") If Range("A2") = positiondebase Then 'si le premier rotor a fait un tour en entier donc qu'il a tourné 26 fois il fait tourner le deuxième rotor 1 fois puis le premier rotor recommence à tourner Range("b2").Select Selection.Cut Destination:=Range("b28") Range("b3:b28").Select Selection.Cut Destination:=Range("b2:b27") If Range("B2") = positiondebase Then 'si le deuxième rotor a fait un tour en entier Range("C2").Select Selection.Cut Destination:=Range("c28") Range("c3:c28").Select 59

Selection.Cut Destination:=Range("c2:c27") End If End If End Sub Sub remplacelettre(texteclair) 'afin de n'avoir plus que des lettres de a à z en minuscules For i = 0 To 64 'caractères inutiles + chiffres texteclair = Replace(texteclair, Chr(0 + i), "") For i = 0 To 25 'transforme les MAJUSCULES en minuscules texteclair = Replace(texteclair, Chr(65 + i), Chr(97 + i)) For i = 0 To 5 'caractère inutiles texteclair = Replace(texteclair, Chr(91 + i), "") 'remplacement des caractère isolés texteclair = Replace(texteclair, Chr(138), "s") texteclair = Replace(texteclair, Chr(140), "oe") texteclair = Replace(texteclair, Chr(142), "z") texteclair = Replace(texteclair, Chr(154), "s") texteclair = Replace(texteclair, Chr(156), "oe") texteclair = Replace(texteclair, Chr(158), "z") texteclair = Replace(texteclair, Chr(159), "y") texteclair = Replace(texteclair, Chr(198), "ae") texteclair = Replace(texteclair, Chr(199), "c") texteclair = Replace(texteclair, Chr(209), "n") texteclair = Replace(texteclair, Chr(221), "y") texteclair = Replace(texteclair, Chr(223), "ss") texteclair = Replace(texteclair, Chr(230), "ae") texteclair = Replace(texteclair, Chr(231), "c") texteclair = Replace(texteclair, Chr(241), "n") texteclair = Replace(texteclair, Chr(253), "y") texteclair = Replace(texteclair, Chr(255), "y") 'remplacements groupés For i = 0 To 5 texteclair = Replace(texteclair, Chr(92 + i), "a") For i = 0 To 3 texteclair = Replace(texteclair, Chr(200 + i), "e") 60

For i = 0 To 3 texteclair = Replace(texteclair, Chr(204 + i), "i") For i = 0 To 4 texteclair = Replace(texteclair, Chr(210 + i), "o") For i = 0 To 3 texteclair = Replace(texteclair, Chr(217 + i), "u") For i = 0 To 5 texteclair = Replace(texteclair, Chr(224 + i), "a") For i = 0 To 3 texteclair = Replace(texteclair, Chr(232 + i), "e") For i = 0 To 3 texteclair = Replace(texteclair, Chr(236 + i), "i") For i = 0 To 4 texteclair = Replace(texteclair, Chr(242 + i), "o") For i = 0 To 3 texteclair = Replace(texteclair, Chr(249 + i), "u") For i = 0 To 132 'caractères inutiles texteclair = Replace(texteclair, Chr(123 + i), "") End Sub Sub retourneenigma() 'on déclare les variables Dim texte As String 'texte codé que l'on va retourner Dim nombrelettre As Integer ' le nombre de lettres contenues dans texte Dim lettreacoder As String ' la lettre qui passera dans le programme Dim tableaurotor(25, 3) 'le tableau de l'adressage des rotors qui va aller chercher dans le tableau des decalages Dim code As String 'la lettre décodée Dim code2 As String Dim precedent As String ' la lettre déjà contenue dans l'espace où l'on inscrira code Dim decalage(25, 6) 'le tableau des decalage Dim asciilettre As Integer 'renvera le nombre ascci de la lettre Dim rotor1 As Integer, rotor2 As Integer, rotor3 As Integer, rotor4 As Integer, rotor5 As Integer, roto r6 As Integer ' la position initiale des rotors Dim steckers(5, 1) 'tableau des décalages 61

Dim nbcells As Integer 'on compte le nombre de lignes remplies pour les liaison nbcells = Application.WorksheetFunction.CountA(Feuil1.Range("$U:$U")) rotor1 = Range("Q33") rotor2 = Range("R33") rotor3 = Range("S33") rotor4 = Range("A2") rotor5 = Range("B2") rotor6 = Range("C2") 'on fait revenir les rotors à leur position initiale 'pour le rotor1 nombretour1 = rotor1 - rotor4 If nombretour1 < 0 Then nombretour1 = nombretour1 + 26 End If For i = 1 To nombretour1 Range("A2").Select Selection.Cut Destination:=Range("A28") Range("A3:A28").Select Selection.Cut Destination:=Range("A2:A27") 'pour le rotor2 nombretour2 = rotor2 - rotor5 If nombretour2 < 0 Then nombretour2 = nombretour2 + 26 End If For i = 1 To nombretour2 Range("B2").Select Selection.Cut Destination:=Range("B28") Range("B3:B28").Select Selection.Cut Destination:=Range("B2:B27") 'pour le rotor3 nombretour3 = rotor3 - rotor6 If nombretour3 < 0 Then nombretour3 = nombretour3 + 26 End If For i = 1 To nombretour3 Range("C2").Select Selection.Cut Destination:=Range("C28") Range("C3:C28").Select Selection.Cut Destination:=Range("C2:C27") 62

'fin de la réinitialisation des rotors 'on commence à faire tourner le chrnomètre Dim sngchrono As Single sngchrono = Timer texte = Range("G36") Range("G33") = texte Range("G36").Select Selection.ClearContents Range("G38").Select Selection.ClearContents nombrelettre = Len(texte) For k = 0 To 25 decalage(k, 0) = Range("I" & k + 1) decalage(k, 1) = Range("J" & k + 1) decalage(k, 2) = Range("K" & k + 1) decalage(k, 3) = Range("L" & k + 1) decalage(k, 4) = Range("M" & k + 1) decalage(k, 5) = Range("N" & k + 1) decalage(k, 6) = Range("O" & k + 1) For i = 0 To nbcells - 1 steckers(i, 0) = Range("U" & i + 29) steckers(i, 1) = Range("V" & i + 29) 'test controler qu'une lettre ne revienne pas deux fois dans le tableau des liasons For g = 0 To (nbcells - 1) For h = 0 To 1 For i = 0 To (nbcells - 1) For j = 0 To 1 If steckers(g, h) = steckers(i, j) Then 'si une case est égale à une autre il incrémente le nombre de valeur identiques [nombreidentique] nombreidentique = nombreidentique + 1 End If If nombreidentique > (nbcells * 2) Then 'le nombre de valeur identiques va être au minimum de 2 * le nombre de lignes car il compare les valeurs une fois avec elles-mêmes MsgBox ("vous avez introduit plusieurs fois une même lettre dans le tableau de liaisons") Exit Sub 'on arrête la macro si le if se vérifie End If 63

'fin du test For e = 1 To nombrelettre 'le for va selectionner une lettre après l'autre dans la chaine de caractère que l'on a entré For i = 0 To 25 'on doit placer l'enregistrement des variables dans le for pour que le for prenne en compte le changement des rotors tableaurotor(i, 0) = Range("A" & i + 2) 'il prendra la valeur qui se trouve dans la colonne A et en fonction de i qui représente les lignes tableaurotor(i, 1) = Range("B" & i + 2) tableaurotor(i, 2) = Range("C" & i + 2) tableaurotor(i, 3) = Range("D" & i + 2) lettreacoder = Mid(texte, e, 1) 'selectionne la lettre qui passe dans les rotors en fonction de e qui dépend du for For i = 0 To nbcells - 1 'on va regarder si des liaisons, des échanges de lettres ont été fait If lettreacoder = steckers(i, 0) Then lettreacoder2 = steckers(i, 1) Exit For ElseIf lettreacoder = steckers(i, 1) Then lettreacoder2 = steckers(i, 0) Exit For Else: lettreacoder2 = lettreacoder End If asciilettre = Asc(lettreacoder2) - 97 'on la transforme en chiffre precedent = Range("G36") 'on enregistre les lettres déjà codée 'passage dans les rotors arriveerotor1 = tableaurotor(asciilettre, 0) 'le asciilettre nous donne le point d'arrivée l = (asciilettre + decalage(arriveerotor1, 0)) 'on part de la position ou était arriveerotor1 puis on y rajoute le décalage en utilisant le tableau annexe s = l Mod 26 'on sépare la "modulation" car sinon elle ne s'opère pas arriveerotor2 = tableaurotor(s, 1) 'on part de la ligne de sortierotor1 (ici 0) puis on ajoute le décalage puis on module et ainsi de suite pour tout les rotors 'la sortie du rotor 1 est aussi l'arrivée du rotor2 m = (s + decalage(arriveerotor2, 2)) t = m Mod 26 arriveerotor3 = tableaurotor(t, 2) n = (t + decalage(arriveerotor3, 4)) u = n Mod 26 arriveereflecteur = tableaurotor(u, 3) 64

o = (u + decalage(arriveereflecteur, 6)) v = o Mod 26 arriveerotor3_2 = tableaurotor(v, 3) arriveerotor3_22 = tableaurotor(v, 2) 'on utilise cette variable pour que la case qui va chercher le dacalage soit dans la même colonne que celle du decalage pour rendre l'operation symetrique p = (v + decalage(arriveerotor3_22, 5)) w = p Mod 26 arriveerotor2_2 = tableaurotor(w, 2) arriveerotor2_22 = tableaurotor(w, 1) q = (w + decalage(arriveerotor2_22, 3)) x = q Mod 26 arriveerotor1_2 = tableaurotor(x, 1) arriveerotor1_22 = tableaurotor(x, 0) r = (x + decalage(arriveerotor1_22, 1)) y = r Mod 26 sortierotor1_2 = tableaurotor(y, 0) 'fin du passage dans les rotors 'on transforme la cellule d'arrivée en lettre For j = 0 To 25 If sortierotor1_2 = tableaurotor(j, 0) Then 'la lettre dépend de la case de sortie donc si sortie1_2 est égale à la sortie qui dépend de j qui dépend du for le if s'execute et arrête la boucle for code = Chr(97 + j) 'on utilise le code ascii + j car 97 = "a" si on voulait en majuscule ce serait 65 Exit For ' si le if est juste alors il n'ira pas chercher plus loin c'est pourquoi il sort de la boucle End If 'on recomence pour faire passer la lettre suivante su string dans les rotors For i = 0 To nbcells - 1 'on reechange les liaisons If code = steckers(i, 0) Then code2 = steckers(i, 1) Exit For ElseIf code = steckers(i, 1) Then code2 = steckers(i, 0) Exit For Else: code2 = code End If 65

'on inscrit code dans une cellule, il y a le code déjà présent puis la lettre qui vient d'être codée Range("G36") = precedent + code2 'on fait tourner les rotors Call tourner ' on recommence pour passer la lettre suivante dans les rotors sngchrono = Timer - sngchrono Range("R43") = CStr(sngChrono) 'temps mis par la machine Range("S43") = nombrelettre Range("R45") = CStr(sngChrono) / nombrelettre Range("S45") = nombrelettre / CStr(sngChrono) End Sub 13.2 Lorenz Sub tournesz40chi1() ' fait tourner le premier rotor chi Range("A1:A41").Select Selection.Cut Destination:=Range("A2:A42") Range("A42").Select Selection.Cut Destination:=Range("A1") End Sub Sub tournesz40chi2() '2e rotor chi Range("B1:B31").Select Selection.Cut Destination:=Range("B2:B32") Range("B32").Select Selection.Cut Destination:=Range("B1") End Sub Sub tournesz40chi3() '3e chi Range("C1:C29").Select Selection.Cut Destination:=Range("C2:C30") Range("C30").Select Selection.Cut Destination:=Range("C1") End Sub Sub tournesz40chi4() '4e chi Range("D1:D26").Select Selection.Cut Destination:=Range("D2:D27") 66

Range("D27").Select Selection.Cut Destination:=Range("D1") End Sub Sub tournesz40chi5() '5e chi Range("E1:E23").Select Selection.Cut Destination:=Range("E2:E24") Range("E24").Select Selection.Cut Destination:=Range("E1") End Sub Sub tournesz40add1() '1 additionnel qui tourne comme les chi Range("F1:F61").Select Selection.Cut Destination:=Range("F2:F62") Range("F62").Select Selection.Cut Destination:=Range("F1") End Sub Sub tournesz40add2() Range("G1:G37").Select Selection.Cut Destination:=Range("G2:G38") Range("G38").Select Selection.Cut Destination:=Range("G1") End Sub Sub tournesz40psi1() Range("H1:H43").Select Selection.Cut Destination:=Range("H2:H44") Range("H44").Select Selection.Cut Destination:=Range("H1") End Sub Sub tournesz40psi2() Range("I1:I47").Select Selection.Cut Destination:=Range("I2:I48") Range("I48").Select Selection.Cut Destination:=Range("I1") End Sub Sub tournesz40psi3() Range("J1:J51").Select Selection.Cut Destination:=Range("J2:J52") Range("J52").Select Selection.Cut Destination:=Range("J1") End Sub Sub tournesz40psi4() Range("K1:K53").Select Selection.Cut Destination:=Range("K2:K54") Range("K54").Select Selection.Cut Destination:=Range("K1") End Sub 67

Sub tournesz40psi5() Range("L1:L59").Select Selection.Cut Destination:=Range("L2:L60") Range("L60").Select Selection.Cut Destination:=Range("L1") End Sub Sub tournechi() 'fais tourner les 5 rotors chi ainsi que le premire rotor moteur Dim bit As String, rotor As String rotor = Range("F1") bit = Mid(rotor, 1, 1) If bit = 1 Then 'si la première case du premier rotor additionnel est égal à un cela fait tourner le deuxième rotor aditionel de 1 cran Call tournesz40add2 End If Call tournesz40chi1 Call tournesz40chi2 Call tournesz40chi3 Call tournesz40chi4 Call tournesz40chi5 Call tournesz40add1 End Sub Sub tournepsi() 'fais tourner les 5 autres rotors en fonction du second rotor moteur Dim bit As String, rotor As String rotor = Range("G1") bit = Mid(rotor, 1, 1) If bit = 1 Then Call tournesz40psi1 Call tournesz40psi2 Call tournesz40psi3 Call tournesz40psi4 Call tournesz40psi5 End If End Sub Sub lettresup(n, u, m, b, e) 'création de la clé additive Dim bit1 As Boolean, bit2 As Boolean, bit3 As Boolean, bit4 As Boolean, bit5 As Boolean Dim tex1 As String, tex2 As String tex1 = Range("A1") tex2 = Range("H1") 68

bit1 = Mid(tex1, 1, 1) Xor Mid(tex2, 1, 1) 'comparaison grâce à un ou exclusif If bit1 = True Then 'si le xor est vrai le premier bit de la clé sera un 1, sinon un 0 n = "1" Else n = "0" End If tex3 = Range("B1") tex4 = Range("I1") bit2 = Mid(tex3, 1, 1) Xor Mid(tex4, 1, 1) If bit2 = True Then u = "1" Else u = "0" End If tex5 = Range("C1") tex6 = Range("J1") bit3 = Mid(tex5, 1, 1) Xor Mid(tex6, 1, 1) If bit3 = True Then m = "1" Else m = "0" End If tex7 = Range("D1") tex8 = Range("K1") bit4 = Mid(tex7, 1, 1) Xor Mid(tex8, 1, 1) If bit4 = True Then b = "1" Else b = "0" End If tex9 = Range("E1") tex10 = Range("L1") bit5 = Mid(tex9, 1, 1) Xor Mid(tex10, 1, 1) If bit5 = True Then e = "1" Else 69

e = "0" End If End Sub Sub lettrecode(code, lettre) 'chiffre la lettre en fonction de la lettre tapée et de la clé additive Dim key As String Call lettresup(a, b, c, d, e) 'on appelle la fonction qui créé la clé additive key = a + b + c + d + e 'on construit la chaîne de caractère For i = 1 To 5 'on compare en simulant un ou exclusif chaque bit l'un après l'autre bit1 = Mid(key, i, 1) bit2 = Mid(lettre, i, 1) If bit1 = bit2 Then code = code + "0" Else code = code + "1" End If End Sub Sub principale() Dim texte As String, resultat As String, res As String, sngchrno As Single sngchrono = Timer texte = Range("N1") 'on récupère le texte à coder Call remplacelettre(texte) 'on enlève tous les accents i = Len(texte) 'on mesure la lonbueur de la chaîne Range("N3") = "" 'on efface la cellule ou se trouvera le texte chiffré For j = 1 To i 'on remets à zéros les variables corres = "" code = "" res = "" Range("N3") = avant lettre = Mid(texte, j, 1) Call atib2(lettre, corres) 'transformation en alphabet télégraphique Call lettrecode(code, corres) 'chiffrement de la lettre tapée Call atib22(code, res) 'retransformation en caractère latin resultat = resultat + res ' création de la chaine de caractère à inscrire dans le tableur 70

Call tournechi 'on fait tourner les rotors Call tournepsi Range("N3") = avant + resultat sngchrono = Timer - sngchrono Range("N65") = CStr(sngChrono) 'temps mis par la machine Range("O65") = i Range("N67") = CStr(sngChrono) / i Range("O67") = i / CStr(sngChrono) End Sub Sub atib2(lettre, b) 'transformation d'un caractère latin en alphabet télégraphique Select Case lettre Case Is = "1": b = "00000" Case Is = "2": b = "00100" Case Is = "q": b = "10111" Case Is = "w": b = "10011" Case Is = "e": b = "00001" Case Is = "r": b = "01010" Case Is = "t": b = "10000" Case Is = "y": b = "10101" Case Is = "u": b = "00111" Case Is = "i": b = "00110" Case Is = "o": b = "11000" Case Is = "p": b = "10110" Case Is = "a": b = "00011" Case Is = "s": b = "00101" Case Is = "d": b = "01001" Case Is = "f": b = "01101" Case Is = "g": b = "11010" Case Is = "h": b = "10100" Case Is = "j": b = "01011" Case Is = "k": b = "01111" Case Is = "l": b = "10010" Case Is = "z": b = "10001" Case Is = "x": b = "11101" Case Is = "c": b = "01110" Case Is = "v": b = "11110" Case Is = "b": b = "11001" Case Is = "n": b = "01100" Case Is = "m": b = "11100" Case Is = "3": b = "01000" Case Is = "4": b = "00010" Case Is = "5": b = "11011" 71

Case Is = "6": b = "11111" End Select End Sub Sub atib22(bitcode, c) 'transformation de l'alphabet télégraphique aux caractères latins Select Case bitcode Case Is = "00000": c = "1" 'remplacer le null Case Is = "00100": c = "2" Case Is = "10111": c = "q" Case Is = "10011": c = "w" Case Is = "00001": c = "e" Case Is = "01010": c = "r" Case Is = "10000": c = "t" Case Is = "10101": c = "y" Case Is = "00111": c = "u" Case Is = "00110": c = "i" Case Is = "11000": c = "o" Case Is = "10110": c = "p" Case Is = "00011": c = "a" Case Is = "00101": c = "s" Case Is = "01001": c = "d" Case Is = "01101": c = "f" Case Is = "11010": c = "g" Case Is = "10100": c = "h" Case Is = "01011": c = "j" Case Is = "01111": c = "k" Case Is = "10010": c = "l" Case Is = "10001": c = "z" Case Is = "11101": c = "x" Case Is = "01110": c = "c" Case Is = "11110": c = "v" Case Is = "11001": c = "b" Case Is = "01100": c = "n" Case Is = "11100": c = "m" Case Is = "01000": c = "3" Case Is = "00010": c = "4" Case Is = "11011": c = "5" Case Is = "11111": c = "6" End Select End Sub Sub tournerotorchi1() 'pour faire tourner les rotors individuellement Dim choix As String 'le rotor auquel on veut se rendre Dim base As String ' la position ou se trouve le rotor Dim texte As String 72

texte = Range("A1") i = Len(texte) - 1 base = Mid(texte, 2, i) 'prendre que la deuxième partie du texte contenu dans la cellule choix = InputBox("introduisez la position entre 1 et 41 du rotor ou vous voulez vous rendre", chi1, base) 'on demande à l'utilisateur 'on a demandé à l'utilisateur où il voulait se rendre 'contrôle que le chiffre demandé se trouve dans la fourchette demandée If 41 < choix Or choix < 1 Then Do While 41 < choix Or choix < 1 MsgBox "vous n'avez pas introduit un nombre entre 1 et 41" choix = InputBox("introduisez la position entre 1 et 41 du rotor ou vous voulez vous rendre", chi1, bas e) Loop End If 'rotation du rotor jusqu'à la case demandée Do Until base = choix Call tournesz40chi1 texte = Range("A1") i = Len(texte) - 1 base = Mid(texte, 2, i) Loop End Sub Sub tournerotorchi2() Dim choix As String 'le rotor auquel on veut se rendre Dim base As String ' la position ou se trouve le rotor Dim texte As String texte = Range("B1") i = Len(texte) - 1 base = Mid(texte, 2, i) choix = InputBox("introduisez la position entre 1 et 31 du rotor ou vous voulez vous rendre", chi2, base) 'on demande à l'utilisateur If 31 < choix Or choix < 1 Then Do While 31 < choix Or choix < 1 MsgBox "vous n'avez pas introduit un nombre entre 1 et 31" choix = InputBox("introduisez la position entre 1 et 31 du rotor ou vous voulez vous rendre", chi2, bas e) Loop End If Do Until base = choix 73

Call tournesz40chi2 texte = Range("B1") i = Len(texte) - 1 base = Mid(texte, 2, i) Loop End Sub Sub tournerotorchi3() Dim choix As String 'le rotor auquel on veut se rendre Dim base As String ' la position ou se trouve le rotor Dim texte As String texte = Range("C1") i = Len(texte) - 1 base = Mid(texte, 2, i) choix = InputBox("introduisez la position entre 1 et 29 du rotor ou vous voulez vous rendre", chi3, base) 'on demande à l'utilisateur If 29 < choix Or choix < 1 Then Do While 29 < choix Or choix < 1 MsgBox "vous n'avez pas introduit un nombre entre 1 et 29" choix = InputBox("introduisez la position entre 1 et 29 du rotor ou vous voulez vous rendre", chi3, bas e) Loop End If Do Until base = choix Call tournesz40chi3 texte = Range("C1") i = Len(texte) - 1 base = Mid(texte, 2, i) Loop End Sub Sub tournerotorchi4() Dim choix As String 'le rotor auquel on veut se rendre Dim base As String ' la position ou se trouve le rotor Dim texte As String texte = Range("D1") i = Len(texte) - 1 base = Mid(texte, 2, i) choix = InputBox("introduisez la position entre 1 et 26 du rotor ou vous voulez vous rendre", chi4, base) 'on demande à l'utilisateur If 26 < choix Or choix < 1 Then Do While 26 < choix Or choix < 1 74

MsgBox "vous n'avez pas introduit un nombre entre 1 et 26" choix = InputBox("introduisez la position entre 1 et 26 du rotor ou vous voulez vous rendre", chi4, bas e) Loop End If Do Until base = choix Call tournesz40chi4 texte = Range("D1") i = Len(texte) - 1 base = Mid(texte, 2, i) Loop End Sub Sub tournerotorchi5() Dim choix As String 'le rotor auquel on veut se rendre Dim base As String ' la position ou se trouve le rotor Dim texte As String texte = Range("E1") i = Len(texte) - 1 base = Mid(texte, 2, i) choix = InputBox("introduisez la position entre 1 et 23 du rotor ou vous voulez vous rendre", chi5, base) 'on demande à l'utilisateur If 23 < choix Or choix < 1 Then Do While 23 < choix Or choix < 1 MsgBox "vous n'avez pas introduit un nombre entre 1 et 23" choix = InputBox("introduisez la position entre 1 et 23 du rotor ou vous voulez vous rendre", chi5, bas e) Loop End If Do Until base = choix Call tournesz40chi5 texte = Range("E1") i = Len(texte) - 1 base = Mid(texte, 2, i) Loop End Sub Sub tournerotoradd1() Dim choix As String 'le rotor auquel on veut se rendre Dim base As String ' la position ou se trouve le rotor Dim texte As String 75

texte = Range("F1") i = Len(texte) - 1 base = Mid(texte, 2, i) choix = InputBox("introduisez la position entre 1 et 61 du rotor ou vous voulez vous rendre", add1, base) 'on demande à l'utilisateur If 61 < choix Or choix < 1 Then Do While 61 < choix Or choix < 1 MsgBox "vous n'avez pas introduit un nombre entre 1 et 61" choix = InputBox("introduisez la position entre 1 et 61 du rotor ou vous voulez vous rendre", add1, bas e) Loop End If Do Until base = choix Call tournesz40add1 texte = Range("F1") i = Len(texte) - 1 base = Mid(texte, 2, i) Loop End Sub Sub tournerotoradd2() Dim choix As String 'le rotor auquel on veut se rendre Dim base As String ' la position ou se trouve le rotor Dim texte As String texte = Range("G1") i = Len(texte) - 1 base = Mid(texte, 2, i) choix = InputBox("introduisez la position entre 1 et 37 du rotor ou vous voulez vous rendre", add2, base) 'on demande à l'utilisateur If 37 < choix Or choix < 1 Then Do While 37 < choix Or choix < 1 MsgBox "vous n'avez pas introduit un nombre entre 1 et 37" choix = InputBox("introduisez la position entre 1 et 37 du rotor ou vous voulez vous rendre", add2, bas e) Loop End If Do Until base = choix Call tournesz40add2 76

texte = Range("G1") i = Len(texte) - 1 base = Mid(texte, 2, i) Loop End Sub Sub tournerotorpsi1() Dim choix As String 'le rotor auquel on veut se rendre Dim base As String ' la position ou se trouve le rotor Dim texte As String texte = Range("H1") i = Len(texte) - 1 base = Mid(texte, 2, i) choix = InputBox("introduisez la position entre 1 et 43 du rotor ou vous voulez vous rendre", psi1, base) 'on demande à l'utilisateur If 43 < choix Or choix < 1 Then Do While 43 < choix Or choix < 1 MsgBox "vous n'avez pas introduit un nombre entre 1 et 43" choix = InputBox("introduisez la position entre 1 et 43 du rotor ou vous voulez vous rendre", psi1, bas e) Loop End If Do Until base = choix Call tournesz40psi1 texte = Range("H1") i = Len(texte) - 1 base = Mid(texte, 2, i) Loop End Sub Sub tournerotorpsi2() Dim choix As String 'le rotor auquel on veut se rendre Dim base As String ' la position ou se trouve le rotor Dim texte As String texte = Range("I1") i = Len(texte) - 1 base = Mid(texte, 2, i) choix = InputBox("introduisez la position entre 1 et 47 du rotor ou vous voulez vous rendre", psi2, base) 'on demande à l'utilisateur If 47 < choix Or choix < 1 Then Do While 47 < choix Or choix < 1 77

MsgBox "vous n'avez pas introduit un nombre entre 1 et 47" choix = InputBox("introduisez la position entre 1 et 47 du rotor ou vous voulez vous rendre", psi2, bas e) Loop End If Do Until base = choix Call tournesz40psi2 texte = Range("I1") i = Len(texte) - 1 base = Mid(texte, 2, i) Loop End Sub Sub tournerotorpsi3() Dim choix As String 'le rotor auquel on veut se rendre Dim base As String ' la position ou se trouve le rotor Dim texte As String texte = Range("J1") i = Len(texte) - 1 base = Mid(texte, 2, i) choix = InputBox("introduisez la position entre 1 et 51 du rotor ou vous voulez vous rendre", psi3, base) 'on demande à l'utilisateur If 51 < choix Or choix < 1 Then Do While 51 < choix Or choix < 1 MsgBox "vous n'avez pas introduit un nombre entre 1 et 51" choix = InputBox("introduisez la position entre 1 et 51 du rotor ou vous voulez vous rendre", psi3, bas e) Loop End If Do Until base = choix Call tournesz40psi3 texte = Range("J1") i = Len(texte) - 1 base = Mid(texte, 2, i) Loop End Sub Sub tournerotorpsi4() Dim choix As String 'le rotor auquel on veut se rendre Dim base As String ' la position ou se trouve le rotor Dim texte As String 78

texte = Range("K1") i = Len(texte) - 1 base = Mid(texte, 2, i) choix = InputBox("introduisez la position entre 1 et 53 du rotor ou vous voulez vous rendre", psi4, base) 'on demande à l'utilisateur If 53 < choix Or choix < 1 Then Do While 53 < choix Or choix < 1 MsgBox "vous n'avez pas introduit un nombre entre 1 et 53" choix = InputBox("introduisez la position entre 1 et 53 du rotor ou vous voulez vous rendre", psi4, bas e) Loop End If Do Until base = choix Call tournesz40psi4 texte = Range("K1") i = Len(texte) - 1 base = Mid(texte, 2, i) Loop End Sub Sub tournerotorpsi5() Dim choix As String 'le rotor auquel on veut se rendre Dim base As String ' la position ou se trouve le rotor Dim texte As String texte = Range("L1") i = Len(texte) - 1 base = Mid(texte, 2, i) choix = InputBox("introduisez la position entre 1 et 59 du rotor ou vous voulez vous rendre", psi5, base) 'on demande à l'utilisateur If 59 < choix Or choix < 1 Then Do While 59 < choix Or choix < 1 MsgBox "vous n'avez pas introduit un nombre entre 1 et 59" choix = InputBox("introduisez la position entre 1 et 59 du rotor ou vous voulez vous rendre", psi5, bas e) Loop End If Do Until base = choix Call tournesz40psi5 79

texte = Range("L1") i = Len(texte) - 1 base = Mid(texte, 2, i) Loop End Sub Sub remplacelettre(texteclair) 'afin de n'avoir plus que des lettres de a à z en minuscules For i = 0 To 48 'caractères inutiles texteclair = Replace(texteclair, Chr(0 + i), "") For i = 0 To 9 'chiffres de 7 à 9 + caractères inutiles texteclair = Replace(texteclair, Chr(55 + i), "") For i = 0 To 25 'transforme les MAJUSCULES en minuscules texteclair = Replace(texteclair, Chr(65 + i), Chr(97 + i)) For i = 0 To 5 'caractère inutiles texteclair = Replace(texteclair, Chr(91 + i), "") 'remplacement des caractère isolés texteclair = Replace(texteclair, Chr(138), "s") texteclair = Replace(texteclair, Chr(140), "oe") texteclair = Replace(texteclair, Chr(142), "z") texteclair = Replace(texteclair, Chr(154), "s") texteclair = Replace(texteclair, Chr(156), "oe") texteclair = Replace(texteclair, Chr(158), "z") texteclair = Replace(texteclair, Chr(159), "y") texteclair = Replace(texteclair, Chr(198), "ae") texteclair = Replace(texteclair, Chr(199), "c") texteclair = Replace(texteclair, Chr(209), "n") texteclair = Replace(texteclair, Chr(221), "y") texteclair = Replace(texteclair, Chr(223), "ss") texteclair = Replace(texteclair, Chr(230), "ae") texteclair = Replace(texteclair, Chr(231), "c") texteclair = Replace(texteclair, Chr(241), "n") texteclair = Replace(texteclair, Chr(253), "y") texteclair = Replace(texteclair, Chr(255), "y") 'remplacements groupés For i = 0 To 5 texteclair = Replace(texteclair, Chr(92 + i), "a") For i = 0 To 3 texteclair = Replace(texteclair, Chr(200 + i), "e") 80

For i = 0 To 3 texteclair = Replace(texteclair, Chr(204 + i), "i") For i = 0 To 4 texteclair = Replace(texteclair, Chr(210 + i), "o") For i = 0 To 3 texteclair = Replace(texteclair, Chr(217 + i), "u") For i = 0 To 5 texteclair = Replace(texteclair, Chr(224 + i), "a") For i = 0 To 3 texteclair = Replace(texteclair, Chr(232 + i), "e") For i = 0 To 3 texteclair = Replace(texteclair, Chr(236 + i), "i") For i = 0 To 4 texteclair = Replace(texteclair, Chr(242 + i), "o") For i = 0 To 3 texteclair = Replace(texteclair, Chr(249 + i), "u") For i = 0 To 132 'caractères inutiles texteclair = Replace(texteclair, Chr(123 + i), "") End Sub 81