Parcours
/
Pharo
Pharo
/
Exercices
/
Chiffrement simple
Chiffrement simple

Chiffrement simple

Moyen

Instructions

Mets en œuvre un chiffrement par décalage simple, comme celui de César, puis un chiffrement par substitution plus sûr.

Étape 1

« S'il avait quelque chose de confidentiel à dire, il l'écrivait en chiffre, c'est-à-dire en changeant si bien l'ordre des lettres de l'alphabet que pas un mot ne pouvait être compris. Si quelqu'un souhaite les déchiffrer et en saisir le sens, il doit remplacer la quatrième lettre de l'alphabet, à savoir D, par A, et ainsi de suite. » Suétone, Vie de Jules César

Le chiffrement repose sur des algorithmes très simples, qui permettent de rendre un texte moins lisible tout en le laissant facile à déchiffrer. Ces algorithmes sont vulnérables à de nombreuses formes de cryptanalyse, mais César a eu la chance que ses ennemis ne soient pas des cryptanalystes.

Le chiffre de César a servi pour certains messages de Jules César envoyés au loin. César savait bien que ce chiffrement n'était pas très bon, mais il avait un allié de taille : presque personne ne lisait correctement. Un décalage de quelques lettres suffisait donc à empêcher les gens de reconnaître le peu de mots qu'ils connaissaient.

Ta tâche est de créer un chiffrement par décalage simple, comme le chiffre de César. Cette image est un excellent exemple du chiffre de César :

Chiffre de César

Par exemple :

Si on donne "iamapandabear" en entrée à la fonction d'encodage, elle renvoie le message chiffré "ldpdsdqgdehdu". Assez obscur pour que notre message reste secret en transit.

Si on passe "ldpdsdqgdehdu" à la fonction de décodage, elle renvoie le "iamapandabear" d'origine, ce qui permet à ton ami de lire ton message initial.

Étape 2

Les chiffrements par décalage perdent vite leur utilité dès que le commandant adverse les perce à jour. Alors, essayons plutôt un chiffrement par substitution. Essaie de modifier le code pour qu'on puisse préciser une clé et l'utiliser comme distance de décalage.

Voici un exemple :

Avec la clé "aaaaaaaaaaaaaaaaaa", encoder la string "iamapandabear" renvoie le "iamapandabear" d'origine.

Avec la clé "ddddddddddddddddd", encoder notre string "iamapandabear" renvoie la version obscurcie "ldpdsdqgdehdu"

Dans l'exemple ci-dessus, on a défini a = 0 comme valeur de clé. Du coup, quand on ajoute le texte en clair à la clé, on obtient le même message. La clé "aaaa" n'est donc pas idéale. Mais si on prend "dddd" comme clé, on obtient le même résultat qu'avec le chiffre de César.

Étape 3

Le maillon faible de tout chiffrement, c'est l'être humain. Rendons ton chiffrement par substitution un peu plus tolérant aux fautes, en fournissant une source de hasard et en veillant à ce que la clé ne contienne que des lettres minuscules.

Si personne ne fournit de clé du tout, génère une clé réellement aléatoire d'au moins 100 caractères minuscules.

Extensions

Les chiffrements par décalage rendent le texte un peu étrange, mais ils sont vulnérables à l'analyse des fréquences. Les chiffrements par substitution y remédient en partie, mais restent très vulnérables quand la clé est courte ou si les espaces sont conservés. Plus tard, tu verras une solution à ce problème dans l'exercice "crypto-square".

Si tu veux aller plus loin dans ce domaine, les questions finissent par porter sur la manière d'échanger des clés de façon sûre. Jette un œil à Diffie-Hellman sur Wikipédia pour l'une des premières implémentations de ce procédé.

Note

Essaie d'utiliser des opérations arithmétiques comme le modulo pour faire boucler les indices quand ils dépassent la limite. Les classes Character et String sont aussi tes amies.

Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Pharo Exercism

Prêt à commencer Chiffrement simple ?

Inscris-toi sur Exercism pour apprendre et maîtriser Pharo avec 50 exercices, et un vrai mentorat humain, le tout gratuitement.