CRYPTOGRAPHIE

PAR ENCAPSULATION

DANS UN

NOMBRE ALEATOIRE

 C.E.N.A

Code secret !

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.

 

Je dis ce que j'en pense ....

Retour au plan du site !