print(f'{" menu ":=^20}')
readkey 就是讀取一組key阿
init 就是讀flag然後加密阿
info 就是跟你講公鑰跟密文還有神秘的n阿
decrypt 就是解密阿
但是他給我 m=10574169483........
size(n) // 2 相當於 size(n) » 1
反正d = d & 429049853758163107186368799942587076079339706258956588087153966199096448962353503257659977541340909686081019461967553627320124249982290238285876768194691071
然後有個hint
try to approximate d in order to get upper bits of d
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111
喔對 題目敘述是
simple and easy chosen cipher attack
2^n mod 143478849721328647366796911317725983054855395296689849876355890490977050877093615453463907857688818222940306623114121603052359629389224881416760794497488308298634922765593669975308852960521414077388041660169581895295559651229956692632096543860973583128797426555854713074086760619798915777231115935781932644167 = 67153106998122890542103543974604486279543330843819610485820928904913732092354739912925915959785458003556019130659381977912671905611435652711312050194641410735084380385732769305116630376418477270947866157447749260206143295733278735083815603511030962303982996228607119970855046702209638269077596053207030437021
那個specially crafted ciphertext在這邊有用ㄇ
C = 67153106998122890542103543974604486279543330843819610485820928904913732092354739912925915959785458003556019130659381977912671905611435652711312050194641410735084380385732769305116630376418477270947866157447749260206143295733278735083815603511030962303982996228607119970855046702209638269077596053207030437021
e = 65537
Cb = C * 2^e
Chosen-ciphertext attack 才對ㄅ
m = 56381847305688757121507652623496941836236077750675802127447959231352881598966410822462977823428860128694304060984051628009731512522082743917539188658146822196888360154645307054915212513026862654864794599605732347098907155173446434212988816845542762564361022548548376292792441669559826188786018793092225329749
C = m^e (mod n)
Cb = C * 2^e = m^e*2^e (mod n)
Cb^d = (m^e)^d * (2^e)^d (mod n)
(x^e)^d = x (mod n)
(Cb)^d = m*2 * (mod n)
C = m^e (mod n)
m = C^d (mod n)
這是 RSA
C1^d = m1 (mod n)
C1^(d+1) = m1*d (mod n)
2^(2d) = m1 * 2^d (mod n)
m = 41301012913484306325573174542352537493940741123097211112288373968189880166236460332840033946776136620075355855817559591317472322270856180508274037595278500405894435667684688419695353773002061712848095283094995979974293253336245131906362204199082887911271525770280128691335887809093312872896180781635083466976 (mod n)
m*2^d = 102720107116377495397878664162989971215290411083791729278344083433490875217465977657135758941113968677913108328175354891540203645003038702691349261594888582169631577874324091507209679188868191394666378093627101768955744555455371379140369334016140799473501867322256396157695464211658409855070466603620080563442 (mod n)
已經開始打麻將了?我以為這樣的事是農曆年才在做(?
f(x, y) = 0 轉 t 我們姑且定義為 f'(x, y) = 0
我們把每個點都丟進 g
(x',y') = g(x,y)
最後出來的方程式應該只有 x y 而沒有 x' y' ㄅ