EZsquares
题目描述: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 from Crypto.Util.number import *from gmpy2 import *from secret import flagp=getPrime(512 ) q=getPrime(512 ) n0=p**2 +q**2 print ('n0 =' ,n0)e=65537 n=p*q m=bytes_to_long(flag) c=pow (m,e,n) print ('c =' ,c)
题目分析:
直接用sagemath自带的函数解 exp:
1 2 3 4 5 6 7 8 9 10 from Crypto.Util.number import *n0 = 192573744538639130845868727014075967669513667763315934161849620531683536696376138303320681922782003088094539724238109116416456294472461075668568088688287209898850985024632463251984323888765249950269595045648435192047990940593817086918399212487934262786817996341234806934640246045717955941049031252181676005098 c = 1541487946178344665369701061600511101386703525091161664845860490319891364778119340877432325104511886045675705355836238082338561882984242433897307540689460550149990099278522355182552369360471907683216881430656993369902193583200864277424101240184767762679012998894182000556316811264544736356326198994294262682 p, q = two_squares(n0) e=65537 n=p*q phi=(p-1 )*(q-1 ) d=inverse(e,phi) print (long_to_bytes(int (pow (c, int (d), n))))
EZmatrix
题目描述:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 from Crypto.Util.number import *from secret import flagp = getPrime(512 ) q = getPrime(512 ) n = p*q part = [bytes_to_long(flag[16 *i:16 *(i+1 )]) for i in range (36 )] M = Matrix(Zmod(n),[ [part[6 *i+j] for j in range (6 )] for i in range (6 ) ]) d = getPrime(920 ) phi = "???????????????????" e = inverse(d,phi) C = M ** e print ("e = " ,e)print ("n = " ,n)print ("C = " ,list (C))''' e = 75759282367368799544583457453768987936939259860144125672621728877894789863642594830153210412190846168814565659154249521465974291737543527734700545818480398345759102651419148920347712594370305873033928263715201812217658781693392922382633382112810845248038459857654576967447255765379492937162044564693535012144718871564964154729561032186045816489683161588345299569985304078255628527588710513640102450308662163641732851643593090646321420800552303398630738674858967724338819227042384745213425656939930135311339542647104499427215254435723921505189649944059658797193927706249542240737884739119223756635540945563449010120382834036979025801446796614280064172405549502694658175837126702821804106928800917035327292099385809060363635737715320709749444795680950552240184529017581997661357846852201424248086080872655164246614710423850620222735225702427025180018637830386631573912505087046428427137407828859500285127835020183526681560129322020299774376860830513167598911105104946612301909005028216010756378307303924865571457872055817289904093797943893894249094212422766513999129665299858860878710920689322752152527130981697461526170099006972245891313788064563118647308122107999430867808150749979046611265769861111738145184897880080810883790769899 n = 99231341424553040688931525316017803824870567327100041969103204566938549582832516706206735181835068382521133899811339836861525260134721134887446163174620592328661881621312114348726944317349680760092960665800660405612177225373482880941142930135489885221592416840149732795379174704611605960303340578163595465083 C = [(60962492392910372655829579800623350869143417412923809005355225641547310999689300067771076642840347631213921261735160280073159348909580620372515144615183619484116931277062459534426852453669020768212186583219050186476749582255169630649290603191487938394564254993928830585225872994041844749592189414050346998498, 47570494768722430855321464941025696993380565713448923284620084505935271175106089198810572053594395338695564872188782440522323916637635901100372244111566233734761590240981688569861120646443206802056135646056594081150032676095454677651908656653983161086373605006880681566863747858292744224442976621418797205399, 2688181329187093888869457776665971472383024590564085347482816443420850842347573980241749337291795284050213197900458997704783513811033569074013164405426061208943782009246429930688449460037973029867946269202889059604686278471272132218340037450771429686919881716403514347492132483441838117219973263406807217974, 69152734772841729744864181378357911157430121423043131526556925765272499517864120668258106865684921607378129493604079173227751534891590136750575722628168425004031909583828469631788511241718967754283602045554638710656882949816656201393892265416912928916418003936183428716201442550333656679935723677385561024921, 87916597194547447124625284021545845894398798075569904698700457948229723401310121661631733143462834474179528341099541302790092417595967636978700000869424652408571342615122171893834241191682257315189450299073036702171002969055277890180093192346807050020075074678160917020003175299572457770301172013554859610885, 87786307503376954316030650346838348696800737186248037233105303922917125487679342882764384018020917373783494097970572084301842435397667036289687253696282531883479674194433525871169279787175003732384644823866404707423021568914833613783558731218680259786594673087000922732933203580338582174836542335256895112774), (19925935729162396840966340912353714097004160798615839580675147896543197999100114040514331382227016633727621399922875280921939403294675089237685490824481702911947235694589943642920569884248825154743655331893278941153597853907070809496035573765953115001007513406579011860142499904738601402936261081671704883289, 58482679161881651450519578125499657069493057728415805326447380380141486533923095749022382883536937182057631317376727990670863971670749991637396946761762614232393617646003704455294405699238388026259395339494678908761885707645569206191899296873833133914051981244247283254577922595285757876026540914747153605160, 7876769535761750153866264956186319035785652316141088148036849233806135397857747677246966644027825150213665232397824678749874814778004967045900692519991198396803997342682950493474998693632762775853085063006163824393616781789234994435613494739078376441202546497376889898623686582966994626392473756048641752814, 40374752091452840478156903709507048899177048294570218656121556350119195781557565218138424538202862806990185673750490061744496157480684671895195643247659670629323773035075555928457149898576983418457948777991721866891250461708466719417665721953156700367709890061169794698483650373164167487545578780062511325698, 4123966761831135761457937397066767492577970106907260057338733132356073163290362041428543487785541800166623333444500095074624068090394361249458065855973762485004782025486942019551010253665248191341796357273736185376285833313657930327592630423321995683340268803166901859312919131785819655040568361583085676057, 27583730178148494208215582336953731428677655384934947406110969819755861309635715916436503750399886946834588631955424622786954747202685007199149082525818506387606813299614560669074223670606725332129580433663793218302408230595218329795347716963182007259165979155950826829268655927501949206255488502388472700075), (56315845708240095082772501761675446313947442745181474765872020399653138411744471022394674490163519262253419142994958571123783825827944495254330717218087742852853691152509996374039921954037271141012224417462582306680805308244999271694256058220813474581635472407864886498830142166123949972548432270703952960923, 32896154872958176487612097856128071067779298934826306391422436791812001537876365873180665334382055349578758924117227229354892419126981829368419291413849009911423713613087552037524220081917635206657387768281003765094819963853123278586621439766100307324554778715337379588648264826773884692017793176376154675501, 28403727117575806889742293164072634954876499471182701829204385629161049158547263968390684814088323042021380910604906904467751008743919604654911693492973603888427448583482505774314038985928231290890291117425907291509663229092491530818877566758210084483466899541610500708571206332019126409191398637035395635692, 7821951828810668315162755325480202107754899640542890161681114897656891485110009850481857086945730357655734989848039495868447513739566035840945273281198690239884406844038006297455016615584047106189557019820282710249181355660515976689844733069965635239977868606412950428777686615619878916256034858820314322668, 76525192903457309209366743987447032158337732768547571793488111729224008602119438154849638971504949003719786026252648739617917436256435628300010323711153402229164528979259259214627588535459760359253880641429469562048622701982862831594514336875830284504454333566487968184255876886415003174627552219974082980636, 30637464791180430144279994098478365983230561289862073957684155866766012864169717451278445846218491051030419180119954192685431439312797317764656461287947635921370686618109628728836641249249386071858927735736888632316823543835130338563924434711937538665035969023712380857260473274001732469412322752873384968601), (10730358875712453042013970789576402939218800351221446191771233177536009349624025030667973532521911666593354783762941362456771050299436815799063691625091095782507693177746119034551757951243518170991606414822107132916004609627849551446847131359143181119565430368982878108761799084029033027032755115381679417096, 24507369071589713103970720335832744954845520380398828656842561115495704802037030133393011751145702976684589338927049344552393322139237977140642967325628644800492714995845105460369698708659335653391904302955502145025551463160676476446189657801618085294176671181454800483878164016749534940141884944397289890871, 92820108862600030043211342419176390123942091097153321737988513673868731991771619676009296651860321326370172965558922130850493512979555339094561381645396270883677588661828281447106070801829307329117814743685760943125981155705527918307567109500089138120007989551366153992391010620955360882383556542559392894262, 74641576048678849575812629186393953979307695146586927788280165573903662821064189347983936198087197963380651069815352351349775566210254797203960521484844402002602126951649571328507275278196835502471467819034725531964918681611446773963678730681425674462738816516031202042449731753950180027830876790421576081225, 66685821407492303211977447210040267021195326010645045932118328414906080616013267240390961550749369776862683674842903750593917463844615658362977613737130311357170777497628656513144020197746398798679807363859886437403991016453908185102814636772479260178297629433510961788244743608125906745012445887428376915629, 37645288166396858415565430454995281883016537193725289151596326083427351314771501111923193754508050507668744794821015166055917903051072319801945727142824029386542877351207944394255175419467949702189317844980323590614559226315219797417693447676522076956364574845889800486817292590561738321483697160713821529546), (9736711624136652052770116447223295880053359374932369087990200046581983386760557572632286124794444930134179594903564091220200006471388531967010990324827682059485960618855287386961552241259199988445679075595951186424593845864059162998542185539998139746836413273921569266377169025136169016355692767128488900477, 13089476325068401303987570656586592581224347700750455041713556437672762444853346450009029644985692097286649094772508755542691510307531122589433151470493395688605259544275677288082873918929554397272543678133089309672143858040052870098814015145664055945998991679722753687104989489973852117933261358247564988071, 61284598700800926964424249048307178141566077849519756690996988745704530644294308600472621437373651397677668023765897304421576611779363230148263097867987781840048890597647956492658737562151147335685622316577395377277998529914754048562837674418322097396064634364367313407061824216514715793677445932930269152481, 61301319985121628512628256322255391212515053807722664632938090246192955763394429545800696862309263991966900735678875111077481123759702692720133903430321183178233894849098114454863008686201888641863850157441070304164754292432907144839124698488730051010247980425937242664545487287543260612682886985351085138001, 47435322189871012567009786652825469952862610804330828872313845269622590943796389601479086952212526668296575803391674745677862994957044749158154034984601827088557466296368252473168676311089972605318362738347163748086202789713353987691976193103958097243650266229294687864565520648709873760054473254540098351391, 32817913908586741358496040992834207477154835734595147264489781242919114343572982132460531399879345665767073663537263426565698777735998027473421290120433416805825431315476774452072722260737533264180361001819202057517709886953362750990747046346025917668519097056756157788411735612581204089155228884131378072233), (12642425264267098423833241400926732957307073786117649292717736141221694320062979757108242390714162456346780855636174573171779655212347730635821416215537084671118355916330992142141813099104775940725892721614126911510988568345398817554586646066735943804403563179908909629802981392776238272786744291004069356775, 32752716826697049825682788062896730338057604164648704588810956358313907785865814197561208570319757370744105618622052812423057447877481397095444475610617492626525875388680227635541658500637643262806846291312209615044898925278862926827256312481616510480170805540775256088922398310392639344678087647083653765821, 3022511069721965916815622985038080358228403264264831484927372260512043862778138035440859308822033467592971930633307565996150364843965884881400481310689834508879168477508572967173126034539725429899016318805136722734731136521866714013050522337795295311863953350784370773653485436181314864092331268367915892666, 44494293452595159373079306455244053834138260846967620303725161277545981351217523341157156495183639822519882035281721714315331475283644457723353767200184408989752610854962070029226464081899523388838531578296754646973186313035869250105084114692966907900349716132438711767401573694320357418158987949401765528425, 66130193533773704471809811407675367482896080993725170656227230634400122250448911267627547029162335780439769273413020435641724884803365183531498010730643595588304390566255555816793888715047993688213860064650538998545316010718479287163068234420541010586467244361311016741807424118408290204453770332676360498896, 74649855891297747785048523345822478110464591680545397129030301786991725968732851407232435476064324066227685639784066521927825943853534396958155065514682624920312291149309530337681973006060504366672574864594730979571926592855426800301765737184843799883674936189745414847240093702374870446528449267420369306618)] '''
题目分析:
连分数解吧
维纳攻击(连分数)
exp1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 from Crypto.Util.number import *def continuedFra (x, y ): cf = [] while y: cf.append(x // y) x, y = y, x % y return cf def gradualFra (cf ): numerator = 0 denominator = 1 for x in cf[::-1 ]: numerator, denominator = denominator, x * denominator + numerator return numerator, denominator def getGradualFra (cf ): gf = [] for i in range (1 , len (cf) + 1 ): gf.append(gradualFra(cf[:i])) return gf def wienerAttack (e, n ): cf = continuedFra(e, n) gf = getGradualFra(cf) for d,k in gf: if d.bit_length() == 920 and isPrime(d): print (d) e = 75759282367368799544583457453768987936939259860144125672621728877894789863642594830153210412190846168814565659154249521465974291737543527734700545818480398345759102651419148920347712594370305873033928263715201812217658781693392922382633382112810845248038459857654576967447255765379492937162044564693535012144718871564964154729561032186045816489683161588345299569985304078255628527588710513640102450308662163641732851643593090646321420800552303398630738674858967724338819227042384745213425656939930135311339542647104499427215254435723921505189649944059658797193927706249542240737884739119223756635540945563449010120382834036979025801446796614280064172405549502694658175837126702821804106928800917035327292099385809060363635737715320709749444795680950552240184529017581997661357846852201424248086080872655164246614710423850620222735225702427025180018637830386631573912505087046428427137407828859500285127835020183526681560129322020299774376860830513167598911105104946612301909005028216010756378307303924865571457872055817289904093797943893894249094212422766513999129665299858860878710920689322752152527130981697461526170099006972245891313788064563118647308122107999430867808150749979046611265769861111738145184897880080810883790769899 n = 99231341424553040688931525316017803824870567327100041969103204566938549582832516706206735181835068382521133899811339836861525260134721134887446163174620592328661881621312114348726944317349680760092960665800660405612177225373482880941142930135489885221592416840149732795379174704611605960303340578163595465083 wienerAttack(e,n ** 4 )
\(为什么是n^4,文章里面说的挺清楚的:\)
\(题目中当N = n^4时,e \approx
N,故用n^4(满足条件d < \frac{\sqrt{2}}{2g}N^{\frac{1}{4}} =
\frac{\sqrt{2}}{2g}n)\)
哎呀,一开始一直弄那个phi,矩阵的phi这里我确实不是很懂,后面知道了但发现我压根不知道p,q,求出来了phi也没用啊,所以就
换个思路啦
如果给了p,q,且 e = getPrime(1024) 那么(6阶矩阵):
order_p = p * (p - 1) * (p + 1) * (p ^ 2 + 1) * (p ^ 2 + p + 1) * (p
^ 2 - p + 1) * (p ^ 5 - 1)
order_q = q * (q - 1) * (q + 1) * (q ^ 2 + 1) * (q ^ 2 + q + 1) * (q
^ 2 - q + 1) * (q ^ 5 - 1)
phi = order_p * order_q
EZsignin
题目描述:
task.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 from Crypto.Util.number import *from Crypto.Cipher import AESfrom secret import flagimport hashlibp = 174523845247570741054964008585718839267 E = EllipticCurve(GF(p), [0 , 486662 , 0 , 1 , 0 ]) G=E(2247961404505753398791635923994899528 , 108711418033303501028455466081133667288 ) n=G.order() Cofactor = E.order() // n f = 128 +1 lambda_ = 100 def retbar (P ): index = (f + 1 ) // 2 return (int (P[0 ]) % (2 ^ index) + 2 ^ index) % n def genkey (): w = randint(1 , n - 1 ) W = w * G return (w, W) B_pri_w, B_pub_W = genkey() print (B_pub_W[0 :2 ])LS = [] LR = [] BR = [] def Exchange (i ): A_pri_w, A_pub_W = genkey() A_pri_r, A_pub_R = genkey() B_pri_r, B_pub_R = genkey() sa = (A_pri_r + retbar(A_pub_R) * A_pri_w) % n sb = (B_pri_r + retbar(B_pub_R) * B_pri_w) % n Ka = Cofactor * (B_pub_R + retbar(B_pub_R) * B_pub_W) * sa Kb = Cofactor * (A_pub_R + retbar(A_pub_R) * A_pub_W) * sb assert (Ka == Kb) leakageS = sb >> lambda_ leakageR = B_pri_r >> lambda_ LS.append(leakageS), LR.append(leakageR) BR.append(B_pub_R[0 :2 ]) for i in range (10 ): Exchange(i) print ("LS=" , LS)print ("LR=" , LR)print ("BR=" , BR)H=hashlib.md5() H.update(long_to_bytes(B_pri_w)) key=H.hexdigest().encode() aes = AES.new(key,AES.MODE_ECB) print (aes.encrypt(flag))
secret.txt
1 2 3 4 5 (56142839234500040174315077324489019612 , 143186177525574678948140963663687495447 ) LS= [12160779 , 70634852 , 136488679 , 93279448 , 51769705 , 99408367 , 94011238 , 46255543 , 136054320 , 126842658 ] LR= [117789932 , 85602320 , 136131278 , 85538539 , 33115646 , 15821127 , 122073977 , 40205177 , 40509142 , 121833940 ] BR= [(43128875586771925869851532015581155657 , 108714366549720544283054523544596695631 ), (166053844834143846221197595138208659402 , 9389299139547698081250285594708260233 ), (83160043610860066750778648875060399604 , 160655466348101518011620435983302563358 ), (18306927902958362110653472691194540502 , 141566997533915037448387258113883793369 ), (124719869188706449552550102421264489653 , 111266021208672789646176095367638959348 ), (62115794167524204331339724293036031704 , 24476842210910012261000793337134128911 ), (57017187772347635647835418540384524017 , 149273114828279413180900590599119201032 ), (141865913804035015431129030802262884043 , 11219445710980991629921733217597739715 ), (35994282847505215202392163277052083355 , 5366425669461724819918825109516828913 ), (72621299937996657982583201267406651177 , 39297013522202608324989011761142875947 )] b'\xd7\x8c\xf1Yx\x05W\x8ckq\xfdb\xd5\x81K"\xe7q\x88\x18\xedq\x9f\xcap\x1cTB\xc9)\xe1c\xf4~\x7f\xccwh\xfe\t\xbf\xb2!\xde\x84\xeeO\x0f8\xd1\xac\xbc\x1c \xf0F\x0c\x00\xc9\xa7\x9e\x06\xdan'
题目分析:
代码很多行,但逻辑很简单
\(W_b = w_b * G\)
\(W_b和G都给了,要求w_b\)
又有: \[
\begin{align*}
&W_{a} = w_{a} * G\\
&R_{a} = r_{a} * G\\
&R_{b} = r_{b} * G\\
&S_{b} = r_{b} + w_{b} * f(R_{b})\\
&其中S_{b}, r_{b}的高94bit已知,f(R_b)已知,求w_{b}\\
&变一下:\\
&(S_{bh} + S_{bl}) = (r_{bh} + r_{bl}) + w_{b} * f(R_b)\\
&再变一下:\\
&(S_{bl} - r_{bl}) = f(R_b) * w_b + (r_{bh} - S_{bh})\\
&一眼HNP\\
&化成这种形式:k_i \equiv A_i * x + B_i \pmod n\\
&令(S_{bl} - r_{bl}) = k_i, f(R_b) = A_i, (r_{bh} - S_{bh}) = B_i\\
&其中k_i, A_i, B_i均已知,k_i—100bit;A_i—66bit;B_i—(94 +
100)bit;x,n—128bit
\end{align*}
\] 构造如下格: \[
M=\begin{pmatrix}n\\&\ddots\\&&n\\A_1&\cdots&A_{10}&\frac{2^{100}}{2^{128}}\\B_1&\cdots&B_{10}&&2^{100}\end{pmatrix}
\] Z为自己需要构造的数(确保目标向量中所有元素大小与\(k_i\) 相近)
\(\begin{pmatrix}l_1&\cdots&l_i&x&1\end{pmatrix}\times
M=\begin{pmatrix}k_1&\cdots&k_i&2^{100}/2^{128}*x&2^{100}\end{pmatrix}\)
exp1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 p = 174523845247570741054964008585718839267 E = EllipticCurve(GF(p), [0 , 486662 , 0 , 1 , 0 ]) G=E(2247961404505753398791635923994899528 , 108711418033303501028455466081133667288 ) n=G.order() print (n)Cofactor = E.order() // n f = 128 +1 lambda_ = 100 def retbar (P ): index = (f + 1 ) // 2 return (int (P[0 ]) % (2 ^ index) + 2 ^ index) % n def genkey (): w = randint(1 , n - 1 ) W = w * G return (w, W) WB = E(56142839234500040174315077324489019612 , 143186177525574678948140963663687495447 ) LS= [12160779 , 70634852 , 136488679 , 93279448 , 51769705 , 99408367 , 94011238 , 46255543 , 136054320 , 126842658 ] LR= [117789932 , 85602320 , 136131278 , 85538539 , 33115646 , 15821127 , 122073977 , 40205177 , 40509142 , 121833940 ] BR= [(43128875586771925869851532015581155657 , 108714366549720544283054523544596695631 ), (166053844834143846221197595138208659402 , 9389299139547698081250285594708260233 ), (83160043610860066750778648875060399604 , 160655466348101518011620435983302563358 ), (18306927902958362110653472691194540502 , 141566997533915037448387258113883793369 ), (124719869188706449552550102421264489653 , 111266021208672789646176095367638959348 ), (62115794167524204331339724293036031704 , 24476842210910012261000793337134128911 ), (57017187772347635647835418540384524017 , 149273114828279413180900590599119201032 ), (141865913804035015431129030802262884043 , 11219445710980991629921733217597739715 ), (35994282847505215202392163277052083355 , 5366425669461724819918825109516828913 ), (72621299937996657982583201267406651177 , 39297013522202608324989011761142875947 )] ct = b'\xd7\x8c\xf1Yx\x05W\x8ckq\xfdb\xd5\x81K"\xe7q\x88\x18\xedq\x9f\xcap\x1cTB\xc9)\xe1c\xf4~\x7f\xccwh\xfe\t\xbf\xb2!\xde\x84\xeeO\x0f8\xd1\xac\xbc\x1c \xf0F\x0c\x00\xc9\xa7\x9e\x06\xdan' M = matrix(QQ, 12 , 12 ) for i in range (10 ): M[i, i] = n M[-2 , i] = retbar(BR[i]) M[-1 , i] = (LR[i] << lambda_) - (LS[i] << lambda_) M[-2 , -2 ] = 2 ** 100 / 2 ** 128 M[-1 , -1 ] = 2 ** 100 L = M.LLL() print (L)res = L[2 ][-2 ] / (2 ** 100 / 2 ** 128 ) % n print (res)
到这里就一直出不来了,那就是求到的x有问题
开始测试,发现不管怎么样求到的x的后36bit是不准的
所以题目中的数据得到的x低36bit应该也是有问题的
这时候B_pub_W[0:2]
的作用就出来了(我说呢,为什么会把这个给出来)
所以问题变成了:\(W_b = (w'_b + k) *
G\) ,其中 \(W_b,w'_b,G\)
已知且 \(k\) 为36bit,求 \(k\)
\(k是36bit\)
不大,我们使用中间相遇攻击进行求解 \[
\begin{align*}
&令T = (W_b - w'_b) * G = k * G = (k_h * 2^{18} + k_l) * G\\
&其中k_h为k的高18bit,k_l为k的低18bit\\
&T = (k_h * 2^{18} + k_l) * G\\
&T - k_l * G = k_h * 2^{18} * G (此刻即为相遇的位置)\\
&之后爆破k_l和k_h即可
\end{align*}
\]
完整exp:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 from tqdm import *from Crypto.Util.number import *from Crypto.Cipher import AESimport hashlibp = 174523845247570741054964008585718839267 E = EllipticCurve(GF(p), [0 , 486662 , 0 , 1 , 0 ]) G=E(2247961404505753398791635923994899528 , 108711418033303501028455466081133667288 ) n=G.order() Cofactor = E.order() // n f = 128 +1 lambda_ = 100 def retbar (P ): index = (f + 1 ) // 2 return (int (P[0 ]) % (2 ^ index) + 2 ^ index) % n def genkey (): w = randint(1 , n - 1 ) W = w * G return (w, W) WB = E(56142839234500040174315077324489019612 , 143186177525574678948140963663687495447 ) LS= [12160779 , 70634852 , 136488679 , 93279448 , 51769705 , 99408367 , 94011238 , 46255543 , 136054320 , 126842658 ] LR= [117789932 , 85602320 , 136131278 , 85538539 , 33115646 , 15821127 , 122073977 , 40205177 , 40509142 , 121833940 ] BR= [(43128875586771925869851532015581155657 , 108714366549720544283054523544596695631 ), (166053844834143846221197595138208659402 , 9389299139547698081250285594708260233 ), (83160043610860066750778648875060399604 , 160655466348101518011620435983302563358 ), (18306927902958362110653472691194540502 , 141566997533915037448387258113883793369 ), (124719869188706449552550102421264489653 , 111266021208672789646176095367638959348 ), (62115794167524204331339724293036031704 , 24476842210910012261000793337134128911 ), (57017187772347635647835418540384524017 , 149273114828279413180900590599119201032 ), (141865913804035015431129030802262884043 , 11219445710980991629921733217597739715 ), (35994282847505215202392163277052083355 , 5366425669461724819918825109516828913 ), (72621299937996657982583201267406651177 , 39297013522202608324989011761142875947 )] c = b'\xd7\x8c\xf1Yx\x05W\x8ckq\xfdb\xd5\x81K"\xe7q\x88\x18\xedq\x9f\xcap\x1cTB\xc9)\xe1c\xf4~\x7f\xccwh\xfe\t\xbf\xb2!\xde\x84\xeeO\x0f8\xd1\xac\xbc\x1c \xf0F\x0c\x00\xc9\xa7\x9e\x06\xdan' M = matrix(QQ, 12 , 12 ) for i in range (10 ): M[i, i] = n M[-2 , i] = retbar(BR[i]) M[-1 , i] = (LR[i] << lambda_) - (LS[i] << lambda_) M[-2 , -2 ] = 2 ** 100 / 2 ** 128 M[-1 , -1 ] = 2 ** 100 L = M.LLL() res = L[2 ][-2 ] / (2 ** 100 / 2 ** 128 ) % n false = res >> 36 << 36 T = WB - fale * G tmp = T - 2 ** 17 * G tt_dict = {} for i in trange(2 ** 17 , 2 ** 18 ): tmp -= G tt_dict[tmp[0 ]] = i for i in trange(2 ** 17 , 2 ** 18 ): khG = (i << 18 ) * G if khG[0 ] in tt_dict: kh = i kl = tt_dict[khG[0 ]] + 1 B_pri_w = false + (kh << 18 ) + kl H=hashlib.md5() H.update(long_to_bytes(B_pri_w)) key=H.hexdigest().encode() aes = AES.new(key,AES.MODE_ECB) print (aes.decrypt(c)) break
浅记一下
关键词:
two_squares(n0),矩阵phi,维纳连分数,HNP,中间相遇