
Demonstra a exploração de reutilização de nonce em AES-GCM ao coletar textos cifrados com o mesmo nonce, levando ao vazamento da chave GHASH, à falsificação de mensagens e à recuperação de chaves em aplicações vulneráveis.
# 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.")
Um aplicativo usa criptografia AES‑GCM com um nonce fixo (ou repete um nonce). Isso permite que um atacante que observe múltiplos textos cifrados sob o mesmo nonce recupere a chave de autenticação, forje mensagens arbitrárias e potencialmente recupere a chave de criptografia.
Execute a simulação para ver o perigo:
pip install pycryptodome
python aes_gcm_nonce_reuse_sim.py
O programa exibe que textos cifrados com o mesmo nonce foram gerados, destacando a vulnerabilidade.