OVH Cloud OVH Cloud

Simple algo: création de la clef de session

55 réponses
Avatar
Raymond H.
Bonjour,

"Christophe HENRY" <forumslkm.sbgodin@nerim.net.sans_lkm> a écrit dans le
message de news: ctia8g$6td$1@biggoron.nerim.net...
> Le Sun, 30 Jan 2005 02:40:27 -0500, Raymond H. a écrit :
>
>> Bonjour,
>>
>> Aie-je bien raison de penser que dans ces deux exemples le xor
>> serait
>> moins difficiles à inverser (déchiffrer) que l'addition, même si le
>> nombre
>> de possibilités du xor dépasse celui de l'addition?
>
> Aucune difficulté dans chacune des deux possibilités.

Autrement dit, dans l'algo de Vernam il n'y aurait aucune différence qu'il
ait utilisé soit un xor ou une addition?

>Ce qui m'a ennuyé
> (sans rendre l'algo plus fort) est le mélange du xor et de l'addition.


Disons que pour le prolongement de la clef, je pense qu'il serait mieux
de mélanger les deux: car sinon on n'aurait que 256 possibilités tandis
qu'avec des additions on rend plus difficile le déchiffrage via
l'utilisation de l'algo (en inversion ou autre). Cela, dans l'optique où on
connaît déjà l'algo, afin de rendre aussi difficile l'inversion qu'une
attaque à force brute. C'est du moins ce que je conçoit.
Si ( 20 + 23 ) xor 22 = 61 , et qu'on soupçonne que la valeur
intermédiaire est 22 en ayant déjà le chiffré 61, il sera plus difficile de
trouver 20 que de trouver uniquement 43 (ici pensons à une attaque à clair
connue). Je parle concernant le prolongement de la clef. Mais concernant
le chiffrage je pense qu'un simple xor serait suffisant surtout si tout
repose sur la force de calcul du prolongement de la clef de session.

J'ai pris quelques temps pour ruminer quelle serait la façon la plus
simple et la plus certaine de faire l'algo. J'en suis venu à la conclusion
que si le seul algo incassable est celui de Gilbert Vernam en 1917, alors
pourquoi ne pas m'en inspirer pour faire quelque chose d'aussi certain qui
lui ressemble et tout en restant autant que possible aussi simple.
Il faut que je m'assure des points suivants:
1 - générer une clef imprévisible de la même longueur que le clair (une
seule clef par chiffrage).
2 - construire un algo générateur de clef (de session) interdisant une
attaque à clair connu (une entête connue via l'extension du fichier par
exemple).
3 - ne conserver que la partie finale de la clef de session qui doit servir
pour le déchiffrage; celle-ci et l'identificateur de la phrase de passe
(généré par la phrase de passe) doivent être chiffrés ensemble par la phrase
de passe afin de les ajouter au chiffré existant. L'algo chiffrant la
phrase de passe et la clef session finale doit être aussi sûr que celui qui
génère le prolongement de la clef de session (car les 1er caractères de la
clef de session est généré aléatoirement: clef de session initiale).
4 - si les 3 premiers points sont rencontrés, le chiffrage du clair par un
simple xor serait suffisant pour être aussi sûr que l'algo de Vernam.



Donc, un simple xor serait suffisant pour le chiffrage du clair; mais la
partie de l'algo générant (prolongeant) la clef de session devrait être plus
compliquer afin de créer des murs de feu dans celui-ci (dans '(Var1 + Var2)
xor Var3=255' l'addition serait un mur interdisant l'inversion); donc,
demandant une partie algorithmique plus compliqué (donc, à plusieurs
niveaux).
J'ai fais quelques tests pour savoir le nombre de possibilités à partir
de quelques calculs différents:
32896 possibilités: (V1 + V2 + V3)=255
65536 possibilités: (((V1 xor V2)xor V3)=255
256 possibilités: (V1 + V2)=255
256 possibilités: ((V1 xor V2)=28
128 possibilités: (k1+k1)xor k2=164
32896 possibilités: (k1+k2)xor k3=164
14652 possibilités: ((k1+k2)xor 53)+k3=164
1517673 possibilités: ((k1+k2)xor m1)+k3=164
0 possibilité: ((128+128)xor m1)+128=255
1 possibilité: (((128+128)xor m1)+128) Mod 256=255
165 possibilités: ((V1 xor V2)+V1=164
1 possibilité: ((V1 + 53)xor V1=255
203 possibilités: ((V1 + 53)xor V2=164
1 possibilité: ((V1 xor 53)=255
6724352 possibilités: (k1+k2)xor(k3+k4)=164
625364 possibilités: ((k1+k2+m1+m2)xor k2)+k1=164
1 possibilité: Var1 xor 64=255



J'ai fait des tests en codes de programmation pour voir quel calcul
rallonge la plus longue clef de session à partir d'une clef de session
initiale de seulement 4 caractères. J'ai mis des caractères ascii zéro (0)
pour le clair, puisqu'avec des caractères zéro il est plus difficile de
générer des caractères variés dans le rallongement de la clef de session.

k est la clef de session initiale. m est le clair (des caractères ascii
zéro; caractères Nul).
(k1+m1) xor (k3+k4)=k5 donne comme résultat un caractère de plus à ajouter à
la fin de la clef de session. Donc k=k & k5 La clef de session est donc
prolongée en étant influencé par le clair m1.


k=2222
m=0000...
(k1+m1) xor (k3+k4)=
050-050-050-050-086-186-034-238-070-142-246-106-038-030-178-186-074-026-214-074-106-174-206-054-110-010-182-246-194-178-194-130-134-186-130-190-198-062-134-122-198-126-194-058-058-010-134-170-010-190-078-166-254-026-086-214-210-178-210-082-246-250-034-078-134-046-150-138-166-030-082-250-234-250-182-074-234-206-014-150-078-042-118-054-226-050-098-162-230-186-194-222-070-158-038-026-006-190-226-186-154-234-102-234-202-094-078-070-094-250-022-086-050-114-178-114-022-250-162-238-134-142-182-170-230-030-178-122-202-090-150-138-234-046-142-054-046-074-246-118-066-242-194-194-198-122-130-062-006-062-198-058-006-126-066-250-058-074-198-234-138-062-014-166-062-218-022-086-082-114-210-018-182-186-162-078-070-046-214-074-102-158-210-058-106-058-118-138-106-206-078-150-142-234-054-182-098-242-098-226-038-250-066-222-006-030-102-090-198-062-098-250-154-170-038-042-202-094-014-070-158-186-086-086-050-050-050-050-


Donc, produit une clef de 224 caractères différents à partir de
caractères initiales 2222 (en ascii= 50 50 50 50). Le clair comporte donc
au dessus de 224 caractères ascii zéro.


k=1234
m=0000...
(k1+m1) xor (k3+k4)=
049-050-051-052-086-184-061-193-168-209-068-212-176-085-065-066-051-032-018-112-177-001-160-209-192-144-240-081-129-066-051-036-214-184-189-081-216-145-212-052-208-149-177-114-243-240-082-048-113-081-144-209-016-176-080-209-049-178-179-180-086-184-189-193-040-081-196-212-176-213-065-194-179-160-018-112-049-001-032-081-064-144-240-209-129-194-179-164-214-184-061-081-088-017-084-052-208-021-177-242-115-112-082-048-241-081-016-081-144-176-080-081-049-050-051-052-




Ici, le même calcul produit moins de caractères différents à partir de
la clef 1234 que la clef 2222. Mais plus bas on voit que c'est le contraire
avec un calcul différent.

Voici le résultat à partir d'autres calculs:



k=2222
m=0000...
((k1+k2)xor m1)+k3=
Donne une clef à 224 caractères différents.

k=1234
m=0000...
((k1+k2)xor m1)+k3=
Donne une clef à 896 caractères différents.
------------------------------

k=2222
m=0000...
(k1+m1) xor (k2+k3)=
Donne une clef à 224 caractères différents.

k=1234
m=0000...
(k1+m1) xor (k2+k3)=
Donne une clef à 896 caractères différents.

------------------------------

k=2222
m=0000...
(k1+k2) xor (m1+k3)+k4=
Donne une clef à 160 caractères différents

k=1234
m=0000...
(k1+k2) xor (m1+k3)+k4=
Donne une clef à 640 caractères différents

------------------------------

k=2222
m=0000...
((k1+k2) xor (m1+k3)) xor k4=
Donne une clef à 320 caractères différents

k=1234
m=0000...
((k1+k2) xor (m1+k3)) xor k4=
Donne une clef à 320 caractères différents

------------------------------

k=2222
m=0000...
(k1+k2) xor (m1+k3)=
Donne une clef à 448 caractères différents

k=1234
m=0000...
(k1+k2) xor (m1+k3)=
Donne une clef à 896 caractères différents

------------------------------



Donc, le calcul ici qui produit le plus de caractères différents à
partir soit de la clef (à 4 caractères) 2222 ou 1234 est
(k1+k2) xor (m1+k3)=
C'est justement le calcul qui donne le plus grand nombre de possibilité
parmi les test que j'ai mentionnés au début (plus haut ici) à 4 variables
différentes:
6724352 possibilités: (k1+k2)xor(k3+k4)=164

Prenons ce même calcul et ajoutons des caractères à la clef. Voici
quelques résultats assez convainquant:



k=22222
m=0000...
(k1+k2) xor (m1+k3)=
Donne une clef à 896 caractères différents

k=12345
m=0000...
(k1+k2) xor (m1+k3)=
Donne une clef à 448 caractères différents
------------------------------

k=222222
m=0000...
(k1+k2) xor (m1+k3)=
Donne une clef à 1984 caractères différents

k=123456
m=0000...
(k1+k2) xor (m1+k3)=
Donne une clef à 3968 caractères différents

------------------------------

k=2222222
m=0000...
(k1+k2) xor (m1+k3)=
Donne une clef à 1920 caractères différents

------------------------------

k=1234567 (3975 pas pareil)
m=0000...
(k1+k2) xor (m1+k3)=
Donne une clef à 3840 caractères différents

------------------------------

k=12345678
m=0000...
(k1+k2) xor (m1+k3)=
Donne une clef à 16256 caractères différents

------------------------------

k=123456789
m=0000...
(k1+k2) xor (m1+k3)=
Donne une clef à 16256 caractères différents

------------------------------


Donc, avec une clef de seulement 9 caractères et un clair qui contient
plus de 16256 caractères ascii zéro (0), cela donne une clef de session
comportant 16256 caractères différents.
Dans cet exemple, la clef '123456789' peut donc chiffrer un clair
d'environ 16 Kilo octets, et cela avec une clef de session n'ayant aucun
cycle de caractères qui se répète. En plus le clair comportait uniquement
des caractères ascii zéro (0), c'est à dire, le caractère NUL qui devrait
être le plus facile à utiliser pour déchiffrer.

On pourrait donc supposer que si le clair comportait des caractères
différents du caractère ascii zéro, cela pourrait donner une clef à l'infini
qui n'aurait aucun cycle qui se répète; donc aucun caractère prévisible
puisque influencé par le clair qui n'est pas connu dans son ensemble.
Pour éviter un cycle qui se répète lorsqu'on a un clair de plusieurs Mo
de caractères ascii zéro (ou de plusieurs caractère ayant le même nombre
ascii, tel les pixels d'un bitmap), j'ai pensé ajouté une incrémentation
dans la partie de l'algo (générant le prolongement de la clef) qui sert de
mur de feu, donc le numéro indiquant l'ordre du caractère actuel 'm1' qui
est utilisé pour le prolongement de la clef:
(k1+k2+Rép1) xor (m1+k3)=

Donc, si on est rendu à la lecture du dixième caractère du clair, alors
'Rép1' vaudrait la valeur 10.


Je suis rendu à réfléchir si une autre variable ayant une valeur
imprévisible changeante devrait être ajoutée dans ce mur, disons une valeur
représentée par 'Var?', une valeur prise dans les caractères de la phrase de
passe, dans la clef de session ou dans le clair lui-même :
(k1+k2+Rép1+Var?) xor (m1+k3)=


Qu'en pensez-vous?


Bonne journée.
Raymond H.

10 réponses

1 2 3 4 5
Avatar
Raymond H.
Bonjour,

"Christophe HENRY" a écrit dans le
message de news: cu4rmm$2546$

Je viens de trouver une solution pour tenter d'éliminer la
possibilité
d'une attaque à clair connu (donc, via un en-tête connu à cause de
l'extension du nom du fichier).


Mauvaise réponse :-o Une attaque à clair connu est censée se faire avec
un chiffré et un clair *complet*, pas seulement le nom du fichier.


Ici, je me limitais à parler de l'attaque mentionnée dans mes derniers
messages: celui où on peut savoir quelques caractères d'un en-tête ayant
toujours ou presque les même caractères pour identifier le fichier.
Exemple, l'extension jpeg contient un en-tête propre à lui et si l'on
connaît l'extension on connaît donc cet en-tête et on peut deviner certains
caractères du chiffré. Mais, sûrement vous saviez que c'est de cela dont je
parlais.


Avant de chiffrer avec un xor, je fais une permutation du clair par
groupe de 8 octets. Le chiffre de droite dans la valeur ascii du 9e
caractère (de 0 à 9) indique la permutation qui doit être utilisée parmi
les
10 choix disponibles de permutation pour les 8 caractères qui précèdent
ce
9e caractère. Donc, le choix de permutation est imprévisible. Ensuite
seulement, on chiffre.


Autrement dit tu procède à un brouillage du clair dont le procédé ne
dépend pas d'une clé.


Il semble que vous n'ayez pas vraiment compris. Le brouillage dépend de
la clef de session dans le sens que le clair brouillé est par la suite
chiffré de la même façon que mentionnée dans mes derniers messages. Même
chose pour la clef de session, on ne conserve que la clef de session finale.


Si tu numérote de 0 à 9 : il y a dix caractères et le dernier
caractères est le _dixième_ et qui a le _rang_ 9.


Faudrait relire plus attentivement mon explication qui est quand même
assez clair à cause de l'exemple donné. À tous les 4 caractères, on
brouille 8 caractères à la fois et ce brouillage peut être fait de 10 façons
différentes: c'est le 9e caractère qui décide quel brouillage doit être
utilisé pour brouiller les 8 caractères qui le précèdent.

Après avoir permuter l'ensemble du clair, on crée la clef puis on
chiffre le clair via un xor entre la clef de session et le clair. Ainsi
en
est-il pour empêcher une attaque à clair connu.


On mathématise un poil :
M le Message clair.
C le chiffré
K la clé
b() fonction de brouillage
c() fonction de chiffrement

Le brouillage préalable se traduit par :
b(M)

Le chiffrement du brouillé se traduit par :
C = f( b(M),K )

Par hypothèse, le brouillage est réversible. Il existe donc une fonction
réciproque que j'appele b_1 (lire "bé moins zun"). De même pour la
fonction de déchiffrement f_1.

Ainsi : M = b_1( f_1(C,K) ) pour le déchiffrement.

J'ai des chiffrés et leurs clairs.



Je pense que vous n'avez aucune chance de débrouiller le clair puisqu'il
faudrait auparavant déchiffrer le chiffré auparavant. Et vous ne pouvez pas
le déchiffrer avec une attaque à clair connu puisque le clair est brouillé
avant d'être chiffré. En plus, il ne faut pas oublier que vous ne pouvez
pas prendre un autre clair pour comparaison puisque la clef de chiffrage
n'est utilisée qu'une seule fois par chiffrage: masque jetable.

Lorsque 8 caractères sont brouillés, le genre de brouillage est décidé
par le 9e caractère. Ce 9e caractère est ensuite brouillé à son tour avec
les 7 caractères de son groupe de 8. Et ainsi de suite jusqu'à la fin.
Pour débrouiller il vous faut la fin du fichier. Pour avoir la fin du
fichier brouillé il vous faut auparavant l'avoir déchiffrer. Pour l'avoir
déchiffrer il vous faut avoir la phrase de passe qui décrypte la clef de
session finale. Donc, vous ne pouvez pas débuter par débrouiller le clair,
ni avec une attaque à clair connue qui à mon avis est complètement
impossible, peu importe les calculs que vous effectués.


Il va donc falloir passer le
brouillage qui n'est un chiffrement par substitution à clé unique. Avant
on avait, en gros, une superposition de deux chiffrements à clés,
maintenant il n'y en plus qu'un. Pas sûr que cela soit mieux.



Ce n'est pas ça. Explication ci-dessus.


Dans une hypothèse où la clé K est le seul secret inconnu, le brouillage
ne sert plus à rien puisque la fonction est disponible dans le
code source.



Le brouillage sert uniquement à interdire une attaque à clair connu,
puisque l'emplacement des caractères ne correspond plus à l'emplacement du
clair original. Le 1er caractère pourrait se ramasser au 450e caractère, et
le 450 pourrait prendre la place du 648e. Pour pouvoir faire un
débrouillage il faudrait débuter par la fin qui n'est plus puisque
l'ensemble a été chiffré par la suite, et cette fin est re-modifiée avec la
clef de session finale qui n'est pas choisie par l'utilisateur (une clef de
session unique par chiffrage, donc pas d'attaque à clair connu puisqu'aussi
le clair est auparavant permuté). On ne peut comparer des clairs et des
chiffrés puisque la clef de session est créé par l'algo et influencée (dans
son prolongement) par le clair avant que celui-ci (le clair) soit chiffré ou
brouillé.


De ce fait, je calcule b(M) que je nomme M' ("ème prime"). Le problème
devient : C = f(M',K). Et on est ramené à la cryptanalyse "classique".

La sécurité du brouillage repose donc sur l'obscurité : on n'est pas
censé disposer du code source du chiffrement. Pas bon.


Relire plus haut pour mieux comprendre le principe de l'inconnu du
brouillage.

Bonne journée
Raymond H.


Avatar
Raymond H.
Autrement dit tu procède à un brouillage du clair dont le procédé ne
dépend pas d'une clé.


Il semble que vous n'ayez pas vraiment compris. Le brouillage dépend de
la clef de session dans le sens que le clair brouillé est par la suite
chiffré de la même façon que mentionnée dans mes derniers messages. Même
chose pour la clef de session, on ne conserve que la clef de session
finale.



Milles excuses, j'ai de la fatigue dans la tête. Vous avez raison de
dire que le procédé de brouillage ne dépend pas d'une clé.

Le choix de brouillage de chaque groupe de 8 caractères dépend du chiffre de
droite dans le nombre ascii du 9e caractères (exemple: 143 dit de brouiller
selon le 3e choix). Ainsi en est-il pour tous les groupes de 8 caractères
jusqu'à la fin du fichier à brouiller. Pour débrouiller, il faut donc le
faire à partir du dernier groupe de caractères à la fin du fichier. Mais ce
dernier groupe pourrait être chiffrer par la phrase de passe après avoir été
chiffré par la clef de session. Donc, on a de l'inconnu.



Bonne journée
r.h.


Avatar
Christophe HENRY

Mauvaise réponse :-o Une attaque à clair connu est censée se faire avec
un chiffré et un clair *complet*, pas seulement le nom du fichier.


Ici, je me limitais à parler de l'attaque mentionnée dans mes derniers
messages: celui où on peut savoir quelques caractères d'un en-tête ayant
toujours ou presque les même caractères pour identifier le fichier.
Exemple, l'extension jpeg contient un en-tête propre à lui et si l'on
connaît l'extension on connaît donc cet en-tête et on peut deviner certains
caractères du chiffré. Mais, sûrement vous saviez que c'est de cela dont je
parlais.


Non. Je ne devine pas. Je suis absolument dépourvu de cette capacité. En
cas de doute, je préfère poser la question. Ta réponse faisait
naturellement partie des possibles.


Autrement dit tu procède à un brouillage du clair dont le procédé ne
dépend pas d'une clé.


Il semble que vous n'ayez pas vraiment compris.
...
Si tu numérote de 0 à 9 : il y a dix caractères et le dernier
caractères est le _dixième_ et qui a le _rang_ 9.
...

Faudrait relire plus attentivement mon explication qui est quand même
assez clair à cause de l'exemple donné.


Il serait utile d'adopter un autre ton envers quelqu'un qui t'aide
bénévolement et qui met publiquement ses preuves à disposition.


J'ai des chiffrés et leurs clairs.


Je pense que vous n'avez aucune chance de débrouiller le clair puisqu'il
faudrait auparavant déchiffrer le chiffré auparavant.
...


Je _pense_ le contraire naturellement. Afin de trancher, fournit une
implémentation de l'ensemble. Afin que nous puissions y *réfléchir*.


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


Avatar
Raymond H.
Bonjour,

"Christophe HENRY" a écrit dans le
message de news: cu63ri$2lkf$

Mauvaise réponse :-o Une attaque à clair connu est censée se faire avec
un chiffré et un clair *complet*, pas seulement le nom du fichier.


Ici, je me limitais à parler de l'attaque mentionnée dans mes
derniers
messages: celui où on peut savoir quelques caractères d'un en-tête ayant
toujours ou presque les même caractères pour identifier le fichier.
Exemple, l'extension jpeg contient un en-tête propre à lui et si l'on
connaît l'extension on connaît donc cet en-tête et on peut deviner
certains
caractères du chiffré. Mais, sûrement vous saviez que c'est de cela dont
je
parlais.


Non. Je ne devine pas. Je suis absolument dépourvu de cette capacité. En
cas de doute, je préfère poser la question. Ta réponse faisait
naturellement partie des possibles.


D'accord. J'aurais pensé que vous vous souveniez de nos suites de
messages (de nous deux). Mais pas de problème :-)

Autrement dit tu procède à un brouillage du clair dont le procédé ne
dépend pas d'une clé.


Il semble que vous n'ayez pas vraiment compris.
...
Si tu numérote de 0 à 9 : il y a dix caractères et le dernier
caractères est le _dixième_ et qui a le _rang_ 9.
...

Faudrait relire plus attentivement mon explication qui est quand même
assez clair à cause de l'exemple donné.


Il serait utile d'adopter un autre ton envers quelqu'un qui t'aide
bénévolement et qui met publiquement ses preuves à disposition.


Non. J'ai un ton bien normal et bien humble. Je n'écrivais pas dans
une attitude hautaine ni méprisante. Je disais cela comme ça tout
bonnement. Je n'ai pas employé le verbe à l'impératif pour donner un ordre.
J'ai employé le verbe 'falloir' au même temps que vous avez employé le verbe
'être utile'. Mais, effectivement cela pourrait sembler que j'écrivais de
façon méprisante, mais je vous assure que ce n'était pas le cas du tout. Je
vais donc essayer de dire les choses différemment à l'avenir pour ne pas
donner une fausse impression :-)

Ceci étant dit, je voulais juste vous encourager à relire attentivement
ce que j'avais écrit dans mon message précédent car avec l'exemple on voit
ce que je voulais dire. C'est pourquoi je jugeait qu'il n'était pas
nécessaire que je ré explique la même chose ici en me répétant. Car il
arrive qu'en lisant la même chose une 2e fois qu'on voit les choses sous un
autre angle.



J'ai des chiffrés et leurs clairs.


Je pense que vous n'avez aucune chance de débrouiller le clair
puisqu'il
faudrait auparavant déchiffrer le chiffré auparavant.
...


Je _pense_ le contraire naturellement. Afin de trancher, fournit une
implémentation de l'ensemble. Afin que nous puissions y *réfléchir*.


Bien d'accord. Mais je n'ai pas finalisé avec le chiffrage de la clef
de session par la phrase de passe car je ne suis pas rendue à cette étape
encore. Voulez-vous quand même que je vous envoie un exemple mais sans la
clef de session finale (clef qui devrait être chiffré par la phrase de
passe) ?

Je pourrais me tromper, mais même si on a la clef de session initiale
(et le chiffré) je ne voie pas comment on peut faire pour trouver le clair
brouillé et chiffré. Bien entendu s'il s'avérait que je me trompe alors
tant mieux si on le prouve car je préfère cela ainsi qu'on le démontre.


Passez une bonne journée

Raymond H.



Avatar
Christophe HENRY

...je voulais juste vous encourager à relire attentivement ce que
j'avais écrit dans mon message précédent car avec l'exemple on voit
ce que je voulais dire. C'est pourquoi je jugeait qu'il n'était pas
nécessaire que je ré explique la même chose ici en me répétant.
Car il arrive qu'en lisant la même chose une 2e fois qu'on voit les
choses sous un autre angle.


Je préfèrerai avoir tout en un seul jet selon le processus usé jusqu'à
la corde suivant :
- exposé de principe
- exemple global rapidement traité
- algorithme précis et complet
- exemples d'entrées et exemples de sorties
- clairs et chiffrés disponibles sans la clé pour les preuves


...
de session par la phrase de passe car je ne suis pas rendue à cette
étape encore. Voulez-vous quand même que je vous envoie un exemple
mais sans la clef de session finale (clef qui devrait être chiffré par
la phrase de passe) ?


Non. Algorithme complet. Exemples complets. Le tout expliqué avec des
fonctions (mathématiques ou informatiques...) qui permettent à un esprit
peu littéraire comme le mien d'accrocher dès la première lecture.

La complexité de ton exposé (pas celle de l'algo) m'empêche d'en
comprendre les détails. J'ai du temps limité pour mes compétences
limitées.


...
clair brouillé et chiffré. Bien entendu s'il s'avérait que je me
trompe alors tant mieux si on le prouve car je préfère cela ainsi
qu'on le démontre.


Cela a été déjà fait dans le cas général.

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

Avatar
Apokrif
Christophe HENRY :

Autrement dit, dans l'algo de Vernam il n'y aurait aucune
différence qu'il ait utilisé soit un xor ou une addition?


Tout à fait. Il s'agit d'une substitution
poly-alphabétique. Addition ou xor, même combat.


C'est-à-dire que le XOR n'est rien d'autre qu'une addition bit à bit
(qui présente l'intérêt d'être sa propre réciproque).

--
`cat ~/.signature`


Avatar
Raymond H.
Bonjour,
Voici étape par étape un exemple.
-----------------------------------------------------

ÉTAPE 1: incrémentation de chaque caractère ascii de Clair1.

On incrémente de 'un' chaque caractères du Clair1 pour donner Clair2.
Ceci est pour diversifier d'avantage les caractères de la clef de session
complète si Clair1 comportait plusieurs caractères ascii zéro de suite.

Var1 vaut zéro au départ et ensuite on fait Var1=Var1+1 pour l'incrémenter
de un à chaque fois. Après 255 on recommence à zéro.

m = 050-023-045-112-124-084-045-056-056 = Clair1
+Var1 ou
+
000-001-002-003-004-005-006-007-008-...
m = 050-024-047-115-128-089-051-063-064 = Clair2

-----------------------------------------------------

ÉTAPE 2: création de la clef de session complète.

Avec la formule suivante, et influencé par Clair2, on crée la clef
complète à partir de la clef de session initiale:
(k1+k2) xor (m1+k3) = dernier octet ajouté à k

k = 049-050-051-052 = clef de session initiale créée aléatoirement au début.
m = 050-024-047-115-128-089-051-063-064 = Clair2

(49+50) xor (50+51)=6
k = 049-050-051-052-006

(50+51) xor (24+52)A
k = 049-050-051-052-006-041

(51+52) xor (47+6)‚
k = 049-050-051-052-006-041-082

(52+6) xor (115+41)6
k = 049-050-051-052-006-041-082-166

(6+41) xor (128+82)%3
k = 049-050-051-052-006-041-082-166-253

(41+82) xor (89+166)2
k = 049-050-051-052-006-041-082-166-253-132

(82+166) xor (51+253)E6 (456 mod 256 0)
k = 049-050-051-052-006-041-082-166-253-132-200

(166+253) xor (63+132)52 (352 mod 256–)
k = 049-050-051-052-006-041-082-166-253-132-200-096

(253+132) xor (64+200)7
k = 049-050-051-052-006-041-082-166-253-132-200-096-137

La clef de session initiale est 049-050-051-052
La clef de session complète est donc
049-050-051-052-006-041-082-166-253-132-200-096-137
La clef de session finale est 132-200-096-137 (de la même longueur que
la clef de session initiale)

-----------------------------------------------------

ÉTAPE 3: permutation des octets de Clair2.

m = 050-024-047-115-128-089-051-063-064 = Clair2
Donc, clair2 devient clair3 en permutant Clair2 de la façon qui suit.

On fait la permutation par groupe de 8 caractères à tous les 4
caractères. On débute avec les caractères 1 à 8, puis 5 à 12, 9 à 16, 13 à
20, etc. C'est le 9e caractère qui indique lequel des 10 choix de
permutation utiliser pour permuter les 8 caractères qui le précèdent.

Voici les 10 choix de permutation. On change donc l'ordre des 8
caractères selon le numéro de permutation choisi entre les 10 (1er, 2e, 3e
,4e, 5e, 6e, 7e, 8e, 9e, 10e). C'est le chiffre de droite du 9e caractère
ascii qui détermine le choix de permutation.

0) 8-1-7-2-6-3-5-4
1) 2-4-6-8-1-3-5-7
2) 1-3-5-7-2-4-6-8
3) 1-4-7-2-5-8-3-6
4) 2-1-4-3-6-5-8-7
5) 3-2-5-4-7-6-1-8
6) 4-3-2-1-8-7-6-5
7) 4-5-3-6-2-7-1-8
8) 5-4-6-3-7-2-8-1
9) 1-8-2-7-3-6-4-5

Notre Clair2 est 050-024-047-115-128-089-051-063-064. Son 9e caractère
ascii est 64 et le chiffre de droite dans 64 est le 4. On permute donc avec
la permutation numéro 4; c'est-à-dire la 5e permutation puisque le 1er choix
est le numéro zéro. Ce choix est donc selon cet ordre-ci: 2-1-4-3-6-5-8-7.

Ici le 2e caractère de Clair2 deviendrait le 1er dans de Clair3,
le 1er deviendrait le 2e,
le 4e deviendrait le 3e,
le 3e deviendrait le 4e,
le 6e deviendrait le 5e,
le 5e deviendrait le 6e,
le 8e deviendrait le 7e,
et le 7e deviendrait le 8e.

On permute donc 050-024-047-115-128-089-051-063-064 (donc Clair2) selon
la permutation numéro 4 (donc la 5e permutation: 2-1-4-3-6-5-8-7) pour
obtenir Clair3.

Les 8 premiers caractères de Clair2 suivant:

050-024-047-115-128-089-051-063

deviennent donc les 8 premiers caractères de Clair3 suivant:

024-050-115-047-089-128-063-051

En ajoutant le 9e caractère, on obtient donc le Clair3 suivant:
024-050-115-047-089-128-063-051-064. Si le dernier groupe de 8 caractères du
fichier n'a pas de 9e caractère qui suit, alors après le chiffrage de
Clair3, on intègre ce dernier groupe avec la clef de session finale et avec
le code d'indentification de la phrase de passe pour être chiffré ensemble
par la phrase de passe (ceci pourrait être expliqué dans une étape
ultérieure si tout va bien).

Ainsi, cette façon de permuter pourrait déplacer le 3e caractère à la
position 134 par exemple.

-----------------------------------------------------

ÉTAPE 4: chiffrage de Clair3 via un xor à partir de la clef de session
complète.

049-050-051-052-006-041-082-166-253-132-200-096-137 = clef de session
complète.
024-050-115-047-089-128-063-051-064 = Clair3

049 xor 024 = 41
050 xor 050 = 0
051 xor 115 = 64
052 xor 047 = 27
006 xor 089 = 95
041 xor 128 = 169
082 xor 063 = 109
166 xor 051 = 149
253 xor 064 = 189

On obtient donc comme résultat le chiffré suivant:
041-000-064-027-095-169-109-149-189.

-----------------------------------------------------

Les autres étapes traiteraient de la création du code d'identification à
partir de la phrase de passe, la permutation de ce code d'identification et
de la clef de session finale puis du chiffrage de cette permutation.

Donc, dans notre exemple, se serait seulement le chiffré qui serait
connu, et l'algo (plus tard il y aurait le chiffré du code d'identification
et de la clef de session: le plus important à mon avis). Vous avez donc tous
les éléments pour vérifier. Il est vrai qu'il serait plus facile dans notre
petit exemple de faire une attaque à force brute ou faire des essaie de
valeurs jusqu'à ce que le tout corresponde, mais il faut aussi tenir compte
que la clef de session initiale (donc finale aussi) aura un minimum d'octet
(peut-être 128 bits) et qu'elle sera utilisée qu'une seule fois.

Si vous réussissez à faire une attaque à clair connue je vous envoie un
chiffré et son clair1 (en partie) pour refaire la démonstration (car le
clair ne peut pas vraiment être connu au complet puisque sinon on aurait pas
à faire d'attaque du tout puisqu'on aurait déjà le clair1. C'est un système
à clef jetable automatiquement.

Bonne journée :-)

Raymond H.
Avatar
Christophe HENRY
Bonjour :-)

Ton descriptif étant relativement long, je vais prendre chaque étape et
la traduire en termes plus courts.



ÉTAPE 1: incrémentation de chaque caractère ascii de Clair1.

On incrémente de 'un' chaque caractères du Clair1 pour donner Clair2.
Ceci est pour diversifier d'avantage les caractères de la clef de session
complète si Clair1 comportait plusieurs caractères ascii zéro de suite.


Il s'agit donc d'un brouillage du clair. Un traitement sur le clair
par substitutions sans utiliser de réglages externes, on le transforme.

Soit inc() la fonction utilisée : Clair2 = inc(Clair1)


ÉTAPE 2: création de la clef de session complète.

Avec la formule suivante, et influencé par Clair2, on crée la clef
complète à partir de la clef de session initiale:
(k1+k2) xor (m1+k3) = dernier octet ajouté à k


A partir de Clair2 et de la clef de "session initiale" (que je note ki) on
calcule k, la clé de session complète.

k = ses(Clair2,ki)

"ses" étant la représentation mathématique du traitement concernant
Clair2 et ki pour obtenir la clé de session complète, k.

Note que s'il faut Clair2 pour transformer ki en k, trouver ki à partir
de k est facile : ce sont les premiers octets de k.

Soit ses_1() la fonction (plus ou moins...) réciproque de ses telle que :

ki = ses_1(k). Elle sera utilisée plus loin.


ÉTAPE 3: permutation des octets de Clair2.

m = 050-024-047-115-128-089-051-063-064 = Clair2
Donc, clair2 devient clair3 en permutant Clair2 de la façon qui suit.

On fait la permutation par groupe de 8 caractères à tous les 4
caractères. On débute avec les caractères 1 à 8, puis 5 à 12, 9 à 16, 13 à
20, etc. C'est le 9e caractère qui indique lequel des 10 choix de
permutation utiliser pour permuter les 8 caractères qui le précèdent.


Clair2 subit une permutation sans intervention extérieure, une
transposition, notée per(). Les grilles de permutations font parties de
l'algorithme.

Clair3 = per(Clair2)


ÉTAPE 4: chiffrage de Clair3 via un xor à partir de la clef de session
complète.


Le chiffré "c", est obtenu au moyen du xorage de Clair3 et de k.

c = xor(Clair3,k)


Cryptanalyse :

c = xor(Clair3,k)
c = xor(per(Clair2),ses(Clair2,ki)) (remplaçant Clair3 et k)

c = xor( per(inc(Clair1)) , ses(inc(Clair1),ki) )

L'hypothèse est que je dispose de "Clair1", de "c" et de l'algorithme. Je
vais marquer les parties connues par des lettres capitales (X, Y...) pour
clarifier l'exposé.

c est connu
Clair1 est connu
donc inc(Clair1) est connu
et per(inc(Clair1)) est connu

L'équation devient : C = xor( X, ses(Y,ki) )

En utilisant la propriété du xor (noté "plus") : a = b+c <=> a+c = b
L'équation devient :
ses(Y,ki) = xor(C,X)

C et X étant connus, xor(C,X) l'est aussi :
ses(Y,ki) = Z.
ki = ses_1(Z)


Autre manière d'écrire la même chose :
c = xor( per(inc(Clair1)) , ses(inc(Clair1),ki) )
ses(inc(Clair1),ki) = xor (c,per(inc(Clair1)))
ki = ses_1(xor(c,per(inc(Clair1))))

ki est donc calculable intégralement à partir du chiffré et du clair.


Donc, dans notre exemple, se serait seulement le chiffré qui serait
connu,


Je reste sur les attaques à clair connu. La doctrine affirme qu'un
cryptosystème ne passant pas cette phase ne vaut pas le coup. Alors, je
suis bêtement la doctrine...


Il est vrai qu'il serait plus facile dans notre petit exemple de faire
une attaque à force brute ou faire des essaie de valeurs jusqu'à ce
que le tout corresponde, mais il faut aussi tenir compte que la clef de
session initiale (donc finale aussi) aura un minimum d'octet (peut-être
128 bits)


Tout-à-fait. C'est pourquoi je n'utilise pas la force brute dans la
cryptanalyse que j'ai décrite. Elle est indépendante de la longueur de
la clé.


Si vous réussissez à faire une attaque à clair connue je vous
envoie un chiffré et son clair1 (en partie) pour refaire la
démonstration (car le clair ne peut pas vraiment être connu au complet
puisque sinon on aurait pas à faire d'attaque du tout puisqu'on aurait
déjà le clair1.


Pas d'accord. Vu l'empilement de calculs, ça commence à faire un peu
long pour moi. Le principe d'une attaque à clair connu est que,
justement, on a tout le clair. Pas une partie.

Par ailleurs, j'ai suffisament prouvé que la "science" pouvait venir à
bout des versions du simple algo. Lis mes calculs, et on discute le
concept.


C'est un système à clef jetable automatiquement.


Tu voulais dire "un système jetable automatiquement à clé" ;-p

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

Avatar
Raymond H.
Bonjour,

"Christophe HENRY" a écrit dans le
message de news: cucs7e$2s9b$
Bonjour :-)

Ton descriptif étant relativement long, je vais prendre chaque étape et
la traduire en termes plus courts.



Effectivement, c'est ce que vous avez fait. Vous avez reproduit ce que
j'ai fais mais en traduisant en termes plus courts. Et ensuite, vous dites
ceci:

-> Par ailleurs, j'ai suffisamment prouvé que la "science" pouvait venir
à
-> bout des versions du simple algo. Lis mes calculs, et on discute le
-> concept.


En plus, vous appelez cela une preuve. J'ai lus minutieusement tous vos
calculs qui sont tout de même assez simple à comprendre et cela montre que
vous avez très compris le fonctionnement du 'Simple algo' dans cette
étape-ci. Mais je vois que votre conclusion est erronée concernant (votre
théorie) le fait que vos calculs servent à la cryptanalyse du 'Simple algo'.
Aucune preuve n'est donnée pour prouver que le 'Simple algo' de cette
étape-ci est faible. Je me voie donc obligé de détailler tous vos calculs
pour prouver qu'ils ne peuvent rien contre le 'Simple algo', et que ce
'Simple algo' à cette étape-ci se tient debout jusqu'à présent et on ne peut
le qualifier de faible avant d'en avoir fait la preuve.


ÉTAPE 1: incrémentation de chaque caractère ascii de Clair1.

On incrémente de 'un' chaque caractères du Clair1 pour donner Clair2.
Ceci est pour diversifier d'avantage les caractères de la clef de session
complète si Clair1 comportait plusieurs caractères ascii zéro de suite.


Il s'agit donc d'un brouillage du clair. Un traitement sur le clair
par substitutions sans utiliser de réglages externes, on le transforme.

Soit inc() la fonction utilisée : Clair2 = inc(Clair1)


C'est bien ça. Donc:

Incrémentation(Clair1) = Clair1 + Var1(x+1) = Clair2

Donc via '+Var1(x+1)':

050-024-047-115-128-089-051-063-064 =
inc(050-023-045-112-124-084-045-056-056)

Je fais remarquer qu'il faut posséder Clair1. Et si on a Clair1 c'est
uniquement pour le chiffrer et non pour trouver une clef de session qui
n'est jamais renouvelée pour d'autre chiffrage que celui actuel. Donc, une
clef jetable qui n'est plus jamais utilisée par la suite.



C'est-à-dire:

050-023-045-112-124-084-045-056-056 = Clair1
+
000-001-002-003-004-005-006-007-008-...= incrémentation
050-024-047-115-128-089-051-063-064 = Clair2

Donc, pour trouver Clair2 il faut auparavant posséder Clair1.




ÉTAPE 2: création de la clef de session complète.

Avec la formule suivante, et influencé par Clair2, on crée la clef
complète à partir de la clef de session initiale:
(k1+k2) xor (m1+k3) = dernier octet ajouté à k


A partir de Clair2 et de la clef de "session initiale" (que je note ki) on
calcule k, la clé de session complète.

k = ses(Clair2,ki)


Donc, k = ses(050-024-047-115-128-089-051-063-064 , 049-050-051-052) =
clef de session complète.

Donc on peut dire d'une certaine façon ceci: k = (k1+k2) xor (m1+k3)

Ici aussi, il faut posséder la clef initiale et le clair1 pour
reconstituer la clef de session complète, puisque Clair2 demande Clair1 pour
être trouvé. Ce sont les informations pour chiffrer et non pour déchiffrer.



Vous avez bien reformulé.



"ses" étant la représentation mathématique du traitement concernant
Clair2 et ki pour obtenir la clé de session complète, k.

Note que s'il faut Clair2 pour transformer ki en k, trouver ki à partir
de k est facile : ce sont les premiers octets de k.


En effet, ki est le début de k; ki sont les premiers octets de k et kf
sont les derniers octets de k. Pour procéder à un déchiffrage on doit donc
obtenir premièrement la clef de session finale (kf) qui sert à effectuer
l'inversion. C'est de cette façon que le déchiffrage doit se faire. Ce
n'est pas seulement facile mais il faut que ce soit fait ainsi pour que le
déchiffrage soit possible, car si on ne peut pas déchiffrer de cette façon
alors l'algo ne vaut rien.

Ce qu'il faut savoir ici, c'est que pour connaître kf (nécessaire pour
le début du déchiffrage) il faut auparavant avoir déchiffré kf du 2e chiffré
effectué par la phrase de passe (et dont je n'ai pas encore étalé cette
étape encore: c'est à venir).


Soit ses_1() la fonction (plus ou moins...) réciproque de ses telle que :

ki = ses_1(k). Elle sera utilisée plus loin.



La ligne 'ki = ses_1(k)' est inutile pour la cryptanalyse du 'Simple
algo'. J'explique plus bas le pourquoi.

ÉTAPE 3: permutation des octets de Clair2.

m = 050-024-047-115-128-089-051-063-064 = Clair2
Donc, clair2 devient clair3 en permutant Clair2 de la façon qui suit.

On fait la permutation par groupe de 8 caractères à tous les 4
caractères. On débute avec les caractères 1 à 8, puis 5 à 12, 9 à 16, 13
à
20, etc. C'est le 9e caractère qui indique lequel des 10 choix de
permutation utiliser pour permuter les 8 caractères qui le précèdent.


Clair2 subit une permutation sans intervention extérieure, une
transposition, notée per(). Les grilles de permutations font parties de
l'algorithme.

Clair3 = per(Clair2)


C'est exact, dans l'exemple: Clair3 =
permutation(050-024-047-115-128-089-051-063-064) =
024-050-115-047-089-128-063-051-064.
Dans le processus des permutations, le départ se fait à partir d'une
valeur incluse dans le numéro ascii du 9e caractère. Ce qui signifie qu'on
ne peut pas défaire la permutation sans connaître cette valeur. L'octet
contenant cette valeur est à son tour permuté, et ainsi de suite jusqu'à la
fin pour chacun des groupes de 8 octets.
Donc, pour défaire la permutation il faut avoir trouvé la dernière
valeur utilisée à la fin du fichier, et cette valeur (avec le code
d'identification et la clef de session finale) est chiffrée (chiffré2) par
la phrase de passe puis associé au chiffré 1.

ÉTAPE 4: chiffrage de Clair3 via un xor à partir de la clef de session
complète.


Le chiffré "c", est obtenu au moyen du xorage de Clair3 et de k.
c = xor(Clair3,k)


Exact. Donc, dans notre exemple 'c = xor(Clair3,k)' équivaut à:
041-000-064-027-095-169-109-149-189 =
xor(024-050-115-047-089-128-063-051-064 ,
049-050-051-052-006-041-082-166-253-132-200-096-137)

Cryptanalyse :


Ce qui suit n'est pas de la cryptanalyse.
"La cryptanalyse est tout simplement l'art de rendre clair un texte crypté
sans avoir connaissance de la clef utilisée.
http://mantis.free.fr/articles/analyse.htm " Or, vos effort sont pour
prouver qu'il est possible de connaître la clef à partir du CLAIR DÉJÀ
CONNU.
De plus, ce qui suit est une reformulation du 'Simple algo' ou de ses
parties, sous plusieurs angles.

c = xor(Clair3,k)


Donc, dans notre exemple: 041-000-064-027-095-169-109-149-189 =
xor(024-050-115-047-089-128-063-051-064 ,
049-050-051-052-006-041-082-166-253-132-200-096-137)

c = xor(per(Clair2),ses(Clair2,ki)) (remplaçant Clair3 et k)


Donc: 041-000-064-027-095-169-109-149-189 = xor(permutation
de(050-024-047-115-128-089-051-063-064) ,
session(050-024-047-115-128-089-051-063-064 , 049-050-051-052))
Ici, il faut donc que la clef de session initiale soit connue (cette
clef n'est, pour ainsi dire, jamais connue de celui qui chiffre puisqu'elle
est générée automatiquement via l'algo). Ce que l'utilisateur choisi est
uniquement la phrase de passe (ou clef personnelle). Ici, il faut aussi que
le clair (Clair1) soit connue pour y faire l'incrémentation nécessaire afin
d'utiliser Clair2 dans cette formule. Alors, cette ligne de commande est
inutile pour trouver le clair puisque nous devons premièrement posséder le
clair pour utiliser cette ligne de calcul. Je veux dire que casser le
'Simple algo' signifie trouver le clair; mais ici on aurait déjà le clair,
donc le reste ne sert plus à rien et le 'Simple algo' à cette étape-ci reste
fort. Hé oui! Jusqu'à preuve du contraire :-)

c = xor( per(inc(Clair1)) , ses(inc(Clair1),ki) )


Donc, c = (Clair1incrémenté puis permuté) xor (Clair1 incrémenté puis
créant la clef de session via la clef de session initiale)
Donc, c = (Clair3) xor (k)
Donc, une reformulation simple de mon algo.

L'hypothèse est que je dispose de "Clair1", de "c" et de l'algorithme. Je
vais marquer les parties connues par des lettres capitales (X, Y...) pour
clarifier l'exposé.

c est connu
Clair1 est connu
donc inc(Clair1) est connu
et per(inc(Clair1)) est connu


Exact. Comme mentionné plus haut.

L'équation devient : C = xor( X, ses(Y,ki) )


Ok, 'C = Chiffré', 'X=Clair3' et 'Y=Clair2'.
Donc, C = xor(Clair3 , ses(Clair2, clef de session initiale))
Donc, C = xor(Clair3 , k)
Donc, 041-000-064-027-095-169-109-149-189 = xor
(024-050-115-047-089-128-063-051-064 ,
ses(050-024-047-115-128-089-051-063-064 , 049-050-051-052))
On voit ici, qu'il faut connaître déjà Clair2, Clair3 et la clef de
session initiale. Pour connaître Clair2 ou Clair3 il faut auparavant
connaître Clair1. Donc, on pourrait parler ici d'un chiffrement que
quelqu'un peut effectuer à partir de Clair3 et de la clef de session que
l'algo qui crée automatiquement lors du chiffrement. Car le contraire n'est
utile à rien du tout: c'est-à-dire trouver la clef de session à partir du
clair et du chiffré, puisqu'on a déjà le clair et que la clef de session est
rendu inutilisable après avoir servie une fois puisqu'elle est nouvellement
créée à chaque fois qu'on chiffre et ne peut donc pas servir de nouveau pour
un autre chiffrage.

En utilisant la propriété du xor (noté "plus") : a = b+c <=> a+c = b
L'équation devient :
ses(Y,ki) = xor(C,X)


Donc, 'ses(Clair2,clef de session initiale) = xor(chiffré, Clair3)'.
Ou plus précisément 'K = C xor X' ou 'K = xor(C,X)' ou 'K = ses(Y,ki)'.
Au moins deux éléments doivent être connues ici pour exécuter cette
formule.

C et X étant connus, xor(C,X) l'est aussi :


En effet, si le chiffré et le Clair3 sont connus on peut connaître la
clef de session: 'Clef = Clair3 xor Chiffré' puisque c'est simplement
l'inverse de 'Chiffré = Clair3 xor Clef' qui est fait.
Donc, pour connaître Clair3 il faut connaître le clair (Clair1), et si
on connaît le clair (Clair3) alors on peut connaître la clef de session via
un 'xor' entre le clair (Clair3) et le chiffré; cependant, dans ce cas, il
sera inutile de connaître la clef de session puisqu'elle n'est utilisée
qu'une seule fois et c'est pour avoir déjà chiffré ce clair antérieurement,
et aussi elle est inutile puisqu'on a déjà le clair (Clair1) en ayant
Clair3. C'est une clef qui ne peut pas être utilisée deux fois, donc elle
est jetable et il est inutile de la connaître puisqu'elle ne peut pas servir
une 2e fois vue que c'est l'algo qui la crée automatiquement à chaque
chiffrage pour n'être utilisée que cette seule fois.

ses(Y,ki) = Z.


Exact. 'ses(Clair2, clef de session initiale) = Z', donc 'k = Z', donc
'Z = clef de session trouvé par le moyen de la clef initiale et du Clair
incrémenté'. Donc, pour connaître Z (la clef de session complète) il faut
auparavant connaître la clef de session initiale que l'algo génère
automatiquement et aléatoirement, et connaître le clair (Clair1) puisque
pour connaître le clair incrémenté (Clair2) il faut avoir connue le Clair1
(m). Donc, si on connaît le Clair (Clair1) alors connaître la clef de
session devient inutile puisqu'elle n'est jamais utilisée une 2e fois pour
chiffrer un autre clair car elle est généré par l'algorithme lui-même: elle
est jetable automatiquement à chaque fois puisqu'une nouvelle clef la
remplace à chaque fois.
Nous avons vu jusqu'ici qu'aucune ligne n'a été capable de cryptanaliser
le 'Simple algo' dans cette étape-ci. Donc, aucune preuve n'a été fait
démontrant qu'il y ait une quelconque faiblesse dans ce 'Simple algo' à
cette étape-ci. Jusqu'à maintenant, ce 'Simple algo' tient bien la route et
ne peut pas être qualifié de faible jusqu'à preuve du contraire.

ki = ses_1(Z)


Donc, trouver la clef de session initiale à partir de la clef de session
complète. Mais on n'a pas besoin de trouver la clef de session initiale
puisqu'elle fait déjà partie du début de la clef de session complète. De
plus il est inutile de trouver ki si on possède déjà k. Et si on possède
déjà k ceci veut dire qu'on possède déjà Clair1, Clair2 et Clair3 puisque k
est créée à partir de ki et influencé par Clair2.


Autre manière d'écrire la même chose :
c = xor( per(inc(Clair1)) , ses(inc(Clair1),ki) )


Donc, 'c = ('Clair3' xor 'Clef de session complète'). Donc ici, pour
générer le chiffré, nous devons auparavant connaître le clair et la clef de
session complète (donc du même coup, la clef de session initiale et la clef
de session finale). Pour cela, tout le monde doit avoir un Clair avant de
le chiffrer, et en plus on n'a pas besoin de clef de session pour chiffrer
ce clair puisqu'elle est générée automatiquement (et aléatoirement) au début
du processus de chaque chiffrage.

ses(inc(Clair1),ki) = xor (c,per(inc(Clair1)))


Donc, 'Clef de session complète = xor(Chiffré, Clair3)', autrement dit
'Clef de session = Chiffré xor Clair3'.



1- 'ses(inc(Clair1),ki) =' indique que pour connaître la clef de session
complète, on doit pour cela connaître le chiffré et le Clair1indiqué par
'xor (c,per(inc(Clair1)))'. Car en xorisant le chiffré et le Clair3
(produit à partir de Clair1) on obtient la clef de session et en connaissant
la clef de session on connaît le début de la clef de session qui est la clef
de session initiale.

Or, si on connaît déjà le Clair1 on n'a pas besoin de connaître la clef
de session initiale, ni la clef de session complète, ni la clef de session
finale, puisqu'une seule clef de session est utilisée par chiffrage et ne
peut pas être utilisée plus d'une fois. Donc, si on connaît déjà le clair
(Clair1) pourquoi posséder une clef de session qui n'est pas réutilisable?
On a déjà le clair (Clair1), donc on a pas besoin de clef de session pour
déchiffrer le chiffré puisqu'on a déjà le clair lui-même; et si on veut
chiffrer le clair de nouveau alors l'algo se charge de créer aléatoirement
et automatiquement une clef de session nouvelle et inconnue, l'ancienne
n'étant plus réutilisable pour chiffrer le même clair.



2- '= xor (c,per(inc(Clair1)))' indique que pour connaître la clef de
session, indiquée par 'ses(inc(Clair1),ki) =', on doit connaître d'abord le
Clair3 [per(inc(Clair1] et le Chiffré. Or, pour connaître le Clair3 on doit
connaître le Clair1 puis l'incrémenter et le permuter. Donc, ça indique
qu'on a besoin de connaître le clair (Clair1) et le chiffré pour connaître
la clef de session: c'est ce qu'indique '= xor (c,per(inc(Clair1)))', car
cela équivaut à 'Chiffré xor Clair3' pour connaître la clef de session
complète.

Encore une fois, que sert de trouver la clef de session si on a déjà le
clair (Clair1). Cela est inutile, puisque la clef de session doit être
utilisée pour trouver un clair qu'on a déjà. De plus, une clef de session
utilisée auparavant pour avoir chiffré un clair, ne sert à rien pour
chiffrer un clair de nouveau puisqu'une clef de session unique est utilisée
à chaque chiffrage et l'ancienne n'est plus utilisée: crypto système à clef
jetable.



Donc, en conclusion cette formule est inutile pour la cryptanalyse de
l'étape présente du 'Simple algo'.


ki = ses_1(xor(c,per(inc(Clair1))))



Donc 'ki = ses_1(Z)' équivaut à 'ki = ses_1(xor(c,per(inc(Clair1))))' et
à 'ki = ses_1(k)'.

'Z' est donc 'xor(c,per(inc(Clair1)))'. Ici, pour trouver 'ki' (la clef de
session initiale) on doit connaître Z. Z est la clef de session complète.
Connaître 'Z' est donc connaître le chiffré et le Clair1 qui lui, un coup
incrémenté et permuté donne Clair3. Donc, 'Clair3 xor Chiffré' donne la
clef de session complète: c'est ce qui est demandé ici.

Ensuite, 'ses_1(Z)' indique de trouver la clef initiale à partir de 'Z',
donc à partir du chiffré et de Clair3 (donc à partir de la clef de session
complète via l'xorisation du chiffré et de Clair3 puisque 'Clair3 =
per(inc(Clair1)) ). Donc, 'ses_1(Z)' équivaut à 'ses_1(xor(c,Clair3))' et à
'ses_1(k)'. Ceci est simple est se fait en xorisant le chiffré et Clair3,
donc 'ki = C xor Clair3'. Encore ici, que sert de trouver la clef initiale
si on a déjà le clair? Si on a déjà le clair on a pas besoin de clef
initiale, ni de clef complète ni de clef finale pour connaître le clair
puisqu'on a déjà le clair. Si on a déjà Clair1 on peut aussi trouver Clair2
et Clair3 mais cela ne donne rien puisque c'est Clair1 qui est le vrai clair
non transformé, et on le possède déjà. Cette ligne de calcul est donc
inutile puisque ki fait déjà partie du début de k et n'est pas réutilisable
pour chiffrer un autre chiffré, ni pour exercer une attaque quelconque sur
un autre chiffré puisqu'une clef n'est utilisée qu'une seule fois par
chiffrage: clef jetable (One time pad).



ki est donc calculable intégralement à partir du chiffré et du clair.


Oui, et cela est complètement inutile puisque le chiffré a déjà été
déchiffré auparavant pour trouver le clair. Alors, pourquoi tenter de
trouver la clef initiale à partir de ce clair? Cette clef n'est plus
utilisable et est jetable. Il serait préférable de la laisser à la poubelle
;-) Je vous taquine :-)



Donc, dans notre exemple, se serait seulement le chiffré qui serait
connu,


Je reste sur les attaques à clair connu. La doctrine affirme qu'un
cryptosystème ne passant pas cette phase ne vaut pas le coup. Alors, je
suis bêtement la doctrine...


Mais, cette doctrine n'est pas applicable à l'algo de Vernam, le seul
algo indéchiffrable, donc le seul algo qui vaudrait le coup à 100% :-)

Le 'Simple algo' est inspiré de celui de Varnam et est un crypto système à
clef jetable, donc inutile de ramasser les clefs à la poubelle ;-)



Si vous réussissez à faire une attaque à clair connue je vous
envoie un chiffré et son clair1 (en partie) pour refaire la
démonstration (car le clair ne peut pas vraiment être connu au complet
puisque sinon on aurait pas à faire d'attaque du tout puisqu'on aurait
déjà le clair1.


Pas d'accord. Vu l'empilement de calculs, ça commence à faire un peu
long pour moi. Le principe d'une attaque à clair connu est que,
justement, on a tout le clair. Pas une partie.



Si vous voulez dire qu'il vous faut tout le clair avant de tenter une
attaque à clair connu, alors ce principe ne s'applique pas au 'Simple algo'
de cette étape-ci, et pas plus à l'algo de Vernam. Puisque ce sont deux
systèmes à 'clef jetable' (One time pad). Du même coup ce principe ne
s'appliquera pas à AllCrypter si celui-ci, dans sa version 3, tire son
inspiration de cette étape-ci.



Mais, j'avais pensé que vous demanderiez un chiffré et une partie de son
clair (les premier caractères du clair) qui correspond à la même longueur
que la clef de session initiale. Cela aurait été équitable pour tenter de
trouver le clair au complet afin de prouver si oui ou non c'est possible.



Très respectueusement, et passez une bonne journée

Raymond H.


Avatar
Christophe HENRY

-> Par ailleurs, j'ai suffisamment prouvé que la "science" pouvait venir
-> à
-> bout des versions du simple algo. Lis mes calculs, et on discute le
-> concept.

En plus, vous appelez cela une preuve.


Elle est peut-être fausse cette démonstration, mais il s'agit d'une
"preuve" au sens mathématique et non au sens du détective...


Mais je vois que votre conclusion est erronée concernant (votre
théorie) le fait que vos calculs servent à la cryptanalyse du 'Simple
algo'. Aucune preuve n'est donnée pour prouver que le 'Simple algo' de
cette étape-ci est faible.


Je veux bien m'être trompé. De là à dire que "aucune preuve n'est
donnée" :-(


Je souhaite que nous nous mettions d'accord sur les choses dont nous
parlons. Sur ta proposition, il n'est nul part fait mention explicite d'un
chiffrement avec une phrase de passe.

Examine la fonction de chiffrement dans son ensemble, détermine si elle
correspond à ta decription. Si ce n'est pas le cas, ne lit pas plus loin
et corrige ma formulation.

c : chiffré
m : le clair
k : la clé de chiffrement (la "clé initiale")
f : la fonction de chiffrement

c=f(m,k)

f(m,k) = xor( per(inc(m)),ses(inc(m),k) )

per : permutation des lettres
inc : incrémentation
ses : calcul de la clé de session

c = xor( per(inc(m)),ses(inc(m),k) )
ses(inc(m),k) = xor( c, per(inc(m)) )
k = ses_1( xor( c, per(inc(m)) ) , ses(inc(m),k) )

S'il y a maldone ici, inutile de continuer la lecture puisque le reste
repose sur ces postulats. Dans ce cas, corrige et reposte.



Donc via '+Var1(x+1)':


Quelle est la syntaxe/sémantique de cette expression ? D'où vient le "x" ?


...
Donc, pour défaire la permutation il faut avoir trouvé la dernière
valeur utilisée à la fin du fichier, et cette valeur (avec le code
d'identification et la clef de session finale) est chiffrée (chiffré2)
par la phrase de passe puis associé au chiffré 1.


Sans description précise, je considère uniquement les caractéristiques
concrètes fournies.


Cryptanalyse :


Ce qui suit n'est pas de la cryptanalyse.
"La cryptanalyse est tout simplement l'art de rendre clair un texte
crypté sans avoir connaissance de la clef utilisée.
http://mantis.free.fr/articles/analyse.htm " Or, vos effort sont pour
prouver qu'il est possible de connaître la clef à partir du CLAIR
DÉJÀ CONNU.


C'est rigoureusement exact. La bonne expressions est "attaque avec clair
connu".

...
Je veux dire que casser le 'Simple algo' signifie trouver le clair;
mais ici on aurait déjà le clair, donc le reste ne sert plus à rien
et le 'Simple algo' à cette étape-ci reste fort. Hé oui! Jusqu'à
preuve du contraire :-)


Pas au sens que je martèle depuis longtemps déjà : sur une attaque à
clair connu. Ma position n'a jamais changé.


Alors, pourquoi tenter de trouver la clef initiale à partir de ce
clair? Cette clef n'est plus utilisable et est jetable. Il serait
préférable de la laisser à la poubelle ;-) Je vous taquine :-)


Les spécifications de l'algorithme telles que je les donne au début de
ce post et, normalement, sont telles que tu me les a décrits. J'ignore
les éventualités futures ou fonctions non-implémentées.

Le point d'attaque reste obligatoirement cette clé, qu'un utilisateur
pourrait rejouer. Maintenant, s'il s'avérait que tu avais
malencontreusement oublié de préciser _concrètement_ le tarabiscotage
de cette clé, complète.

Je reste sur les attaques à clair connu. La doctrine affirme qu'un
cryptosystème ne passant pas cette phase ne vaut pas le coup. Alors,
je suis bêtement la doctrine...


Mais, cette doctrine n'est pas applicable à l'algo de Vernam, le seul
algo indéchiffrable, donc le seul algo qui vaudrait le coup à 100% :-)


En fait, dans ladite doctrine, il est supposé que le mot de passe peut
être rejoué par l'utilisateur. Un algo possédant cette faiblesse se
voit interdit d'utiliser deux fois de suite la même clé.


Le 'Simple algo' est inspiré de celui de Varnam et est un crypto
système à clef jetable, donc inutile de ramasser les clefs à la
poubelle ;-)


Soit tu obliges tes utilisateurs à changer de clé à chaque utilisation
et ton produit n'est pas utilisable dans la pratique, soit il y a un truc
supplémentaire qui te fait voir cette clé comme une clé de session mais
il n'y en a pas d'indication concrète dans tes étapes de calcul.


Pas d'accord. Vu l'empilement de calculs, ça commence à faire un peu
long pour moi. Le principe d'une attaque à clair connu est que,
justement, on a tout le clair. Pas une partie.


Si vous voulez dire qu'il vous faut tout le clair avant de tenter
une attaque à clair connu, alors ce principe ne s'applique pas au
'Simple algo' de cette étape-ci, et pas plus à l'algo de Vernam.
Puisque ce sont deux systèmes à 'clef jetable' (One time pad). Du
même coup ce principe ne s'appliquera pas à AllCrypter si celui-ci,
dans sa version 3, tire son inspiration de cette étape-ci.


A moins d'obliger tes utilisateurs à changer de clé, il faudra bien
qu'il y ait une clé - information connue des correspondants seuls - qui
ne change pas. Ici, je n'ai que la clé "initiale".


Mais, j'avais pensé que vous demanderiez un chiffré et une partie
de son clair (les premier caractères du clair) qui correspond à la
même longueur que la clef de session initiale. Cela aurait été
équitable pour tenter de trouver le clair au complet afin de prouver si
oui ou non c'est possible.


Mes calculs précédents ne nécessitaient qu'une longueur de clair
équivalente à la longueur de la clé. Dans cette nouvelle version, soit
je refais mes calculs au détail, soit je choisis le clair en entier
pour faire plus simple histoire de gagner du temps.


Ton exposé était très long. J'ai du mal à te suivre, alors j'avoue en
avoir zappé une partie. Je préfère une formulation bien théorique
qu'une suite longue d'explication en langue française qui est peu
adaptée aux calculs formels.

Cordialement,

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


1 2 3 4 5