0% ont trouvé ce document utile (0 vote)
37 vues8 pages

CC2 Crypto

Le document décrit trois fonctions Python pour un système de chiffrement RSA simple: une fonction pour générer des clés, une pour le chiffrement et une pour le déchiffrement. Il explique également comment résoudre un chiffrement à deux clés et pourquoi RSA ne devrait pas être utilisé directement sans padding.

Transféré par

Hoang
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
37 vues8 pages

CC2 Crypto

Le document décrit trois fonctions Python pour un système de chiffrement RSA simple: une fonction pour générer des clés, une pour le chiffrement et une pour le déchiffrement. Il explique également comment résoudre un chiffrement à deux clés et pourquoi RSA ne devrait pas être utilisé directement sans padding.

Transféré par

Hoang
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Minh Tuan NGUYEN Crypto 2023

12311816

Q1.

- Nous allons développer les trois fonctions en Python correspondant à un système de


chiffrement RSA d'école.

1) La fonction G génère une paire de clés publique et privée. Elle sélectionne deux
nombres premiers aléatoires, calcule n et φ(n), puis sélectionnez e et calcule d.

from sympy import randprime, isprime

def G(bits=1024):
# Générer deux grands nombres premiers p et q
p = randprime(2**(bits-1), 2**bits)
q = randprime(2**(bits-1), 2**bits)

# Calculer n et phi(n)
n=p*q
phi_n = (p-1) * (q-1)

# Choisir e tel que 1 < e < phi(n) et gcd(e, phi(n)) = 1 (e est souvent pris comme
65537)
e = 65537

# Calculer d, l'inverse modulaire de e modulo phi(n)


d = pow(e, -1, phi_n)

# La clé publique est (n, e) et la clé privée est (n, d)


return (n, e), (n, d)

2) Fonction E(pk, m) - Chiffrement :


La fonction E prend une clé publique et un message à chiffrer. Elle retourne le texte
chiffré en utilisant la clé publique.

def E(pk, m):


n, e = pk
# Chiffrer le message m avec la clé publique (n, e)
c = pow(m, e, n)
return c

3) Fonction D(sk, c) - Déchiffrement :


La fonction D prend une clé privée et un texte chiffré. Elle retourne le texte clair en
utilisant la clé privée.

def D(sk, c):


n, d = sk
# Déchiffrer le texte c avec la clé privée (n, d)
m = pow(c, d, n)
Minh Tuan NGUYEN Crypto 2023
12311816

return m

Vérification de la consistance :

# Générer les clés publique et privée


public_key, private_key = G()

# Définir un message
message = 123456789

# Chiffrer le message
ciphertext = E(public_key, message)

# Déchiffrer le message
decrypted_message = D(private_key, ciphertext)

# Vérifier la consistance
print("Message original:", message)
print("Message chiffré:", ciphertext)
print("Message déchiffré:", decrypted_message)

Voici les résultats de l'exécution du programme :

Message original: This is encrypted


Message chiffré:
[21177581…980909576804298670846562002880088016409476799109682118311678895
509943802696]
Message déchiffré: This is encrypted
Minh Tuan NGUYEN Crypto 2023
12311816

Q2.

from sympy import gcdex

# Valeurs données
n = 493
c1 = 293 # Chiffré avec la clé (n, 3)
c2 = 421 # Chiffré avec la clé (n, 5)

# Trouver a et b tels que 3a + 5b = 1


a, b, _ = gcdex(3, 5)

# Calculer m
m = (pow(c1, a, n) * pow(c2, b, n)) % n
printf("Le message retrouvé est : {m}")

4. Pourquoi ne pas utiliser directement la fonction à sens unique RSA comme système
de chiffrement :
On ne l'utilise pas directement car elle est sujette à plusieurs attaques, notamment
celles qui exploitent sa malléabilité. De plus, sans un padding adéquat, elle est
vulnérable aux attaques de texte clair choisi et de texte chiffré choisi.
Minh Tuan NGUYEN Crypto 2023
12311816

5. Méthode pour utiliser RSA comme système de chiffrement :


Pour utiliser RSA comme système de chiffrement de manière sécurisée, on doit y ajouter
un padding sécurisé, tel que OAEP (Optimal Asymmetric Encryption Padding), qui
assure que le chiffrement sera différent même si le même message est chiffré plusieurs
fois. De plus, cela prévient les attaques qui exploitent la structure algébrique de RSA.

Q3.
Minh Tuan NGUYEN Crypto 2023
12311816
Minh Tuan NGUYEN Crypto 2023
12311816

Q4.
Minh Tuan NGUYEN Crypto 2023
12311816

Q5.
Minh Tuan NGUYEN Crypto 2023
12311816

Vous aimerez peut-être aussi