
Demuestra la explotación de la reutilización de nonce en AES-GCM mediante la recopilación de textos cifrados con el mismo nonce, lo que provoca la fuga de la clave GHASH, la falsificación de mensajes y la recuperación de claves en aplicaciones vulnerables.
# 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.")
Una aplicación utiliza cifrado AES‑GCM con un nonce fijo (o repite un nonce). Esto permite que un atacante que observe múltiples textos cifrados bajo el mismo nonce recupere la clave de autenticación, forje mensajes arbitrarios y potencialmente recupere la clave de cifrado.
Ejecute la simulación para ver el peligro:
pip install pycryptodome
python aes_gcm_nonce_reuse_sim.py
El programa muestra que se generaron textos cifrados con el mismo nonce, destacando la vulnerabilidad.