➡️Слышали про клептографию?
Эта концепция родилась ещё в далёком 1996, но сейчас, почти 30 лет спустя, получила внимание одна из неплохих публичных реализаций атаки из этой области ⬇️
🧩 monsieurPale/RSA-Backdoor
В исследовании, положившем начало клептографии, рассматривается атака "SETUP" (Secretly Embedded Trapdoor with Universal Protection) – грубо говоря – бекдор для алгоритмов, основанных на факторизации;
Чуть менее грубо: SETUP — алгоритмическая модификация, благодаря которой возможна генерация ключей, уязвимых к неавторизованной расшифровке, НО вычислительно неотличимых от сгенерированных "чистой" системой;
🧩 ‟Kleptography: Using Cryptography Against Cryptography” (A. Young & M. Yung)
🧩 ‟Kleptography: The unbearable lightness of being mistrustful”
#️⃣Нормальная генерация ключей RSA:
1️⃣ Сгенерировать 2 больших простых p и q (≈1024 бит каждый для 2048‑битного ключа)
2️⃣ Вычислить n = p · q
3️⃣ Выбрать публичную экспоненту e (обычно 2¹⁶+1)
4️⃣ Вычислить d, такую что e · d ≡ 1 mod φ(n) при φ(n) = (p–1)(q–1)
Публичный ключ: (n, e)
Приватный ключ: d
Шифрование: c = mᵉ mod n
Дешифрование: m = cᵈ mod n
#️⃣Генерация ключей через SETUP:
1️⃣ Выбрать 1024-битное простое s и вычислить p = HASH(s) — повторять до тех пор, пока p не станет простым
2️⃣ Зашифровать s с помощью ключа атакующего: c = sᴱ mod N
3️⃣ Выбрать случайное z
4️⃣ Сформировать q такое, что c || z = p · q + r для некоторого произвольного остатка r — повторять, если q не простое
5️⃣ Вычислить n = p · q, задать e и вычислить d как в нормальном алгоритме
Результат: нормально выглядящие публичный ключ (n, e) и приватный ключ d — но с бекдором ⚡️
#️⃣Восстановления приватного ключа:
1️⃣ Взять верхние n/2 бита n в качестве u (≈1024 бита)
2️⃣ Определить c₁ = u и c₂ = u + 1 — на случай возможной потери бита при вложении c||z
3️⃣ Расшифровать приватным ключом атакующего D:
s₁ = c₁ᴰ mod N, s₂ = c₂ᴰ mod N
4️⃣ Вычислить потенциальные простые:
p₁ = HASH(s₁), p₂ = HASH(s₂)
5️⃣ Вычислить q₁ = n / p₁ и q₂ = n / p₂ — деление, дающее в результате целочисленное, раскрывает p и q
6️⃣ Восстановить d из (p, q, e)
Таким образом атакующий целиком восстанавливает приватный ключ RSA атакуемого ⚡️
⬜➖⬜➖⬜➖
🔑 #заметки #web3
➡️Поверхность такой атаки в мире, где многое базируется на RSA, велика — особенно в связи с популярностью supply chain атак — но позволю себе обратить ваше внимание на применение клептографии в Web3;
Казалось, что для восстановления приватного ключа нужно собрать множество подписей — но выяснилось, что достаточно всего 2 для 12 слов или 4 — для 24 (а то и 1 единственной*). Тут исследователи рассмотрели подобную атаку с вредоносным hardware кошельком, который использовал бы слабый nonce при подписи:
🧩 ‟Dark Skippy Disclosure”
🧩 ‟DARK SKIPPY DEMO - A Powerful Method For A Malicious Signing Device To Leak Secret Keys”
➡️Самое близкое по смыслу, что случалось в реальной жизни к настоящему времени — это кейс от Kaspersky про перепрошитые кошельки Trezor: они заменяли фразу на одну из 20 предопределённых, а если устанавливался пароль — использовали лишь первый символ:
🧩 ‟Case study: fake hardware cryptowallet”
*И кейс, когда в сети Bitcoin обнаружили сотни кошельков, опустошённых из-за уязвимости, позволявшей восстановить приватный ключ всего из 1 подписи в связи с генерацией nonce подписи путём конкатенации половины битов хеша сообщения + половины битов ключа (поговаривают, то мог быть бекдор):
🧩 ‟The curious case of the half-half Bitcoin ECDSA nonces”
🧩 kudelskisecurity/ecdsa-polynomial-nonce-recurrence-attack
🧩 ‟Polynonce: An ECDSA Attack and Polynomial Dance” (DEFCON 31)
➡️Много "если бы да кабы", но, согласитесь, красиво ✨
@HaHacking 🐇
