
Démontre l'exploitation de la réutilisation de nonce dans AES-GCM en collectant des textes chiffrés partageant le même nonce, conduisant à la fuite de la clé GHASH, à la falsification de messages et à la récupération de clé dans des applications vulnérables.
# aes_gcm_nonce_reuse_sim.py - Simulated encryption oracle with fixed nonce
from Crypto.Cipher import AES
import os
key = os.urandom(16)
nonce = b'\x00' * 12 # ALWAYS SAME NONCE
def encrypt(plaintext):
cipher = AES.new(key, AES.MODE_GCM, nonce=nonce)
ct, tag = cipher.encrypt_and_digest(plaintext)
return ct, tag
# Vulnerable: attacker can obtain many ciphertexts with same nonce
ct1, tag1 = encrypt(b"Secret message 1")
ct2, tag2 = encrypt(b"Secret message 2")
print("Ciphertexts collected. Nonce reuse allows key recovery and forgery.")
Une application utilise le chiffrement AES‑GCM avec un nonce fixe (ou répète un nonce). Cela permet à un attaquant qui observe plusieurs textes chiffrés avec le même nonce de récupérer la clé d'authentification, de forger des messages arbitraires et potentiellement de récupérer la clé de chiffrement.
Exécutez la simulation pour voir le danger :
pip install pycryptodome
python aes_gcm_nonce_reuse_sim.py
Le programme affiche que des textes chiffrés avec le même nonce ont été générés, mettant en évidence la vulnérabilité.