Tout petit instant "histoire" :
Giovanni Battista Della Porta, physicien de la Renaissance, a inventé cet algo de substitution qui porte son nom en 1563. Il s'agit du premier système à "double-clé". Ce procédé perdura 3 siècles durant et était jugé robuste (pour l'époque). Beaucoup jugèrent Porta comme le père de la cryptographie "moderne" (est entendu par "moderne" l'ère pré-informatique).
Entrée en matière :
C'est un système polyalphabétique à multiples alphabets réversibles cryptés via une clé.
Cet algo utilise 11 alphabets (horizontaux) qui appartienent chacun à une paire de lettres qui se suivent (qui forme un second alphabet, verticalement). Les lettres des alphabets horizontaux sont "interchangeables" ET "différents" ; c'est ce qui complexifiait la chose.
Voici la table :
Petite note : à la base, vu que la langue était le latin, il n'avait fait que 11 alphabets, soit 11 groupes de 22 lettres, comme vous pouvez le voir :
Bon, nous, nous sommes au XXIe siècle, donc nous allons utiliser 13 alphabets de 26 lettres
Soit, ceci :
Comme vous pouvez le constater, à gauche se situe l'alphabet vertical, découpé toutes les 2 lettres, formant donc 13 blocs de 2 lettres qui se suivent. Face à chacun de ces "blocs" se trouve un alphabet horizontal (la première ligne est identique pour tous, mais pas la seconde, notez bien cela !) sur deux niveaux (coupé à la 13e lettre ; à la 11e à son époque, donc).
L'alphabet vertical est l'alphabet qui servira de clé.
L'alphabet horizontal (en fonction du vertical, donc de la clé) sera donc à la fois le plaintext et le cyphertext.
Exemple :
welcome to all hackademicians <-- plain
dellaporta <-- key
Nous commençons donc par la lettre "w" à chiffrer avec la lettre "d" de la clé.
"d" est donc situé dans l'alphabet vertical : il est situé au deuxième bloc (la seconde paire). On recherche donc dans la table de correspondance, en face, dans l'alphabet horizontal, la lettre "w". Une fois repérée, on prend la lettre qui est en face (alphabet "réversible", je répète ). Ainsi donc, la lettre chiffrée est : "k".
Bien entendu, comme c'est pratiquement toujours le cas, la clé se répète (ce n'est pas un procédé autoclave ; cf tuto autoclave)
Soit :
welcometoallhackademicians <-- plain
dellaportadellaportadellap <-- key
On continue le processus jusqu'à la fin, ce qui nous donne :
kptxbsxbknxwpvpqtvvzunqvam <-- cypher
Soit :
welcometoallhackademicians <-- plain
dellaportadellaportadellap <-- key
kptxbsxbknxwpvpqtvvzunqvam <-- cypher
Bien, maintenant que vous avez saisi l'algo, je vais complexifier un peu l'algo de base en le modifiant légèrement.
Je propose trois modes différents :
- classique
- personal
- random
Le "classique", c'est celui que je vous ai décrit.
Le "personnel" ne décalera seulement que la seconde ligne selon un ordre d'incrémentation géométrique (1=n='o', 2=n='p'… 12=n='z').
Le mode "aléatoire" (random) distribuera 26 alphabets différents, totalement aléatoirement et ce sur les DEUX lignes.
Il ne faut pas qu'il y ait deux fois le même alphabet.
Cela est très complexe à casser, donc c'est un avatange pour le chiffreur (mais un désavantage pour le déchiffreur).
Comme d'habitude, plus le texte est long, plus l'avantage va au déchiffreur, et plus la clé est longue, plus l'avantage va au chiffreur. La limite de longueur de la clé est celle du texte, donc, en admettant que le chiffreur rentre une clé aussi longue que le texte, et qu'en plus celui-ci fasse 5000 caractères, ça devient coton^^ Ca laisse place à des millions de possibilités.
Note : Lorsque Porta exposa son algorithme, il recommandait de mettre des alphabets purement aléatoire.
Giovanni Battista Della Porta, physicien de la Renaissance, a inventé cet algo de substitution qui porte son nom en 1563. Il s'agit du premier système à "double-clé". Ce procédé perdura 3 siècles durant et était jugé robuste (pour l'époque). Beaucoup jugèrent Porta comme le père de la cryptographie "moderne" (est entendu par "moderne" l'ère pré-informatique).
Entrée en matière :
C'est un système polyalphabétique à multiples alphabets réversibles cryptés via une clé.
Cet algo utilise 11 alphabets (horizontaux) qui appartienent chacun à une paire de lettres qui se suivent (qui forme un second alphabet, verticalement). Les lettres des alphabets horizontaux sont "interchangeables" ET "différents" ; c'est ce qui complexifiait la chose.
Voici la table :
Petite note : à la base, vu que la langue était le latin, il n'avait fait que 11 alphabets, soit 11 groupes de 22 lettres, comme vous pouvez le voir :
Bon, nous, nous sommes au XXIe siècle, donc nous allons utiliser 13 alphabets de 26 lettres
Soit, ceci :
Comme vous pouvez le constater, à gauche se situe l'alphabet vertical, découpé toutes les 2 lettres, formant donc 13 blocs de 2 lettres qui se suivent. Face à chacun de ces "blocs" se trouve un alphabet horizontal (la première ligne est identique pour tous, mais pas la seconde, notez bien cela !) sur deux niveaux (coupé à la 13e lettre ; à la 11e à son époque, donc).
L'alphabet vertical est l'alphabet qui servira de clé.
L'alphabet horizontal (en fonction du vertical, donc de la clé) sera donc à la fois le plaintext et le cyphertext.
Exemple :
welcome to all hackademicians <-- plain
dellaporta <-- key
Nous commençons donc par la lettre "w" à chiffrer avec la lettre "d" de la clé.
"d" est donc situé dans l'alphabet vertical : il est situé au deuxième bloc (la seconde paire). On recherche donc dans la table de correspondance, en face, dans l'alphabet horizontal, la lettre "w". Une fois repérée, on prend la lettre qui est en face (alphabet "réversible", je répète ). Ainsi donc, la lettre chiffrée est : "k".
Bien entendu, comme c'est pratiquement toujours le cas, la clé se répète (ce n'est pas un procédé autoclave ; cf tuto autoclave)
Soit :
welcometoallhackademicians <-- plain
dellaportadellaportadellap <-- key
On continue le processus jusqu'à la fin, ce qui nous donne :
kptxbsxbknxwpvpqtvvzunqvam <-- cypher
Soit :
welcometoallhackademicians <-- plain
dellaportadellaportadellap <-- key
kptxbsxbknxwpvpqtvvzunqvam <-- cypher
Bien, maintenant que vous avez saisi l'algo, je vais complexifier un peu l'algo de base en le modifiant légèrement.
Je propose trois modes différents :
- classique
- personal
- random
Le "classique", c'est celui que je vous ai décrit.
Le "personnel" ne décalera seulement que la seconde ligne selon un ordre d'incrémentation géométrique (1=n='o', 2=n='p'… 12=n='z').
Code:
1 = opqrstuvwxyzn 2 = pqrstuvwxyzno 13 = znopqrstuvwxy
Code:
AB = ocdefghqjklwr nmpbastuvikyz BC = bzdsefghiajkl oqrntucmvpwky
Cela est très complexe à casser, donc c'est un avatange pour le chiffreur (mais un désavantage pour le déchiffreur).
Comme d'habitude, plus le texte est long, plus l'avantage va au déchiffreur, et plus la clé est longue, plus l'avantage va au chiffreur. La limite de longueur de la clé est celle du texte, donc, en admettant que le chiffreur rentre une clé aussi longue que le texte, et qu'en plus celui-ci fasse 5000 caractères, ça devient coton^^ Ca laisse place à des millions de possibilités.
Note : Lorsque Porta exposa son algorithme, il recommandait de mettre des alphabets purement aléatoire.
Commentaire