Python Language Créer des nombres aléatoires sécurisés par cryptographie


Exemple

Par défaut, le module aléatoire Python utilise le Mersenne Twister PRNG pour générer des nombres aléatoires qui, bien qu'adaptés à des domaines tels que les simulations, ne répondent pas aux exigences de sécurité dans des environnements plus exigeants.

Pour créer un nombre pseudo-aléatoire sécurisé sur le plan cryptographique, on peut utiliser SystemRandom qui, en utilisant os.urandom , peut agir en tant que générateur de nombres pseudo-aléatoires sécurisés par cryptographie, CPRNG .

La manière la plus simple de l'utiliser consiste simplement à initialiser la classe SystemRandom . Les méthodes fournies sont similaires à celles exportées par le module aléatoire.

from random import SystemRandom
secure_rand_gen = SystemRandom()

Pour créer une séquence aléatoire de 10 int s dans l'intervalle [0, 20] , on peut simplement appeler randrange() :

print([secure_rand_gen.randrange(10) for i in range(10)])
# [9, 6, 9, 2, 2, 3, 8, 0, 9, 9]

Pour créer un entier aléatoire dans une plage donnée, on peut utiliser randint :

print(secure_rand_gen.randint(0, 20))
# 5

et, en conséquence, pour toutes les autres méthodes. L'interface est exactement la même, le seul changement est le générateur de nombres sous-jacent.

Vous pouvez également utiliser os.urandom directement pour obtenir des octets aléatoires sécurisés par cryptographie.