CRYPTOGRAPHIE
PAR ENCAPSULATION
DANS UN
NOMBRE ALEATOIRE
C.E.N.A
Auteur: Philippe Lheureux
L'idée de base est de produire un chiffre insensible à toute autre attaque que celle à la force brute avec comme caractéristique que le même texte chiffré x fois avec la même clé produise toujours un résultat chiffré différent.
Principe de fonctionnement.
1 - Création d'une première partie de clé
L'intervalle général de travail à prendre en compte se situe entre 100000 et 999999 compris. Ce qui fait 999999-100000=899999 possibilités d'utiliser un chiffre compris entre 100000 et 999999 pour coder l'ensemble des 256 caractères ASCII.
La moyenne par caractères ASCII est donc de 899999/256 =3515.62 possibilités de chiffrage différents.
Le premier but à atteindre est la création d'un tableau à deux dimensions faisant coïncider chacun des caractères ASCII avec un intervalle bien précis.
Afin de compliquer la cryptanalyse, les intervalles doivent être variables et les cases du tableau des caractères ASCII remplis avec un ordre ALEATOIRE.
La variabilité d'un intervalle est de 515 numéros.
Remplir le tableau de 0 a 255 avec un algorithme fixant la valeur BORN_MAX de chaque intervalle.
La valeur de départ étant : 100000
BORN_MAX(0)= 100000 + 3000 + (un chiffre pris au hasard entre 0 et 515)
BORN_MAX(1)= BORN_MAX(0) + 3000 + (un chiffre pris au hasard entre 0 et 515)
Et ainsi de suite
Jusqu'à BORN_MAX(254)
La 256 eme case du tableau (qui va de l'indice 0 à l'indice 255) contiendra donc plus de 3515 possibilités de chiffrage.
BORN_MAX(255)= forcement 999999
En ce qui concerne la répartition des caractères ASCII affectés à chaque intervalle, il faut aussi que les cases soient remplies au hasard
Exemple :
CARACTERE(0)=195 (195 est le code du caractère ASCII )
CARACTERE(1)=62
CARACTERE(2)=69
CARACTERE(3)=47
Et ainsi de suite jusqu'à ce que les 256 cases soient remplies avec des valeurs différentes.
Pour remplir le tableau de manière aléatoire, utilisez la méthode qui vous semblera la plus appropriée.
En général on fait deux boucles, une avance dans l'indice du tableau et l'autre sélectionne aléatoirement un numéro qui n'a pas déjà été pris précédemment.
Dans notre exemple, le caractère ASCII 195 pourra être écrit de BORN_MAX(0) -100000 manières différentes.
Une fois le tableau crée, n'importe quel caractère ASCII pourra être chiffré par une des valeurs prise au hasard entre les BORN_MAX .
Admettons que le caractère B corresponde à un indice du tableau situé entre 122000 et 125500, tous les chiffres compris entre 122000 et 125499 pourront servir pour le chiffrer.
2- Brouillage du numéro extrait de l'intervalle.
Premier problème à résoudre, le système aléatoire qui prend le chiffre dans l'intervalle renvoi un nombre qui au final à ses trois premiers chiffres qui ne varient que très peu ou pas du tout.
On peut considérer que sur un nombre de 6 chiffres
123456 ( nombre fictif extrait de l'intervalle )
les trois premiers chiffres en bleu ne varient peu ou pas.
On sait aussi que les trois derniers chiffres en rouge ont peu de chance de ne pas varier à chaque choix.
il suffit donc dans un premier temps de mélanger ce qui varie beaucoup avec ce qui ne varie pas .
123456
devient
615243
Puis d'appliquer la dessus une table de substitution la dessus du genre
00=...
01=...
43=77
52=28
61=01
98=...
99=...
61 52 43 va devenir
012877
mais comme on sait que seuls les chiffres rouges varient , chaque paire de nombre ne peut prendre que 10 valeurs différentes au lieu de 100 , il faut donc
mélanger (ca fait partie des clés internes avec une cinquantaine de possibilité de mélange différent , ainsi il faut une cinquantaine de caractères chiffrés pour retomber sur le même brouillage)
012877 devient par exemple 710782
Il faut ensuite remettre un aléatoire ( en rouge ) à coté de chaque chiffre
710782
devient
874170372892
et appliquer maintenant une deuxième table de substitution par paires différente de la première
00=...
28=09
37=12
41=00
70=37
87=21
92=55
99=...
et
87 41 70 37 28 92
devient
21 00 37 12 09 55 et maintenant on sait que tout bouge forcement de 00 à 99 à chaque lettre chiffrée.
on obtient
210037120955 soit 12 chiffres et c'est la qu'on peut incorporer 4 chiffres aléatoire ( en rouge ) suivant une clé ( nombre à définir )
pour obtenir un nombre a 16 chiffres
9210703716209505 par exemple pour la première clé
2555488986200412 pour la deuxième clé ..
l'incorporation de 4 chiffres aléatoires a des endroits différents à chaque clé ne va plus permettre de repérer les paires de chiffres a reconstruire .
Un dernier tableau de substitution contenant 100 caractères imprimables est indispensable. Il va servir à substituer les paires de chiffres du masque intermédiaire avec un seul caractère.
00=/
01=G
02=a
03=1
04=N
05=p
06=^
07=+
10=?
16=u
20=D
...
37=*
70=M
92=)
95=z
99=@
92 10 70 37 16 20 95 05 devient )?M*uDzp
Un caractère clair correspond au final à 8 caractères chiffrés.