Cryptologie, cryptographie et cryptanalyse

Passons aux connaissances théoriques dont vous aurez besoin lors de la rédaction du projet final. Apprenons-en plus sur la cryptographie et ses éléments constitutifs. Et en même temps, nous en apprendrons plus sur le chiffrement que vous utiliserez lors de la rédaction du projet final.

1. La cryptologie et ses éléments constitutifs

La cryptologie est un domaine de connaissance qui comprend :

  • Cryptographie (la science des chiffres).

    La cryptographie consiste à crypter les informations pour les protéger contre tout accès non autorisé. Ces informations peuvent être du texte, une image numérique, un signal audio, etc. Le processus de cryptage produit une version cryptée des informations (données), appelée texte chiffré ou texte codé.

  • Cryptanalyse (méthodes pour casser ces chiffrements).

    La cryptanalyse examine les méthodes de cassage des chiffres et comment ces méthodes peuvent être appliquées. En d'autres termes, la cryptanalyse effectue la tâche inverse, étudiant les moyens de transformer les informations cryptées en texte clair.

2. Clé cryptographique

Une clé est une sélection de données utilisées pour chiffrer et déchiffrer des informations. La capacité à décrypter avec succès les informations dépend de la clé utilisée. Si une clé est perdue pour une raison quelconque, il sera alors impossible de déchiffrer les données.

La taille des clés cryptographiques est mesurée en bits. Et cela signifie qu'une clé cryptographique a une longueur . Une bonne force de cryptage est fournie avec une longueur de 128 bits.

Types de clés cryptographiques :

  1. Clés symétriques (clés secrètes). Sans surprise, de telles clés sont utilisées dans ce que l'on appelle des algorithmes à clé symétrique. Leur but principal est d'effectuer des transformations cryptographiques directes ou inverses (chiffrement/déchiffrement, vérification du code d'authentification du message).

  2. Clés asymétriques. Ils sont utilisés dans les algorithmes de chiffrement à clé asymétrique (par exemple, lors de la vérification d'une signature numérique électronique).

Comme nous allons travailler avec un algorithme de chiffrement à clé symétrique, nous n'entrerons pas trop dans les détails ici.

3. Alphabet de substitution

Un alphabet de substitution est un ensemble complet de caractères utilisé pour coder les caractères d'entrée.

4. Approches de la cryptanalyse

Il existe de nombreuses approches et méthodes de cryptanalyse différentes, c'est-à-dire des moyens de déchiffrer les chiffrements.

Nous allons décrire le plus simple d'entre eux :

  1. La force brute (ou recherche par force brute) essaie toutes les clés possibles jusqu'à ce que nous trouvions la bonne. L'avantage de cette méthode est sa simplicité. L'inconvénient est qu'il n'est pas adapté aux chiffrements impliquant un grand nombre de clés possibles.

  2. Cryptanalyse basée sur des données statistiques - dans cette approche, nous recueillons des statistiques sur l'occurrence de différents caractères dans le texte chiffré, puis nous décryptons sur la base de statistiques sur la fréquence d'occurrence de différents caractères dans le texte en clair.

    Par exemple : on sait que la fréquence de la lettre P dans les textes anglais est de 1,9 %. Lorsque nous analysons le texte chiffré, nous recherchons un symbole qui apparaît avec la même fréquence, puis concluons qu'il s'agit de la lettre P.

    L'inconvénient de cette approche est sa dépendance à la langue spécifique, à l'auteur et au style du texte.

5. Chiffre de César

C'est l'une des méthodes de cryptage les plus simples et les plus connues. Son nom, bien sûr, vient de l'empereur Gaius Julius Caesar, qui utilisait cette méthode pour correspondre secrètement avec les généraux.

Un chiffrement de César est un chiffrement de substitution dans lequel chaque caractère du texte en clair est remplacé par un caractère qui est un nombre constant de positions à sa gauche ou à sa droite dans l'alphabet.

Disons que nous fixons le décalage à 3. Dans ce cas, A sera remplacé par D, B deviendra E, et ainsi de suite.

Il s'agit de la quantité minimale de théorie dont vous aurez besoin pour terminer le projet final. Passons à la description de la tâche !

Projet final pour le module Java Syntax. Écrivons un cryptanalyseur

Votre tâche est d'écrire un programme qui fonctionne avec les chiffres de César.

Laissez votre alphabet cryptographique se composer de toutes les lettres de l'alphabet anglais ainsi que des signes de ponctuation (. , ”” : - ! ? SPACE). Si vous rencontrez des caractères qui ne font pas partie de notre alphabet de substitution, ignorez-les simplement.

Exigences obligatoires

Le programme devrait avoir 2 modes :

  1. Chiffrement/déchiffrement. Le programme doit chiffrer et déchiffrer le texte à l'aide d'une clé cryptographique donnée.

    Le programme doit recevoir un chemin vers un fichier texte contenant le texte source et créer un fichier contenant le texte chiffré correspondant.

  2. Cryptanalyse par attaque par force brute

    Dans ce mode, le programme doit déchiffrer le texte chiffré contenu dans un fichier texte d'entrée.

    Si l'utilisateur sélectionne la force brute, le programme doit énumérer indépendamment les clés possibles, sélectionner la clé correcte et déchiffrer le texte.

    Réfléchissez aux critères que le programme doit utiliser pour identifier avec succès la bonne clé. Vous devrez peut-être faire attention aux espaces entre les mots ou à l'utilisation correcte des signes de ponctuation.

Exigences supplémentaires (facultatives)

1. Cryptanalyse par analyse statistique

L'utilisateur doit pouvoir choisir l'une des deux méthodes de cryptanalyse. Si l'utilisateur sélectionne le mode d'analyse statistique, invitez-le à charger un fichier texte supplémentaire en clair, de préférence du même auteur et dans le même style. Sur la base du contenu du deuxième fichier, le programme doit compiler des statistiques sur l'occurrence des caractères, puis essayer d'utiliser ces statistiques pour effectuer une cryptanalyse du texte chiffré.

2. Interface utilisateur

Créez des boîtes de dialogue pour interagir avec l'utilisateur à votre discrétion. Si vous le souhaitez, vous pouvez utiliser les frameworks graphiques Swing et JavaFX.

Téléchargez votre solution finie dans un référentiel Git public.

Le projet sera vérifié lorsque le groupe l'aura parcouru