Remarque : nous aurons besoin de vos fonctions des TP1, TP2 et TP3.
print(phi(13))
print(phi(15))
print(phi(18))
n
est premier, que vaut phi(n)
?p
et q
des nombres premiers distincts, alors phi(pq) = (p-1)(q-1)
.primal_temps(n,tps)
qui recherche un un diviseur de n
tant que le temps de calcul ne dépasse pas tps
(en seconde). Cette fonction devra retournern
est premier ou non (si le temps de calcul n'a pas dépassé tps
).tps
.Remarque : Votre programme devra arrêter la recherche de diviseur dès que le temps de calcul dépasse tps
.
Exemple :
print(primal_temps(2147483649,0.3))
print(primal_temps(2147483647,0.3))
print(primal_temps(100000002251,0.3))
print(primal_temps(100000002251,1))
print(primal_temps(67280421310721 ,10))
print(primal_temps(67280421310721 ,20))
Les nombres de Mersenne sont ceux s'écrivant $2^{n}-1$, avec n premier. Attention, tous ne sont pas des nombres premiers.
Par exemple :
$2^{19}-1$ est premier, mais $2^{23}-1$ ne l'est pas.
mersenne_grand(tps)
qui retourne le plus grand nombre de Mersenne, premier, dont le temps de calcul est inférieur à tps
.Exemple :
print(mersenne_grand(0.0005))
print(mersenne_grand(0.005))
print(mersenne_grand(0.5))
print(mersenne_grand(5))
Le plus grand nombre obtenu en moins d'une minute devrait être $2^{31}-1$, c'est à dire 2 147 483 647.
Pour information, le prochain nombre de Mersenne premier est $2^{61}-1$, c'est à dire 2 305 843 009 213 693 951. Il m'a fallu plus de 5min pour l'obtenir.
Il n'a pu être calculé qu'à la fin du 19e siècle.
L'efficacité du chiffrement RSA repose sur les faits suivants :
Exemple :
n = 524287*2147483647
temps(decomposition,n)
A partir de nombres premiers $p$ et $q$ crées en moins d'une seconde, il a fallu plus de 300 sec pour les retrouver si on ne connait que n.
Le principe du chiffrement repose sur cette difficulté.
phi(n)
, c'est à dire de $(p-1)(q-1)$, c'est à dire de $p$ et de $q$.Exemple : On choisit
p = 41
q = 103
e = 19
d vaut alors :
print(inverse(19,(p-1)*(q-1)))
chiffrementRSA(m,n,e)
qui chiffre un message m
à l'aide de la clef publique n,e
.Exemple : on veut chiffre 192 avec les clefs précédentes.
print(chiffrementRSA(192,p*q,19))
dechiffrementRSA(c,p,q,d)
qui déchiffre un message codé c
à l'aide de la clef privée p, q, d
.dechiffrementRSA(1864,p,q,859)