Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Petit protocole challenge/response d'authentification

2 réponses
Avatar
Benjamin Dauvergne
Salut,

Je me suis donné un petit challenge tout seul, celui de créer un petit
protocole challenge/response à secret partagé aussi simple que possible
et j'aurai aimé vous le soumettre pour savoir si ça vous parait solide,
voir déjà connu. Je vous le décris:

Le secret est une paire d'entiers de même taille par exemple 32bits,
nommés
nA et nB.

Le protocole se déroule ainsi entre deux parties A et B:

1. A génère aléatoirement un entier nommé m1, il envoit à B le nombre
m1' := m1 XOR nA.

2. B génère un nombre aléatoire m2, il récupère m1 à partir de m1' en
faisant m1 := m1' XOR nA, puis il envoit à B les deux nombres m1'' := m1
XOR m2 et m2' := m2 XOR mB.

A vérifie que m1'' XOR m2' XOR mB = m1, il sait ainsi si B possède le
secret.

3. (Optionnel) Un dernier round permet à A de s'authentifier auprès de
B: B génère un nombre m3, il envoit à B: m2'' := m2 XOR m3 et m3' := m3
XOR mA.

Alors ? C'est nul ou pas ? ;-) Pour moi la sécu repose uniquement sur
l'utilisation de bons générateurs aléatoires, sinon j'ai pas
l'impression qu'il soit possible de prévoir les valeurs qui vont être
masquées et ainsi de récupérer les masques (les deux secrets) mais je me
trompe peut-être.

2 réponses

Avatar
Arnaud W.
Bonjour,

Si je n'ai pas fait d'erreur, je pense avoir trouvé la faille.

Si je résume votre protocole (ci-dessous, ===> signifie qu'on envoi
quelque chose):

A B
----------------------------------------
1 nA nB
2 génération de m1
3 m1'= m1 xor nA ===> m1'
4 m1 = m1' xor nA
5 génération de m2
6 m1" <============== m1" = m1 xor m2
7 m2' <============== m2' = m2 xor nB

A vérifie :
m1" XOR m2' XOR nB = m1
<=> m1 xor m2 XOR m2 xor nB XOR nB = m1 (par substitution)
<=> m1 = m1 (par simplification)

Dans ce protocole, quelqu'un qui écoute ce qui est échangé (on le
nomme parfois Black Hat, noté BH) connait uniquement :

m1', m1" et m2' (dont il ne peut déduire nA ou nB si m1 et m2 sont
bien aléatoires)

Il peut faire :
m1' xor m1" xor m2'
= m1 xor nA xor m1 xor m2 xor m2 xor nB (par substitution)
= nA xor nB (par simplification)

Jusque là, BH ne peut pas connaitre nA ou nB séparément. Mais il n'en
a pas besoin.

BH tente sa chance et demande à s'authentifier auprès de A (il veut se
faire passer pour B) :

A BH
----------------------------------------
1 nA
2 génération de m1-2
3 m1-2'= m1-2 xor nA ===> m1-2'
4 (BH ne calcul pas m1-2 puisqu'il ne
connait pas nA)
5 génération de m2-2 (aléatoire)
6 m1-2" <================ m1-2" = m1- 2' xor m2-2 <--- on calcul
avec m1-2' et non m1-2
7 m2-2' <================ m2-2' = m2- 2 xor nA xor nB <-- on
calcul avec (nA xor nB) et non nB uniquement

A vérifie :
m1-2" xor m2-2' xor nB = m1-2
<=> m1-2' xor m2-2 xor m2-2 xor nA xor nB xor nB = m1-2 (par
substitution)
<=> m1-2' xor nA = m1-2 (par simplification)
<=> m1-2 = m1-2 (par substitution)

Sans connaitre nA ou nB, BH peut se faire passer pour B auprès de A
(i.e. passer le test) après avoir écouté uniquement les données
publiques d'un échange.

De plus, je précise que le chiffre de Vernam qui est basé sur des
clefs aléatoires et l'opération xor, est indécryptable uniquement
ssi :
- les clefs sont parfaitement aléatoires (impossible avec un
ordinateur qui est une machine déterministe)
- ET les clefs sont aussi longues que les données à transmette
- ET les clefs ne sont utilisées qu'une seule fois (puis complètement
détruites, difficile à réaliser sur un ordinateur).

En effet, deux messages (m1 et m2) chiffrés avec la même clef (K), par
simplification, cela donne m1 xor m2 (la clef s'élimine).
m1 xor m2 permet de récupérer des informations partielles, par exemple
si une partie de m1 ou m2 vaut 1 (ou 0).

Dans le monde réel, il y a souvent beaucoup de redondance dans les
données informatique (par exemple dans une image, un document
texte...etc) ce qui fait qu'on peut récupérer des informations (même
partielles) sur les données claires.

Cordialement,
Arnaud W.
http://awr.free.fr
Avatar
Benjamin Dauvergne
Le 12-08-2008, Arnaud W. a écrit :
Bonjour,

Si je n'ai pas fait d'erreur, je pense avoir trouvé la faille.


Merci pour cette réponse exhaustive.