
Python PoC для CVE-2026-23006, демонстрирующий побочный канал длины шифротекста Kyber, который раскрывает биты секретного ключа через статистический анализ выходных данных переменной длины.
# kyber_length_leak.py - Leaks secret key bit based on ciphertext length
import random
# Simulate encapsulation: ciphertext length depends on message bit
def encapsulate(pk, bit):
# In a flawed implementation, the ciphertext size varies based on a secret bit
if bit:
return b'\x00' * 800 # long ciphertext
else:
return b'\x00' * 768 # short ciphertext
# Attacker observes lengths
lengths = []
for _ in range(100):
ct = encapsulate(None, random.randint(0,1))
lengths.append(len(ct))
# Histogram reveals two clusters -> secret bit leakage
print("Ciphertext lengths leak secret bit.")
Уязвимая реализация механизма инкапсуляции ключей Kyber создаёт шифротексты разной длины в зависимости от секретного бита в общем секрете. Атакующий, измеряя длину нескольких шифротекстов, может восстановить этот бит с помощью статистического анализа.
Запустите симуляцию:
python kyber_length_leak.py
Наблюдаются два различных кластера длин.