NahamCon 2022, Baby RSA Quiz
-
Cryptography
- nilai n, e, ct bisa berbeda, tapi hasil tetap sama
Part 1¶
dengan bantuan webite alpertron, diperoleh faktorisasi nilai \(n\)
jawaban
from Crypto.Util.number import inverse
p = 8998813
q = 15142541
n = p*q
e = 65537
ct = 67764901398180
phi = (p-1)*(q-1)
d = inverse(e, phi)
print(pow(ct, d, n))
print(bytes.fromhex(hex(pow(ct, d, n))[2:]))
Part 2¶
soal
n = 17925435334771013587505133312134011446454665306214868091426625738043654249842612378335769578853505374390032891305043469561633552835484637362051339282618327861863328779440585015290730732272120220814803393146082919022972321742125754827478629002093519872871126896844333575033296315672275008047278029857137147394445352038087033926481419884176987149176269587567688515370267383832925167970567780250165687458061877719682886965443559610523490229924398623783300021139294199543473933632906825708371890824433970966242607905055173858196908145444852654979292627541037359062687311270588137614930275427855189444098664111302437861137
e = 3
ct = 26480272848384180570411447917437668635135597564435407928130220812155801611065536704781892656033726277516148813916446180796750368332515779970289682282804676030149428215146347671350240386440440048832713595112882403831539777582778645411270433913301224819057222081543727263602678819745693540865806160910293144052079393615890645460901858988883318691997438568705602949652125
disini nilai \(n\) terlalu besar (1024 bit x 1024 bit) sehingga tidak dapat difaktorisasikan, tetapi memiliki kerentanan pada nilai \(e\) yang terlalu kecil (materi)
jawaban
n = 17925435334771013587505133312134011446454665306214868091426625738043654249842612378335769578853505374390032891305043469561633552835484637362051339282618327861863328779440585015290730732272120220814803393146082919022972321742125754827478629002093519872871126896844333575033296315672275008047278029857137147394445352038087033926481419884176987149176269587567688515370267383832925167970567780250165687458061877719682886965443559610523490229924398623783300021139294199543473933632906825708371890824433970966242607905055173858196908145444852654979292627541037359062687311270588137614930275427855189444098664111302437861137
e = 3
ct = 26480272848384180570411447917437668635135597564435407928130220812155801611065536704781892656033726277516148813916446180796750368332515779970289682282804676030149428215146347671350240386440440048832713595112882403831539777582778645411270433913301224819057222081543727263602678819745693540865806160910293144052079393615890645460901858988883318691997438568705602949652125
for j in range(130000000):
a, b = gmpy2.iroot(ct + j * n, 3)
if b == 1:
m = a
print(m)
print(bytes.fromhex(hex(m)[2:]))
break
Part 3¶
menggunakan cara yang sama seperti part 1
jawaban
n = 78604621794859254377441240758546691212252719196950677920996438809794723269891783763248474720077319283856135748212772766201496834837866985496988310839851402734816862730799141522806959739687508988075088500036281804849197202116396323478001075482571447841421840179024783853406299077136051285194547787251092448717
e = 65537
ct = 64260894456709053708131874606931233303294614435134258773719481625864684029722126297441699761600170345509407555526981816230807117628073227746581833033382845409470027697867835610091416408500724134007900766475301243929728458577316272426023726155915879223756361962204625550239964938010427596649916752055569962850
p = 8865924756891367526548784117109474928099627857597434007513939836088315293719086434197228572399671985200566321179910478312963492609208679794157183762974311
q = 8865924756891367526548784117109474928099627857597434007513939836088315293719086434197228572399671985200566321179910478312963492609208679794157183762975147
phi = (p-1)*(q-1)
d = inverse(e, phi)
print(pow(ct, d, n))
print(bytes.fromhex(hex(pow(ct, d, n))[2:]))