OVH Cloud OVH Cloud

Simple algo: 4e étape - la clef de session

32 réponses
Avatar
Raymond H.
Étape 4 du simple algo:

"Christophe HENRY" <forumslkm.sbgodin@nerim.net.sans_lkm> a écrit dans le
message de news: csc16i$31i4$1@biggoron.nerim.net...
> Le Sat, 15 Jan 2005 13:42:43 -0500, Raymond H. a écrit :
>
>> Dans ce cas ce ne serait pas vraiment sur l'algo de cryptage du clair
>> qu'il faudrait se pencher mais sur l'algo de prolongement d'une clef,
>
> C'est une erreur. Je vais faire description imagée. Imagine que la clé
> en question fasse deux caractères a et b, tu la prolonges de un
> caractère au moyen de l'opération c=a+b.
> La clé est ainsi (a,b,c). Question : (a,b,c) peut-il avoir toutes les
> combinaisons possibles de a,b et c ? Il s'agit de l'une des conditions
> draconiennes imposées à l'OTP auquel ton algo est, au mieux, équivalent.
>
> La réponse est non : le nombre de combinaisons ne sera que de 256², le
> troisième élément étant dépendant des deux autres. Or, la clé doit
> remplir entièrement les possibilités de combinaisons, soit 256**3, pour
> être correcte.
>
Il est presque certain qu'avec c=a+b ça ne tiendra pas. On suppose que
la clef doit avoir un minimum de caractères: 32 bits par exemple.

k = 1-2-3-4 (clef de session initiale créée aléatoirement)
m = 5-6-7-8-9-0 (clair)
x = 0 (au départ)
k5 = (((k2 + k3) xor m1) + k4) Modulo 256
c(x+1) = (((k1 + m(x+1) xor k2) + k1) Modulo 256 [Je simplifie ici]
x = x + 1

Dans notre exemple, on conserverait toujours 4 caractères dans notre
clef de session puisqu'elle avait 4 caractères lors de son initialisation.
donc k = 1-2-3-4
donc m = 5-6-7-8-9-0

1a- k5 = ((k2 + k3) xor m1) + k4
k5 = ((2 + 3) xor 5) + 4 = 4
donc k = 1-2-3-4-4

1b- k = k2, k3, k4, k5 = 2-3-4-4
donc k = 2-3-4-4

1c- c1 = ((k1 + m1) xor k2) + k1
c1 = ((2 + 5) xor 3) + 2 = 6
donc c = 6

2a- k5 = ((k2 + k3) xor m2) + k4
k5 = ((3 + 4) xor 6) + 4 = 5
donc k = 2-3-4-4-5

2b- k = k2, k3, k4, k5
donc k = 3-4-4-5

2c- c2 = ((k1 + m2) xor k2) + k1
c2 = ((3 + 6) xor 4) + 3 = 16
donc c = 6-16

3a- k5 = ((k2 + k3) xor m3) + k4
k5 = ((4 + 4) xor 7) + 5 = 20
donc k = 3-4-4-5-20

3b- k = k2, k3, k4, k5
donc k = 4-4-5-20

3c- c3 = ((k1 + m3) xor k2) + k1
c3 = ((4 + 7) xor 4) + 4 = 19
donc c = 6-16-19

4a- k5 = ((k2 + k3) xor m4) + k4
k5 = ((4 + 5) xor 8) + 20 = 21
donc k = 4-4-5-20-21

4b- k = k2, k3, k4, k5
donc k = 4-5-20-21

4c- c4 = ((k1 + m4) xor k2) + k1
c4 = ((4 + 8) xor 5) + 4 = 13
donc c = 6-16-19-13

5a- k5 = ((k2 + k3) xor m5) + k4
k5 = ((5 + 20) xor 9) + 21 = 37
donc k = 4-5-20-21-37

5b- k = k2, k3, k4, k5
donc k = 5-20-21-37

5c- c5 = ((k1 + m5) xor k2) + k1
c5= ((5 + 9) xor 20) + 5 = 31
donc c = 6-16-19-13-31

6a- k5 = ((k2 + k3) xor m6) + k4
k5 = ((20 + 21) xor 0) + 37 = 78
donc k = 5-20-21-37-78

6b- k = k2, k3, k4, k5
donc k = 20-21-37-78

6c- c6 = ((k1 + m6) xor k2) + k1
c6 = ((20 + 0) xor 21) + 20 = 21
donc c = 6-16-19-13-31-21

On conserve donc la clef de session finale 20-21-37-78 pour pouvoir
déchiffrer le cryptogramme 6-16-19-13-31-21
En résumé avec:
m = 5-6-7-8-9-0
k = 1-2-3-4

on produit:

k = 2-3-4-4
c = 6

k = 3-4-4-5
c = 6-16

k = 4-4-5-20
c = 6-16-19

k = 4-5-20-21
c = 6-16-19-13

k = 5-20-21-37
c = 6-16-19-13-31

k = 20-21-37-78
c = 6-16-19-13-31-21

La question est: 'Pouvons-nous trouver le clair à partir de l'algo et du
chiffré 6-16-19-13-31-21 ?
x = 0 (au départ)
k5 = (((k2 + k3) xor m1) + k4) Modulo 256
c(x+1) = (((k1 + m(x+1) xor k2) + k1) Modulo 256
x = x + 1

Ici, j'ai fait un peu vite la partie de l'algo pour le prolongement de
la clef de session; faudrait regarder la façon la plus sûre. Mais, on
pourrait faire les additions et les xor avec d'autres valeurs:
Par exemple, au lieu de faire
k5 = ((k2 + k3) xor m1) + k4

on pourrait faire (en ajoutant le modulo que je n'ai pas mis pour que ce
soit plus simple à l'oeil):
k5 =( ((k2 + m1) xor k3) + k4) Modulo 256

Bonne journée.
Raymond H.

=================
N.B.:
En transformant
c1=(((k1 + k2 + m1 + m2) xor k2) + k1) Mod 256
c2=(((k2 + k3 + m2 + m3) xor k3) + k2) Mod 256
c3=(((k3 + k4 + m3 + k4 ) xor k4) + k3) Mod 256 (k4 remplace aussi m4)

en

c1=(((k1 + m1) xor k2) + k1) Mod 256
c2=(((k2 + m2) xor k3) + k2) Mod 256
c3=(((k3 + m3) xor k4) + k3) Mod 256 (k4 remplace aussi m4)

? ? ? ? = k
8 12 21 = 1m
32 51 62 = 1c
donne 256 clefs au lieux de 640.
000-040-063-171
001-022-063-171
002-020-063-171
003-022-063-171
004-016-063-171
005-022-063-171
006-020-063-171
007-022-063-171
008-008-063-171
009-006-063-171
010-004-063-171
011-006-063-171
012-000-063-171
013-006-063-171
014-004-063-171
015-006-063-171
016-008-063-171
017-022-063-171
018-020-063-171
019-022-063-171
020-016-063-171
021-022-063-171
022-020-063-171
023-022-063-171
024-040-063-171
025-038-063-171
026-036-063-171
027-038-063-171
028-032-063-171
029-038-063-171
030-036-063-171
031-038-063-171
032-040-063-171
033-214-191-171
034-212-191-171
035-214-191-171
036-208-191-171
037-214-191-171
038-212-191-171
039-214-191-171
040-200-191-171
041-198-191-171
042-196-191-171
043-198-191-171
044-192-191-171
045-198-191-171
046-196-191-171
047-198-191-171
048-200-191-171
049-214-191-171
050-212-191-171
051-214-191-171
052-208-191-171
053-214-191-171
054-212-191-171
055-214-191-171
056-168-063-171
057-166-063-171
058-164-063-171
059-166-063-171
060-160-063-171
061-166-063-171
062-164-063-171
063-166-063-171
064-168-063-171
065-150-063-171
066-148-063-171
067-150-063-171
068-144-063-171
069-150-063-171
070-148-063-171
071-150-063-171
072-136-063-171
073-134-063-171
074-132-063-171
075-134-063-171
076-128-063-171
077-134-063-171
078-132-063-171
079-134-063-171
080-136-063-171
081-150-063-171
082-148-063-171
083-150-063-171
084-144-063-171
085-150-063-171
086-148-063-171
087-150-063-171
088-168-063-171
089-166-063-171
090-164-063-171
091-166-063-171
092-160-063-171
093-166-063-171
094-164-063-171
095-166-063-171
096-168-063-171
097-214-191-171
098-212-191-171
099-214-191-171
100-208-191-171
101-214-191-171
102-212-191-171
103-214-191-171
104-200-191-171
105-198-191-171
106-196-191-171
107-198-191-171
108-192-191-171
109-198-191-171
110-196-191-171
111-198-191-171
112-200-191-171
113-214-191-171
114-212-191-171
115-214-191-171
116-208-191-171
117-214-191-171
118-212-191-171
119-214-191-171
120-040-063-171
121-038-063-171
122-036-063-171
123-038-063-171
124-032-063-171
125-038-063-171
126-036-063-171
127-038-063-171
128-040-063-171
129-022-063-171
130-020-063-171
131-022-063-171
132-016-063-171
133-022-063-171
134-020-063-171
135-022-063-171
136-008-063-171
137-006-063-171
138-004-063-171
139-006-063-171
140-000-063-171
141-006-063-171
142-004-063-171
143-006-063-171
144-008-063-171
145-022-063-171
146-020-063-171
147-022-063-171
148-016-063-171
149-022-063-171
150-020-063-171
151-022-063-171
152-040-063-171
153-038-063-171
154-036-063-171
155-038-063-171
156-032-063-171
157-038-063-171
158-036-063-171
159-038-063-171
160-040-063-171
161-214-191-171
162-212-191-171
163-214-191-171
164-208-191-171
165-214-191-171
166-212-191-171
167-214-191-171
168-200-191-171
169-198-191-171
170-196-191-171
171-198-191-171
172-192-191-171
173-198-191-171
174-196-191-171
175-198-191-171
176-200-191-171
177-214-191-171
178-212-191-171
179-214-191-171
180-208-191-171
181-214-191-171
182-212-191-171
183-214-191-171
184-168-063-171
185-166-063-171
186-164-063-171
187-166-063-171
188-160-063-171
189-166-063-171
190-164-063-171
191-166-063-171
192-168-063-171
193-150-063-171
194-148-063-171
195-150-063-171
196-144-063-171
197-150-063-171
198-148-063-171
199-150-063-171
200-136-063-171
201-134-063-171
202-132-063-171
203-134-063-171
204-128-063-171
205-134-063-171
206-132-063-171
207-134-063-171
208-136-063-171
209-150-063-171
210-148-063-171
211-150-063-171
212-144-063-171
213-150-063-171
214-148-063-171
215-150-063-171
216-168-063-171
217-166-063-171
218-164-063-171
219-166-063-171
220-160-063-171
221-166-063-171
222-164-063-171
223-166-063-171
224-168-063-171
225-214-191-171
226-212-191-171
227-214-191-171
228-208-191-171
229-214-191-171
230-212-191-171
231-214-191-171
232-200-191-171
233-198-191-171
234-196-191-171
235-198-191-171
236-192-191-171
237-198-191-171
238-196-191-171
239-198-191-171
240-200-191-171
241-214-191-171
242-212-191-171
243-214-191-171
244-208-191-171
245-214-191-171
246-212-191-171
247-214-191-171
248-040-063-171
249-038-063-171
250-036-063-171
251-038-063-171
252-032-063-171
253-038-063-171
254-036-063-171
255-038-063-171
Fin

10 réponses

1 2 3 4
Avatar
Christophe HENRY

D'accord. Je veux travailler à faire un code pour chiffrer deux bmp, et
l'envoyer lorsqu'il sera prêt. Ainsi, l'entête cryptée y sera aussi.


Cela sera sans moi. Je n'ai pas le temps*capacité pour faire cela. Je
reste aux attaques à clair connu.


Mais qui donnerait une même clef à plusieurs correspondants? Faire cela
avec peu importe le logiciel de chiffrage, ça serait du pareil au même. Ça
n'indique pas une vulnérabilité du logiciel lui-même mais de la clef dont
plusieurs auraient.


La mienne est disponible publiquement ici :
http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0x4883C02A

N'importe qui peut m'envoyer un courrier chiffré pour moi ou reconnaître
ma signature éléctronique. C'est donc un contre-exemple à ta
proposition.


Mais par contre, si la phrase de passe (qui crypte la clef de session)
est transmisse à plus d'une personne à la fois, alors cela relèverait
de la responsabilité de l'envoyeur et ce serait la confiance envers
celui qui chiffre que le destinataire aurait à prendre le risque.
C'est comme ça avec tous les logiciels de chiffrage, à moins qu'il y
ait un procédé que je ne connais pas.


Il y en a, en effet.


Donne-moi trois octet du clair, trois octet du chiffré, quelque soient
leurs longueurs et je te trouve la clé. Si ta clé fais N octets, ça
marche aussi avec N octets du clair et du chiffré.


J'avais déjà pensé qu'en faisant des tests aléatoirement en essayant
différents caractères au début du chiffré et de la clef de session, qu'il y
aurait matière à amélioration, justement à cause de cela. Je vais réfléchir
à cette logique au début du processus de chiffrement. Ensuite, je pourrais
vous envoyer les trois octets si je ne vois pas bien comment il est possible
en peu de temps de cryptanalyser cela.


Aucune chance. Matrices, espaces vectoriels, polyèdre et simplex, pour
ceux qui ont assez d'aspirine.

Mais bon, envoie !

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


Avatar
Mister Jack
Salut !

Christophe a déjà pas mal argumenté ceci, mais je vais répéter puisque
c'est apparemment le seul moyen pour que ça rentre...

Il ne peut pas y avoir d'attaque à partir du clair, puisque vous ne
connaissez pas le clair et c'est le clair qui construit la clef de session
et ça prend la clef de session pour déchiffrer le chiffré pour trouver le
clair.


Blablabla... Quand vous envoyez un fichier jpeg, targa, BMP, TIF ou
autres on connait la structure des en-têtes et on a donc de
l'information provenant du clair.
Quand vous envoyez un fichier html, xml, xls ou autres on a de
l'information sur la structure complète du fichier, donc de
l'information provenant du clair.
Quand vous envoyez un message, on a une idée statistique de ce qu'on
doit y trouver, donc de l'information provenant du clair.

Comme Christophe vous l'a dit, pour une clé de n bits, actuellement il
suffit de (n-8)bits de clair connus pour trouver le germe de la clé de
session. Et à partir de ce germe, on déduit le clair complet. (pas
besoin d'avoir la clé de session complète).

De même on ne peut pas vraiment appeler 'attaque à clair connu' une
attaque avec le principe de Vernam puisqu'il n'utilise la clef qu'une seule
fois: 'masque jetable'.


Un masque jetable, si je ne me trompe pas :
- Est utilisé une seule fois.
- Est de la même longueur que le message.
- Est d'entropie maximale

L'usage unique serait possible avec Allcrypter, mais dans la pratique
c'est une autre histoire. Pour la longueur et l'entropie vous êtes loin
du compte. La clé de session (comme vous l'appelez) est générée à partir
d'un germe et du clair... Elle n'est donc pas d'entropie maximale, même
si vous chiffrez un bruit blanc. Et pour la longueur... elle a beau être
physiquement la même que celle du message, on pourrait dire qu'elle est
virtuellement plus courte, de part sa méthode de génération.

Et de plus je veux simplifier la partie de l'algo qui crypte le clair:
par exemple enlever cette ligne-ci
"c(x+1) = (((k1 + m(x+1)) xor k2) + k1) Modulo 256"
pour la remplacer par celle-ci
"c(x+1) = (((k1 + m(x+1)) xor m1) + k1) Modulo 256"


Pffff.... les retouches homéopatiques ne servent à RIEN ! A chaque fois
vous obligez ceux qui veulent vous aider (ou vous faire ouvrir les yeux,
pour ma part) à reculer d'un pas pour réavancer aussitôt... c'est inutile...

Cependant, il semble qu'une attaque à clair connu soit impossible (je ne
parle pas d'attaque à force brute). Pourrait-on confirmer cette affirmation
avec l'exemple suivant (selon l'étape 3)?


Vous pensez trop ou trop peu, c'est selon. Si personne ne prend au
sérieux votre "travail", il y a des raisons. Pour quelqu'un qui touche
même un tout petit peu en cryptologie (?), votre algo apparait faible au
premier regard.

De quelle façon saurait-on que l'image est en JPEG? Par répétition d'une
même couleur ou de l'entête indiquant le type de fichier?


Si vous êtes sous Windows, avec l'extension du fichier, on a rapidement
une bonne idée de ce que vous envoyez. Et si retirez l'extension du
fichier, votre correspondant aura des difficultés à l'utiliser (sous
Windows).
Restera donc à ajouter le nom du fichier au clair... mais là, étant
données les limitations importantes sur les noms de fichiers, vous
fournissez de l'information sur le clair... donc... pas bon. toc.

Par contre, si vous nous donnez une image BMP de taille raisonnable
chiffrée avec une clé de session compréhensible par son auteur, alors là,
oui, on peut faire quelque chose.


D'accord. Faudrait dans ce cas que je crée un petit programme pour le
faire sinon autrement ça va être trop long. Je pourrait ainsi vous envoyer
deux petits bmp, et l'entête y serait du même coup. L'un des deux serait
quelques couleurs simple qui se répètent: cela pourrait vous faciliter les
choses. C'est ok?


Non, c'est pas Ok... je vais pas passer mon temps à vous montrer par a+b
que votre algo ne tient pas. Vous n'avez eu que des commentaires
négatifs sur votre algo, et il y a une raison : il est faible, c'est
tout. Je ne vais pas passer mon temps à réduire en bouillie les fichiers
que vous générez pour la beauté de l'art.
Je vous rappelle que même avec un truc faiblard comme le votre il faut
passer du temps pour le casser... et comme le disait AMcD, on n'est pas
payé pour ça. En l'état, je prends des vacances, et vous laisse vous
amuser tout seul. JE veux bien commenter sans être entendu (j'ai
l'habitude), mais pas faire du boulot inutilement.

Vous ne voulez pas plutôt dire: "Il y AURAIT de l'information..."?
Sinon, je ne comprends pas puisqu'il n'existe pas de caractères hors de
cette plage (0-255). Ça peut être n'importe lesquels des caractères de 0 à
255 puisque la clef de session initiale serait générée aléatoirement par le
logiciel.


Blablabla...
Donnez les spécifications complètes de votre algo, et on verra...

Mais je ne pense pas vraiment qu'on puisse chercher par fréquences de
caractère puisqu'un même caractère n'a pas nécessairement la même valeur
d'un endroit à l'autre, à cause du calcul de l'algo. Tantôt un P pourrait
être calculé (via addition et xor) à partir de certaines valeurs et tantôt
par d'autres valeurs.


Vous ne pensez pas ? Dommage... Alors on va faire un truc rigolo.
Cherchez sur le net un logiciel d'analyse spectrale, et faites
l'expérience suivante :
1°) Faites générer un bruit blanc à un logiciel de maths ou de son qui a
cette fonction (y'en a plein), et enregistrez-le.
2°) Encodez un fichier texte de même longueur que le fichier précédent
avec votre algo.
3°) Faites une analyse spectrale de ces deux fichiers.
4°) Si les deux ont la même allure alors bravo ! Il n'y a pas d'info
exploitable facilement de manière statistique dans votre fichier. (c'est
pas une généralité, mais ça suffira ici)
5°) Si des lignes, motifs, ou autres apparaissent dans votre fichier...
et ben dommage, vous avez perdu.

Je ne pense pas vraiment qu'on puisse procéder par
statistique. Si vous voulez, dans AllCrypter il y a le 4e onglet qui donne
automatiquement les fréquences de chaque caractère qui se retrouve dans le
texte de sa fenêtre de gauche.


Rajoutez un cinquième onglet avec une analyse spectrale de la sortie. Ca
pourrait être joli, et donner une utilité à Allcrypter... :p

Pensez à vous mettre dans un cas d'utilisation normale de votre algo...
D'accord.



Enfin quelque chose de bien ! Ouf ! En arrivant à la fin de ce message
j'avais peur que rien de positif n'en sorte...

@Tchao !
--
Mister Jack (MJ)
"Linux c'est pas pour les manchots !"
Un don pour les victimes du Tsunami : http://www.croix-rouge.fr/


Avatar
Raymond H.
Bonjour,

"Christophe HENRY" a écrit dans le
message de news: cslb47$nf4$

Après avoir un peu testé l'algo, je dois dire que cette attaque à clair
connu est démonstrative de la faiblesse de l'algo.


Il ne peut pas y avoir d'attaque à partir du clair, puisque vous ne
connaissez pas le clair et c'est le clair qui construit la clef de
session


Ce n'est donc pas une clé de session conventionnelle. Une clé de session
est par définition indépendante des données à chiffrer.


Quel nom donner dans ce cas? Tout simplement une clef de décryptage
peut-être.

et ça prend la clef de session pour déchiffrer le chiffré pour trouver le
clair. De même on ne peut pas vraiment appeler 'attaque à clair connu'
une
attaque avec le principe de Vernam puisqu'il n'utilise la clef qu'une
seule
fois: 'masque jetable'.


Effectivement, dans cet optique-là, il est inutile d'aller plus loin :
l'étape 3 du simple algo suffit à blinder toutes données chiffrées.
Les soucis proviennent des réutilisations des clés ou des redondances
induites par le chiffrement. Et la version actuelle, avec "clé de
session", se trouve dans ce cas.


Le problème serait plutôt de trouver le clair.
Dans cette étape 4, c'est le but, puisque la clef de session est un
'masque
jetable'; elle ne sert qu'une seule fois, même si on chiffre plusieurs
fois
le même fichier.


Le masque jetable, dans son principe, fait appel à une clé (qui n'est
pas de session, d'ailleurs) générée aléatoirement, qui occupe tout
l'espace des clés et qui est, par déduction, indépendant de tout clair
à chiffrer.


De mon point de vue, il peut tout de même être jetable même s'il est
dépendant du clair. Donc, un masque ou une clef jetable (du moins la clef
initiale).


Et de plus je veux simplifier la partie de l'algo qui crypte le
clair:
par exemple enlever cette ligne-ci
"c(x+1) = (((k1 + m(x+1)) xor k2) + k1) Modulo 256"
pour la remplacer par celle-ci
"c(x+1) = (((k1 + m(x+1)) xor m1) + k1) Modulo 256"


Pourquoi placer un "x+1" ? Avec un "x" tout court, c'est plus lisible :

c_x = ((( k_1 + m_x+1) xor m_1) +k_1) % 256


Ça dépend des cerveaux. :-) Le mien lit mieux l'autre façon. Et les
'_' sont à éviter en programmation car ils ne sont pas visibles lorsque la
ligne de code est sur une ligne '____________'.


Tu es sûr que tu veux conserver le m_1 après le xor ?! J'aurais opté
pour m_x. Mais cela ne change rien aux conséquences.


En fait, c'est là même chose, puisque m1 est toujours le 1re caractère
de la clef à chaque renouvellement de la clef de 4 caractères. Car le 1re
caractère est toujours enlevé à cause du dernier qui s'ajoute. Mais je
comprends ce que vous voulez dire.



Cela pour tenter d'empêcher les attaques à force brute à partir
d'une clef de session (et non de la phrase de passe).


Nous en sommes par encore là. Jack et moi avons attaqué ton algorithme
avec une variante de l'algorithme du simplex. Pour faire imagé, c'est un
parcours dans un genre de polyèdre multidimensionnel représentant les
chiffrés pour optimiser une fonction. La fonction, ici, c'est de trouver
la clé. Le grand jeu est de croiser des sous-espaces vectoriels de
l'espaces des clés :-o
Le hic, c'est qu'il y a plein de trous causés par le cumul de l'addition
et du xor, mais bon...


Les trous sont une bonne chose dans ce contexte?

Selon l'étape 3, donc:
c1 = (((k1 + m1) xor k1) + k1) Modulo 256
c2 = (((k2 + m2) xor k2) + k2) Modulo 256
c3 = (((k3 + m3) xor k3) + k3) Modulo 256

J'ai fait le test avec:
c = 010-024-036
m = 008-012-021
et la seule clef possible est
k = 002-004-005
Cependant, il semble qu'une attaque à clair connu soit impossible
(je ne parle pas d'attaque à force brute). Pourrait-on confirmer cette
affirmation avec l'exemple suivant (selon l'étape 3)?
Clef: ? - ? - ?
Clair: 008-012-021
Chiffré: 132-070-010


Dans ce domaine, il vaut mieux que "il semble" ne soit pas envisagé. Il
faudrait _démontrer_ :

K=[108,42,223] unique.


Lorsque je parlais d'attaque à clair connu, j'excluais le fait d'essayer
plusieurs clefs jusqu'à trouver la bonne. Est-ce de cette façon que vous
l'avez trouvée (même si c'est dans votre code)? Car sinon, je ne comprends
pas comment vous puissiez trouver cela à moins de faire des tests par des
itérations ou des essais. Car il vous faudrait être capable de trouver la
valeur de k1 dans l'exemple suivant par le moyen de l'algèbre, sinon il
faudrait faire plusieurs essais de valeur dans k1 jusqu'à trouver celle qui
correspond:
c1=(((k1 + m1) xor k1) + k1)
165=(((k1 + 108) xor k1) + k1)
C'est juste pour être certain de la façon dont vous avez trouvé
K=[108,42,223] plus haut. Donc, pour savoir à quoi m'en tenir, pour mieux
comprendre ce qui est fait.

De quelle façon saurait-on que l'image est en JPEG? Par
répétition d'une même couleur ou de l'entête indiquant le type de
fichier ?


Oui, car on aurait des renseignements sur le clair. En particulier, les
premiers octets du fichier.


Et ensuite, vous faites plusieurs essais de clefs différentes jusqu'à ce
que vous tombiez sur la bonne? C'est bien juste ça?

Ça peut être n'importe lesquels des caractères
de 0 à 255 puisque la clef de session initiale serait générée
aléatoirement par le logiciel.


_serait_ : sans projet clair, pas de réponse claire.


'Serait' est au conditionnel demandant un 'si'. Donc, en supposant que
j'utilise cette façon de faire, car dans mon exemple ce n'est pas le
logiciel mais moi qui a créé la clef de session initiale (pour l'instant).



Ici, je n'ose pas parler d'OTP qui
signifie 'One Time Password'


One Time Pad.


En effet, 'Pad', un masque jetable.

Mais je ne pense pas vraiment qu'on puisse chercher par fréquences
de caractère puisqu'un même caractère n'a pas nécessairement la même
valeur d'un endroit à l'autre, à cause du calcul de l'algo. Tantôt
un P pourrait être calculé (via addition et xor) à partir de
certaines valeurs et tantôt par d'autres valeurs. Je ne pense pas
vraiment qu'on puisse procéder par statistique.


Tu penses, mais d'autres savent. La littérature actuelle est remplie
d'exemples de ce type. Et encore, ni Jack ni moi avons mis en avant les
procédés modernes de cryptanalyse.


Si la clef est vraiment aléatoire (donc imprévisible), alors aucune
chance.


Les livres te feraient de meilleurs interlocuteurs que nous. Mais c'est
tout de même amusant de continuer sur notre lancée ;-)


:-)
Bonne journée
r.h.



Avatar
Raymond H.
"Mister Jack" a écrit dans le message de news:
41ee3a81$0$22649$
...
De même on ne peut pas vraiment appeler 'attaque à clair connu' une
attaque avec le principe de Vernam puisqu'il n'utilise la clef qu'une
seule fois: 'masque jetable'.


Un masque jetable, si je ne me trompe pas :
- Est utilisé une seule fois.
- Est de la même longueur que le message.
- Est d'entropie maximale


"Un masque jetable", il n'y en a qu'UN pour chaque clair à chiffré,
c'est un MASQUE parce qu'il sert à masquer le clair, et il est JETABLE parce
qu'il est utilisé une seule fois après quoi il est jeté. C'est comme ça que
je lis cela. Le reste devrait être complémentaire (et pas obligatoire)
selon les situations.

L'usage unique serait possible avec Allcrypter, mais dans la pratique
c'est une autre histoire. Pour la longueur et l'entropie vous êtes loin du
compte. La clé de session (comme vous l'appelez) est générée à partir d'un
germe et du clair... Elle n'est donc pas d'entropie maximale, même si vous
chiffrez un bruit blanc. Et pour la longueur... elle a beau être
physiquement la même que celle du message, on pourrait dire qu'elle est
virtuellement plus courte, de part sa méthode de génération.


Comme je dis plus bas, cette sous étape à améliorer la génération de la
clef est à venir (cela pour empêcher même la force brute puisque des calculs
même seraient imprévisible selon les valeurs de la clef initiale ou d'une
deuxième clef complémentaire servant à rendre aléatoire le choix de certains
calculs dans la génération de la clef en rapport avec les valeurs du clair).
J'ai des idées là dessus mais je ne suis pas rendu là. Je n'en dis pas plus
pour l'instant.


Et de plus je veux simplifier la partie de l'algo qui crypte le
clair:
par exemple enlever cette ligne-ci
"c(x+1) = (((k1 + m(x+1)) xor k2) + k1) Modulo 256"
pour la remplacer par celle-ci
"c(x+1) = (((k1 + m(x+1)) xor m1) + k1) Modulo 256"


Pffff.... les retouches homéopatiques ne servent à RIEN ! A chaque fois
vous obligez ceux qui veulent vous aider (ou vous faire ouvrir les yeux,
pour ma part) à reculer d'un pas pour réavancer aussitôt... c'est
inutile...


Des 'retouches', comme vous les nommées, sont utile pour optimiser ou
enlever ce qui serait inutile. Tout programmeur sait cela.
Mois j'appelle cela de l'optimisation et de l'amélioration. Et de plus,
cela ne change pas grand chose en programmation de remplacer k2 par m1: moi
ça me prend une seconde.

Cependant, il semble qu'une attaque à clair connu soit impossible (je
ne parle pas d'attaque à force brute). Pourrait-on confirmer cette
affirmation avec l'exemple suivant (selon l'étape 3)?


Vous pensez trop ou trop peu, c'est selon. Si personne ne prend au sérieux
votre "travail", il y a des raisons. Pour quelqu'un qui touche même un
tout petit peu en cryptologie (?), votre algo apparait faible au premier
regard.


De toute façon, il semble que vous alliez toujours le trouver faible
mais si vous n'arrivez plus à le casser. Faut être bon joueur même si c'est
plus difficile. Mais personne ne vous force à 'jouer'. Si vous participez
c'est que ça devrait être intéressant de le faire dans une certaine mesure
du moins.

De quelle façon saurait-on que l'image est en JPEG? Par répétition
d'une même couleur ou de l'entête indiquant le type de fichier?


Si vous êtes sous Windows, avec l'extension du fichier, on a rapidement
une bonne idée de ce que vous envoyez. Et si retirez l'extension du
fichier, votre correspondant aura des difficultés à l'utiliser (sous
Windows).
Restera donc à ajouter le nom du fichier au clair... mais là, étant
données les limitations importantes sur les noms de fichiers, vous
fournissez de l'information sur le clair... donc... pas bon. toc.


Si c'est un fichier gardant l'extension, cela est évident. Mais si
c'est en tant que donné venant d'une fenêtre, puis enregistrer dans un
fichier sous un nom quelconque alors c'est différent. Même si je sais que
vous pouvez y aller par essaie en choisissant des d'entêtes supposées.


Par contre, si vous nous donnez une image BMP de taille raisonnable
chiffrée avec une clé de session compréhensible par son auteur, alors là,
oui, on peut faire quelque chose.


D'accord. Faudrait dans ce cas que je crée un petit programme pour
le faire sinon autrement ça va être trop long. Je pourrait ainsi vous
envoyer deux petits bmp, et l'entête y serait du même coup. L'un des
deux serait quelques couleurs simple qui se répètent: cela pourrait vous
faciliter les choses. C'est ok?


Non, c'est pas Ok... je vais pas passer mon temps à vous montrer par a+b
que votre algo ne tient pas. Vous n'avez eu que des commentaires négatifs
sur votre algo, et il y a une raison : il est faible, c'est tout.


J'ai déjà dis que je ne m'arrêtera pas parce des gens me disent ceci ou
cela. Moi je crois que je peux réaliser un algo incassable et je fonce.

Je ne vais pas passer mon temps à réduire en bouillie les fichiers que
vous générez pour la beauté de l'art.
Je vous rappelle que même avec un truc faiblard comme le votre il faut
passer du temps pour le casser... et comme le disait AMcD, on n'est pas
payé pour ça.



Vous n'avez pas déjà dit que vous êtes là parce que vous aimiez ça dans
un sens?

Pauvre de vous, je ne réponds qu'à votre demande plus haut (du moins il me
semble que c'était une offre). Pourquoi me le reprocher?

Vous avez écris: "Par contre, si vous nous donnez une image..."

Moi, j'ai pris ça comme une demande à cause du 'NOUS'. En plus vous n'êtes
pas obliger de faire des tests. C'est un groupe de discussion ici et non un
pénitencier du siècle dernier où on en faisait des esclaves presque :-)


En l'état, je prends des vacances, et vous laisse vous amuser tout seul.
JE veux bien commenter sans être entendu (j'ai l'habitude), mais pas faire
du boulot inutilement.


Soyez assuré que je vous lis même si je ne pense pas à tout.

Pensez à vous mettre dans un cas d'utilisation normale de votre algo...
D'accord.




Mais chaque étape en son temps. Dans cette étape-ci il y a plusieurs
sous étapes et j'en suis qu'à la 1re. Le fait de savoir si on peut ou non
trouver le clair à partir du chiffré et l'algo, mais sans faire de force
brute ou essayer des clefs différentes jusqu'à trouver le clair qui
correspond au chiffré. Je veux être certain de la 1re sous étape de l'étape
4 avant d'aller plus loin. Alors, ne prenez pas l'étape 4 comme accomplie.
C'est un développement, même si vous ne raffolez pas des changements.


Bonne vacance tout de même :-)

r.h.



Avatar
Christophe HENRY

Le hic, c'est qu'il y a plein de trous causés par le cumul de l'addition
et du xor, mais bon...


Les trous sont une bonne chose dans ce contexte?


Oui et non. Ca m'a ennuyé lorsque j'ai voulu utiliser une résolution de
type Gaussienne, avec les matrices. Par contre, ça n'a aucun effet sur la
variante du simplex, algorithme actuellement utilisé.


K=[108,42,223] unique.


Lorsque je parlais d'attaque à clair connu, j'excluais le fait d'essayer
plusieurs clefs jusqu'à trouver la bonne. Est-ce de cette façon que vous
l'avez trouvée (même si c'est dans votre code)?


C'est effectivement possible vu la taille actuelle de la clé, qui est de
quatre octet. Mais il suffirait que tu l'allonges pour rendre impossible
cette attaque par force brute.


Car sinon, je ne comprends pas comment vous puissiez trouver cela à
moins de faire des tests par des itérations ou des essais.


Ce sont effectivement des tests - hé !!! T'as le code juste sous les
yeux, je veux bien que la récursion et le C ne te parlent pas, mais quand
même - qui "circulent" à travers les solutions possibles de manière
très rapide indépendante de la dimension de la clé.


Et ensuite, vous faites plusieurs essais de clefs différentes
jusqu'à ce que vous tombiez sur la bonne? C'est bien juste ça?


Non. C'est plus subtil, mais je n'ai pas de moyen simple pour éxposer
l'idée. Si c'était le cas, je serais limité par la longueur de la clé
à trouver. L'algorithme est quasiment indépendant de la longueur de la
clé.

Néamoins, tu disposes du code source complet pour comprendre mon
procédé.

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


Avatar
Christophe HENRY

J'ai déjà dis que je ne m'arrêtera pas parce des gens me disent ceci ou
cela. Moi je crois que je peux réaliser un algo incassable et je fonce.


Ca-y-est, une phrase mytique :-)

En fait, le seul incassable est l'OTP modulo les conditions liées aux
clés. Tous les autres sont cassables. Cependant, le grand jeu est de
rendre l'opération aussi difficile que possible. Je conjecture que si
d'autres n'y sont pas arrivés, toi non plus.


Mais chaque étape en son temps. Dans cette étape-ci il y a
plusieurs sous étapes et j'en suis qu'à la 1re. Le fait de savoir si
on peut ou non trouver le clair à partir du chiffré et l'algo, mais
sans faire de force brute ou essayer des clefs différentes jusqu'à
trouver le clair qui correspond au chiffré.


J'ai déjà répondu que la cause était entendue : c'est impossible.
Même en essayant toutes les clés, il n'y aurait pas de possibilités de
savoir si on tombe sur le bon clair. Ton procédé hérite des
propriétés du xor.


Attache-toi à rendre l'attaque à clair connu inopérante. La
vulnérabilité à cette attaque empêche toute communication de la clé
à plusieurs correspondants, ce qui est relativement tracassant pour un
algorithme symétrique.

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

Avatar
AMcD®
Christophe HENRY wrote:

J'ai déjà dis que je ne m'arrêtera pas parce des gens me disent ceci
ou cela. Moi je crois que je peux réaliser un algo incassable et je
fonce.


Ca-y-est, une phrase mytique :-)


Oui, et qui devrait te faire comprendre pourquoi nous sommes nombreux à
avoir abandonné toute initiative pour lui faire comprendre l'inutilité de
ses efforts...

Quand il aura une nouvelle version, moi ou d'autres lui recraqueront, mais
il ne comprendra toujours pas. Et cela pourra durer ad vitam etaernam. Non
seulement ses maths foirent, mais sa programmation aussi. Et quand on
utilise Visual Basic de surcroit... Bref, ce ne sont pas les points
d'attaque qui font défaut :-).

Autant je loue ton opiniatreté, autant je ne comprends pas son obstination.
Remarque, ça met de l'animation.

--
AMcD®

http://arnold.mcdonald.free.fr/


Avatar
Raymond H.
Bonjour,

"Christophe HENRY" a écrit dans le
message de news: cso01k$1rr6
...
En fait, le seul incassable est l'OTP modulo les conditions liées aux
clés. Tous les autres sont cassables. Cependant, le grand jeu est de
rendre l'opération aussi difficile que possible. Je conjecture que si
d'autres n'y sont pas arrivés, toi non plus.


Et ça me fait plaisir de l'entendre dire ;-)

Mais chaque étape en son temps. Dans cette étape-ci il y a
plusieurs sous étapes et j'en suis qu'à la 1re. Le fait de savoir si
on peut ou non trouver le clair à partir du chiffré et l'algo, mais
sans faire de force brute ou essayer des clefs différentes jusqu'à
trouver le clair qui correspond au chiffré.


J'ai déjà répondu que la cause était entendue : c'est impossible.
Même en essayant toutes les clés, il n'y aurait pas de possibilités de
savoir si on tombe sur le bon clair. Ton procédé hérite des
propriétés du xor.


Milles excuses. J'aurais du avoir écris ceci:

"Le fait de savoir si on peut ou non trouver la clef à partir du clair, du
chiffré et l'algo, mais sans faire de force brute ou essayer des clefs
différentes (même dans le code C) jusqu'à trouver le clair qui correspond au
chiffré."

Je sais que j'ai posé la question ailleurs. Mais je ne suis toujours
pas certain de la réponse à cause de la façon qui a été répondu.



Attache-toi à rendre l'attaque à clair connu inopérante.


Oui. Vous avez raison.

La
vulnérabilité à cette attaque empêche toute communication de la clé
à plusieurs correspondants,


Quand vous dites "à plusieurs correspondants", est-ce que vous parlez de
clef public/privé ou de clef privé comme dans le simple algo?

ce qui est relativement tracassant pour un
algorithme symétrique.


Merci pour votre persévérance dans cette participation dans ce fil.

Sur ce, passez une bonne journée :-)
r.h.


Avatar
Christophe HENRY

"Le fait de savoir si on peut ou non trouver la clef à partir du clair, du
chiffré et l'algo, mais sans faire de force brute ou essayer des clefs
différentes (même dans le code C) jusqu'à trouver le clair qui correspond au
chiffré."

Je sais que j'ai posé la question ailleurs. Mais je ne suis toujours
pas certain de la réponse à cause de la façon qui a été répondu.


Peu importe les tests réalisés dans un tel programme. En fait,
la question est : pourquoi faut-il éviter la force brute ? Parce qu'une
telle attaque devient inopérante si la clé est agrandie. Or, le but
c'est bien de pouvoir casser des clés de longueur respectable.

Dans mon programme, il n'y a pas de tests de clé au sens où tu
l'entends. En fait, il y en a qu'un : c'est pour tester une clé complète
et voir s'il n'y a pas eu d'erreur dans le programme. Mais c'est d'ordre
cosmétique, pour ma tranquilité personnelle. Tous les calculs ont étés
faits avant et composent progressivement la clé.

Voici un exemple avec une clé de 100 octets. Comme tu peux le voir, le
temps d'exécution de l'algorithme ne dépend pas vraiment de la longueur
de la clé.


$ time ./sax

Clair :
{1,78,255,1,78,251,178,235,148,0,0,7,45,21,111,110,101,17,19,88,37,38,39,40,41,42,45,78,79,99,215,214,213,212,210,207,200,200,188,197,2,2,5,6,7,8,9,56,22,23,24,25,26,27,28,29,30,1,96,97,98,99,100,207,23,24,25,29,67,68,75,76,77,78,95,45,44,43,34,255,255,255,254,253,174,175,176,178,179,180,0,1,2,3,4,5,6,16,17,18}

Chiffré :
{4,32,0,4,32,8,136,40,80,0,0,16,164,84,32,32,20,68,72,64,148,144,144,160,164,168,164,32,32,8,80,80,84,80,72,32,32,32,128,20,8,8,20,16,16,32,36,128,80,80,64,68,72,72,64,68,64,4,0,4,8,8,16,32,80,64,68,68,8,16,40,32,36,32,64,164,160,168,136,0,0,0,0,4,160,160,128,136,136,144,0,4,8,8,16,20,16,64,68,72}

Clé trouvée :
{1,78,255,1,78,251,178,235,148,0,0,7,45,21,111,110,101,17,19,88,37,38,39,40,41,42,45,78,79,99,215,214,213,212,210,207,200,200,188,197,2,2,5,6,7,8,9,56,22,23,24,25,26,27,28,29,30,1,96,97,98,99,100,207,23,24,25,29,67,68,75,76,77,78,95,45,44,43,34,255,255,255,254,253,174,175,176,178,179,180,0,1,2,3,4,5,6,16,17,18}

nbCles : 1
Nombre d'appels total : 25957
Nombre d'appels pour trouver la première clé : 8675

real 0m0.026s
user 0m0.019s
sys 0m0.006s


Moins d'un dixième de seconde pour trouver toutes les clés,
certainement beaucoup moins pour la première. Nombre total de clés
possibles : 256^100 = 6.668*10^240. Nombre d'itérations pour trouver une
clé : 8675.

Optimisation de l'algo par rapport à une attaque par force brute,
sachant qu'une telle attaque parcours en moyenne la moitié des clés
possibles : 8675/(256^100/2) = 1.301*10^(-237). C'est-à-dire :
0,0...01301, le "0...0" étant à remplacer par 236 zéros, après la
virgule.


La vulnérabilité à cette attaque empêche toute communication de la
clé à plusieurs correspondants,


Quand vous dites "à plusieurs correspondants", est-ce que vous
parlez de clef public/privé ou de clef privé comme dans le simple
algo ?


Je parle de fournir aux correspondants le moyen de m'envoyer un chiffré
ou de verifier ma signature électronique. Peu importe l'implémentation,
seul l'utilisation compte ici. Mon certificat public est disponible à qui
veut bien la prendre, n'importe qui peut m'envoyer un chiffré ou
reconnaître ma signature électronique. Et pourtant, mes correspondants
n'ont jamais de moyen (concret) de déchiffrer les chiffrés envoyés à
d'autres.

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


Avatar
Raymond H.
Bonjour,
veillez excuser le manque de compréhension que j'ai à plusieurs de vos
phrases car plusieurs ne sont pas clair puisqu'elle peuvent dégager plus
d'un sens ou des sous-entendus. Et quelques fois je me demande si ça a
rapport avec la question posée.

"Christophe HENRY" a écrit dans le
message de news: csp7jj$2dju$

"Le fait de savoir si on peut ou non trouver la clef à partir du clair,
du
chiffré et l'algo, mais sans faire de force brute ou essayer des clefs
différentes (même dans le code C) jusqu'à trouver le clair qui correspond
au
chiffré."

Je sais que j'ai posé la question ailleurs. Mais je ne suis toujours
pas certain de la réponse à cause de la façon qui a été répondu.



J'aurais aimé un simple 'oui' ou 'non' à la question suivante (sinon ça
me laisserait sous-entendre n'importe quoi):
"À cette 4e étape, peut-on (ou avez-vous réussis à) trouver la clef à partir
du clair, du chiffré et l'algo, mais sans faire de force brute ou essayer
des clefs différentes (même dans le code C) jusqu'à trouver le clair qui
correspond au chiffré."

Peu importe les tests réalisés dans un tel programme. En fait,
la question est : pourquoi faut-il éviter la force brute ?


Autrement dit: "Pourquoi est-il nécessaire d'empêcher quiconque de
réussir une attaque à force brute?"

Si c'est bien le sens à votre question, est-ce une attaque à force brute à
partir de la phrase de passe (à supposé qu'il y en ait une pour crypter la
clef de session finale) ou à partir de la clef générée?


Parce qu'une
telle attaque devient inopérante si la clé est agrandie. Or, le but
c'est bien de pouvoir casser des clés de longueur respectable.


Par respectable vous voulez bien dire 'une clef courte'? Ou plutôt vous
voulez dire que le but des adversaires est de pouvoir casser des clefs même
si elle sont très longue?


Dans mon programme, il n'y a pas de tests de clé au sens où tu
l'entends. En fait, il y en a qu'un : c'est pour tester une clé complète
et voir s'il n'y a pas eu d'erreur dans le programme. Mais c'est d'ordre
cosmétique, pour ma tranquilité personnelle. Tous les calculs ont étés
faits avant et composent progressivement la clé.



Donc, c'est un genre d'attaque à force brute (indirectement parce vous
faite une analyse par calcul pour trouver des valeurs qui doivent rencontrer
les critères de votre code). Votre logiciel essais plusieurs valeurs
jusqu'à en trouver qui correspondent à une clef qui rencontre les critères
de votre code (de vos calculs). Dans ce cas, il teste les clefs seulement
selon les valeurs qui pourraient correspondre au critères de votre code
selon l'algo, le clair et le chiffré.

Si c'est bien ça, alors vos calculs pour cette analyse sont en rapport
avec le calcul de l'algo et de la valeur de chaque donnée du chiffré et du
clair eux-mêmes? Semblable au code C que 'Mister Jack' a fait à l'étape 3;
ce qui permettait de ne pas être obliger d'essayer toutes les clefs mais
seulement celle dont les valeurs rencontraient les critères de son code.



Voici un exemple avec une clé de 100 octets. Comme tu peux le voir, le
temps d'exécution de l'algorithme ne dépend pas vraiment de la longueur
de la clé.


$ time ./sax

Clair :
{1,78,255,1,78,251,178,235,148,0,0,7,45,21,111,110,101,17,19,88,37,38,39,40,41,42,45,78,79,99,215,214,213,212,210,207,200,200,188,197,2,2,5,6,7,8,9,56,22,23,24,25,26,27,28,29,30,1,96,97,98,99,100,207,23,24,25,29,67,68,75,76,77,78,95,45,44,43,34,255,255,255,254,253,174,175,176,178,179,180,0,1,2,3,4,5,6,16,17,18}

Chiffré :
{4,32,0,4,32,8,136,40,80,0,0,16,164,84,32,32,20,68,72,64,148,144,144,160,164,168,164,32,32,8,80,80,84,80,72,32,32,32,128,20,8,8,20,16,16,32,36,128,80,80,64,68,72,72,64,68,64,4,0,4,8,8,16,32,80,64,68,68,8,16,40,32,36,32,64,164,160,168,136,0,0,0,0,4,160,160,128,136,136,144,0,4,8,8,16,20,16,64,68,72}

Clé trouvée :
{1,78,255,1,78,251,178,235,148,0,0,7,45,21,111,110,101,17,19,88,37,38,39,40,41,42,45,78,79,99,215,214,213,212,210,207,200,200,188,197,2,2,5,6,7,8,9,56,22,23,24,25,26,27,28,29,30,1,96,97,98,99,100,207,23,24,25,29,67,68,75,76,77,78,95,45,44,43,34,255,255,255,254,253,174,175,176,178,179,180,0,1,2,3,4,5,6,16,17,18}



Ici, je m'imagine que vous avez d'abord créée votre clef et votre clair
pour trouver le chiffré correspondant, puisque je voie que le clair et la
clef sont identiques et de ce fait je ne vois pas comment quelqu'un pourrait
deviner ça (trouver un clef et un clair identique, à moins de faire des
calculs)

Vous auriez donc pris les valeurs de ce clair et de ce chiffré pour
trouver la clef par votre code, et ainsi voir si cela correspondait bien à
la clef que vous aviez.


nbCles : 1
Nombre d'appels total : 25957
Nombre d'appels pour trouver la première clé : 8675

real 0m0.026s
user 0m0.019s
sys 0m0.006s


Moins d'un dixième de seconde pour trouver toutes les clés,
certainement beaucoup moins pour la première. Nombre total de clés
possibles : 256^100 = 6.668*10^240. Nombre d'itérations pour trouver une
clé : 8675.


Ok. Donc par le mot itérations cela suppose qu'il y aurait eu
effectivement au moins un certain nombre de clef qui ont été essayés avec de
trouver la bonne qui correspondait avec le clair et le chiffré: 8675 clef
ici.

Optimisation de l'algo par rapport à une attaque par force brute,
sachant qu'une telle attaque parcours en moyenne la moitié des clés
possibles : 8675/(256^100/2) = 1.301*10^(-237). C'est-à-dire :
0,0...01301, le "0...0" étant à remplacer par 236 zéros, après la
virgule.


Qu'essayez-vous de dire ici? :-) Car plus haut vous avez dit qu'en
rallongeant la clef de mon algo cela pourrait empêcher la réussite de (ou
décourager l'attaque par) la force brute.

Mais, par un code créé en C cela diminuerait de beaucoup de temps
d'essais de la force brute (par itérations en interne, dans le code C). Je
ne sais pas de combien de temps mais sûrement de beaucoup par rapport au
logiciel de chiffrage lui-même.



Mais je suis de votre avis pour dire qu'avec une clef beaucoup plus
grande ce serait préférable pour empêcher la réussite d'une attaque à force
brute, en sorte que même si je donnerais les 3 premiers caractères du clair
et de la clef cela pourrait être inutile vue le grand nombre d'autres
caractères de la clef et du clair qui son inconnus de l'attaquant, et non
créé par l'algo mais créé aléatoirement au début (clef initiale). Avec un
clef de 64 bits dans cette étape 4, à combien de temps évaluez-vous une
attaque à clair connu comme vous l'auriez fait (itération pour vérifier un
certain nombre de clefs à partir du clair, du chiffré et de l'algo)?


Bonne journée
r.h.


1 2 3 4