OVH Cloud OVH Cloud

Simple algo...

62 réponses
Avatar
Raymond H.
(...suite)

Bonjour,

Je vais vous donner ici un petit problème qu'on retrouve seulement en
partie dans AllCrypter.

Si vous ne trouvez pas que cette façon de faire soit passablement sûr, alors
je vous demanderais de nous détailler au moins un petit exemple pour le
démontrer. Donc, je suis prêt à prendre vos conseils si vous pensez que ce
petit exemple simplifié ne vaut rien.



Voici l'exemple (ici je ne fais que des additions et ne fais pas de Xor
ni de Modulo comme il y a dans la version 3 dont je veux mettre les calculs
sur Internet après sa sortie):



Clef en clair: 12 ( en ascii = 49 50)

Texte à crypter: 345 (en ascii = 51 52 53)

J'aligne donc pour plus de clarté:

12 = clef

345 = texte à chiffrer

ou en ascii:

49-50

51-52-53



On crypte le caractère 3 (ascii 51) en faisant 49+51+52=152

On crypte le caractère 4 (ascii 52) en faisant 50+52+53=155

On crypte le caractère 5 (ascii 53) en faisant 49+53+49=151

Le texte crypté (en ascii pour mieux voir) donnerait 152 155 151





Et si on a:

155 = clef

251= texte à chiffrer

ou en ascii:

49-53-53

50-53-49



On crypte le 1er caractère (ascii 50) en faisant 49+50+53=152

On crypte le 2e caractère (ascii 53) en faisant 53+53+49=155

On crypte le 3e caractère (ascii 49) en faisant 53+49+49=151

Le texte crypté (en ascii pour mieux voir) serait identique au précédent 152
155 151





La question est: "Est-il possible de décrypter ces trois caractères
(ascii= 152-155-151) avec ce simple petit algorithme sans connaître la clef
?"

Dans cette seule condition, je pense que 'non' et je pense que c'est
même impossible. Et pourtant un enfant de 10 ans pourrait crypter de cette
façon.

Car en faisant l'inverse, il faudrait deviner le premier caractère de la
clef et deviner le dernier caractère non crypté du chiffré. Alors comment
pourrait-on trouver l'avant dernier caractère si on n'a pas trouvé le
dernier caractère? Et comment trouver le premier caractère si on n'a pas
trouvé le 2e caractère? Il vous serait peut-être plus difficile de
déchiffrer le cryptogramme de cette façon que d'essayer toutes les clefs
possibles à l'endroit où on tape la clef dans le logiciel.





Certaines personnes n'additionnent que chaque caractère de la clef avec
le caractère actuel (non crypté) du texte à crypter. Cette façon de faire
ne donne rien puisqu'en cryptant des caractères NUL (c'est à dire, ascii
zéro) on lira très clairement la clef qui se répète dans le chiffré.

Les caractères zéro peuvent se trouver dans un fichier '.mov' ou '.jpg'
par exemple. Après avoir pris connaissance de la clef dans le chiffré il
suffirait alors d'écrire cette clef pour décrypter le tout. Car ceci
donnerait:

Clef en clair: 12 (en ascii = 49 50)

Texte à crypter: (en ascii= 0 0 0)



En cryptant le caractère Nul (ascii 0) on fait 49+0=49

En cryptant le caractère Nul (ascii 0) on fait 50+0=50

En cryptant le caractère Nul (ascii 0) on fait 49+0=49

Le texte crypté donnerait la clef elle-même en clair = (en ascii) 49 50 49


J'attends vos suggestions.

r.h.

10 réponses

3 4 5 6 7
Avatar
Christophe HENRY

Et tout en essayant, dans la mesure du possible, d'utiliser des
calculs
simples pour que plus de gens puissent suivre et participer. Je dirais
peut-être à la limite utiliser l'algèbre du niveau secondaire.


C'est une erreur. La cryptologie est une science nécessitant des
mathématique d'un certain niveau. Rien que le recours à l'algèbre
linéaire permet d'aller très vite dans les calculs et les théories.

On aura beau édulcorer cela, les algorithmes et la logique sont d'un
niveau supérieur au secondaire. Je te réponds en simplifiant, quite à
sacrifier la rigueur, afin que je puisse être compris. Néamoins, ma
démarche s'appuie sur un autre niveau que le secondaire.
Alors que tu écris 20 lignes, j'en écris une seule.


Bien entendu la chaîne généré ne doit pas
être plus courte que la clef elle-même puisqu'il y aurait plus d'une
clef qui donnerait le même résultat. Je pense qu'il pourrait être
possible que la même chaîne ou la même sous-clef générée ne puisse
être générée par une clef différente et que de ce fait aucune
collision ne soit possible dans ce sens. Faudrait que je teste cela en
programmation dans l'exemple d'une boucle qui génère toutes les clefs
possibles en 32 bits par exemple.


Ce que tu demandes est une fonction injective : de deux éléments
distincts de départ, tu arrives à deux éléments distincts à
l'arrivée. Cela nécessite un espace d'arrivé au moins aussi "grand"
(cardinal) que l'espace de départ.
Ce n'est pas non plus indispensable à la robustesse de l'algorithme en
lui-même.


C1 + C2 = M1 + K + M2 + K
Donc : C1 + C2 = M1 + M2


Je pense que ce dernier exemple (C1 + C2 = M1 + M2) fausserait le
résultat, dans le sens que je ne crois pas que l'algèbre permette
l'annulation de K ici:
1- puisque la valeur de K n'est pas connue.


Soient A, B et C trois variables dont la valeur est connue.
Soit K une variable inconnue.

D'un côté : A+B+K
De l'autre : C+K

Si on soustrait l'un à l'autre : A+B+K - C+K
On a : A+B-C.

K n'est pas connu et a pu être annulé.


2- puisque sur un même côté
du signe '=' 'il faudrait que l'une des deux variables K soit négative et
l'autre positive


Pas au sens de l'arithmétique modulaire (aux spécialistes de rectifier
si nécessaire). Nous alons être en "modulo 10", histoire de simplifier.

5 + 2 = 7
1 + 1 = 2
5 + 7 = 2

D'où vient le "2" du "5+7" ? C'est que 5+7 donne 12, auquel on retire 10
pour rester dans l'intervale [0;10[

Et là, ça se corse :
7 + 7 = 4
4 + 3 = 7
Faire "+3" est le contraire de faire "+7".


3- puisqu'il faudrait qu'il y ait de chaque côté du
signe '=' un pôle identique de K, soit positif ou soit négatif.


Le XOR, bit à bit :
0+0=0
0+1=1
1+0=1
1+1=0
Les trois premières lignes vont d'elles-même. La quatrième ? 1+1 (un
plus un font deux, noté 10 en binaire) dont on ne garde que le chiffre
des unités, soit 0. Il s'agit d'une addition en complément à 1.

En regardant bien, tu vois qu'un xor appliqué deux fois s'annule :
Soit a un bit (valant 0 ou 1), le xor est noté "+".
(a+1)+1=a
(a+0)+0=a

La double application d'un xor s'annule. Voir "rot13" pour un bon exemple.


Par contre on peut trouver la valeur de K en connaissant les valeurs de
M1, M2, C1 et C2 (donc avec une même clef chiffrant deux clairs
différents).


C'est même plus rapide. On peut connaître K rien qu'avec un seul M et un
seul C.

C1 = M1 + K (exemple: 7 = 4 + 3 )
C2 = M2 + K (exemple: 11 = 8 + 3 )


K = C1 - M1, ou bien, K = C2 - M2


C'est un peu long à approcher, mais la clé peut être annulée par ce
type de procédé. Donc, on connaît une donnée supplémentaire "M1 +
M2", en très gros,
M1 chiffré avec M2.


Ici, je ne suis pas certain du raisonnement "M1 chiffré avec M2". Ne
voulez-vous pas dire "M1 et M2 chiffrés ensemble"?


M1 chiffré avec M2, sans remord. Je ne suis pas capable de faire le
développement complet faute de temps. Tu gagneras à étudier le xor.
Juste le xor, c'est déjà 'achement bien.


D'une manière générale,


Auriez-vous un petit exemple d'exception qui pourrait s'ajouter au 'simple
algo'?


Aucun. L'utilisation d'une clé de taille retreinte (DSA, RSA, etc...)
expose systématiquement l'algorithme à la force brute avec condition
d'arrêt. C'est juste qu'il faille un temps considérable pour ce faire.


comme xor, la réutilisation de la clé ou sa longueur inférieure à
celle du message constitue une faiblesse *grave*. Dans ces conditions,
la cryptanalyse n'est qu'une affaire de temps très court s'il y a
beaucoup de chiffrés d'interceptés, tous conçus avec la même clé.


Tout en connaissent l'algo, à moins d'avoir des répétitions comme les
entêtes.


Non. Les algorithmes utilisés (avec Gnupg, par exemple) sont tous connus,
les mathématiques sous-jacentes maîtrisées, les implémentations sont
libres. En particulier, le code source est disponible à tous.

Et pourtant, le cassage de ces algorithmes n'est pas pour aujourd'hui.


...
5 - 5 = 0
5 - 6 = 9 ( 5-6=-1, (-1)+10=9 )
5 - 7 = 8
5 - 8 = 7
5 - 9 = 6

La quelle est la bonne ? Chacun des clairs proposés est équiprobable.
En fait, soient C et M un chiffré qu'on connait et M un mot choisi. Il
sera toujour possible de trouver un clé K telle que : C = M + K.


Je ne vois pas très bien comment il est possible dans cet exemple de
trouver le clair sans la clef.


C'est bien ce que je voulais démontrer. Sans la clé, c'est perdu. C'est
le fameux masque jetable, otp, vigenère, xor.


...
Je vais maintenant monter d'une étape et ajouter une seule valeur à
calculer dans la clef afin d'interdire de trouver la clef par une attaque
à clair connue.


Peine perdue.


Dans cette option on suppose longueur de la clef est
toujours à la longueur du clair afin d'éviter les répétitions.
J'essaie de faire le plus simple possible

On a:
49 50 51 = clef
51 52 53 = texte clair
202 206 204 = chiffré

On crypte ainsi:
k1 + k2 + m1 + m2 = c1 = 202
k2 + k3 + m2 + m3 = c2 = 206
k3 + k1(qui prend la place de 'k4' qui n'existe pas) + m3 + k1(qui prend
la place du caractère 'm4' qui n'existe pas) = c3 = 204


je trouve que c3 = 202.
c3Q+49+53+49 2

En lisant le post suivant (tu vas trop vite ;-), je vois que l'erreur est
trouvée...


Ici, vous est-il possible de faire une attaque à clair pour trouver la
clef manquante?
? ? ? = clef
51 52 53 = texte clair
249 281 216 = chiffré



-->casse([51;52;53],[249;281;216])
ans
! 44.333333 !
! 101.66667 !
! 74.333333 !

Un peu dur à stocker :-o Quand j'utilise ce résultat pour chiffrer
[51;52;53], je tombe bien sur [249;281;216].

Au final, je n'ai changé qu'un seul paramètre de ma fonction de
déchiffrement. Aucune efficacité supplémentaire, donc.

--
Christophe HENRY
(sans lkm)
GnuPG : 3922239E60036EC86BF7268A877C52AC 4883C02A


Avatar
Christophe HENRY

? ? ? = clef
51 52 53 = texte clair
249 281 206 = chiffré


Je note que le 216 a été corrigé en 206 :-)

-->casse([51;52;53],[249;281;206])
ans
! 41. !
! 105. !
! 71. !

--
Christophe HENRY
(sans lkm)
GnuPG : 3922239E60036EC86BF7268A877C52AC 4883C02A

Avatar
Raymond H.
"Christophe HENRY" a écrit dans le
message de news: crcfif$1kjc$

Et tout en essayant, dans la mesure du possible, d'utiliser des
calculs
simples pour que plus de gens puissent suivre et participer. Je dirais
peut-être à la limite utiliser l'algèbre du niveau secondaire.


C'est une erreur. La cryptologie est une science nécessitant des
mathématique d'un certain niveau.


Je pense que les calculs de base et l'algèbre sont suffisants pour la
cryptologie puisqu'ils sont la base pour des calculs de niveaux plus élevés.
Avec des calculs plus simples ont a plus d'opérations que des calculs plus
compliqués mais souvent nécessaire pour une meilleure compréhension. C'est
mon point de vue :)

Rien que le recours à l'algèbre
linéaire permet d'aller très vite dans les calculs et les théories.

On aura beau édulcorer cela, les algorithmes et la logique sont d'un
niveau supérieur au secondaire. Je te réponds en simplifiant, quite à
sacrifier la rigueur, afin que je puisse être compris. Néamoins, ma
démarche s'appuie sur un autre niveau que le secondaire.
Alors que tu écris 20 lignes, j'en écris une seule.



En programmation je peu le faire en une ligne aussi. Peut-être 20
lignes pour l'expliquer en détails d'une façon simple, car c'est la méthode
que je préfère pour expliquer étape par étape l'algo, sinon c'est plus
difficile à comprendre avec une seule ligne? Et via le logiciel Scilab que
vous utilisez pour calculer ça suppose des données à entrer qui ont rapport
avec sa structure de calcul à effectuer.

Est-ce que ce logiciel est gros à installer? Installe-t-il beaucoup de
fichiers dans WindowsXP ?



Bien entendu la chaîne généré ne doit pas
être plus courte que la clef elle-même puisqu'il y aurait plus d'une
clef qui donnerait le même résultat. Je pense qu'il pourrait être
possible que la même chaîne ou la même sous-clef générée ne puisse
être générée par une clef différente et que de ce fait aucune
collision ne soit possible dans ce sens. Faudrait que je teste cela en
programmation dans l'exemple d'une boucle qui génère toutes les clefs
possibles en 32 bits par exemple.


Ce que tu demandes est une fonction injective : de deux éléments
distincts de départ, tu arrives à deux éléments distincts à
l'arrivée. Cela nécessite un espace d'arrivé au moins aussi "grand"
(cardinal) que l'espace de départ.
Ce n'est pas non plus indispensable à la robustesse de l'algorithme en
lui-même.


C1 + C2 = M1 + K + M2 + K
Donc : C1 + C2 = M1 + M2


Je pense que ce dernier exemple (C1 + C2 = M1 + M2) fausserait le
résultat, dans le sens que je ne crois pas que l'algèbre permette
l'annulation de K ici:
1- puisque la valeur de K n'est pas connue.


Soient A, B et C trois variables dont la valeur est connue.
Soit K une variable inconnue.

D'un côté : A+B+K
De l'autre : C+K

Si on soustrait l'un à l'autre : A+B+K - C+K
On a : A+B-C.

K n'est pas connu et a pu être annulé.



Je suis d'accord, car je parlais de l'exemple ci-haut:

C1 + C2 = M1 + K + M2 + K

La valeur de K n'est pas connue, donc on ne pourrait pas l'annuler ici.



2- puisque sur un même côté
du signe '=' 'il faudrait que l'une des deux variables K soit négative et
l'autre positive


Pas au sens de l'arithmétique modulaire (aux spécialistes de rectifier
si nécessaire). Nous alons être en "modulo 10", histoire de simplifier.

5 + 2 = 7
1 + 1 = 2
5 + 7 = 2

D'où vient le "2" du "5+7" ? C'est que 5+7 donne 12, auquel on retire 10
pour rester dans l'intervale [0;10[

Et là, ça se corse :
7 + 7 = 4
4 + 3 = 7
Faire "+3" est le contraire de faire "+7".



D'accord, mais ici aussi je parlais de l'exemple:
C1 + C2 = M1 + K + M2 + K
Il faudrait avoir ceci pour que ça fonctionne:
C1 + C2 = M1 + K + M2 - K
Donc, le positif et le négatif d'une même variable sur un même côté du signe
'=' pour pouvoir les annuler pour donner C1 + C2 = M1 + M2 .

3- puisqu'il faudrait qu'il y ait de chaque côté du
signe '=' un pôle identique de K, soit positif ou soit négatif.


Le XOR, bit à bit :
0+0=0
0+1=1
1+0=1
1+1=0
Les trois premières lignes vont d'elles-même. La quatrième ? 1+1 (un
plus un font deux, noté 10 en binaire) dont on ne garde que le chiffre
des unités, soit 0. Il s'agit d'une addition en complément à 1.

En regardant bien, tu vois qu'un xor appliqué deux fois s'annule :
Soit a un bit (valant 0 ou 1), le xor est noté "+".
(a+1)+1=a
(a+0)+0=a

La double application d'un xor s'annule. Voir "rot13" pour un bon exemple.



Ici je parlais toujours de l'exemple ci-haut et en algèbre:
C1 + C2 = M1 + K + M2 + K
Il faudrait avoir ceci pour que ça fonctionne:
C1 + C2 + K = M1 + K + M2
Donc, soit un positif ou soit un négatif de chaque côté du signe '=' pour
donner C1 + C2 = M1 + M2 .

Par contre on peut trouver la valeur de K en connaissant les valeurs de
M1, M2, C1 et C2 (donc avec une même clef chiffrant deux clairs
différents).


C'est même plus rapide. On peut connaître K rien qu'avec un seul M et un
seul C.


Évidemment :-) Selon les deux lignes que j'ai présentées indépendamment
l'une de l'autre juste ci-dessous.


C1 = M1 + K (exemple: 7 = 4 + 3 )
C2 = M2 + K (exemple: 11 = 8 + 3 )


K = C1 - M1, ou bien, K = C2 - M2


Oui.


C'est un peu long à approcher, mais la clé peut être annulée par ce
type de procédé. Donc, on connaît une donnée supplémentaire "M1 +
M2", en très gros,
M1 chiffré avec M2.


Ici, je ne suis pas certain du raisonnement "M1 chiffré avec M2". Ne
voulez-vous pas dire "M1 et M2 chiffrés ensemble"?


M1 chiffré avec M2, sans remord. Je ne suis pas capable de faire le
développement complet faute de temps. Tu gagneras à étudier le xor.


Je connais le XOR. Je me demandais juste le sens du mot 'avec' dans "M1
chiffré avec M2".

Juste le xor, c'est déjà 'achement bien.


D'une manière générale,


Auriez-vous un petit exemple d'exception qui pourrait s'ajouter au
'simple
algo'?


Aucun. L'utilisation d'une clé de taille retreinte (DSA, RSA, etc...)
expose systématiquement l'algorithme à la force brute avec condition
d'arrêt. C'est juste qu'il faille un temps considérable pour ce faire.

Ok.


comme xor, la réutilisation de la clé ou sa longueur inférieure à
celle du message constitue une faiblesse *grave*. Dans ces conditions,
la cryptanalyse n'est qu'une affaire de temps très court s'il y a
beaucoup de chiffrés d'interceptés, tous conçus avec la même clé.


Tout en connaissent l'algo, à moins d'avoir des répétitions comme les
entêtes.


Non. Les algorithmes utilisés (avec Gnupg, par exemple) sont tous connus,
les mathématiques sous-jacentes maîtrisées, les implémentations sont
libres. En particulier, le code source est disponible à tous.

Et pourtant, le cassage de ces algorithmes n'est pas pour aujourd'hui.


...
5 - 5 = 0
5 - 6 = 9 ( 5-6=-1, (-1)+10=9 )
5 - 7 = 8
5 - 8 = 7
5 - 9 = 6

La quelle est la bonne ? Chacun des clairs proposés est équiprobable.
En fait, soient C et M un chiffré qu'on connait et M un mot choisi. Il
sera toujour possible de trouver un clé K telle que : C = M + K.


Je ne vois pas très bien comment il est possible dans cet exemple de
trouver le clair sans la clef.


C'est bien ce que je voulais démontrer. Sans la clé, c'est perdu. C'est
le fameux masque jetable, otp, vigenère, xor.


Ok. J'avais compris autrement avec votre phrase "Il sera toujours possible
de trouver une clé K telle que : C = M + K". Puisque si on peut trouver K
avec

C = M + K, on peut aussi trouver M.



...
Je vais maintenant monter d'une étape et ajouter une seule valeur à
calculer dans la clef afin d'interdire de trouver la clef par une attaque
à clair connue.


Peine perdue.


Parfait. C'était une 'tentative' exprimée avec les mots " AFIN D' ".
Mais, j'y avais pensé que ça pourrait bien être possible. J'aurais aimé
avoir la solution par un exemple en algèbre mais ce n'est pas grave. Je
vais essayer de trouver le calcul algébrique et si je le trouve, je veux
l'ajouter dans mon prochain message avec une nouvelle tentative 'POUR'
empêcher de trouver la clef.

C'est une bonne chose le logiciel Scilab que vous utilisez. Ça sauve du
temps et ça simplifie l'opération :-)



Dans cette option on suppose longueur de la clef est
toujours à la longueur du clair afin d'éviter les répétitions.
J'essaie de faire le plus simple possible

On a:
49 50 51 = clef
51 52 53 = texte clair
202 206 204 = chiffré

On crypte ainsi:
k1 + k2 + m1 + m2 = c1 = 202
k2 + k3 + m2 + m3 = c2 = 206
k3 + k1(qui prend la place de 'k4' qui n'existe pas) + m3 + k1(qui prend
la place du caractère 'm4' qui n'existe pas) = c3 = 204


je trouve que c3 = 202.
c3Q+49+53+49 2

En lisant le post suivant (tu vas trop vite ;-), je vois que l'erreur est
trouvée...
:-)



Ici, vous est-il possible de faire une attaque à clair pour trouver la
clef manquante?
? ? ? = clef
51 52 53 = texte clair
249 281 216 = chiffré



-->casse([51;52;53],[249;281;216])
ans >
! 44.333333 !
! 101.66667 !
! 74.333333 !

Un peu dur à stocker :-o Quand j'utilise ce résultat pour chiffrer
[51;52;53], je tombe bien sur [249;281;216].

Au final, je n'ai changé qu'un seul paramètre de ma fonction de
déchiffrement. Aucune efficacité supplémentaire, donc.

C'est assez précis comme logiciel! :-)

Bonne soirée.
r.h.



Avatar
Raymond H.
"Christophe HENRY" a écrit dans le
message de news: crcfme$1kjc$

? ? ? = clef
51 52 53 = texte clair
249 281 206 = chiffré


Je note que le 216 a été corrigé en 206 :-)

-->casse([51;52;53],[249;281;206])
ans >
! 41. !
! 105. !
! 71. !



C'est exact :-)

Je me doutais bien que ça serait possible. Je vais essayer de trouver la
solution du problème ci-avant par un exemple en algèbre pour l'ajouter dans
mon prochain message avec peut-être une nouvelle tentative 'POUR' empêcher
de trouver la clef. Si quelqu'un a une petite idée via un exemple...

Cordialement

r.h.


Avatar
Raymond H.
"Christophe HENRY" a écrit dans le
message de news: crcc67$1j49$

Le déchiffrement est défini par :
...
m1 = c1 - c2 + c3 - 2*k1 + k2 - k3


ici que signifie le '-2' ? Car en algèbre ça se définirait ainsi:
m1 = (c1 - c2 + c3 ) - (2*k1) + ( k2 - k3) et de cette façon le résultat
ne correspond pas.



J'ai revérifié mes calculs, ça a l'air pourtant bon. Tu interprètes
bien le sens de la multiplication. les m1, m2 et autres c2 et c3 sont des
nombres (des scalaires, par oppositions aux matrices) qui se multiplient
bien entre eux.
Les M et C sont des vecteurs.

Voici le détail d'un calcul avec M chiffré en C avec la clé K :
C=[8;47;145]
K=[1;2;99]
m1 = c1-c2 +c3 -2*k1+k2-k3
= 8 -47 +145 -2*1 +2 -99
= 7

Au final on/je trouve bien que M=[7;0;45]

Avec:

1 2 99 = K
7 0 45 = M
on a bien:
8 47 145 = C
Donc:
m1 = c1-c2 +c3 -(2*k1)+k2-k3
m1 = 8 - 47 + 145 - (2*1 ) + 2 - 99
m1 = 106 - (2) - 97
m1 = 7

Votre calcul est donc bon. Peut-être la fatigue (car je fais ça tard le
soir) ou le fait d'avoir mélangé C, K ou M. Mille excuses :-)
a+
r.h.



Avatar
Erwann ABALEA
Bonjour,

On Tue, 4 Jan 2005, Raymond H. wrote:

Je suis d'accord, car je parlais de l'exemple ci-haut:

C1 + C2 = M1 + K + M2 + K

La valeur de K n'est pas connue, donc on ne pourrait pas l'annuler ici.


Tu dis plus loin que tu connais le XOR, mais tu ne parviens pas à passer
de:
C1 + C2 = M1 + K + M2 + K
à
C1 + C2 = M1 + M2

Fais un effort. Ici, '+' désigne l'opération XOR, et quel que soit X,
X + X = 0. C'est plus clair?

--
Erwann ABALEA - RSA PGP Key ID: 0x2D0EABD5
-----
FB> Ollivier, BOUM?
Fait.
-+- Roberto in GNU : Boum, quand notre Kontrol fait Boum -+-

Avatar
Christophe HENRY

C'est une erreur. La cryptologie est une science nécessitant des
mathématique d'un certain niveau.


Je pense que les calculs de base et l'algèbre sont suffisants pour la
cryptologie puisqu'ils sont la base pour des calculs de niveaux plus élevés.
Avec des calculs plus simples ont a plus d'opérations que des calculs plus
compliqués mais souvent nécessaire pour une meilleure compréhension. C'est
mon point de vue :)


Les matheux initiés peuvent lire dans la formule suivante l'intégralité
de ton algorithme. En plus, c'est indépendant de la taille du clair,
chiffré ou de la clé :

C = Mm*M+Mk*K

J'ajoute une sauce du type N-espace vectoriel, endomorphisme, bijection,
déterminant non nul et inversion pour arriver à :

M = inv(Mm)*(C-Mk*K)

qui est le décodage.
Un peu plus loin, et j'arrive à :

K = inv(Mk)*(C-Mm*M)

qui permet de retrouver la clé avec un clair et un chiffré.

Crois-moi sur parole, c'est très rapide. C'est juste qu'il faut
ingurgiter des mathématiques canabissiennes ;-) Le fil de discussion
actuel permet aux étudiants de première année de fac de sciences de
faire des révisions. Pourquoi les en priver ?


Et via le logiciel Scilab que
vous utilisez pour calculer ça suppose des données à entrer qui ont rapport
avec sa structure de calcul à effectuer.


Tout à fait. La différence entre la version un et deux de ton
algorithme est un changement de valeur de l'une des matrices de passage,
Mk. Le programme est donné à la fin de l'article.


Est-ce que ce logiciel est gros à installer? Installe-t-il beaucoup de
fichiers dans WindowsXP ?


Il marche sous MsWindows et pèse 11Mo à peu près, Je ne sais pas ce
qu'il installe comme fichier sous MsWindows, et je ne l'ai pas essayé sur
ce système d'exploitation.


C1 + C2 = M1 + K + M2 + K

La valeur de K n'est pas connue, donc on ne pourrait pas l'annuler ici.


Se reporter à la réponse d'Erwann pour comprendre ce que je voulais
dire.


...
Je vais maintenant monter d'une étape et ajouter une seule valeur
à
calculer dans la clef afin d'interdire de trouver la clef par une
attaque à clair connue.


Peine perdue.


Parfait. C'était une 'tentative' exprimée avec les mots " AFIN D' ".
Mais, j'y avais pensé que ça pourrait bien être possible. J'aurais
aimé avoir la solution par un exemple en algèbre mais ce n'est pas
grave. Je vais essayer de trouver le calcul algébrique et si je le
trouve, je veux l'ajouter dans mon prochain message avec une nouvelle
tentative 'POUR' empêcher de trouver la clef.


J'ai quand même une disponibilité limitée. C'est long de passer par des
systèmes d'équations linéaires qu'il faut ensuite inverser à la main.
C'est beaucoup plus rapide et fiable de le faire par l'algèbre
matricielle.

Voici le programme en question sous scilab. Note bien que je livre le
"code source" afin de donner la possibilité à tous les lecteurs de juger
par eux-même. La force de mes "attaques" réside uniquement dans les
mathématiques, pas dans la fermeture du code source.

Et si je ne t'avais pas communiqué ce que j'utilise pour percer ta
méthode de calcul ? Coup d'bol, j'suis gentil :


// Mm=[1 1 0;0 1 1;0 0 1] ; Mk=[1 0 0;0 1 0;1 0 1] 1ère version
Mm=[1 1 0;0 1 1;0 0 1] ; Mk=[1 1 0;0 1 1;2 0 1]

function [C]=chiffre(_M,_K)
// C est le chiffré de M par la clé K
C = Mm*_M + Mk*_K
endfunction

function [M]Þchiffre(_C,_K)
// M est le déchiffré de C par la clé K
invMm=inv(Mm)
M = invMm*_C - invMm*Mk*_K
endfunction

function [K]Êsse(_M,_C)
// K est la clé ayant servi à partir de M à générer C
K = inv(Mk)*(_C-Mm*_M)
endfunction

--
Christophe HENRY
(sans lkm)
GnuPG : 3922239E60036EC86BF7268A877C52AC 4883C02A



Avatar
Raymond H.
"Erwann ABALEA" a écrit dans le message de news:

Bonjour,

On Tue, 4 Jan 2005, Raymond H. wrote:

Je suis d'accord, car je parlais de l'exemple ci-haut:

C1 + C2 = M1 + K + M2 + K

La valeur de K n'est pas connue, donc on ne pourrait pas l'annuler ici.


Tu dis plus loin que tu connais le XOR, mais tu ne parviens pas à passer
de:
C1 + C2 = M1 + K + M2 + K
à
C1 + C2 = M1 + M2

Fais un effort. Ici, '+' désigne l'opération XOR, et quel que soit X,
X + X = 0. C'est plus clair?

Bonjour,

c'était déjà clair. Vous confondez les choses. Le signe + ne désigne
pas l'opération XOR mais une valeur ascii puisqu'en base 256 dans la table
des caractères.
Le XOR se calcul à partir des bits (en binaire) et non à partir des
caractères ascii eux-mêmes comme c'est le cas dans notre exemple. Il n'y a
pas de XOR dans notre exemple du 'Simple algo' depuis le début. On compare
notre exemple avec le XOR seulement en rapport avec le fait qu'il est aussi
difficile que le XOR à déchiffrer (sinon impossible) et le résultat des
données eux-mêmes n'équivaut pas le XOR non plus.
Pour un XOR on ferait (en binaire):
10101000
XOR (et non +)
10101000
====== 00000000

ou

10101000
XOR (et non +)
11001100
====== 01100100

Mais dans notre exemple c'est en ascii.
(Supposons que (ici j'invente)):
K=7
M1=2
M2=3
C1=4
C2=5

alors
C1 + C2 = M1 + K + M2 + K
devient
4+5=2+7+3+7

Or, en algèbre C1 + C2 = M1 + K + M2 + K n'est pas comme C1 + C2 = M1 + M2
Donc, 4+5=2+7+3+7 n'équivaut pas à 4+5=2+3

:-)
r.h.


Avatar
Raymond H.
"Christophe HENRY" a écrit dans le
message de news: crdqjk$253e$

C'est une erreur. La cryptologie est une science nécessitant des
mathématique d'un certain niveau.


Je pense que les calculs de base et l'algèbre sont suffisants pour la
cryptologie puisqu'ils sont la base pour des calculs de niveaux plus
élevés.
Avec des calculs plus simples ont a plus d'opérations que des calculs
plus
compliqués mais souvent nécessaire pour une meilleure compréhension.
C'est
mon point de vue :)


Les matheux initiés peuvent lire dans la formule suivante l'intégralité
de ton algorithme. En plus, c'est indépendant de la taille du clair,
chiffré ou de la clé :

C = Mm*M+Mk*K

J'ajoute une sauce du type N-espace vectoriel, endomorphisme, bijection,
déterminant non nul et inversion pour arriver à :

M = inv(Mm)*(C-Mk*K)

qui est le décodage.
Un peu plus loin, et j'arrive à :

K = inv(Mk)*(C-Mm*M)

qui permet de retrouver la clé avec un clair et un chiffré.

Crois-moi sur parole, c'est très rapide. C'est juste qu'il faut
ingurgiter des mathématiques canabissiennes ;-) Le fil de discussion
actuel permet aux étudiants de première année de fac de sciences de
faire des révisions. Pourquoi les en priver ?


Pourquoi pas? On est libre :-)



Et via le logiciel Scilab que
vous utilisez pour calculer ça suppose des données à entrer qui ont
rapport
avec sa structure de calcul à effectuer.


Tout à fait. La différence entre la version un et deux de ton
algorithme est un changement de valeur de l'une des matrices de passage,
Mk. Le programme est donné à la fin de l'article.


Est-ce que ce logiciel est gros à installer? Installe-t-il beaucoup de
fichiers dans WindowsXP ?


Il marche sous MsWindows et pèse 11Mo à peu près, Je ne sais pas ce
qu'il installe comme fichier sous MsWindows, et je ne l'ai pas essayé sur
ce système d'exploitation.


C1 + C2 = M1 + K + M2 + K

La valeur de K n'est pas connue, donc on ne pourrait pas l'annuler ici.


Se reporter à la réponse d'Erwann pour comprendre ce que je voulais
dire.


Donc, si je comprends bien vous vouliez parler du XOR! J'ai déjà
répondu au message d'Erwann en disant que l'exemple n'était pas avec du XOR
depuis le début, et qu'il s'agissait d'algorithme. C'était ma ligne de
pensée tout au long du fil puisque le 'simple algo' lui-même n'a aucun
calcul fait avec du XOR.




...
Je vais maintenant monter d'une étape et ajouter une seule valeur
à
calculer dans la clef afin d'interdire de trouver la clef par une
attaque à clair connue.


Peine perdue.


Parfait. C'était une 'tentative' exprimée avec les mots " AFIN D' ".
Mais, j'y avais pensé que ça pourrait bien être possible. J'aurais
aimé avoir la solution par un exemple en algèbre mais ce n'est pas
grave. Je vais essayer de trouver le calcul algébrique et si je le
trouve, je veux l'ajouter dans mon prochain message avec une nouvelle
tentative 'POUR' empêcher de trouver la clef.


J'ai quand même une disponibilité limitée. C'est long de passer par des
systèmes d'équations linéaires qu'il faut ensuite inverser à la main.


D'accord, je comprends. Mais je ne savais pas que c'était si long.

C'est beaucoup plus rapide et fiable de le faire par l'algèbre
matricielle.
Ok.


Voici le programme en question sous scilab. Note bien que je livre le
"code source" afin de donner la possibilité à tous les lecteurs de juger
par eux-même. La force de mes "attaques" réside uniquement dans les
mathématiques, pas dans la fermeture du code source.

Et si je ne t'avais pas communiqué ce que j'utilise pour percer ta
méthode de calcul ? Coup d'bol, j'suis gentil :


:-)



// Mm=[1 1 0;0 1 1;0 0 1] ; Mk=[1 0 0;0 1 0;1 0 1] 1ère version
Mm=[1 1 0;0 1 1;0 0 1] ; Mk=[1 1 0;0 1 1;2 0 1]

function [C]=chiffre(_M,_K)
// C est le chiffré de M par la clé K
C = Mm*_M + Mk*_K
endfunction

function [M]Þchiffre(_C,_K)
// M est le déchiffré de C par la clé K
invMm=inv(Mm)
M = invMm*_C - invMm*Mk*_K
endfunction

function [K]Êsse(_M,_C)
// K est la clé ayant servi à partir de M à générer C
K = inv(Mk)*(_C-Mm*_M)
endfunction

Merci

a+
r.h.




Avatar
Christophe HENRY

Fais un effort. Ici, '+' désigne l'opération XOR, et quel que soit X,
X + X = 0. C'est plus clair?

Bonjour,

c'était déjà clair. Vous confondez les choses. Le signe + ne désigne
pas l'opération XOR mais une valeur ascii puisqu'en base 256 dans la table
des caractères.


En fait, si tu regardes les calculs tu notes que les valeurs d'un
chiffré sont toujours supérieure de celles du clair. Il n'y a que des
additions, pour le moment. Il faut bien repasser en-dessous de 255 à un
moment ou à un autre. Introduire des soustractions risque d'aboutir à
des résultats négatifs.

Dans un cas comme dans l'autre, il faut couper ce qui dépasse :
l'arithmétique modulaire intervient. Le xor en est l'exemple canonique
puisqu'il s'agit d'une addition dont le résultat est ramené à une
valeur inférieur à 2 dès qu'on la dépasse.

Erwann a juste pris de l'avance.


Le XOR se calcul à partir des bits (en binaire) et non à partir des
caractères ascii eux-mêmes comme c'est le cas dans notre exemple. Il n'y a
pas de XOR dans notre exemple du 'Simple algo' depuis le début.


On préssent qu'il va forcément en avoir, pour les raisons indiquées plus
haut.


On compare
notre exemple avec le XOR seulement en rapport avec le fait qu'il est aussi
difficile que le XOR à déchiffrer (sinon impossible) et le résultat des
données eux-mêmes n'équivaut pas le XOR non plus.


Pas tout à fait. Ton calcul est bien plus proche du xor (à mon humble
avis) que tu ne l'entends. C'est juste que nous n'avons pas parlé de
modulo pour le moment. Erwan (et les autres spécialistes), moi-même et
les matrices t'y attendons de pied ferme :-)

L'utilisation du symbole plus est tout à fait pertinente pour parler du
xor.


Or, en algèbre C1 + C2 = M1 + K + M2 + K n'est pas comme C1 + C2 = M1 + M2
Donc, 4+5=2+7+3+7 n'équivaut pas à 4+5=2+3


Lorsque le valeur du chiffré C devient non stockable dans un octet,
comment feras-tu ? Tu couperas à 255, en soustrayant 256 autant de fois
que nécessaire pour repasser en-dessous.

On chiffre :
M = 12
K = 128
C = 12 + 128 = 140

On inverse, en surchiffrant :
C = 140
K = 128
M = 140 + 128 = 12

Nous étions arrivés à 268, auquel nous avons soustrait 256, C'est
exactement le même genre de calcul que xor, sauf que la barre est plus
haute.

Au final, on a fait :
12 +128 +128 = 12

C'est un cas simple d'annulation de la clé.


--
Christophe HENRY
(sans lkm)
GnuPG : 3922239E60036EC86BF7268A877C52AC 4883C02A


3 4 5 6 7