Devoir sur RSA#
Objectifs#
Démontrer une propriété mathématiques avec des nombres premiers en utilisant les congruences
Implémenter un algorithme
Consignes#
Vous répondrez aux questions signalées par 📐 en utilisant votre cours et vos connaissances. la rédaction comptera pour une part importante de l’évaluation.
Vous répondrez aux questions signalées par 🐍 en écrivant
une fonction conforme au nom de l’énoné (
snake_case
)une description de la fonction sous la forme d’un
docstring
un exemple d’utilisation de la fonction dans la
docstring
un jeu d’exemple avec
assert
optionnellement : des indications de type.
Des fonctions utiles vous seront données en annexe.
L’algorithme kidRSA#
Pour commencer#
🐍 📐 Donner le nom des concepteurs de l’algorithme RSA
🐍 📐 Expliquer brièvement le principe général de RSA, du point de vue mathématiques
Le principe de l’algorithme kidRSA#
On choisit quatre entiers \(a1, a2, b1, b2\). On calcule ensuite
\(M = a1 × b1 - 1\)
\(e = a2 × M + a1\)
\(d = b2 × M + b1\)
\(n = \frac{e×d - 1}{M}\)
📐 Donner la factorisation de \(n\).
📐 Calculer \(ed \mod n\).
📐 Quelle condition faut-il ajouter pour que le calcul de \(m × e \mod n\) puisse être effectif ?
📐 Expliquer pourquoi la connaissance de \((e, n)\) ne permet pas facilement de trouver \(d\).
📐 Proposer une méthode pour trouver \(d\) à partir de \((e,n)\).
On appelle \((e,n)\) la clef publique du message et \((d,n)\) la clef secrète du message.
Un exemple#
🐍 📐 Calculer \(e, d, n\) avec \(a1 = 5, \)b1 = 3, a2 = 7, b2 = 5$.
🐍 📐 Donner les clefs publiques et secrètes.
📐 Donner le message secret correspondant au nombre \(m = 97\), puis montrer que \((d,n)\) permet bien de retrouver 97.
Implémentation 🐍#
Écrire une fonction
genere_clefs()
qui renvoie(e, d, n)
conformément à la spécification du principe.Écrire une fonction
chiffre_message(message, clef)
qui renvoie la version chiffrée d’un message. Chaque caractère du message est remplacé par son point de code, exprimé en décimal sur lequel sera appliqué la transformation.Autrement dit, la fonction
chiffre_message
renvoie une liste de nombre de même longueur que la chainemessage
.Écrire une fonction
dechiffre_message(message_chiffre, clef)
qui déchiffre le message.
«Casser» cette implémentation de kidRSA#
On suppose qu’on connait \((e, n) = (53447,5185112)\) et que le message obtenu est
[3580949, 2084433, 3687843, 4436101, 4489548, 1710304, 4329207, 4542995, 3901631, 1710304, 4061972, 3687843, 1710304, 3527502, 4222313, 4436101, 4436101, 1710304, 3687843, 4168866, 1710304, 4168866, 4436101, 3901631, 1710304, 3367161]
🐍 📐 Donner une méthode simple pour retrouver le message.
🐍 Proposer une amélioration pour éviter que la méthode précédente puisse être utilisée.
📐 Expliquer pourquoi trouver \(d\) revient à chercher toutes les valeurs \(d\) comprises entre \(1\) et \(n-1\) telles que \(n | ed - 1\).
📐 Reformuler \(ed \equiv 1 \mod n\) avec l’égalité de Bézout.
📐 Utiliser l’algorithme d’Euclide étendu pour trouver \(d\) avec \(e = 19432624025979826176\) et \(n = 230884490440319\)
Le monde réel#
🐍 📐 Donner la taille des clefs recommandées pour les implémentations réelles de RSA
🐍 Quelle technologie pourrait casser cet algorithme ?
📐 Quel développement mathématique pour casser cet algorithme ?
Pour compléter, une lecture pertinente |: https:|//culturemath.ens.fr/thematiques/lycee/voyage-au-coeur-de-la-cryptographie