OVH Cloud OVH Cloud

différenciation aléatoire / chiffré

41 réponses
Avatar
Kevin Denis
Bonjour,

j'ai souvent lu qu'un critère pour un bon chiffrement repose
sur le fait qu'il ne doit pas être possible de différencier de
l'aléatoire du chiffré.

Est ce que quelqu'un dispose d'un pointeur vers une doc
"officielle" affirmant ce point? Je suis assez d'accord avec ce
principe, mais je ne trouve pas de justificatif style document
de l'ANSSI ou équivalent.

Dans un deuxième temps, quelles sont les conséquences inverse?
C'est à dire que si je suis capable de différencier un flux
chiffré d'un flux aléatoire, qu'est ce que je peux en déduire
sur le procédé de chiffrement? Une faiblesse théorique, ou bien
d'autres conclusions sont à tirer?

Merci
--
Kevin

10 réponses

1 2 3 4 5
Avatar
Mehdi Tibouchi
"xtof.pernod" wrote in message
<4bf6ad41$0$27581$:

Dans le cas 'trivial', il faut disposer de 2 textes chiffrés et de la
clé publique, non ?



Seulement de la clef publique (si elle n'est pas de la forme 2^k·(1-eps)
avec eps très petit).

Si on a pas tout ça, existe-t-il un algorithme qui réponde avec
certitude (ou un peu moins ..) "ce flux n'a pas été chiffré par
RSA (ou équivalent)" ?



Un distingueur n'a pas besoin de répondre avec certitude; il suffit
d'avoir un avantage non négligeable sur le tir à pile ou face.
Avatar
xtof.pernod
Le 22/05/2010 22:39, Mehdi Tibouchi a fait rien qu'à écrire :
"xtof.pernod" wrote in message
<4bf6ad41$0$27581$:

Dans le cas 'trivial', il faut disposer de 2 textes chiffrés et de la
clé publique, non ?



Seulement de la clef publique (si elle n'est pas de la forme 2^k·(1-eps)
avec eps très petit).




Ok.. Supposons que j'ai la clé publique N = p.q, et un flux binaire.
Peux-tu me donner en gros l'algorithme, j'ai rien trouvé de convaincant..

Si on a pas tout ça, existe-t-il un algorithme qui réponde avec
certitude (ou un peu moins ..) "ce flux n'a pas été chiffré par
RSA (ou équivalent)" ?



Un distingueur n'a pas besoin de répondre avec certitude; il suffit
d'avoir un avantage non négligeable sur le tir à pile ou face.




hmm.. pour rc4, le papier que j'avais lu (??) disait
"ce flux n'a pas pu être chiffré par rc4" = 0 ou 1,
ce qui se conçoit assez facilement, en redéroulant
l'algorithme (adapté pour ce genre de recherche) et
en vérifiant qu'on tombe pas sur une "impossibilité".

(Mais la science a progressé depuis, c'est juste un exemple)

--
christophe.
Avatar
Mehdi Tibouchi
"xtof.pernod" wrote in message
<4bf85294$0$27608$:

Ok.. Supposons que j'ai la clé publique N = p.q, et un flux binaire.
Peux-tu me donner en gros l'algorithme, j'ai rien trouvé de convaincant..



En général, on ne chiffre pas un flux avec RSA, seulement un message
isolé (typiquement une clef symétrique). Mais bon, peu importe.

Mettons que le module public N tienne dans l octets. On me donne une
chaîne x de l octets qui est ou bien un chiffré correspondant à N, ou
bien un aléa. Alors je réponds « aléa » si x est un entier au moins égal
à N, et sinon je réponds au hasard. Comme ça, je réponds juste avec
probabilité 1 dans le premier cas et 1/2 dans le second, ce qui fait
significativement mieux que 1/2 au total (sauf si N est presque égal à
2^{8l}).
Avatar
Emile
On 15 mai, 15:38, Kevin Denis wrote:
Bonjour,

j'ai souvent lu qu'un critère pour un bon chiffrement repose
sur le fait qu'il ne doit pas être possible de différencier de
l'aléatoire du chiffré.


Kevin



    Bonjour,

    Que pensez vous du "Test Universel" qui permet de chiffrer suivan t
une échelle normalisée le manque du caractère aléatoire d'une sér ie de
nombres par rapport à l'aléatoire parfait. Voir: 
http://homeusers.brutele.be/bruno.musyck/WikiTestUniversel.pdf. Pour
avoir plus d'info sur l'algorithme SED, voir: http://fr.wikipedia.org/wiki/ SED_%28algorithme%29.
Voir également le chapitre Challenge.

    Cordialement

    Emile
Avatar
xtof.pernod
Le 23/05/2010 16:53, Mehdi Tibouchi a fait rien qu'à écrire :
"xtof.pernod" wrote in message
<4bf85294$0$27608$:

Ok.. Supposons que j'ai la clé publique N = p.q, et un flux binaire.
Peux-tu me donner en gros l'algorithme, j'ai rien trouvé de convaincant..



En général, on ne chiffre pas un flux avec RSA, seulement un message
isolé (typiquement une clef symétrique).



J'aurais mis "fichier", quelqu'un, quelque part, m'aurait fait remarquer
(à juste titre) qu'on ne chiffre pas des fichiers avec RSA..

Bon, remplacer flux, fichier, etc.. par 'message'.


Mais bon, peu importe.



Ouf. j'ai eu chaud =)

Mettons que le module public N tienne dans l octets. On me donne une
chaîne x de l octets qui est ou bien un chiffré correspondant à N, ou
bien un aléa. Alors je réponds « aléa » si x est un entier au moins égal
à N, et sinon je réponds au hasard. Comme ça, je réponds juste avec
probabilité 1 dans le premier cas et 1/2 dans le second, ce qui fait




Ok..... C'était point de la pub' mensongère, j'ai demandé comment
marchait un 'distingueur' trivial pour RSA, je l' ai eu =)


significativement mieux que 1/2 au total



Si je voulais embistrouiller des insectes qui ne m'ont rien fait,
je dirais que:

Si M est le nombre de 'chaines' (j'ai bon, là ? ;) de L octets,
le nombre de fois où l'algorithme aura raison sera de
1 + M/2 ~ 1 fois sur 2.

Pas tellement mieux qu'un PRNG pris comme oracle, donc.

(sauf si N est presque égal à
2^{8l}).



On doit pouvoir dire que si x >= N, alors x n'est (trivialement)
pas le résultat d'une opération modulo N, fin_du_cas_trivial..


Bon, je reformule la question:

Pour un N donné, codé sur L bits, l'exposant e connu, et un (ou
plusieurs) train(s) x ou x(i) de bits de longueur égale aussi à L,
avec x(i) < N, existe-t-il un algorithme qui dise:

"ce 'bazard' n'a pas été produit par RSA " (ou pas) ?


Plus généralement, ce type d'algorithme est-il concevable pour RSA.
Voila..

--
christophe.
Avatar
Mehdi Tibouchi
"xtof.pernod" wrote in message
<4bf9883c$0$27609$:

Si je voulais embistrouiller des insectes qui ne m'ont rien fait,
je dirais que:

Si M est le nombre de 'chaines' (j'ai bon, là ? ;) de L octets,
le nombre de fois où l'algorithme aura raison sera de
1 + M/2 ~ 1 fois sur 2.



La probabilité de succès est de 1 - N/(2M), ce qui doit faire autour de
75% en moyenne si N a le nombre maximum de bits, et beaucoup plus si N
est un peu plus petit (par exemple pour un module de 1024 bits stocké sur
129 octets, ça fait dans les 99.7%).

Bon, je reformule la question:

Pour un N donné, codé sur L bits, l'exposant e connu, et un (ou
plusieurs) train(s) x ou x(i) de bits de longueur égale aussi à L,
avec x(i) < N, existe-t-il un algorithme qui dise:

"ce 'bazard' n'a pas été produit par RSA " (ou pas) ?



Si on dispose de plusieurs chaînes qui sont toutes ou bien des aléas ou
bien des chiffrés, on peut appliquer le distingueur précédent sur toutes,
et on obtient rapidement une réponse quasi certaine.

Et encore une fois, ce n'est pas une faiblesse, contrairement à ce qui se
passe pour un block cipher ou a fortiori pour un générateur
pseudo-aléatoire.
Avatar
xtof.pernod
Le 24/05/2010 18:15, Mehdi Tibouchi a fait rien qu'à écrire :
"xtof.pernod" wrote in message
<4bf9883c$0$27609$:
[pour un distingueur trivial :]


La probabilité de succès est de 1 - N/(2M), ce qui doit faire autour de
75% en moyenne si N a le nombre maximum de bits, et beaucoup plus si N
est un peu plus petit (par exemple pour un module de 1024 bits stocké sur
129 octets,



D'où vient le 129ème octet ?

Est-ce que tu veux dire: j'ai N sur 1024 bits, 128 octets, et à coté,
un fichier/train/flux/chaine/messsage de 129 octets, dont la provenance
peut être de l'aléa ou un chiffrement (?)

Dans ce cas, je suppose que le distingueur a quelque chose comme
255/256 chances de ne _pas_ se tromper (??)


ça fait dans les 99.7%).



Ah ouais.. énorme =)

Bon, je reformule la question:

Pour un N donné, codé sur L bits, l'exposant e connu, et un (ou
plusieurs) train(s) x ou x(i) de bits de longueur égale aussi à L,
avec x(i)< N, existe-t-il un algorithme qui dise:

"ce 'bazard' n'a pas été produit par RSA " (ou pas) ?



Si on dispose de plusieurs chaînes qui sont toutes ou bien des aléas ou
bien des chiffrés, on peut appliquer le distingueur précédent sur toutes,
et on obtient rapidement une réponse quasi certaine.



Ok, ça marche. Ceci règle le cas trivial, qui se doit d'être implémenté
dans tout bon distingueur.

Et encore une fois, ce n'est pas une faiblesse, (...)



? personne n'a dit ça -- pas que je m'en souvienne ?
On s'interesse toujours bien à un algo. qui distingue l'aléa du chiffré.

C'est sûr que c'est pas ça qui va donner 1 gramme d'info permettant
de factoriser le module, ou plus si affinité.


Bon, la question V.3, je m'excuse, j'ai la tête dure, mais le problème
m'interesse:

Soit une chaine de (n) bits. Sans perte de généralité, on peut se dire
que n est un multiple d'une puissance de 2, de 8, bref, tout ce qui
peut simplifier le raisonnement / l'implémentation éventuelle.

Existe-t-il un algorithme qui dise: "chiffré" ou "non chiffré" par RSA,
l'un et/ou l'autre, avec une probabilité de succès supérieure à 1/2.

Le(s) cas trivial(aux) aura été traité auparavant..

Est-ce seulement concevable ?

--
christophe.
Avatar
Erwan David
"xtof.pernod" écrivait :

Le 24/05/2010 18:15, Mehdi Tibouchi a fait rien qu'à écrire :
"xtof.pernod" wrote in message
<4bf9883c$0$27609$:
[pour un distingueur trivial :]


La probabilité de succès est de 1 - N/(2M), ce qui doit faire autour de
75% en moyenne si N a le nombre maximum de bits, et beaucoup plus si N
est un peu plus petit (par exemple pour un module de 1024 bits stocké sur
129 octets,



D'où vient le 129ème octet ?



Il vient de l'encodage ASN.1 et vaut toujours 0 (en fait c'est le
premier octet).

Le module est stocké sous forme d'un entier ASN.1. Ces entiers sont
signés et de longueur arbitraire. Dans l'encodage DER (qui est celui
utilisé pour les clefs RSA, car on y trouve "une chaine d'octet
contenant l'encodage DER du module), le signe de l'entier est donné par
le bit de poids fort. DOnc si on veut un entier positif de 1024 bits (et
pas 1023) le bit de poids fort est à 1, et on ajoute donc un octet à 0 devant.

--
Le travail n'est pas une bonne chose. Si ça l'était,
les riches l'auraient accaparé
Avatar
xtof.pernod
Le 23/05/2010 18:20, Emile a fait rien qu'à écrire :
On 15 mai, 15:38, Kevin Denis wrote:
j'ai souvent lu qu'un critère pour un bon chiffrement repose
sur le fait qu'il ne doit pas être possible de différencier de
l'aléatoire du chiffré.

Kevin



Que pensez vous du "Test Universel" qui permet de chiffrer suivant
une échelle normalisée le manque du caractère aléatoire d'une série de
nombres par rapport à l'aléatoire parfait.



Ben.. à froid, comme ça, une seule mesure pour déterminer si on a affaire
à de l'aléa (ou pas), c'est surprenant. Dans le sens: ça serait trop beau.

Mais bon, faut voir.


Voir: http://homeusers.brutele.be/bruno.musyck/WikiTestUniversel.pdf.
avoir plus d'info sur l'algorithme SED, voir:


http://fr.wikipedia.org/wiki/SED_%28algorithme%29.

"mathématiquement les plus proches de l'aléatoire parfait" :

Ca, ça me cause pas. Déja, "aléatoire", c'est pas facile à
trouver une def' qui convienne à tout le monde, mais "parfait",
je décroche.


"vu la structure scientifiquement établie du test universel et les
tests expérimentaux afférents à ce test, "

Quelque lien, là dessus ?..


Voir également le chapitre Challenge.



Ouaiiis !!! Une jolie montre en or !?!
Vaut-elle plus que les 100$ du Random Million Digit challenge ? ;)


Cordialement

Emile



--
christophe.
Avatar
Mehdi Tibouchi
"xtof.pernod" wrote in message
<4bfae24c$0$27581$:

D'où vient le 129ème octet ?



Si N dépasse un peu 2^1024, il ne tient pas dans 128 octets, donc il
faut mettre un 129ème. Peut-être qu'il faut appeler 2^1024 + 643 un
nombre de 1025 bits, cela dit; je n'ai pas d'avis ferme sur la question.

? personne n'a dit ça -- pas que je m'en souvienne ?



C'est juste que la situation n'est pas comparable à celle de RC4, dont la
sécurité en tant que générateur pseudo-aléatoire est précisément fondée
sur l'indistinguabilité d'avec un aléa.

Bon, la question V.3, je m'excuse, j'ai la tête dure, mais le problème
m'interesse:

Soit une chaine de (n) bits. Sans perte de généralité, on peut se dire
que n est un multiple d'une puissance de 2, de 8, bref, tout ce qui
peut simplifier le raisonnement / l'implémentation éventuelle.

Existe-t-il un algorithme qui dise: "chiffré" ou "non chiffré" par RSA,
l'un et/ou l'autre, avec une probabilité de succès supérieure à 1/2.



Je ne suis pas sûr de comprendre la question, mais s'il s'agit de savoir
si on peut distinguer un chiffré RSA d'un nombre aléatoire entre 1 et N,
la réponse est non pour RSA « text-book » : la fonction RSA est une
permutation de (Z/NZ)^*, donc tous les nombres entre 1 et N premiers à N
sont des chiffrés valides.

Si on regarde autre chose que RSA text-book, il faut préciser de quelle
façon sont formatés les messages. Pour RSA-OAEP, je crois que la
situation est la même, tout élément de (Z/NZ)^* est un chiffré valide. En
revanche ce n'est pas le cas avec PKCS#1v1.5, où il peut se passer des
choses amusantes (on ne sait pas construire de distingueur, mais si l'on
dispose d'un oracle qui distingue les chiffrés valides, ce qui arrivait
dans beaucoup d'implémentations de SSL à la fin des années 90, alors on
peut déchiffrer : attaque de Bleichenbacher).
1 2 3 4 5