
Dimostra lo sfruttamento del riutilizzo del nonce in AES-GCM raccogliendo testi cifrati con lo stesso nonce, portando alla divulgazione della chiave GHASH, alla contraffazione di messaggi e al recupero della chiave in applicazioni vulnerabili.
# 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.")
Un'applicazione utilizza la crittografia AES‑GCM con un nonce fisso (o ripete un nonce). Ciò consente a un attaccante che osserva più ciphertext generati con lo stesso nonce di recuperare la chiave di autenticazione, contraffare messaggi arbitrari e potenzialmente recuperare la chiave di crittografia.
Esegui la simulazione per vedere il pericolo:
pip install pycryptodome
python aes_gcm_nonce_reuse_sim.py
Il programma mostra che sono stati generati ciphertext con lo stesso nonce, evidenziando la vulnerabilità.