[DASCTF2024八月开学季!] Crypto

2024-08-25 18:20

本文主要是介绍[DASCTF2024八月开学季!] Crypto,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • EZsquares
    • EZmatrix
    • EZsignin

EZsquares

题目描述:

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)# n0 = 192573744538639130845868727014075967669513667763315934161849620531683536696376138303320681922782003088094539724238109116416456294472461075668568088688287209898850985024632463251984323888765249950269595045648435192047990940593817086918399212487934262786817996341234806934640246045717955941049031252181676005098
# c = 1541487946178344665369701061600511101386703525091161664845860490319891364778119340877432325104511886045675705355836238082338561882984242433897307540689460550149990099278522355182552369360471907683216881430656993369902193583200864277424101240184767762679012998894182000556316811264544736356326198994294262682

题目分析:
直接用sagemath自带的函数解
exp:

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))))
# DASCTF{4028d59bb18028e2df8d5d51b376908c}

EZmatrix

题目描述:

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:

from Crypto.Util.number import *
def continuedFra(x, y):cf = []while y:cf.append(x // y)x, y = y, x % yreturn cfdef gradualFra(cf):numerator = 0 # 分子denominator = 1 # 分母for x in cf[::-1]:numerator, denominator = denominator, x * denominator + numeratorreturn numerator, denominatordef getGradualFra(cf):gf = []for i in range(1, len(cf) + 1):gf.append(gradualFra(cf[:i]))return gfdef 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^4,文章里面说的挺清楚的: 为什么是n4,文章里面说的挺清楚的:
在这里插入图片描述

题目中当 N = n 4 时, e ≈ N ,故用 n 4 (满足条件 d < 2 2 g N 1 4 = 2 2 g n ) 题目中当N = n^4时,e \approx N,故用n^4(满足条件d < \frac{\sqrt{2}}{2g}N^{\frac{1}{4}} = \frac{\sqrt{2}}{2g}n) 题目中当N=n4时,eN,故用n4(满足条件d<2g2 N41=2g2 n

哎呀,一开始一直弄那个phi,矩阵的phi这里我确实不是很懂,后面知道了但发现我压根不知道p,q,求出来了phi也没用啊,所以就 换个思路啦

如果给了p,q,那么(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

from Crypto.Util.number import *
from Crypto.Cipher import AES
from secret import flag
import 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_ = 100def retbar(P):index = (f + 1) // 2 # 65return (int(P[0]) % (2 ^ index) + 2 ^ index) % ndef genkey():w = randint(1, n - 1)W = w * Greturn (w, W)B_pri_w, B_pub_W = genkey()
print(B_pub_W[0:2])LS = []
LR = []
BR = []def Exchange(i): # 10A_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) % nsb = (B_pri_r + retbar(B_pub_R) * B_pri_w) % nKa = Cofactor * (B_pub_R + retbar(B_pub_R) * B_pub_W) * saKb = Cofactor * (A_pub_R + retbar(A_pub_R) * A_pub_W) * sbassert (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

(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 W_b = w_b * G\\ W_b和G都给了,要求w_b Wb=wbGWbG都给了,要求wb
又有:
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 的高 94 b i t 已知, f ( R b ) 已知,求 w b 变一下: ( S b h + S b l ) = ( r b h + r b l ) + w b ∗ f ( R b ) 再变一下: ( S b l − r b l ) = f ( R b ) ∗ w b + ( r b h − S b h ) 一眼 H N P 化成这种形式: k i ≡ A i ∗ x + B i ( m o d n ) 令 ( S b l − r b l ) = k i , f ( R b ) = A i , ( r b h − S b h ) = B i 其中 k i , A i , B i 均已知, k i — 100 b i t ; A i — 66 b i t ; B i — ( 94 + 100 ) b i t ; x , n — 128 b i t 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 Wa=waGRa=raGRb=rbGSb=rb+wbf(Rb)其中Sb,rb的高94bit已知,f(Rb)已知,求wb变一下:(Sbh+Sbl)=(rbh+rbl)+wbf(Rb)再变一下:(Sblrbl)=f(Rb)wb+(rbhSbh)一眼HNP化成这种形式:kiAix+Bi(modn)(Sblrbl)=ki,f(Rb)=Ai,(rbhSbh)=Bi其中ki,Ai,Bi均已知,ki—100bitAi—66bitBi(94+100)bitx,n—128bit
构造如下格:
M = ( n ⋱ n A 1 ⋯ A 10 2 100 2 128 B 1 ⋯ B 10 2 100 ) 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} M= nA1B1nA10B10212821002100
Z为自己需要构造的数(确保目标向量中所有元素大小与 k i k_i ki相近)
( l 1 ⋯ l i x 1 ) × M = ( k 1 ⋯ k i 2 100 / 2 128 ∗ x 2 100 ) \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} (l1lix1)×M=(k1ki2100/2128x2100)
exp1:

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_ = 100def retbar(P):index = (f + 1) // 2 # 65return (int(P[0]) % (2 ^ index) + 2 ^ index) % ndef genkey():w = randint(1, n - 1)W = w * Greturn (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] = nM[-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 ** 100L = M.LLL()
print(L)
res = L[2][-2] / (2 ** 100 / 2 ** 128) % n
print(res)
# 1178130499626730132053516695382476673

到这里就一直出不来了,那就是求到的x有问题
开始测试,发现不管怎么样求到的x的后36bit是不准的
所以题目中的数据得到的x低36bit应该也是有问题的
这时候B_pub_W[0:2]的作用就出来了(我说呢,为什么会把这个给出来)

所以问题变成了: W b = ( w b ′ + k ) ∗ G W_b = (w'_b + k) * G Wb=(wb+k)G,其中 W b , w b ′ , G W_b,w'_b,G WbwbG 已知且 k k k 为36bit,求 k k k
k 是 36 b i t k是36bit k36bit 不大,我们使用中间相遇攻击进行求解
令 T = ( W b − w b ) ∗ G = k ∗ G = ( k h ∗ 2 18 + k l ) ∗ G 其中 k h 为 k 的高 18 b i t , k l 为 k 的低 18 b i t T = ( k h ∗ 2 18 + k l ) ∗ G T − k l ∗ G = k h ∗ 2 18 ∗ G ( 此刻即为相遇的位置 ) 之后爆破 k l 和 k h 即可 令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即可 T=(Wbwb)G=kG=(kh218+kl)G其中khk的高18bitklk的低18bitT=(kh218+kl)GTklG=kh218G(此刻即为相遇的位置)之后爆破klkh即可

完整exp:

from tqdm import *
from Crypto.Util.number import *
from Crypto.Cipher import AES
import hashlib# part1
p = 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_ = 100def retbar(P):index = (f + 1) // 2 # 65return (int(P[0]) % (2 ^ index) + 2 ^ index) % ndef genkey():w = randint(1, n - 1)W = w * Greturn (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] = nM[-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 ** 100L = M.LLL()
res = L[2][-2] / (2 ** 100 / 2 ** 128) % n
# 1178130499626730132053516695382476673 # part2
false = res >> 36 << 36
T = WB - fale * G
tmp = T - 2 ** 17 * G
tt_dict = {}
# kl
for i in trange(2 ** 17, 2 ** 18):tmp -= Gtt_dict[tmp[0]] = i# kh
for i in trange(161000, 2 ** 18):khG = (i << 18) * Gif khG[0] in tt_dict:kh = ikl = tt_dict[khG[0]] + 1B_pri_w = false + (kh << 18) + klH=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# DASCTF{C0ngRatul4tion5_On_y0ur_SuCc3ssfuL_S1gN_1n}

浅记一下
关键词: two_squares(n0),矩阵phi,维纳连分数,HNP,中间相遇

这篇关于[DASCTF2024八月开学季!] Crypto的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1106301

相关文章

开学季必看!这5部国漫剧情爽翻了!

转眼又到了开学季,相信很多朋友还没有适应紧张的学习生活,这时候看国漫放松就是一个很好的选择了。今天就给大家推荐5部最近热播的国漫,每部的剧情都能戳中你的爽点,下面就一起来看看吧! 《斗罗大陆2绝世唐门》 看点:魔法校园 纯爱高甜 改编自唐家三少的同名小说,由玄机科技制作,讲述霍雨浩等新一代史莱克七怪的成长故事。相信很多学生党都追过斗罗大陆动画第一部,唐三小舞可谓国漫顶流的男神

通义灵码助力高校开学第一课,“包”你满意,新学期加油!

通义灵码作为国内领先的 AI 编码工具,近年来在高校中得到了广泛应用和推广。它不仅帮助大学生更高效地学习编程、提高代码质量,还激发了他们的创新思维,并为未来的职业生涯做好了准备。 通义灵码是什么? 通义灵码是一款基于通义大模型的智能编码助手,可以在你进行编码工作时,为你提供代码实时续写、注释生成代码、单元测试生成、代码优化、注释生成、代码解释、研发智能问答、代码问题修复等辅助编码工作的功能

轻松驾驭开学季,智慧校园综合解决方案!

智慧校园是指运用先进的信息技术手段和智能化系统,对学校内部各种教育资源、管理流程和服务进行数字化、网络化、智能化的整合与优化,提供高效便捷的教育教学和管理服务环境的校园。 智慧校园建设从哪些方面入手呢? 1.智慧食堂管理系统 基于人脸识别技术及智能卡感应技术实现支付扣费,输入学生的脸部信息和消费信息,进行人、卡、消费账户的绑定,系统感应餐食和重量,自动计算价格,高效扣费。系统还可以衍生出

家校携手应对开学焦虑,共筑学生心理健康防线

随着新学期的钟声敲响,不少学生尤其是新生,开始感到焦虑。他们或是对课程难度心存畏惧,担心自己无法跟上学习节奏;或是害怕在新环境中无法找到归属感,担心人际关系处理不当。 这种情绪在社交媒体上屡见不鲜,如一位家长在社交平台上的分享,这位就读于寄宿制高中的学生,在首次回家后的周末,向家人吐露了对新环境的不适应和学业的挫败感,这不仅仅是一个个案,而是众多学生共同的心声。 深入剖析开学焦虑的背后,不难发

九月开学季,六折起购 EndNote、Typora、BookxNote,部分库存限量抢

叮铃铃,开学的铃声又在耳边响起!数码荔枝九月开学季活动也如约而至! 开学季活动,为莘莘学子打下了多款助学工具的价格。新学期新装备,来点好软件让学习更上一层楼! 活动时间即日起至 9 月 14 日,会场内助学软件低至 6 折: EndNote 21:6 折限量 20+ 套 ,校园用户必备;**BookxNote:**Win 用户阅读学习器,8 折优惠;Process Lasso:电脑防卡顿

开学啦!校园跑腿小程序开发,焕新生活尽在指尖!

随着移动互联网技术的不断发展,校园跑腿小程序成为了高校生活中不可或缺的一部分。无论是代拿快递、代买物品,还是代办各种事务,校园跑腿小程序都能为学生提供极大的便利。 校园内的人群密集,购买东西的需求尤为强烈,还有待取快递,帮买帮送,各种跑腿需求十分常见。而小程序作为即点即用的应用,使用起来简单快捷,同学们的接受程度也会很高。 校园跑腿小程序的功能设计非常重要,小程序的制作,需要技术团队的支持

八月二十九日(day 39)docker6

1.前端(nginx) [root@localhost ~]# docker pull nginx                                   //拉取nginx镜像 [root@localhost ~]# docker images REPOSITORY   TAG       IMAGE ID       CREATED       SIZE nginx

每周心赏|开学必备,学霸舍不得删除的AI提效神器

假期走得太快,就像龙卷风……我那么多天暑假呢?还我妈生暑假。 最近「开学综合症」在校园届蔓延,症状为失眠、嗜睡、记忆力下降、厌学、焦虑、食欲不振…… 千万别让这综合症影响了你的好心情,快来签收你的开学大礼包——三款AI学习工具,助你轻松迎接新学期的挑战!学习效率突飞猛进! 1 零基础学习路径规划 开发者:好想出去玩2020 不管你是刚刚踏入校门的小学生,还是即将面临大考的

迎接开学第一天!请查收这份2024开学必备好物清单!

新的学期正悄然来临,开学第一天校园里即将迎来一张张充满朝气的面孔。无论是重返课堂的老生还是满怀期待的新生,开学季总是充满了新的希望与挑战。为了帮助学生们更好地适应即将到来的学习生活,我们精心准备了这份2024开学必备好物清单。从提高学习效率的智能设备到保护视力的健康科技产品,再到提升日常便利性的实用小物,请查收这份2024开学必备好物清单!接下来,让我们一起探索那些能够让学习变得更加轻松愉快的好物

开学要买什么?出门少不了续电神器充电宝!性价比超高充电宝

宝子们,开学季又来啦!新的学期,新的开始,大家是不是都在忙着准备各种学习用品和生活好物呢?在众多开学必备物品中,有一个东西可千万不能忘记,那就是我们的续电神器 —— 充电宝!出门在外,手机没电可是会让人陷入焦虑的。无论是在课堂上需要查阅资料,还是在课后与同学朋友联系,亦或是在校园里拍照记录美好瞬间,手机电量充足都至关重要。而一个性价比超高的充电宝,就能为你的开学之旅保驾护航今天,我就来给大家分享一