| ★ APPLICATIONS ★ DIVERS ★ CR.A.O: CRYPTOGRAPHIE ASSISTÉE PAR ORDINATEUR / CRYPTO (CPCINFOS) ★ |
| CRYPTOGRAPHIE ASSISTEE PAR ORDINATEUR (1/2) | CRYPTOGRAPHIE ASSISTEE PAR ORDINATEUR (2/2) |
Nous avons passé en revue, le mois dernier, les principes de base de la cryptographie. Le programme présenté dans ce numéro vous offre 4 méthodes de codage/décodage fondées sur ces principes. Il s'agit de la transcription pure et simple des méthodes «manuelles» traditionnelles, travaillant sur les caractères (ou leurs codes ASCII). Dans ce qui n'est en fait qu'une brève introduction à la cryptographie, il était exclu de singer les techniques de camouflage des données mises en œuvre dans l'informatique professionnelle. Néanmoins, ce que je vous propose permet un codage efficace, et vous pourrez facilement modifier le programme pour en compliquer les algorithmes s'ils vous semblent trop faciles à décrypter. Vous pouvez par exemple associer plusieurs méthodes de codage (substitution et transposition).
LE PROGRAMME CRYPTO Le programme principal sera saisi en plusieurs séances Cl faudrait être maso pour vouloir le faire en une seule fols). Ne pas oublier la sauvegarde en fin de séance! Pour reprendre la saisie, LOAD "CRYPTO" et LIST pour connaître le numéro de la dernière ligne : soit 1000 par exemple ; AUTO 1010 et en avant ; si vous ne voulez pas saisir les lignes de commentaires, tapez seulement ENTER (ou RETURN) aux numéros correspondants : aucune de ces lignes n'est appelée par GOSUB ou GOTO, comme il se doit. Respectez toujours RIGOUREUSEMENT la numérotation des lignes. A la fin, SAVE "CRYPTO", et |ERA,"*.BAK" pour faire le ménage. Vous pouvez nommer le programme principal comme il vous plaira, mais le programme de sauvegarde des paramètres (1 ligne, dont il ne faut pas modifier le numéro) doit impérativement s'appeler PARAM.DAT et être sauvegardé en ASCII par SAVE "PARAM.DAT",A. Avant lancement par RUN"CRYPTO", il vaut mieux faire un Reset (CONTROL-SHIFT-ESC), si vous venez d'utiliser un autre programme. Les entrées sont protégées contre la plupart des bourdes ; si néanmoins vous parveniez à planter le programme, vous gagnerez, en plus de mes condoléances, le droit de taper CLOSEIN:CLOSEOUT:GOTO 430 pour relancer le programme sans perdre une seule variable. Si vous désirez revenir aux paramètres par défaut, remplacez 430 par 420. Vous ne pourrez sortir que par l'option «QUITTER» du menu principal : le BREAK et le Reset sont bloqués. Pour relancer ensuite CRYPTO, voir ci-dessus. NOTA : les codes d'impression utilisés ont été testés sur EPSON LX800, mais doivent être compatibles avec la plupart des autres imprimantes, y compris la DMP2160 qui est en principe au standard Epson. Voici à quoi correspondent ces codes :
CHAINES ASCII A l'intention des débutants, voici de quoi il s'agit. Une chaîne ASCII c'est un ensemble de caractères mis bout à bout (d'où le nom de chaîne), représentant la valeur (le contenu) d'une variable chaîne caractérisée par le suffixe $. Sa longueur peut aller de 0 (chaîne vide) à 255 caractères maximum. Ceux-ci sont des caractères imprimables (affichables à l'écran) dont le code ASCII est compris entre 32 et 126 inclus. Ce que vous Nous allons procéder ensemble à une prise en main de CRYPTO, à partir du message-type suivant (165 caractères sans les espaces) : AGENT CQFD01 A OLIVIER BZH35. Mission accomplie : OLD BUG éliminé. Plus rien ne s'oppose a la reussite de nos plans. Attends nouvelle mission. Envoyez instructions et matériel par canal habituel. Faites RUN»CRYPTO»+ENTER. Amenez le cadre de sélection sur SAISIR TEXTE au moyen des flèches haut et bas, et validez par ENTER (chaque fois que je vous dirai ENTER, RETURN c'est pareil). Tapez MESSAGE pour le nom du fichier, puis ENTER, et entrez le texte ci-dessus, tel qu'il est (pas de lettres accentuées, pour les possesseurs d'un clavier AZERTY). Quand tout est saisi, ENTER pour valider la chaîne, et ENTER à nouveau pour sauvegarder et revenir au menu principal. — CHIFFRE DE SAINT-CYR Par défaut, CRYPTO est calé sur la substitution, le Chiffre de Saint-Cyr, l'alphabet-code en ordre croissant et le jeu de caractères tendu (de l'espace au caractère «}», soit les codes ASCII 32 à 125). Prenez l'option CODER. Le choix du fichier en entrée se fait obligatoirement sur catalogue ; MESSAGE y figure, amenez-y la barre de sélection au moyen des flèches haut et bas, et validez par ENTER. Tapez MESSAGE 1.COD pour le fichier en sortie, puis ENTER. Tapez AMSTRAD (en majuscules) pour le mot-clé, puis ENTER. Un peu de patience... C'est déjà fini. Appuyez sur une touche quelconque. Option VISUALISER, sous-option A L'ECRAN, fichier MESSAGE 1 .COD : admirez le résultat. Nous allons maintenant traiter le même message différemment. Prenez l'option METHODE. L'option SUBSTITUTION (par défaut) est surlignée car le programme l'a présélectionnée. Validez-la. Répondez «O» ou «o» à la question «Voulez-vous changer les paramètre de codage-décodage?». Le CHIFFRE DE SAINT-CYR est présélectionné : validez-le. Même chose pour l'ordre : nous conservons TORDRE DECROISSANT. Ce que nous allons changer, c'est l'étendue du jeu de caractères : tapez 65 pour le code ASCII de début (A majuscule) et 90 pour le code ASCII de fin (Z majuscule). Notre jeu de caractères ne comprend plus que les majuscules et rien d'autre, contrairement à notre premier essai. Répondez «N» ou «n» à «Sauvegarde des nouveaux paramètres ?» et à «Retour aux paramètres par défaut ?». Prenez l'option CODER, MESSAGE comme fichier en entrée et MESSAGE2.COD comme fichier en sortie. Tapez amstrad (en minuscules) pour le mot-clé ; vous vous faites jeter : les caractères du mot-clé ne font pas partie du jeu de caractères utilisé (c'est une des multiples protections du programme). Tapez maintenant AMSTRAD en majuscules et tout se passera bien. Visualisez le résultat à l'écran (maintenant vous savez faire). Vous constatez que tous les caractères qui ne sont pas des lettres majuscules n'ont pas été codés: normal, ils n'entrent pas dans le jeu de caractères choisi. Faites un essai de décodage avec MESSAGE2.COD en entrée, MESSAGE2.DEC en sortie, et AMSTRAD comme mot-clé. Visualisez : ça marche toujours (mais l'intérêt est limité). Si vous voulez, vous pouvez reprendre l'option METHODE pour rendre au jeu de caractères du CHIFFRE DE SAINT-CYR ses limites initiales (32 et 125), après avoir choisi et validé l'ORDRE CROISSANT, et faire un essai de codage/décodage avec le même mot-clé. Seul le texte codé aura un aspect différent (comparez-le avec MESSAGE!.COD, en Imprimant les 2 fichiers à la suite : VISUALISER-A L'IMPRIMANTE), car l'ordre de l'alphabet-code est alors inversé. -ALPHABET DOUBLE PARALLELE Prenez l'option METHODE, SUBSTITUTION toujours, «O» à «Voulez-vous changer les paramètres?», mais cette fois vous choisissez et validez l'option ALPHABET DOUBLE PARALLELE. Toujours pas de sauvegarde des nouveaux paramètres, ni de retour aux paramètres par défaut. Option CODER : prenez MESSAGE comme fichier en entrée, et MESSAGE2.COD comme fichier en sortie. Le programme vous dira «Fichier d'jà existant. Confirmez par < O >» ; faites-le, on peut l'écraser sans remords. Entrez AMSTRAD comme mot-clé ; vous avez droit au message d'erreur «Une seule fois chaque lettre SVP». Le mot-clé est en effet intégré à l'al-phabet-code de 26 lettres majuscules, et ne peut comporter des lettres doublées. Essayez alors habitude (en minuscules) : le programme l'accepte car, dans cet algorithme, il transforme tout en majuscules, mot-clé et texte à coder ; dans le texte, les caractères ne faisant pas partie du jeu utilisé (Ici non modifiable), tels les chiffres et les signes de ponctuation, ne seront tout simplement pas codés. Visualisez MESSAGE2.COD : le texte Initial a été purgé de ses espaces, codé puis divisé en blocs de 4 caractères séparés par des espaces, et une lettre nulle aléatoire a été insérée dans chaque bloc en position 4 (donc entre la 3ème et la 4ème lettre du bloc, qui devient ainsi la 5ème), ce qui porte la longueur à 248. Décodez maintenant MESSAGE2.COD en prenant MESSAGE2.DEC comme nom de fichier en sortie (répondez «O» pour écraser le fichier existant), et habitude ou HABITUDE comme mot-clé. Les paramètres ayant été conservés en mémoire vive, pas besoin de repasser au préalable par l'option METHODE. Visualisez MESSAGE2.DEC : le message est entièrement restitué, en majuscules, mais sans ses espaces d'origine. C'est comme cela et ça sera pareil pour les deux méthodes suivantes. -VERTICALE PARALLELE Reprenez l'option METHODE et choisissez maintenant la TRANSPOSITION. Oui pour changer les paramètres, et vous sélectionnez la VERTICALE PARALLELE sans sauvegarde ni retour aux paramètres par défaut. Option CODER : prenez MESSAGE comme fichier en entrée, etMESSAGE3.COD comme fichier en sortie ; cette fols, pas de mot-clé. Visualisez MESSAGE3.COD : même aspect que le précédent. Décodez-le en MESSAGE3.DEC et affichez-le à l'écran. L'aspect est le même que dans MESSAGE2.DEC, sauf qu'il y a une lettre nulle en dernier. Elle a été ajoutée par le programme pour avoir un nombre pair de caractères et remplir les 2 colonnes de la matrice. -MATRICE LIGNES x COLONNES Revenons à l'option METHODE, toujours en TRANSPOSITION (surlignée car considérée maintenant comme option par défaut, mais qu'il faut quand même valider), oui pour changer les paramètres. Sélectionnez cette fols la MATRICE LIGNES x COLONNES. Cette option est entièrement à la carte, et vous devrez définir tous les paramètres un par un. Notre texte sans espaces contient 165 caractères ; cette information préalable est indispensable, en fonction de ce que l'on veut faire. Le programme vous propose d'entrer le nombre de colonnes de la matrice ; le nombre par défaut (2) est rappelé, on peut le conserver en tapant seulement ENTER mais nous voulons justement modifier ce nombre. Avec 165 caractères, on pourrait avoir une matrice de 18 colonnes x 10 lignes, la dernière ligne étant automatiquement complétée par le programme, qui calcule également le nombre de lignes nécessaires en fonction du nombre de colonnes demandé et de la longueur de la chaîne (au moment du codage seulement). Tapez donc 18 (+ ENTER) pour le nombre de colonnes. Vous vous faites encore jeter, le nombre de colonnes est limité à 15 pour des raisons techniques. Tapez donc 15 (+ ENTER), avec 165 caractères ça fera juste 11 lignes (notez ce dernier nombre). On vous propose alors de choisir le sens d'écriture. Je pense que les 4 modèles proposés à l'écran se passent d'explications (D pour Début et F pour Fin de la chaîne à écrire). Le sens par défaut (à droite) est celui utilisé dans la VERTICALE PARALLELE, avec bien sûr 2 colonnes seulement dans ce cas. Appuyez sur ESPACE pour changer d'option, arrêtez-vous sur la 2ème et validez par ENTER. Répondez «O» à «Déplacement lignes et/ou colonnes ?», puis choisissez LIGNES. Il y en a 11 dans la matrice, souvenez-vous. Découpage en blocs après codage : Oui. Taille des blocs : 4. Insertion de lettres nulles : Oui. Position de la lettre nulle : 2 ; si vous entrez une valeur invalide (ici supérieure à 5 ou inférieure à 1), le programme vous le signale. Toujours ni sauvegarde, ni retour aux paramètres par défaut. Prenez maintenant l'option CODER, avec MESSAGE en entrée et MESSAGE4.COD en sortie. S'agissant de transposition avec déplacement d'éléments de la matrice, c'est non un mot-clé, mais un code numérique constitué de chiffres hexadécimaux, qui vous est demandé. Petit rappel pour ceux qui n'ont jamais entendu parler d'hexadécimal (y a pas de mal à ça) : de 0 à 9, les chiffres sont les mêmes en décimal et en hexadécimal ; puis nous avons A (hexadécimal) = 10 (décimal), B = 11. C = 12. D = 13, E = 14 et F = 15. Comme nous voulons déplacer les lignes, et qu'il y en ail, nous devons entrer une séquence de 11 chiffres hexadécimaux (à la suite, sans séparateurs). La VALEUR d'un de ces chiffres représente le numéro (le rang) d'une ligne AVANT déplacement, et son RANG dans la séquence du code numérique, le rang de cette même Entrez donc le code 7B5194A6283 (+ ENTER). Si un des chiffres est 0 ou supérieur à 11 décimal (soit C, D, E ou F) le programme vous le signalera immédiatement. Si le nombre de chiffres du code est différent du nombre d'éléments à déplacer (ici 11), le programme vous le signalera au moment du codage. Les lettres peuvent être entrées en minuscules ; si vous utilisez d'autres lettres que A à F, plantage I Mais si vous m'avez bien suivi, tout doit se dérouler correctement. Visualisez MESSAGE4.COD. Puis décodez-le en MESSAGE4.DEC (sans repasser par l'option METHODE, les paramètres sont toujours en mémoire), en donnant le même code numérique. Visualisez MESSAGE4.DEC : même aspect que dans les méthodes précédentes. NOTA : si nous avions décidé de déplacer les colonnes, leur nombre (entré comme premier paramètre) nous aurait immédiatement donné la longueur du code numérique nécessaire (pas besoin alors de connaître la longueur de la chaîne ASCII et de calculer le nombre de lignes). Nous allons refaire la même chose, mais en déplaçant à la fois les lignes et les colonnes. Comme le code numérique servira à «piloter» les 2 types de déplacement, le nombre de lignes doit être égal au nombre de colonnes (matrice carrée). Pour savoir quel nombre de colonnes indiquer au programme, calculez la racine carrée du nombre de caractères de la chaîne (sans les espaces). Si elle est entière, pas de problème. Sinon, arrondissez-la à l'entier supérieur (le programme complétera la dernière Répétez le dernier exemple d'application, en déplaçant LIGNES 8c COLONNES. Taille des blocs : 5. Position d'insertion : 3. Code numérique : D73A15C82B496 (+ ENTER). Enfin, visualisez le fichier codé puis le fichier décodé. ET POUR QUELQUES CONSEILS DE PLUS... Il y a plusieurs niveaux d'utilisation de CRYPTO. Si vous désirez seulement faire joujou avec sans vous casser la tête, il suffit que le texte à coder ou à décoder soit présent sur la disquette (saisi par l'option SAISIR TEXTE, importé par Minitel, ou copié à partir d'une autre disquette). Vous pouvez vous contenter de l'algorithme par défaut (Chiffre de Saint-Cyr avec paramètres décrits plus haut). Choisissez seulement CODER ou DECODER, le fichier à traiter, et indiquez le nom du fichier en sortie puis le mot-clé ( il va sans dire qu'il doit être le même au codage et au décodage). L'algorithme utilisé convient à n'importe quel type de fichier ASCII, y compris un programme BASIC sauvegardé avec l'option A ; essayez, vous serez sidéré par l'aspect dudit programme après codage I Si vous préférez la transposition, vous choisissez d'abord l'option METHODE, puis TRANSPOSITION, en répondant «N» ou «n» à «Voulez^vous changer les paramètres de codage/décodage ?». Si alors vous répondez «O» ou «o» à «Sauvegarde des nouveaux paramètres ?», le programme sera désormais calé sur la VERTICALE PARALLELE, algorithme relativement universel, mais qui ne code que les lettres et ne restitue pas les espaces du message initial. Vous pouvez examiner le texte avant et après codage par l'option VISUALISER qui affiche à l'écran le fichier ASCII chaîne par chaîne, en indiquant la longueur de chacune. La même option permet aussi d'imprimer le texte. Si le texte est long et que vous changiez d'avis en route, vous n'êtes pas condamné à le faire défiler jusqu'au bout: à l'écran comme à l'imprimante, vous pouvez sortir à tout moment par ESC. Ne me remerciez pas, c'est tout naturel. SI vous n'avez à traiter que des messages, vous pouvez choisir l'algorithme qui vous convient avec l'option METHODE, avant de procéder au codage ou au décodage, et fixer éventuellement ces paramètres en répondant «O» à «Sauvegarde des nouveaux paramètres ?». Il suffira alors d'indiquer au programme les fichiers en entrée et en sortie, et le mot-clé ou le code numérique éventuel. TRANSPOSITION : le nombre de lignes est calculé par le programme, en fonction du nombre de colonnes et de la longueur de chaque chaîne du message. C'est une sécurité, car un message peut comporter plusieurs chaînes ASCII de longueur différente, et pour un même nombre de colonnes (choisi au départ), le nombre de lignes de la matrice pourra donc être différent d'une chaîne à l'autre. Pour connaître ie nombre de lignes de chaque chaîne, il faut diviser la longueur de la chaîne (sans espaces) par le nombre de colonnes prévu, en arrondissant le résultat à l'entier supérieur s'il y a des décimales. Si vous décidez de déplacer les lignes, alors toutes les chaînes du message (s'if y en a plusieurs) devront avoir la même longueur après suppression des espaces. Cela vous paraît certainement compliqué, mais je n'y peux rien ; je vous avais d'ailleurs signalé le mois dernier que le codage par transposition sur matrices n'était vraiment commode qu'avec des messages sur une seule chaîne ASCII (vous avez droit à 255 caractères maxi). Enfin, si vous voulez déplacer à la fois les lignes et les colonnes, vous devrez avoir le même nombre de lignes et de colonnes (matrice carrée), et cela pour chaque chaîne. En fonction du type de déplacement (lignes, colonnes, ou lignes & colonnes), ce n'est qu'au moment du codage ou du décodage que le programme pourra vérifier si le code numérique fourni est cohérent avec le type choisi, pour chaque chaîne en cours de traitement, et vous signalera une erreur éventuelle. Il faudra donc vous assurer, au moment de la saisie du texte à coder, que la longueur de chaque chaîne est compatible avec les paramètres de l'algorithme sélectionné. N'oubliez pas que les espaces sont supprimés avant la mise en matrice. Suppression des espaces, insertion de lettres nulles : le programme vérifiera, au moment du traitement, si la longueur de la chaîne après expansion (addition d'espaces et de lettres nulles) ne risque pas de dépasser 255 caractères, et vous le signalera le cas échéant. SI vous ne faites que du décodage, le programme doit être réglé exactement comme pour le codage, sinon surprise I La taille des blocs doit ici être celle indiquée avant codage ; en décodage, le programme tient compte de l'addition éventuelle d'une lettre nulle à chaque bloc. Les commandes sont rappelées aux moments opportuns. Les entrées (nom de fichier en sortie, mot-clé ou code numérique) doivent être validées par ENTER et sont vérifiées par le programme. Chaque fois que vous pouvez annuler l'exécution d'une commande par ESC, le programme vous le signale. Pour examiner le catalogue, prenez l'option SAISIR TEXTE qui l'affiche, puis sortez en tapant seulement ENTER à vide au lieu d'entrer un nom de fichier (autre sortie de secours, signalée au moment des entrées). Le menu principal vous offre des facilités de mise à jour du catalogue : options SUPPRIMER et RENOMMER. Pour vérifier la longueur d'un message (comportant une ou plusieurs chaînes ASCII) avant codage par les méthodes 2 à 4, prenez l'option VISUALISER - A L'ECRAN et notez la longueur de chaque chaîne en retranchant les espaces. Si vous êtes allergique aux calculs, utilisez d'abord l'option DECRYPTER et la sous-option SUPPRESSION DES ESPACES, en plaçant le résultat dans un fichier temporaire (TEMP par exemple) que vous effacerez après usage ; puis visualisez TEMP et vous aurez, pour chaque chaîne, la longueur sans les espaces, c'est-à-dire le nombre exact de caractères à coder par ces méthodes. LE DECRYPTAGE Vous êtes devant un message codé inconnu. L'aspect du message (VISUALISER) et la fréauence des lettres (ANALYSE DU TEXTE dans DECRYPTER) vont vous permettre de faire des hypothèses sur la méthode de codage utilisée. Pour la marche à suivre, voir l'article précédent. Afin de vous laisser le maximum de marge de manœuvre, vous pouvez accéder, sous DECRYPTER, aux différents sous-programmes de manière indépendante — Suppression des lettres nulles. Pour la taille des blocs, indiquez la taille effective des blocs dans le message à décoder (et non la taille avant codage comme dans le réglage du programme). Indiquez aussi si les blocs sont séparés par des espaces : bien que cela ne soit pas prévu dans les 4 méthodes fournies dans le programme, il est parfaitement possible de modifier facilement ce dernier pour insérer des lettres nulles dans des blocs virtuels (non séparés par des espaces) d'une taille déterminée, à un emplacement déterminé. — Suppression des espaces éventuels. — Essai de décodage. Vous choisissez la méthode et ses paramètres, le fichier en entrée (résultant si nécessaire des 2 traitements précédents), le nom du fichier en sortie, et donnez le mot-clé ou le code si besoin est. Le traitement est visualisé à l'écran. S'il ne vous satisfait pas, vous pouvez, avec les mêmes fichiers en entrée et en sortie, recommencer l'opération en choisissant :
G. DUBUS, CPCINFOS n°26 |
| ![]() |
|