๋ฐ์ํ
ํ์ด ๊ณผ์
- M ๊ณ์ฐ: M์ ๋ชจ๋ pi (์ฌ๊ธฐ์๋ p1, p2, p3) ๊ฐ์ ๊ณฑํ ๊ฐ์ ๋๋ค. M = p1 * p2 * p3
- mi ๊ณ์ฐ: mi๋ M์ ํด๋น ์์ pi๋ก ๋๋ ๋ชซ์ ๋๋ค. m1 = M // p1, m2 = M // p2, m3 = M // p3
- ์ญ์ ๊ณ์ฐ: mi์ ์ญ์ yi๋ mi๋ฅผ ๋ชจ๋๋ก pi๋ก ๋๋ ๋๋จธ์ง์ ๊ณฑํ์ ๋ 1์ด ๋๋ ๊ฐ์ ๋๋ค. ์ญ์์ ๋ชจ๋๋ก ์ฐ์ฐ์์ ๋๋์ ์ ์ญํ ์ ํฉ๋๋ค. ์ญ์์ ํ์ฅ๋ ์ ํด๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ ๋ฑ์ ์ฌ์ฉํ์ฌ ๊ณ์ฐํ ์ ์์ต๋๋ค.
- ๋ณต์: ์ด์ ์ญ์๊ณผ mi ๊ฐ์ ์ฌ์ฉํ์ฌ flag ๊ฐ์ ๋ณต์ํฉ๋๋ค. flag = (c1 * y1 * m1 + c2 * y2 * m2 + c3 * y3 * m3) % M
ํ์ด ์ฝ๋
from Crypto.Util.number import long_to_bytes
p1 = 1527207470243143973741530105910986024271649986608148657294882537828034327858594844987775446712917007186537829119357070864918869
p2 = 2019864244456120206428956645997068464122219855220655920467990311571156191223237121636244541173449544034684177250532278907347407
p3 = 1801109020443617827324680638861937237596639325730371475055693399143628803572030079812427637295108153858392360647248339418361407
c1 = 232762450308730030838415167305062079887914561751502831059133765333100914083329837666753704309116795944107100966648563183291808
c2 = 869189375217585206857269997483379374418043159436598804873841035147176525138665409890054486560412505207030359232633223629185304
c3 = 1465704473460472286244828683610388110862719231828602162838215555887249333131331510519650513265133531691347657992103108331793683
def modInverse(a, m):
m0 = m
y = 0
x = 1
if (m == 1):
return 0
while (a > 1):
q = a // m
t = m
m = a % m
a = t
t = y
y = x - q * y
x = t
if (x < 0):
x = x + m0
return x
M = p1 * p2 * p3
m1 = M // p1
m2 = M // p2
m3 = M // p3
y1 = modInverse(m1, p1)
y2 = modInverse(m2, p2)
y3 = modInverse(m3, p3)
flag = (c1*y1*m1 + c2*y2*m2 + c3*y3*m3) % M
print(long_to_bytes(flag))
์คํ ๊ฒฐ๊ณผ
๋ฐ์ํ
'๐ดโโ ๏ธ CTF ๐ดโโ ๏ธ > ๐งฎ ์ํธํ ๐งฎ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Dream Hack - Crypto] RSA-wiener (0) | 2023.09.05 |
---|---|
[Dream Hack - Crypto] fuzzy flag (0) | 2023.09.04 |
[Dream Hack - Crypto] ICM2022 (0) | 2023.09.04 |
[Dream Hack - Crypto] darimchal_001 (0) | 2023.09.04 |
[Dream Hack - Crypto] ROT128 (0) | 2023.09.04 |