Hasard intègre de nombreux tests pour vérifier que N générateurs différents génèrent N suites différentes. En particulier, le programme python/test_hasard.py comporte les tests :
* init : crée 10 (par défaut), 2^10 (option --slow) ou 2^20 (option --very-slow) générateurs différents et vérifie que les nombres générés sont différents
* reseed : appelle la fonction reseed(), qui regénère la graîne d'un générateur, 10, 2^10 ou 2^20 fois en s'assurant que le générateur génère des suites différentes
* fork_* (~17 tests) : vérifie qu'après un fork les deux générateurs (procesus parent et processus fils) génèrent des suites différentes
J'avoue ne pas avoir testé la version OpenSSL mais je compte le faire. Je suppose que la suite "init" devrait trouver le bug très rapidement.
Il y a une longue liste noire pour ces tests, car les générateurs faibles (dont l'état interne ou la graine font 32 bits ou moins) échouent rapidement. Le générateur libc_rand (fonction rand() de la libc) échoue par exemple après moins de 100.000 tests. Je viens de lancer le test "init" et j'ai obtenu une collision après 55094 essais. Ceci signifit qu'un attaquant a un espèce de recherche très restreint. Les générateurs utilisés dans Hasard utilisent un état interne et une graine d'au moins 128 bits. Consultez l'article suivant pour la théorie sur le risque de collision : http://fr.wikipedia.org/wiki/Paradoxe_des_anniversaires
[^] # Re: Test / OpenSSL
Posté par Victor STINNER (site web personnel) . En réponse à la dépêche Générer des nombres aléatoires avec Hasard 0.9.6. Évalué à 7.
* init : crée 10 (par défaut), 2^10 (option --slow) ou 2^20 (option --very-slow) générateurs différents et vérifie que les nombres générés sont différents
* reseed : appelle la fonction reseed(), qui regénère la graîne d'un générateur, 10, 2^10 ou 2^20 fois en s'assurant que le générateur génère des suites différentes
* fork_* (~17 tests) : vérifie qu'après un fork les deux générateurs (procesus parent et processus fils) génèrent des suites différentes
J'avoue ne pas avoir testé la version OpenSSL mais je compte le faire. Je suppose que la suite "init" devrait trouver le bug très rapidement.
Il y a une longue liste noire pour ces tests, car les générateurs faibles (dont l'état interne ou la graine font 32 bits ou moins) échouent rapidement. Le générateur libc_rand (fonction rand() de la libc) échoue par exemple après moins de 100.000 tests. Je viens de lancer le test "init" et j'ai obtenu une collision après 55094 essais. Ceci signifit qu'un attaquant a un espèce de recherche très restreint. Les générateurs utilisés dans Hasard utilisent un état interne et une graine d'au moins 128 bits. Consultez l'article suivant pour la théorie sur le risque de collision :
http://fr.wikipedia.org/wiki/Paradoxe_des_anniversaires