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

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é."


Non.


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?


La grande caractéristique de l'attaque par force brute en général est
qu'il s'agit de la moins mauvaise méthode si on ne sait pas comment
attaquer un cryptosystème. Elle a aussi comme caractéristique d'être
systématiquement contrée par tout système de chiffrement digne de ce
nom : les temps de cassage deviennent trop longs.

L'attaque que j'expose est une attaque externe : un chiffré, une clair et
l'algo. Le principe est indépendant de l'implantation. Ton chiffrément
étant symétrique, les clés pour chiffrer et déchiffrer sont liés. La
valeur de l'une est déduite de l'autre.


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).


Non. Pas de loin, ni de près.


Votre logiciel essais plusieurs valeurs
jusqu'à en trouver qui correspondent à une clef qui rencontre les critères
de votre code (de vos calculs).


Non. La clé est composée au fur et à mesure. Le seul test de
chiffrement avec une clé est fait lorsqu'une clé a été trouvée, afin
d'écarter une erreur de conception de ma part mais c'est facultatif.


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é.


Le programme fait ce que je lui dit de faire, encore heureux ! Il a en
entrée le clair et le chiffré, est paramétré pour le SA v4 et délivre
en sortie les clés qu'il a découvertes.


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é.
...
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.


Ben oui !? C'est quand même mieux pour vérifier, non ? C'est que c'est
long de saisir tous ces chiffres. Mais bon, si doutes il y a, soumets un
clair, son chiffré et sa clé pour que je puisse tester et un autre clair
avec son chiffré mais sans sa clé que je devrai trouver pour avancer
mes dires, ce qui serait de bonne guerre (perdue).


...
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.


Non ! Tu dois le savoir, un programme sans itérations est plutôt
difficile à concevoir. Cela ne correspond pas à des tests de clés.
Regarde plutôt cela à l'analogue d'un programme d'échec dont la
puissance est désignée par le nombre de coups cherchables à la minute.


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.


Simple : j'entendais démontrer que mon approche n'est *pas* une force
brute, auquel cas le programme tournerait encore à l'heure qu'il est.
Considére l'ensemble de tes clés comme la longueur de la terre au
soleil. Le programme en question, au lieu d'en parcourir la moitié,
parcours beaucoup beaucoup moins qu'un atome, quark, ou même, corde.
150e9*8675/(256**100/2)=3,903e-226.

En fait, même en prenant la taille de l'univers actuel ça pourcourt
beaucoup moins que la longueur de Plank...



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.


Effectivement, cela prends plus de temps de faire le cassage que de
chiffrer, encore heureux :-o Ceci dit, le chiffrement est d'une durée
non-mesurable tandis que le cassage d'une clé de 100 octets est de
l'ordre de la centième de seconde.

C, C++, Java ou cobol, ça reste des mathématiques. Le programme
automatise juste ce que bien d'autres lecteurs du forum devraient avoir
démontré de tête. J'ai juste conceptualisé l'attaque, prototypé et
implanté. Cette dernière étape étant traditionnellement lourde, elle
n'est faite que si l'attaquant est motivé et le défenseur buté ;-)


...
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).


Voici ce qui conditionne la taille de l'échantillon du clair du chiffré
pour connaître la clé : la taille des échantillons doit être au moins
égal à la longueur de la clé. La clé faisait trois octets, il ne m'a
donc fallu que trois octets de chaque. Dans mon exemple, il me fallait un
clair et un chiffré d'une longeur de 100 octets, la clé faisant cette
taille.


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)?


0 s. Non mesurable, en fait.

100 octets font tout de même 800 bits. Et je peux monter beaucoup plus
haut sans problème. C'est juste que ça fait lourd pour usenet, toutes
ces clés ;-)

pour passer de 64 à 800 bits, il faut en ajouter 736. Il y a un facteur
occupant 221 zéros entre les deux...
2**736=3.615*10^221

Aboule le clair et le chiffré. Tu auras (très très vite) une réponse
sûre à ta question.

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


Avatar
Raymond H.
"Christophe HENRY" a écrit dans le
message de news: csqkga$15u$

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é."


Non.


Merci :-)

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.


Ben oui !? C'est quand même mieux pour vérifier, non ? C'est que c'est
long de saisir tous ces chiffres. Mais bon, si doutes il y a, soumets un
clair, son chiffré et sa clé pour que je puisse tester et un autre clair
avec son chiffré mais sans sa clé que je devrai trouver pour avancer
mes dires, ce qui serait de bonne guerre (perdue).


Pas nécessaire, je vous crois sur parole :-)

Si je ne me trompe vous pouviez trouver la clef de cette façon (à partir
du clair, du chiffré et de l'algo) dans toutes les l'étapes du 'Simple algo'
(y compris la 3e étape) ?



Dites! Le fait qu'il vous est possible de trouver la clef à partir du
clair et du chiffré c'est bien parce que l'algo est fixe, c'est à dire qu'il
est régulier du début du chiffrement jusqu'à la fin du chiffrement? Si
c'est bien ça, alors peut importe l'algo vous arriverez toujours à trouver
la clef de la façon dont vous faites (à partir du clair et du chiffré).
N'est-ce pas? Faudrait que les calculs de l'algo soient imprévisibles dans
son processus de chiffrement.


Bonne journée
r.h.


Avatar
Christophe HENRY

Si je ne me trompe vous pouviez trouver la clef de cette façon (à partir
du clair, du chiffré et de l'algo) dans toutes les l'étapes du 'Simple algo'
(y compris la 3e étape) ?


Tout-à-fait. Pour les premiers schémas, j'ai procédé d'abord avec du
calcul matriciel, par facilité. Depuis l'apparition du xor dans tes
formules, je dois recourir à du C, ce qui est plus lent à concevoir mais
bien plus rapide à l'exécution comme me l'a fait voir Jack.

Depuis le départ tes procédés sont cassables. Je suis un débutant dans
le domaine, je le reécris encore. Les spécialistes ont vu autant
que moi que tes principes de base ne te permettent pas d'accéder à un
niveau pourtant indispensable pour créer un algorithme de chiffrement
modérément fiable. Des intervenants te l'ont dit en avance, mais j'ai
préféré te le montrer directement de manière irréfutable.

Nous n'avons pas inventé la manip', néamoins ;-p
CDP : http://perso.wanadoo.fr/antmonni/cdpsid/


...
Faudrait que les calculs de l'algo soient imprévisibles dans son
processus de chiffrement.


Et pourtant il faut tout de même déchiffrer. L'algorithme doit être
connu de tous. Seules les clés peuvent être secrètes. L'attaque par
force brute ne doit pas être exploitable, le temps pour casser un
message par cette voie doit être trop grand par rapport aux enjeux.
L'algo ne doit pas présenter des faiblesses telles que celles indiquées
pour le SA qui permettent d'avoir un calcul (quasiment) indépendant de la
taille de la clé.

L'algorithme utilisé dans le 'simple algo' est faible, inutilisable. Il
faut *changer* *totalement* de procédé. Par extension, j'imagine que
AllCrypter présenté sur [logicipc.com] est cassable, cracable par
force brute (bien avant 2006), à défaut, par une découverte du mot de
passe, phrase de passe, ou clé de cryptage, ou clé de chiffrement comme
je l'ai montré pour tes prototypes. Naturellement, ton mode de
développement est propriétaire, ce qui interdit toute confiance
préalable envers le programme puisque ses sources ne seront pas
publique donc disponibles. Passe encore que pour l'interface graphique
(pour l'encryption et le décryptage) les heures passées à la coder
soient proprio, mais l'algorithme doit impérativement être tenu public.
La sécurité par l'obscurité procure une sécurité très limitée.

Ce que j'appele (mais ça ne reste naturelmmenet que mon avis) le "spam"
initial as dû te permettre de t'en rendre compte ; et je trouve que c'est
plutôt sain comme démarche :-)

Une idée, en passant : conserve ton interface graphique mais sous-traite
la partie chiffrement à un Logiciel Libre tel que gnupg. Mozilla
Thunderbird le fait, avec l'extension Enigmail, par exemple.

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

Avatar
Noshi
On Thu, 20 Jan 2005 12:48:27 +0100, AMcD® wrote:

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 :-).


Le visual basic n'a rien a voir dans le lot :)

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


Je préférais CDP.

--
Noshi

Avatar
AMcD®
Noshi wrote:
On Thu, 20 Jan 2005 12:48:27 +0100, AMcD® wrote:

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 :-).


Le visual basic n'a rien a voir dans le lot :)


Ce que je voulais dire c'est que même si, par extraordinaire, il trouvait un
algo valable, comme ce sera codé en VB ça ouvrira des portes supplémentaires
pour craquer le truc encore plus vite. Pas l'algo en lui-même, mais le soft.
Enfin, tant qu'il faut pas désassembler :-).

Je préférais CDP.


D'ailleurs, j'ai pas trop suivi la fin de l'épopée. Cela s'est terminé
comment au fait, tu le sais ? Suicide, brevet international, fuite sur la
lune ?

--
AMcD®

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


Avatar
Raymond H.
Bonjour,

"Christophe HENRY" a écrit dans le
message de news: csrrhj$hoe$

Si je ne me trompe vous pouviez trouver la clef de cette façon (à
partir
du clair, du chiffré et de l'algo) dans toutes les l'étapes du 'Simple
algo'
(y compris la 3e étape) ?


Tout-à-fait. Pour les premiers schémas, j'ai procédé d'abord avec du
calcul matriciel, par facilité. Depuis l'apparition du xor dans tes
formules, je dois recourir à du C, ce qui est plus lent à concevoir mais
bien plus rapide à l'exécution comme me l'a fait voir Jack.

Depuis le départ tes procédés sont cassables.


'TES'? Mais non, pas tous. :-) Mon dernier procédé dont j'ai dit que
j'adopterais, lequel j'ai expliqué vouloir gardé et améliorer personne ne
l'a encore cassé puisque non cassable pour l'instant (selon que vous avez
dit vous-même). Il est vrai que je n'ai pas terminé, et la suite est
critique (la génération de la clef et le chiffrage de la clef de session par
la phrase de passe). Autrement dit, je parle de trouver le clair à partir
de l'algo et du chiffré seulement, et cela sans posséder de clef. Vous
l'avez dit vous-même qu'il est impossible de trouver cela. Mais, tout n'est
pas terminé puisqu'il y a la 'clef de session' finale à crypter par la
phrase de passe.

J'essais de comprendre le pour et le contre de vos interventions. Car
ce que vous faites concernant le clair, moi je l'analyse pour la clef et non
seulement pour le clair. Mais, bien entendu je ne néglige pas le fait qu'e
l'extension d'un nom de fichier peut suggérer l'entête. J'y réfléchi à cela
aussi afin de rendre imprévisible le calcul de chiffrage (variant selon
certaines valeurs de caractères).

Je suis présentement à faire des tests pour comprendre certaines
différences de calculs et où les employer ou non. Exemple: un simple XOR
offre plus de possibilité qu'un XOR avec une addition:

"Valeur1 xor Valeur2 = 164" donne 256 possibilités

"((Valeur1 + Valeur1) xor Valeur2 ) = 164" donne 128 possibilités
etc.


Je suis un débutant dans
le domaine, je le reécris encore. Les spécialistes ont vu autant
que moi que tes principes de base ne te permettent pas d'accéder à un
niveau pourtant indispensable pour créer un algorithme de chiffrement
modérément fiable. Des intervenants te l'ont dit en avance, mais j'ai
préféré te le montrer directement de manière irréfutable.


Le 'TES' est de trop :-) pour la même raison plus haut. Je ne
généralise pas.

...
Faudrait que les calculs de l'algo soient imprévisibles dans son
processus de chiffrement.


Et pourtant il faut tout de même déchiffrer.


Oui.

L'algorithme doit être
connu de tous.


Oui.

Seules les clés peuvent être secrètes.


Et le clair dans mon cas: selon le principe de Vernam à 'masque
jetable'.

L'attaque par
force brute ne doit pas être exploitable, le temps pour casser un
message par cette voie doit être trop grand par rapport aux enjeux.


Certainement.

L'algo ne doit pas présenter des faiblesses telles que celles indiquées
pour le SA qui permettent d'avoir un calcul (quasiment) indépendant de la
taille de la clé.


"Un calcul (quasiment) indépendant de la taille de la clé." Ceci
n'est-il pas possible seulement en rapport avec un clair, un chiffré et un
algo connu?

L'algorithme utilisé dans le 'simple algo' est faible, inutilisable. Il
faut *changer* *totalement* de procédé.



Pas dans cette dernière étape avec juste un chiffré et un algo connu.
Au dernier stade il peut être utilisable (mais il faut que je développe la
partie transformant la clef de session finale en un code d'identification de
la phrase de passe 'avec du xor': un nouvelle idée dont je viens d'avoir;
car transmettre une clef de session finale à chaque fois cela n'est pas très
commode) et n'est pas faible (selon décrit plus haut). Ici je n'oublie
cependant pas le fait qu'il est possible que l'entête d'un fichier puisse
être connu par l'extension de son nom. Je n'oublie pas non plus les
répétitions dans un chiffré: par exemple avec un clair n'ayant que des
caractères ascii zéro au début. C'est pourquoi je n'ai pas terminé de
réfléchir à rendre imprévisible certains calculs de l'algo et non seulement
la clef.


La sécurité par l'obscurité procure une sécurité très limitée.


D'accord.

Bonne journée
r.h.


Avatar
Christophe HENRY

Je suis présentement à faire des tests pour comprendre certaines
différences de calculs et où les employer ou non. Exemple: un simple XOR
offre plus de possibilité qu'un XOR avec une addition:


Un début d'excellente démarche :-) Il aurait fallu commencer par là.


"Valeur1 xor Valeur2 = 164" donne 256 possibilités


Bon. Entropie optimale. S'inverse avec un seul calcul, tout comme la
solution suivante, bien qu'elle "paraîsse" plus compliquée.


"((Valeur1 + Valeur1) xor Valeur2 ) = 164" donne 128 possibilités


Histoire de préciser :
(v1 + v1) xor v2 = c
<=> (2*v1) xor v2 = c
<=> (v1 shl 1) xor v2 = c
<=> x xor v2 = c sachant que x = v1 shl 1

De là, on trouve x : x = c xor v2
et : v1 = x shr 1 et v2 = v1 + 1

Bilan : 1 seul calcul pour trouver 2 solutions, au lieu de 128 ou 256.

Cela devrait t'indiquer l'idée de ma méthode.

faire un xor ou une addition reste une subsitution. La composée de deux
substitutions reste une substitution.


Pas dans cette dernière étape avec juste un chiffré et un algo connu.
Au dernier stade il peut être utilisable (mais il faut que je développe la
...


Hors spécifications, point de salut.


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

Avatar
Noshi
On Sat, 22 Jan 2005 04:47:41 +0100, AMcD® wrote:

Noshi wrote:
On Thu, 20 Jan 2005 12:48:27 +0100, AMcD® wrote:

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 :-).


Le visual basic n'a rien a voir dans le lot :)


Ce que je voulais dire c'est que même si, par extraordinaire, il trouvait un
algo valable, comme ce sera codé en VB ça ouvrira des portes supplémentaires
pour craquer le truc encore plus vite. Pas l'algo en lui-même, mais le soft.
Enfin, tant qu'il faut pas désassembler :-).


Ben a choisir je préfèrerais qu'il le fasse en java ;)

Je préférais CDP.


D'ailleurs, j'ai pas trop suivi la fin de l'épopée. Cela s'est terminé
comment au fait, tu le sais ? Suicide, brevet international, fuite sur la
lune ?


Aucune idée. Je viens épisodiquement quand y'a de l'animation. Je suppose
que quelqu'un a démonté le soft avec un canif suisse et que ca a calmé le
concepteur.

Tiens le jour ou je m'emmerde je fais un soft de crypto et je le publie ici
sous un autre pseudo :)

--
Noshi



Avatar
Raymond H.
Bonjour,

"Christophe HENRY" a écrit dans le
message de news: cstep6$14vd$

Je suis présentement à faire des tests pour comprendre certaines
différences de calculs et où les employer ou non. Exemple: un simple XOR
offre plus de possibilité qu'un XOR avec une addition:


Un début d'excellente démarche :-) Il aurait fallu commencer par là.


Disons qu'aux étapes 1, 2 et 3 j'essayais de trouver une façon pour
empêcher une inversion de l'algo soit pour trouver la clef ou le clair. Mais
après, parce que j'ai décidé de faire semblable à Vernam (masque jetable),
j'ai dû modifier l'algo pour mettre l'accent sur la génération non
prévisible de l'algo et simplifier le chiffrage du clair. J'en suis à
réfléchir à cela maintenant.



"Valeur1 xor Valeur2 = 164" donne 256 possibilités


Bon. Entropie optimale. S'inverse avec un seul calcul, tout comme la
solution suivante, bien qu'elle "paraîsse" plus compliquée.


"((Valeur1 + Valeur1) xor Valeur2 ) = 164" donne 128 possibilités


Histoire de préciser :
(v1 + v1) xor v2 = c
<=> (2*v1) xor v2 = c
<=> (v1 shl 1) xor v2 = c
<=> x xor v2 = c sachant que x = v1 shl 1

De là, on trouve x : x = c xor v2
et : v1 = x shr 1 et v2 = v1 + 1

Bilan : 1 seul calcul pour trouver 2 solutions, au lieu de 128 ou 256.


Je comprends le SHL et le SHR pour le décalage binaire vers la gauche ou
vers la droite, mais je ne suis pas vraiment votre logique ici. Il semble
que nous ne parlons pas de la même chose, puisque vous parlez de trouver '2
solutions, au lieu de 128 ou 256'. Vous devriez arriver au même nombre de
possibilités que moi pour une réponse donnée.



Ici, on essaie de savoir combien de combinaisons différentes (avec
Valeur1 et Valeur2) peuvent donner '164'. Si on essaie tous les nombres
possibles de 0 et 255 (ascii) soit pour Valeur1 ou pour Valeur2 et on aura
128 combinaisons qui donnent le nombre 164.



Bonne soirée

r.h.

N.B.: Voici quelques une des 128 possibilités pour la réponse 164 (je le
fais en une seule boucle en VB):
(000 + 000) Xor 164 = 164
(001 + 001) Xor 166 = 164
(002 + 002) Xor 160 = 164
(003 + 003) Xor 162 = 164
(004 + 004) Xor 172 = 164
(005 + 005) Xor 174 = 164
etc.


Avatar
Christophe HENRY

(v1 + v1) xor v2 = c
<=> (2*v1) xor v2 = c
<=> (v1 shl 1) xor v2 = c
<=> x xor v2 = c sachant que x = v1 shl 1

De là, on trouve x : x = c xor v2
et : x1 = x shr 1 et x2 = x1 xor 128



J'avais fais une erreur de calcul.


Je comprends le SHL et le SHR pour le décalage binaire vers la gauche ou
vers la droite, mais je ne suis pas vraiment votre logique ici. Il semble
que nous ne parlons pas de la même chose, puisque vous parlez de trouver '2
solutions, au lieu de 128 ou 256'. Vous devriez arriver au même nombre de
possibilités que moi pour une réponse donnée.


J'y arrive aussi, avec une boucle sur 65536 itérations.

Pour toute équation de type "2*x xor 64 = 164" il y a deux solutions
parfaitement liées.

Ainsi : (242 + 242) xor 64 = 164 ET (114 + 114) xor 64 = 164
Avec 114 = 242 xor 128.

pour résoudre "x xor 64 = 164", on a x8 ou x$2.


Ici, on essaie de savoir combien de combinaisons différentes (avec
Valeur1 et Valeur2) peuvent donner '164'. Si on essaie tous les nombres
possibles de 0 et 255 (ascii) soit pour Valeur1 ou pour Valeur2 et on
aura 128 combinaisons qui donnent le nombre 164.


C'est un exemple de force brute. Tu parcours 65536 possibilités.
J'utilise une méthode plus finaude : je n'en parcours que 256, pour ne
m'intéresser qu'aux 128 nécessaires :

Pour i de 0 à 255
solution_1 = (164 xor i) shr 1
solution_2 = solution_1 xor 128
if (solution_1<=solution_2) affiche solution_1, solution_2
FPour

J'obtiens 128 sorties qui reprennent toutes les solutions.


On s'éloigne un peu de la cryptologie, là.

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


1 2 3 4