Bonjour,
Je suis actuellement en train d'essayer de reproduire un système de chiffrement RSA, et je dois donc générer 2 nombres premiers distincts (de grande taille). Mon code pour générer ces valeurs (p et q) est le suivant (j'utilise la fonction random.randrange, avec un pas de 2 pour générer uniquement des nombres impairs) :
J'utilise donc le test de primalité de Miller-Rabin (avec 25 itérations) pour vérifier la primalité de ces nombres (avec une forte probabilité).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 p=randrange(borneInf, borneSup, 2) q=randrange(borneInf, borneSup, 2) while not estPremierMillerRabin(p,25): p=randrange(borneInf, borneSup, 2) while (not estPremierMillerRabin(q,25) or q==p): q=randrange(borneInf, borneSup, 2) return (p,q)
En Python 2.7, mon code trouve deux valeurs de nombres premiers très rapidement, même pour de très grandes valeurs (sur 512 bits par exemple). Cependant, je suis passé en Python 3.5, et je constate que mon code fonctionne mais de façon beaucoup plus lente : il met énormément de temps à générer un nombre qui passe le test de Miller-Rabin (il met 5 minutes à générer des nombres qui fonctionnent, ce qu'il faisait en 10 secondes pour la même taille). Je suis donc obligé de réduire la taille de mes clés, ce qui accélère la recherche de nombre premiers, pouvoir avoir un temps d'exécution raisonnable.
Connaissez-vous l'origine de cette différence dans la génération de nombres aléatoires en Python3 ?
Merci d'avance !![]()
Partager