Wiener ๊ณต๊ฒฉ
์๋(Wiener)์ ๊ณต๊ฒฉ์ RSA ์ํธํ ๋ฐฉ์์์ ๋ฐ์ํ๋ ์ทจ์ฝ์ฑ์ ์ด์ฉํ ๊ณต๊ฒฉ ๊ธฐ๋ฒ ์ค ํ๋์ด๋ค. RSA๋ ๊ณต๊ฐํค ์ํธํ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๋๋ฆฌ ์ฌ์ฉ๋๋ฉฐ, ํฐ ์์์ธ ๋ ๊ฐ์ ์์๋ฅผ ๊ธฐ๋ฐ์ ํ๋ค. ํ์ง๋ง ์๋์ ๊ณต๊ฒฉ์ ํน์ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋ ๋, RSA์ ๊ฐ์ธํค๋ฅผ ๋ณต๊ตฌํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์๋ค.
์๋์ ๊ณต๊ฒฉ์ ๋ค์๊ณผ ๊ฐ์ ์ ์ ์กฐ๊ฑด์ ํ์๋ก ํ๋ค:
- ์์ p์ q๊ฐ n = p x q๋ก๋ถํฐ ๊ณ์ฐ๋์์ ๋, p์ q์ ํฌ๊ธฐ๊ฐ ๋๋ฌด ์์ n์ ๊ณ์ฐํ๋ ๋ฐ ์๋นํ ๋น์ฉ์ด ๋ค์ง ์๋ ๊ฒฝ์ฐ.
- e๊ฐ ๋งค์ฐ ํฐ ๊ฒฝ์ฐ. ๋ณดํต RSA์์๋ ๊ณต๊ฐ ์ง์ e๋ก ์์ ์์, ์ฃผ๋ก 3 ๋๋ 65537(2^16 + 1)์ ์ฌ์ฉํฉ๋๋ค. ํ์ง๋ง e๊ฐ ๋งค์ฐ ํฐ ๊ฒฝ์ฐ์๋ ์๋์ ๊ณต๊ฒฉ์ด ์ ์ฉ๋ ์ ์๋ค.
์ ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ ๊ฒฝ์ฐ, ์๋์ ๊ณต๊ฒฉ์ ๋ค์๊ณผ ๊ฐ์ด ์งํ๋๋ค:
- n๊ณผ e๋ฅผ ์๊ณ ์๋ ์ํฉ์์, RSA์ ๊ฐ์ธํค d๋ฅผ ๊ตฌํ๊ธฐ ์ํด d์ ๊ทผ์ฌ์น์ธ d' = 1/e mod (euler_phi(n))๋ฅผ ๊ณ์ฐํ๋ค. ์ฌ๊ธฐ์ euler_phi(n)=(p-1)(q-1) ์ n์ ์ค์ผ๋ฌ ํผ ํจ์์ด๋ค.
- d'์ ๋ถ์ ํํ์ ์ด์ฉํ์ฌ d'๋ฅผ d = (k x euler_phi(n)+1)/e ํํ๋ก ํ๋ค. ์ด๋, k๋ ์์ ์ ์์ด๋ค.
- ์์ ์์ ๋ง์กฑํ๋ k ๊ฐ์ ์ฐพ์๋ด๊ธฐ ์ํด ์ฐ์๋ k ๊ฐ๋ค์ ์๋ํ๋ฉด์ d๊ฐ ์ ์๊ฐ ๋๋์ง ํ์ธํ๋ค. ์ด ๋, d๊ฐ ์ ์๊ฐ ๋๋ k ๊ฐ์ ์ฐพ๊ฒ ๋๋ฉด, ํด๋น k ๊ฐ์ผ๋ก๋ถํฐ ๊ฐ์ธํค d๋ฅผ ๊ณ์ฐํ ์ ์๋ค.
ํ์ด ๋ฐฉ๋ฒ
์ฐ๋ฆฌ๋ N, e, ์ํธํ๋ Flag๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
N = 237513265686025789186562608732400008100581870458434017952788114554225756652162413702306473956172406315118900180084859436965775540087331299252158189935099309726131944473377703166550089276072127708850460299073570538050902891628197488607150799868080449908160852741234270848472245085906293581136277333188361835161
e = 187224198358976786579749067995497890905799822947128651088251530361387419780131539700347226362649795586438751501544451473659148049507814353125472665954342709257182749776947194758327083239358991106508477303866175029695125086636425667367941964361682844471490598884007406957886946810963902666192471332550759161305
Flag = 24981254080909219230265206235193414028780554719956568981014479247148185251168118446607184006846379494138286369937332491801314184196030148052351232512282822191418093014429056913869049243299733179602660079651535369672864881677595298490260859831553321356068082173796345881132554132547112018880976416128995190760
์ง์ ํ์ด ๊ณผ์ ์ ์์ฑํ์ฌ ํ์ด๋ณด๋ ค๊ณ ํ์ง๋ง ์ซ์๊ฐ ๋๋ฌด ์ปค์ ๊ณ์ ๋ฉ๋ชจ๋ฆฌ ์ค๋ฅ๊ฐ ๋ฐ์ํ์๋ค. ๊ทธ๋์ ํด์ ์ฌ์ฉํ์ฌ์ ํ์๋ค.
$ git clone <https://github.com/zweisamkeit/RSHack.git>
$ cd RSHack
$ pip install -r requirements.txt
$ python rshack.py
๋น๋ฐํค ๊ตฌํ๊ธฐ
์๊ตฌํ๋ ํฌ๋ฉง๋๋ก -n {modulus ๊ฐ} -e {exponent ๊ฐ} ์ ๋ฃ์ด์ฃผ๋ฉด ๋น๋ฐํค๊ฐ ๋์จ๋ค.
๋ณตํธํ ํ๊ธฐ
'๐ดโโ ๏ธ CTF ๐ดโโ ๏ธ > ๐งฎ ์ํธํ ๐งฎ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[DreamHack - Crypto] uncommon_e (2) | 2023.11.22 |
---|---|
[Dream Hack - Pwnable] baby-bof (0) | 2023.11.19 |
[Dream Hack - Crypto] fuzzy flag (0) | 2023.09.04 |
[Dream Hack - Crypto] chinese what? (0) | 2023.09.04 |
[Dream Hack - Crypto] ICM2022 (0) | 2023.09.04 |