
Демонстрирует эксплуатацию повторного использования nonce в AES-GCM путём сбора шифротекстов с одинаковым nonce, что приводит к утечке ключа GHASH, подделке сообщений и восстановлению ключа в уязвимых приложениях.
# 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.")
Приложение использует шифрование AES‑GCM с фиксированным nonce (или повторяет nonce). Это позволяет атакующему, наблюдающему несколько шифротекстов с одним и тем же nonce, восстановить ключ аутентификации, подделать произвольные сообщения и потенциально восстановить ключ шифрования.
Запустите симуляцию, чтобы увидеть опасность:
pip install pycryptodome
python aes_gcm_nonce_reuse_sim.py
Программа выводит сообщение о том, что были сгенерированы шифротексты с одним и тем же nonce, подчёркивая уязвимость.