Атаки RSA
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Швидка оцінка
Збирайте:
n,e,c(і будь-які додаткові ciphertexts)- Будь-які зв’язки між повідомленнями (same plaintext? shared modulus? structured plaintext?)
- Any leaks (partial
p/q, bits ofd,dp/dq, known padding)
Потім спробуйте:
- Перевірка факторизації (Factordb /
sage: factor(n)для досить малих значень) - Патерни з малим показником (
e=3, broadcast) - Спільний modulus / повторювані прості
- Методи решіток (Coppersmith/LLL), коли дещо майже відомо
Поширені атаки RSA
Common modulus
Якщо два ciphertexts c1, c2 шифрують те саме message під тим самим modulus n, але з різними показниками e1, e2 (і gcd(e1,e2)=1), можна відновити m за допомогою розширеного алгоритму Евкліда:
m = c1^a * c2^b mod n де a*e1 + b*e2 = 1.
Орієнтовний приклад:
- Обчисліть
(a, b) = xgcd(e1, e2)так щоa*e1 + b*e2 = 1 - Якщо
a < 0, трактуйтеc1^aякinv(c1)^{-a} mod n(те ж дляb) - Помножте й зведіть по модулю
n
Shared primes across moduli
Якщо у вас є кілька RSA moduli з одного завдання, перевірте, чи вони ділять просте:
gcd(n1, n2) != 1означає катастрофічну помилку генерації ключів.
Це часто трапляється в CTFs як “we generated many keys quickly” або “bad randomness”.
Håstad broadcast / low exponent
Якщо той самий plaintext відправлено кільком отримувачам з малим e (часто e=3) і без коректного padding, можна відновити m за допомогою CRT і integer_root.
Технічна умова:
Якщо у вас є e ciphertexts того самого message під попарно-взаємно-простими moduli n_i:
- Використайте CRT, щоб відновити
M = m^eпо модулю добуткуN = Π n_i - Якщо
m^e < N, тодіM— справжній цілий ступінь, іm = integer_root(M, e)
Wiener attack: small private exponent
Якщо d занадто малий, continued fractions можуть його відновити з e/n.
Textbook RSA pitfalls
Якщо бачите:
- Немає OAEP/PSS, сире modular exponentiation
- Deterministic encryption
то algebraic attacks і oracle abuse стають значно ймовірнішими.
Інструменти
- RsaCtfTool: https://github.com/Ganapati/RsaCtfTool
- SageMath (CRT, roots, CF): https://www.sagemath.org/
Схеми пов’язаних повідомлень
Якщо бачите два ciphertexts під тим самим modulus, де messages алгебраїчно пов’язані (наприклад, m2 = a*m1 + b), шукайте related-message атаки, такі як Franklin–Reiter. Зазвичай це вимагає:
- same modulus
n - same exponent
e - відомого зв’язку між plaintexts
На практиці це часто вирішують у Sage, задавши поліноми по модулю n і обчисливши GCD.
Lattices / Coppersmith
Звертайтесь до цього, коли у вас є частково відомі біти, структурований plaintext або близькі відношення, які роблять невідоме малим.
Методи решіток (LLL/Coppersmith) застосовують, коли є часткова інформація:
- Частково відомий plaintext (структуроване повідомлення з невідомим кінцем)
- Частково відомі
p/q(втрачено верхні/нижні біти) - Малі невідомі різниці між пов’язаними величинами
На що звертати увагу
Типові підказки в задачах:
- “We leaked the top/bottom bits of p”
- “The flag is embedded like:
m = bytes_to_long(b\"HTB{\" + unknown + b\"}\")” - “We used RSA but with a small random padding”
Інструментарій
На практиці ви будете використовувати Sage для LLL і відомі шаблони для конкретного випадку.
Хороші стартові точки:
- Sage CTF crypto templates: https://github.com/defund/coppersmith
- A survey-style reference: https://martinralbrecht.wordpress.com/2013/05/06/coppersmiths-method/
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.


