Pack:
题目:
1 | from Crypto.Util.number import * |
hint: LLL后剔除多余的向量,再用BKZ会得到更好的基
分析&解题:
提供了一份质数列表:a
将flag的bit作为error与secret_bits进行异或
设异或后的比特表为out_bits
输出a与s的向量内积:
a_{1}s_1+a_2s_{2}+…+a_{n}*s_{n}=output
大概就是这样,思路也是及其简单的:
一眼就知道这个就是背包问题,但是难在哪里呢?——维度太高了。
常规的背包格构造是这样的:
[s_1,s_2,s_3,s_4,…,s_n,1]\left[ \begin{matrix} 2 & 0 & 0 & 0 & M_1 \ 0 & 2 & 0 & 0 & M_2 \: & : & : & : & :\0 & 0 & 0 & 2 & M_n\1 & 1 & 1 & 1 & sum \end{matrix} \right] \=[2s_1-1,2s_2-1,2s_3-1,2s_4-1,…,2s_n-1,0]
我们想要得到的规约后的结果就是下面的向量,其中因为s属于{0,1},所以我们得到的结果理论上是由1与-1构成的。
按理来说,我们在赛题里面规约后得到的东西都应该是能出的来的(只要会造格子就完了),但是背包格不太一样,当维度上去之后光是LLL得到的基的性质(长得不好看)就是不太行了。
那么我就按照题目的要求去利用LLL后再利用BKZ规约:
1 | #part1: |
得到的结果确实也对,确实也美丽。
赛场上懒得去算BKZ_blocksize多少合适了,随着这个size越高,时间越长,但是得到的基的性质就越良好,越接近于最短向量(我们想要规约的结果)。
蛋疼的是到了26之后一次规约就要10分钟左右,第一组出来之后,我还在想这样卡时间的题不至于没人拿一血吧,哈哈还真是。
得到s向量之后(与error发生关系后的结果),我们很自然的就想利用同一个关系去规约出s_,求出error向量对吧,那么稍微改变一下脚本的参数:
1 | T=([76667738435239895094871596404419855909375460462274401338344349202493728860007, 94224419169775509137639708024167893549075980105814429893241591639470458680371, 93065230782200159338734176661894456885357447621333944460823033924596343750201, 97039264121819928119324738650806759604198601849925210336688310856965964556703, 80666507226208846348154667892897759938630313606354662221899686365055068485879, 76988446053431226728143881381258425769573323036410139936553460358779587998671, 80412041893688729757393240327962753465390035253690183478720723301311952016789, 90920631369420018699004271208065264998779818328196422026815618156791607337789, 69150657572252876908252782954853669231696755067025684535014059810382898746111, 66994460827109214248793411218871466378372643374794946814488677885375602736683, 94875431673808914811195320627265968536904836571464860778221380844554279653123, 103580302040057128440743260786261459342285137777912893543105830765699137850267, 96338217380428662809325297452317908205533742389442907800646247789485347886869, 112317194825305412229858133480615796337922920160998307753573468341962687098129, 72170084000761778966109740375734667659313472968723326042784462726427748160699, 112450972653411463130559826081584045068429448571138404747328052777055382408889, 76860953554631463611408108297050300878025680793564885725053002151137850732891, 99647857717533040125731134191336469899564684397890201393635262658555160261851, 79026996197896713917867295508625323373673362257045025021155883489652450496243, 71843673783728517215551287208021331773062367226494536781412929023852383203783, 102072795949315489243618497048697995224557677021448310775173267189646004725883, 101344983825110882501766876762708363887022277827998975823621091288960426886689, 101280989212086848265002810754250935520387204620021465312314756163614169957529, 83487043698379895556833072564569144970492716623512928205913078513853609429931, 76042746349621892667055854096698999956378733284750322692661188723501305398311, 103826703755729474416001844195349841446779304345354614625499339704257126387107, 112982099469468627546517534569522304912753524436951492659753690415377415990889, 70423727226032159678537984675203799321805587288387706032230783743382486256837, 115026053569610805469649555713735458865887580608854471674875458853993102576041, 95804622197829406477423755382397123412483501803456967153770204357578684284259, 77029613047702287892494346996651011353647464770841370786470638095474734339113, 96717681279002466523203494358608686274394654448371542115505049374623311809711, 65458512673545422940595579092761285378814138906197721153940390698162354700237, 103810786045681983488252678723090769190013666837695932846020079593627164879439, 64878989647401773817723255909686603400458164730737630727735466274698224365579, 62669190863258084768221883311348711818377954441109463198595654382271915364099, 62714287025389897322801566091349632198612457682178423966411871435140291671991, 104400127515691816155268432357044469523164304312808724436142002250765751557331, 101193934758482242945020937907964927616198621886489297415284366989078473664187, 66513470981695620191758939267465536396372772894160805885385944675602290376441, 64253862727943997976839743227250222521421491216492211015183359811596042793791, 77746614800529477861844917829666279682472252018274302284704998041640365990179, 79426204952031809486985732938578380393756599400192110084470375846227253958311, 97869474541745024020502790355109645342928867177537370028098017371897208226357, 115539686581730090747578683893323550741311219722714796478450916628510418056001, 75031067706155561408946703581739434384353821896569901489384694119054075129247, 106863816172655908128641934500689827898093652213271184893012170136663055494131, 84188512275156277484751971709108439558246927540810788386321098477978056927487, 83255671767240578404886444134509247333604116613349945049221799703469862177043, 65172202335207853984423622019063852459381611088754012136885871019234827440323, 97145588007249782552722588730661504995998948301924672923596117891922753913201, 112587268744786495199418394549595744556250022149548207179818697518299034079753, 80396373629259239273152022175043994367524668497740221070915708802061886909297, 85864044724567608238975828312961201072583800341785598507138481774836998085547, 87225858981527229643632044713429772971896540029470195252507239452794153448717, 101026174428753708810368458534923059124766007057999352199099334622236968005053, 72147407549554168083244287702378731415204658088218239317399061551770866973867, 110865024768222120856062388502292327687573974576009463947786643752429097989509, 60239023506310998548116794705078552286240366047014146782307571148458297589293, 108654302348384474601064962804784055410918758429572066719591058947852102630849, 112803300524341654574202783129280667973232452364549982528819754719278989544883, 73925494076444113866096878589621757231361407986169293028453910873177789864617, 82868466282766394894578054685788211837970435360088092526132304224884866963233, 67691517236614158435072168907612001986864806777662150952294674839601124128203, 67572389253800130549432172968950701186218232719691362720827622210338178877507, 67290387038104782794283094108487616312287705281864383977977422318694867255649, 90650887446579000496424947139297192874507476058763446707509689051869029362733, 97161676438897595595167005970351579864048599472215344538912815195347733419407, 114479205527549165178883914308586346929900010117107378091764216194589308200427, 88457092433781423642234121257945317500181363930571887120670865741632134999897, 95246655025839460839846075673298933155151547309794412818931714986478986791169, 86700061550359899441093284564514664537281977734449298835879024497486549182289, 58088578288947504632125877466049569833099276456997482087682090494781468472081, 79490622575380000672594047378335151091824550790881600452354133914709515463697, 64135144988838580348517544305202481745049232039843924814143506421312668019667, 83696119701180786375226564533862179062271107224305305141786161055045880471697, 101453778303665595472610549701497829911375504684339604968650295602462229892111, 114081353021324656305343761788743020312393328210236056159821536016993815106831, 57957821888624172908357967070416406703502624795464490782639826314883651887029, 61155446796043816751470061469444534255170180150630149674738910229269544311759, 66632400259876759578863918616179387997443449152645852265326281388652578163667, 88973388857973170725803193804499622895421134167706501633605475239215852524859, 110664031987216676701608801449996504989244199594519760840102046775227016821717, 101410882316395412140132863111963742415546086235201091798078833962076948434787, 68613705663191618080693948764946450760773074064858446879339835947756957327923, 112836649507907488937004726233475265487973637214175101684872332053128440211493, 88879249451085895426212817504097516259251987465333931438335908431157470377413, 87817512968670367131679502135014019208226757825780596346926785108004269160651, 66087734766644838384382395729255406342908431457271255171231192142831818687337, 68447713221559317640945049313087270820398721392517566936189030199566998917949, 99830132221000551076087604831937728815410539372041777063898918202491269145083, 89394161092471370632748875434242265181658707432318873844987961400760521994341, 114756013003762632531703713604852959551878362870705133314932235216896192422819, 107790963264147395694221708908864776196403632360074485948364226697675720673397, 90413919057404141106501671632022064471298825633091417024932488440563939485307, 69396973047568782955722225230443360827930030945279548025586475771182632675403, 82813098940704425609024485483571841783571281907726819476252795183164098715807, 73294853646579701061261033956817798719736291442817376020298267964534081119977, 95492202170442960016279599552330706055746428022472721665149518213792002336039, 80258569113776289436222772883818840959709435182463917174878076106276115002587, 106723710156161198772011014606446243705570875421533882203197975720136506449591, 75972152305157434925754409645276686433170040690361625716962091330687683023523, 97093823884815242682976389678674112225202909126475145388606000146199315093907, 94148709241928106998061782902470190801743374969892333570472211050469439905911, 105567249886048538493311206945245791170237605159622209331981769033103926098603, 82517530047587282396625086611314965874279217761819306752308434313533630519787, 60944665024725298671743446007496651520291359155182364662201362504536490866999, 97110782664077727955934636649541050870931874968606705966043610727627458466087, 86849439389775601095119433106783934959219159582791067121931943421074447653719, 99621740433569308104270219127087587849776650175199641279473325266244857466207, 75945811488671847486893841936987916347720790794258747426633984718204134897523, 82012919033096061480423356959577465392196714829869882675006103548899211623699, 75367122042924207790250712049474737744496813456842918339321668828822661643259, 73726498823044490484749141650258421831415911910985768466854115606985480745207, 62764972651938276404966718859458728625454464091218720244927301052993878545099, 88284250401687465012056068502407716251058467880057357760021748334448078040251, 101197300961367485202674487273228842675385694788739033593359862863277622433641, 91889676932716615596472140385137779537713516675645133470518033106836832245023, 104787691198121773847803917937325665295362746668614867417731743169052697965523, 103033036012066031042105866887946171266989777000400028792907749101521943056413, 106835134111309807281509158967880945929152501100644730059192338146154885212039, 85548842267721815195883037791197535018145267191197806766174633766228710207249, 108571501214360432711517161995794799228207786445990904587963366001746857456369, 76275581804134364061606140057524440005933127488997321898949581492263950360233, 74673506423909591622367981956227394193429315477834559698031755216382906357063, 69120979287513127042096895700811544233228356243864724579108083086837448243907, 89036891915393412196207159437996087610506662961731523754745678934304964414233, -449125597304489491002788040081208646968442708796151991203578196099202279718073], 5256112472331167908894486688120087849589928922924868527122389889471942039497562) |
这时候就出事了,规约一次起码一两小时都有可能,而且不一定对,赛场期间因为 跑错数据,调错参数,没造好格子,搞了半天汗流浃背的,心态炸了,结果到最后都没敢去跑这个脚本,但是出题人又说预期解就是这样卡时间的,,,
就是这样吧,总之……
Br0kenAuth:
题目:
1 | from hashlib import sha256 |
分析:
一眼下去ECDSA,再去看k大小(0,p),这题在之前0xGame就有搞过,就是想办法去构造HNP的解法就弄出来了——但是真的有那么简单吗……看完题目我只想感慨,还得是多读书才好啊。
回到题目本身:
- 题目本身的曲线是HyperellipticCurve,点的表示形式都用的Jacobian矩阵来表示。
- 上面说的东西我个人也不是很懂,毕竟数学水平一般,但是有几个东西还是明确知道的,这个曲线想要用的就是多项式来表达曲线上的点,这个曲线是在GF(3^71)上的阿贝尔群,随便抄抄题目输出看看就知道,其实就是基点从数字变成了多项式,问题不是很大也能处理的。而且签名的时候也不是直接使用点去签,而是经过了一定的编码。
- 说回这个DSA签名,题目是在fault_mod上签名的,我们也无法去通过题目的环境直接验签,那么第一个思路就自然而然地来了:
- 求出原来的模数q
求出原来的模数q就完了,这道题就是那么简单。
简单地源审之后发现: assert self.q*self.G == self.J.an_element()
这个是一句提示也是一个关键点,G点和J的表达都是已知的,但是怎么求q呢……只恨自己读书太少,这个曲线相关的东西都没学过,也就止步于此了。
总结:
- 全部密码题一共三道,全场只有两个解,有一个解还用的是他们课题组那边的黑科技(外挂),全体密码手都来坐牢咯。不过这个问题也不大,这次线下能和其他地方的师傅见见,了解行业前沿还是挺好的。
- 这次确实思路都有,但是切不进题目的入手点,上手的门槛太高了,还得多读书多看书。
- 题目出的挺好,就是蛮搞人心态的。