RSA ๊ณต๊ฒฉ

Tip

AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks ์ง€์›ํ•˜๊ธฐ

๋น ๋ฅธ ์ดˆ๊ธฐ ํ‰๊ฐ€

์ˆ˜์ง‘:

  • n, e, c (and any additional ciphertexts)
  • ๋ฉ”์‹œ์ง€ ๊ฐ„์˜ ๊ด€๊ณ„ (same plaintext? shared modulus? structured plaintext?)
  • Any leaks (partial p/q, bits of d, dp/dq, known padding)

๊ทธ ๋‹ค์Œ ์‹œ๋„:

  • ์ธ์ˆ˜๋ถ„ํ•ด ํ™•์ธ (Factordb / sage: factor(n) โ€” ์ž‘์€ ๊ทœ๋ชจ์˜ ๊ฒฝ์šฐ)
  • ๋‚ฎ์€ ์ง€์ˆ˜ ํŒจํ„ด (e=3, broadcast)
  • ๊ณตํ†ต modulus / ๋ฐ˜๋ณต๋œ primes
  • ๋ฌด์–ธ๊ฐ€ ๊ฑฐ์˜ ์•Œ๋ ค์ ธ ์žˆ์„ ๋•Œ Lattice ๋ฐฉ๋ฒ• (Coppersmith/LLL)

์ผ๋ฐ˜์ ์ธ RSA ๊ณต๊ฒฉ

Common modulus

๋งŒ์•ฝ ๋‘ ๊ฐœ์˜ ์•”ํ˜ธ๋ฌธ c1, c2๊ฐ€ ๊ฐ™์€ ๋ฉ”์‹œ์ง€๋ฅผ ๋™์ผํ•œ modulus n ์•„๋ž˜ ์„œ๋กœ ๋‹ค๋ฅธ ์ง€์ˆ˜ e1, e2 (๊ทธ๋ฆฌ๊ณ  gcd(e1,e2)=1)๋กœ ์•”ํ˜ธํ™”ํ–ˆ๋‹ค๋ฉด, ํ™•์žฅ ์œ ํด๋ฆฌ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด m์„ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

m = c1^a * c2^b mod n where a*e1 + b*e2 = 1.

์˜ˆ์‹œ ๊ฐœ์š”:

  1. (a, b) = xgcd(e1, e2) ๋ฅผ ๊ณ„์‚ฐํ•ด a*e1 + b*e2 = 1 ์„ ๋งŒ๋“ ๋‹ค
  2. ๋งŒ์•ฝ a < 0 ๋ผ๋ฉด, c1^a ๋ฅผ inv(c1)^{-a} mod n ๋กœ ํ•ด์„ํ•œ๋‹ค (b ๋„ ๋™์ผ)
  3. ๊ณฑํ•œ ํ›„ n์œผ๋กœ ๋‚˜๋จธ์ง€๋ฅผ ์ทจํ•œ๋‹ค

์—ฌ๋Ÿฌ moduli์—์„œ์˜ ๊ณต์œ ๋œ primes

๋™์ผํ•œ ์ฑŒ๋ฆฐ์ง€์—์„œ ์—ฌ๋Ÿฌ RSA moduli๋ฅผ ์–ป์—ˆ๋‹ค๋ฉด, ์ด๋“ค์ด prime์„ ๊ณต์œ ํ•˜๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”:

  • gcd(n1, n2) != 1 ์€ ์น˜๋ช…์ ์ธ ํ‚ค ์ƒ์„ฑ ์‹คํŒจ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ด๋Š” CTF์—์„œ ์ž์ฃผ ๋‚˜ํƒ€๋‚˜๋ฉฐ โ€œwe generated many keys quicklyโ€ ๋˜๋Š” โ€œbad randomnessโ€ ๊ฐ™์€ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

Hรฅstad broadcast / low exponent

If the same plaintext is sent to multiple recipients with small e (often e=3) and no proper padding, you can recover m via CRT and integer root.

๊ธฐ์ˆ ์  ์กฐ๊ฑด:

๋งŒ์•ฝ ์„œ๋กœ ์†Œ์ธ pairwise-coprime moduli n_i ์•„๋ž˜ ๋™์ผํ•œ ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•œ e ๊ฐœ์˜ ์•”ํ˜ธ๋ฌธ์ด ์žˆ๋‹ค๋ฉด:

  • CRT๋ฅผ ์‚ฌ์šฉํ•ด N = ฮ  n_i ์œ„์—์„œ M = m^e ๋ฅผ ๋ณต์›ํ•œ๋‹ค
  • ๋งŒ์•ฝ m^e < N ์ด๋ฉด, M ์€ ์ง„์งœ ์ •์ˆ˜ ๊ฑฐ๋“ญ์ œ๊ณฑ์ด๊ณ  m = integer_root(M, e) ์ด๋‹ค

Wiener attack: small private exponent

If d is too small, continued fractions can recover it from e/n.

Textbook RSA์˜ ํ•จ์ •

๋งŒ์•ฝ ๋‹ค์Œ์„ ๋ณด๋ฉด:

  • No OAEP/PSS, raw modular exponentiation
  • Deterministic encryption

๊ทธ๋Ÿฌ๋ฉด algebraic attacks์™€ oracle abuse๊ฐ€ ํ›จ์”ฌ ๋” ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ง‘๋‹ˆ๋‹ค.

Tools

  • RsaCtfTool: https://github.com/Ganapati/RsaCtfTool
  • SageMath (CRT, roots, CF): https://www.sagemath.org/

๊ด€๋ จ ๋ฉ”์‹œ์ง€ ํŒจํ„ด

๊ฐ™์€ modulus ์•„๋ž˜์—์„œ ๋ฉ”์‹œ์ง€๋“ค์ด ๋Œ€์ˆ˜์ ์œผ๋กœ ๊ด€๋ จ๋˜์–ด ์žˆ๋‹ค๋ฉด (์˜ˆ: m2 = a*m1 + b), Franklinโ€“Reiter์™€ ๊ฐ™์€ โ€œrelated-messageโ€ ๊ณต๊ฒฉ์„ ์ฐพ์•„๋ณด์„ธ์š”. ์ด๋“ค์€ ๋ณดํ†ต ๋‹ค์Œ์„ ํ•„์š”๋กœ ํ•ฉ๋‹ˆ๋‹ค:

  • ๊ฐ™์€ modulus n
  • ๊ฐ™์€ exponent e
  • plaintexts ๊ฐ„์˜ ์•Œ๋ ค์ง„ ๊ด€๊ณ„

์‹ค์ œ๋กœ๋Š” Sage์—์„œ n์„ ๋ชจ๋“ˆ๋กœ ํ•˜๋Š” ๋‹คํ•ญ์‹์„ ์„ค์ •ํ•˜๊ณ  GCD๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

๊ฒฉ์ž / Coppersmith

๋ฏธ์ง€๊ฐ’์˜ ์ผ๋ถ€ ๋น„ํŠธ๊ฐ€ ์•Œ๋ ค์ ธ ์žˆ๊ฑฐ๋‚˜, ๊ตฌ์กฐํ™”๋œ plaintext, ๋˜๋Š” ๋ฏธ์ง€๊ฐ’์ด ์ž‘์•„์ง€๋Š” ๊ทผ์ ‘ํ•œ ๊ด€๊ณ„๊ฐ€ ์žˆ์„ ๋•Œ ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

๊ฒฉ์ž ๋ฐฉ๋ฒ•(LLL/Coppersmith)์€ ๋ถ€๋ถ„ ์ •๋ณด๊ฐ€ ์žˆ์„ ๋•Œ ์ž์ฃผ ๋“ฑ์žฅํ•ฉ๋‹ˆ๋‹ค:

  • ๋ถ€๋ถ„์ ์œผ๋กœ ์•Œ๋ ค์ง„ plaintext (๋ฏธ์ง€์˜ ๊ผฌ๋ฆฌ๋ฅผ ๊ฐ€์ง„ ๊ตฌ์กฐํ™”๋œ ๋ฉ”์‹œ์ง€)
  • ๋ถ€๋ถ„์ ์œผ๋กœ ์•Œ๋ ค์ง„ p/q (์ƒ์œ„ ๋น„ํŠธ leaked)
  • ๊ด€๋ จ ๊ฐ’๋“ค ์‚ฌ์ด์˜ ์ž‘์€ ๋ฏธ์ง€ ์ฐจ์ด

ํ™•์ธํ•ด์•ผ ํ•  ์‚ฌํ•ญ

์ฑŒ๋ฆฐ์ง€์—์„œ ์ž์ฃผ ๋‚˜์˜ค๋Š” ํžŒํŠธ:

  • โ€œ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โ€

๋„๊ตฌ

์‹ค์ œ๋กœ๋Š” LLL์„ ์œ„ํ•ด Sage๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ํŠน์ • ์ธ์Šคํ„ด์Šค์— ๋งž๋Š” ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์‹œ์ž‘์ :

  • Sage CTF crypto templates: https://github.com/defund/coppersmith
  • A survey-style reference: https://martinralbrecht.wordpress.com/2013/05/06/coppersmiths-method/

Tip

AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks ์ง€์›ํ•˜๊ธฐ