Backpack Cryptography【背包密码】 & 例题

文章目录

    • 背包加密
      • 背包问题
      • 背包密码
      • Merkle–Hellman加密算法
    • 题一(archaic)
      • 题目描述:
      • 题目分析:
    • LLL算法破解
    • 题二(no_modulus)
      • 题目描述
      • 题目分析
    • 浅记一下

背包加密

介绍背包密码之前先了解一下背包问题

背包问题

假定一个背包可以承重 W,现在有 n 个物品,其重量分别为a1,a2,a3,…,an 问装哪些物品可以恰好使得背包装满(其中每个物品只能被装一次)
我们用一个式子来表示:
x 1 a 1 + x 2 a 2 + x 3 a 3 + . . . + x n a n = W   其中 a 为物体质量, x 为 0 或 1 ,表示选中或不选中该物品 \mathrm{x_1a_1+x_2a_2+x_3a_3+...+x_na_n=W}\\ \ \\ 其中a为物体质量,x为0或1,表示选中或不选中该物品 x1a1+x2a2+x3a3+...+xnan=W 其中a为物体质量,x01,表示选中或不选中该物品
想要找到恰好装满背包的物品集,我们需要枚举由x可能构成的所有集合,复杂度为 2 n 2^{n} 2n

背包密码

背包密码的原理由背包问题引申而来,令x为明文二进制序列,a为公钥,这样便构成了一个很好密码体系。不过这样我们也没有办法破解密文了。

但,若a为超递增序列的话,就有办法解决了。
超递增序列: 后一项大于前所有项的和。

例如 [ 1 , 2 , 5 , 11 , 20 , 41 ] 便是一个超递增序列 例如 [1,2,5,11,20,41]便是一个超递增序列 例如[1,2,5,11,20,41]便是一个超递增序列

“ 超递增背包问题的解很容易找到,我们可以计算其总量并与背包序列中最大的数比较,如果总重量小于这个数,则它不在背包中;如果总重量大于这个数,则它在背包中。背包重量减去这个数,进而考察序列中下一个最大的数,重复直到结束。”

Merkle–Hellman加密算法

私钥
背包物体重量a
公钥
模数q,满足q > max(a1,a2,…an)
数乘r,满足gcd(r,q) = 1
公钥 bi = r * ai (mod q) 即b = r * a
b,q组成公钥
加密
记二进制明文串为mi(0/1),
c = b 1 ∗ m 1 + b 2 ∗ m 2 + . . . + b n ∗ m n = ∑ i = 1 n b i ∗ m i   m o d   q c = b1 * m1 + b2 * m2 + ... + bn * mn = \sum_{i=1}^nb_i*m_i\mathrm{~mod~}q c=b1m1+b2m2+...+bnmn=i=1nbimi mod q
解密
m = c ∗ r − 1 ( m o d q ) = ∑ i = 1 n r − 1 ∗ b i ∗ m i = ∑ i = 1 n r − 1 ∗ r ∗ a i ∗ v i = ∑ i = 1 n a i ∗ m i   m o d   m , 这不正是背包问题的式子 若私钥 a i 是超递增序列的话, m 就很容易求到了 m = c * r^{-1} \pmod q=\sum_{i=1}^nr^{-1}*b_i*m_i=\sum_{i=1}^nr^{-1}*r*a_i*v_i=\sum_{i=1}^na_i*m_i\mathrm{~mod~}m, 这不正是背包问题的式子\\ 若私钥a_i是超递增序列的话,m就很容易求到了 m=cr1(modq)=i=1nr1bimi=i=1nr1raivi=i=1naimi mod m,这不正是背包问题的式子若私钥ai是超递增序列的话,m就很容易求到了

题一(archaic)

题目描述:

import random
from collections import namedtuple
import gmpy2
from Crypto.Util.number import isPrime, bytes_to_long, inverse, long_to_bytes

FLAG = b'crypto{??????????????????????????}'
PrivateKey = namedtuple("PrivateKey", ['b', 'r', 'q'])

def gen_private_key(size):
    s = 10000
    b = []
    for _ in range(size):
        ai = random.randint(s + 1, 2 * s)
        assert ai > sum(b)
        b.append(ai)
        s += ai
    while True:
        q = random.randint(2 * s, 32 * s)
        if isPrime(q):
            break
    r = random.randint(s, q)
    assert q > sum(b)
    assert gmpy2.gcd(q,r) == 1
    return PrivateKey(b, r, q)


def gen_public_key(private_key: PrivateKey):
    a = []
    for x in private_key.b:
        a.append((private_key.r * x) % private_key.q)
    return a


def encrypt(msg, public_key):
    assert len(msg) * 8 <= len(public_key)
    ct = 0
    msg = bytes_to_long(msg)
    for bi in public_key:
        ct += (msg & 1) * bi
        msg >>= 1
    return ct


def decrypt(ct, private_key: PrivateKey):
    ct = inverse(private_key.r, private_key.q) * ct % private_key.q
    msg = 0
    for i in range(len(private_key.b) - 1, -1, -1):
         if ct >= private_key.b[i]:
             msg |= 1 << i
             ct -= private_key.b[i]
    return long_to_bytes(msg)


private_key = gen_private_key(len(FLAG) * 8)
public_key = gen_public_key(private_key)
encrypted = encrypt(FLAG, public_key)
decrypted = decrypt(encrypted, private_key)
assert decrypted == FLAG

print(f'Public key: {public_key}')
print(f'Encrypted Flag: {encrypted}')

题目分析:

一串一串来嘛

(获取私钥)

def gen_private_key(size):
    s = 10000
    b = []
    for _ in range(size):
        ai = random.randint(s + 1, 2 * s)
        assert ai > sum(b)
        b.append(ai)
        s += ai
    while True:
        q = random.randint(2 * s, 32 * s)
        if isPrime(q):
            break
    r = random.randint(s, q)
    assert q > sum(b)
    assert gmpy2.gcd(q,r) == 1
    return PrivateKey(b, r, q)

可以看出
b为私钥序列,里面元素为ai。s为前i个a的和,由此可知b为超递增序列。q为模数且为素数,大于b中最大元素。

(获取公钥)

def gen_public_key(private_key: PrivateKey):
    a = []
    for x in private_key.b:
        a.append((private_key.r * x) % private_key.q)
    return a

数乘为r,私钥为b,得到公钥序列a

(加密)

def encrypt(msg, public_key):
    assert len(msg) * 8 <= len(public_key)
    ct = 0
    msg = bytes_to_long(msg)
    for bi in public_key:
        ct += (msg & 1) * bi
        msg >>= 1
    return ct

assert这行保证明文msg转二进制串比公钥长度小
此处即为上文所说的
c = b 1 ∗ m 1 + b 2 ∗ m 2 + . . . + b i ∗ m i = ∑ i = 1 n b i ∗ m i   m o d   q c = b1 * m1 + b2 * m2 + ... + bi * mi = \sum_{i=1}^nb_i*m_i\mathrm{~mod~}q c=b1m1+b2m2+...+bimi=i=1nbimi mod q
只不过此时 m 1 到 m i 是从低位到高位 只不过此时m_1到m_i 是从低位到高位 只不过此时m1mi是从低位到高位


(解密)

def decrypt(ct, private_key: PrivateKey):
    ct = inverse(private_key.r, private_key.q) * ct % private_key.q
    msg = 0
    for i in range(len(private_key.b) - 1, -1, -1):
         if ct >= private_key.b[i]:
             msg |= 1 << i
             ct -= private_key.b[i]
    return long_to_bytes(msg)

我觉得应该看得懂了,就是上面所说的解密过程

整个过程就是一个非常正规的背包加密程序

接下来就是如何解密了,肯定不是按照上面的解密流程来解嘞,r,q,公钥啥的都没给
这里引入LLL算法来破解背包密码,构造下图所示的格

LLL算法破解

论文参考
过程如下:
若 ∑ i = 1 n x i ∗ a i = c , 其中 x i = 1 或 0 M = ( 1 0 ⋯ 0 N a 1 0 1 ⋯ 0 N a 2 ⋱ 0 0 ⋯ 1 N a n 1 / 2 1 / 2 ⋯ 1 / 2 N c ) L L L 算法输出若干短向量组成的格基 其中有向量 X ∣ X ∣ = ∣ ( x 1 − 1 / 2 , x 2 − 1 / 2 , x 3 − 1 / 2 , . . . , x n − 1 / 2 , 0 ) ∣ < n 可以得出 X 是个短向量, L L L 算法输出若干短向量组成的格基 , 故可以在 L L L 算法的输出中找到有无符合条件的 X 向量 , 且前 n 个元素为 1 / 2 或 − 1 / 2 ( 其中 N > 1 2 n ) 若\sum_{i=1}^nx_i*a_i = c,其中x_i = 1或0\\ M = \begin{pmatrix} 1&0&\cdots&0&Na_1\\ 0&1&\cdots&0&Na_2\\ &&\ddots\\ 0&0&\cdots&1&Na_n\\ 1/2&1/2&\cdots&1/2&Nc\\ \end{pmatrix}\\ LLL算法输出若干短向量组成的格基\\ 其中有向量X\\|X| = |(x_1-1/2,x_2-1/2,x_3-1/2,...,x_n-1/2,0)|< \sqrt{n} \\ 可以得出X是个短向量,LLL算法输出若干短向量组成的格基,\\ 故可以在LLL算法的输出中找到有无符合条件的X向量,且前n个元素为1/2或-1/2\\ (其中N > \frac{1}{2} \sqrt{n}) i=1nxiai=c,其中xi=10M= 1001/20101/20011/2Na1Na2NanNc LLL算法输出若干短向量组成的格基其中有向量XX=(x11/2,x21/2,x31/2,...,xn1/2,0)<n 可以得出X是个短向量,LLL算法输出若干短向量组成的格基,故可以在LLL算法的输出中找到有无符合条件的X向量,且前n个元素为1/21/2(其中N>21n )
也可以乘个 2 ,得到以下的格,本质一样 M = ( 2 0 ⋯ 0 N a 1 0 2 ⋯ 0 N a 2 ⋱ 0 0 ⋯ 2 N a n 1 1 ⋯ 1 N c ) 不过此时得到的 X = ( 2 x 1 − 1 , 2 x 2 − 1 , . . . , 2 x n − 1 , 0 ) , 且前 n 个元素为 1 或 − 1 也可以乘个2,得到以下的格,本质一样\\ M = \begin{pmatrix} 2&0&\cdots&0&Na_1\\ 0&2&\cdots&0&Na_2\\ &&\ddots\\ 0&0&\cdots&2&Na_n\\ 1&1&\cdots&1&Nc\\ \end{pmatrix}\\ 不过此时得到的X = (2x_1 - 1,2x_2 - 1,...,2x_n-1,0),且前n个元素为1或-1 也可以乘个2,得到以下的格,本质一样M= 200102010021Na1Na2NanNc 不过此时得到的X=(2x11,2x21,...,2xn1,0),且前n个元素为11
多写一步吧 , 详细点 ( x 1 , x 2 , x 3 , . . . , x n , − 1 ) ∗ M = ( 2 x 1 − 1 , 2 x 2 − 1 , . . . , 2 x n − 1 , 0 ) 多写一步吧,详细点\\ (x_1,x_2,x_3,...,x_n,-1) * M = (2x_1 - 1,2x_2 - 1,...,2x_n-1,0) 多写一步吧,详细点(x1,x2,x3,...,xn,1)M=(2x11,2x21,...,2xn1,0)
其实不乘N也可以
exp

from Crypto.Util.number import *
from gmpy2 import *
pubkey=[260288377891444370372615148009023640057294926547602419331406531383682223097787288755377467188515435381259752760746, 322734358011758862401399370931929863052553602421714393280581187496537763321855751120439457234561080720455397490349, 88092359256403564783665281993130133541226601877969436905267415353041909757324746080398461245281826552421872983184, 601684701300110945921036937572461050140352984401874675917155063594305583314408001377505387079690115000992094388032, 193814643850628739958152744041743058858484088269609293429408490294552345005365776962194365813796130165113184925621, 51510606914703888409341761261103125433754505248101513818740574350196563260563818621033222936301769697693287778876, 502702742677974540308798846750017003106263447846689040491266463798703222616320168069962523670400796196343460832764, 86989835783586738140883150201327374176124588410464188692884973334241681514702306716383785095564084499563152815246, 515511378187957676256419959601984383408150348796281656976955880729383340611785836962788715725367023923811376366815, 119845178983025037005174732553931706284024826223176718982111213579707091766057320315419827781508690979405126062061, 207867794910968434026003881920029657224591376925067493713968219177352819759854486838459675245909787840416982457750, 239399986603216503029402544900610984881160101923294396792665204486222975420081300661354603175384772323551980155480, 306665236132315336961576566094908486196981556971172170145299174389720334940261512384837950321772782983903454058725, 558130280550827068212352576387713811027468233905173944680355562037815257403446113128895937326412940859588204361963, 123471925832174980344066571541132411467266736109103860421447462536930482316849470378251137263190870093702164003085, 146089706629012142384661350988216882483919264673129621404831339166566056469572087759748854086023354002641923689390, 446097892684389219719742914373867457099954499449824602532333181169038249081395758983133906564840000962001976506057, 204029934276059225352901134714823317920576872465404508059719045291560482057171052793698580294637069578017200124432, 412333373143000457741307988470055504576675151299345387733692618218275177027643785881042018546460452418506341967356, 171418413940299360322712423004114364681865276057786947919043883366302567169869592290151559269290446563185553350080, 401593473337411114258578268223784182795068785564101722335215736591292301602077751376477881087346810602041717163104, 204003688543820354337113938494979311981574571424756883928855286926734578790400322291262042466654212377708831289347, 555612926496986208337317871061684502803594375654879680702581403987248292734014139717756900004905653768133795128973, 462785612281910846822645629160953231999037081137615204334672445418078665808070086646804794186256411131615189487813, 77961961618173276050791733447969083544152711482614563228085622136316525792569658878271751219358260960116292497570, 517789370221435419776588087490678991824021927945387533283088388790482913301281733115458601414668206432512998904516, 281870328340314395150658482932699114581743200279996227099530744754750289102031518563761975024621347281374162044877, 60204977937304337797770029325498234132893935850995809547662640467737007197647697381430963693698522962733473746281, 395936787836195675178388359277761575381601972138693830435288611414489963379399027975388601714741876831895709497105, 90921357930302550361827901642067284191268695594120415817202534786924330392421221829361546010764453051928814876700, 238523907687908075601117120608130752369082206676107364350347208286323115036939777325067473364465438898353765093766, 277515010021988996116595000889051160811249034599876556819610707794016612800585201793339332495839495779526504613846, 187215937497318890199135284983515062319988136636108170852591598862524363777870331888216170582220867500042557737272, 411220029331367081136918789112083235781237730079305782620378994961505282090962448446931628731751970521853108685376, 433613620456520979627974441205441942311133790647897226320388205340695256818608765746266662314499649013982035729731, 509613591091334719216567967380183602959933686617275815879939870258332674755345348802452058256788513837941126219238, 352708166022264045150842358964512080203788453464883319778517822047480718640858804837886057264514786742694419419735, 486272357335492500753956372299255798603575392697018451800774427752724312455328655650777691830508441976819499348269, 1291533249748053824342851185451970324561531056195308125673915619130780992270420765078102812914222570167615953050, 520707501920546816250915326019351261090208813534492143136485743644939372232638461802625700978801768541842624647274, 272359456788721692618768612190222453304838934916628492701462591276450281926223118982602858211688086607842351391495, 119534191144397164327417397593964021477488683311215644770010641745736480039094209273092223959694752862193314087240, 394945131470603614379767959704654538029557537489316246092982427107641617479545488843535929537498546432123287486437, 395979428475608101765230328218274625986674115712051764903732593018454264017781340199795540039285257513438842708672, 322101629493887220159199019582810892418957941946300752245249462093036697035162212557261470168522953435341905295650, 60610073299031334532969727880668989046838926047395613981473675505442500833244137863225398782029541439420403686372, 492582431835005621441922899995666806499437611069193099072247918597047415020628078410849119945608854080040163699375, 356290614124448077864884136922409291617128370298210212357882465167338600485728936925448944675136056707929560080237, 469737185578879122378016959759297464132272432425745272107998534197014940235018335349886398896979254122985841196030, 522871107234918024128768136315123497251902274681110489386594944387181296826024289163431880961506314580935567743910, 407151723612481391724375429193917289623669496278028982297086458062111012958436324350527302865535766565677711383191, 597354385774970715448797740483856119139152021834911852144490298736330354118482480147237280491305029710326837274157, 541106433608213985607913120402276000940203625086988929757276286018099336445558864548353610869729642196223750468493, 417269959280528548156948994397262973057821055108288565091113745409730174626359955737489143948177504667498654245449, 165844467199853002181647516786815801413939363188955720855463610698066730208657222822269457713666541555820608908443, 54875733171006797537647859403084623422036246809497621662400918381496284440644503330411668895858884933248328986102, 465819050441857934210906305127374377291850450707906416261994960542649394393702032587209990932960399224341143990297, 369322923825463715724411404444452360125845865658673947242361968271863944079047696087621731311243573179527276498509, 553158781749591211954659671173145767949897795287325677938373702443265138456771264711232588438786042792968904732769, 409812013938165700887519758386718364160025926340003407045361393371862966914817952304595560620453598830906305966865, 494654868138757552768371639418237489264099471894419220273147503624077564865563661914136003656825657044284503346448, 583613295252460993144403074130901622751986348055784728175987246652496523293580989652454868505577305787293683850652, 45623098408168398769971239387495928980835555721564847009059790575158770295430426790200773274288087331109699336204, 39196430635656777174378129146834600960125068266405306877726260536750371354188413207203531511343645151492477471286, 269811462520469960288594953357779332541515563494806499705455036716689694055741096626927182558039773813984145657639, 56129158162087034209035841739296133948708529713411817898928727109770418208078239244331640522507423413446203417794, 524210107239750288249530336771864024916995632570549267972428294539507299820629133801771958736839361325798918246415, 74499040113803277306263886217659673645883223840279171192334357737741618882160648968176974754905084576184804774369, 537566085689080717108870646705458338163437075433046077845999622035879463636776663759447985884960181167857417860517, 67053890181708018909161683393261532526993578729770554741021482840348299866927821016301415949708659944497709907470, 226687291544149270579995169198961617407190234578516732237756117257869929434434889879973211444301745820066870869034, 30119130560797352224094299766590747178156378314088092947830899847927767559391822485618397327733723834195435500170, 273554685078063587415670757725663508130498751998110442807136494763920302805098071555958936900406570453984774374060, 87980277743580170573607118853300224477595233902389343863665172738347967268089655736029345194767280704236057718111, 415325115863346791298232938393411393462777451386243842830553121689594926353646948497680883539360608323603975987452, 291860381996369849963997875749710331697722876276851205203280910491894467229365951220031470367159168511107680106262, 554653569462940342418063467925252548314485118886100002832290030505991378878498660088540140703141291011055029173137, 323189774384600834625013268084915768916855209746568551595158521873406091567687194674213765428238599317205811518692, 271805885895959097314720980134407607645324820417975238169874050425279962478579515969226563851125481000349196674810, 273580504244152469063405670227951980303621824057876058884978331188257821496852334599050020207990127348359965113465, 89994080154200685717636930068317931325931168723237899144166312528962957042842197915530047017893088501681215899095, 179903529806043505032581494908566846659773117049401056767669943330229935007822437549131470977810261112485254094386, 337553339737054880017288314951575451797426862530219763936855885416298554494199226261714888518914541341927073075939, 55576723594346882914517616915509260915444308762551400560217462518909289055446940809390878002725822401595827206530, 16748220768196858904499918524709172735166549515085689048938405549141121222201553686060172878474455615920723669801, 317380564633191615800168658676142557493413060315417096622564923156521630376263849705099633192226251101432134441153, 533990888376667129575141849433166253104032964155895368357797314378260092470904627861359175864364684662961150582207, 51339665999563119517609216115086272052501396280925354694804471629521639434841281422984348587180771099209184749005, 598751671521816401429095343374521592165563401213195481604556405443389323390172923217639290327197434030974530635632, 502516418942980462174586089858060912235797554801782186782319843655355616321036648106166017773986280053024012403712, 96757697084956246010025820107260538706827163135748809142998937362457169471061108292297066769079020843197361323396, 160715027762704553320571142674023737670353756130518440136900430091151963142004047232920245715827837173811719927140, 279138292123840748082780689543574043699162822819208361733228093396335579794292477744981338016264347327181324984710, 76445842054689324523514421681098261857514827631364695255959418519245612571199123499205752729124353901548286671941, 383675319414133753635121914615218464358220814208747712016103562476157464944897131756675168140846189629485664787044, 260741648290568813857849033448155840373964568801980310694295413631289231242930901519918814851819352903132884286000, 572815144956474380133620797676157654285774633299428534205241845335783095326631133195133798583360396067031309578073, 326258465939147178368353573060965288327891986807699582822092415027094204965326681853802159504539722937811913340954, 270266570242986488258809014590807152136633692716132669770748395523214017062557603428657196661342410476403164567952, 594635668324174018778140793057815156885870465660609865234586849536688338135131804764199647040009222634146148815637, 112066852946512058163194024984815176069074331367673763590415760757313750687675218022751871678411881684718198988959, 72643140251973593561700085821570131390914743121754868577502110904091989089708201436984242838820806097191225214858, 418558767829526524235103555737958351573183096833081038769308995724925326439890724874671213539641031754157727776067, 196559288823369030489094238610617412012659194878611686482089456487889879135369906410569754176462601644487717691079, 484475844260869041475828428835126624027291693283800645559775410528136122290210564467730445814182429120097372738911, 397895531572254423225385975618860549078025992059379971480526615942245245283818149065605766495091059477544617632303, 173098235745543952336517747078283517802667869630628062474315240281111485771833849083340162673485620557610425012773, 395438744730241817782361196255681827924847041028664896503460681041226871979986416514203189980456170013127549062319, 470021990867207717347003710359490169212637212255796418181420825247262094876084196634243149241752002339736588912053, 116393009019558569654503508922282193810180596603376432764270301486325221610807518426481578453602546466299515294456, 312679236344738874814229979243462639486594453393064312671149009880980836289564409215088541509970023077739205203468, 125633612607015147027292740679836345332097512816636698981581758992992116056276272361001165705597842757882238693825, 550545747650576990464265884382499274254872311986381675090751886824037811235625095205217845451891396561893492715391, 582344947379262203945082609921047126789902458640974947174265099323728700596079597139164883619347159500887293859913, 597445807393853093495564866081359122814348105478914638258595339515168987499771664924728981250079847198831836930965, 203086100710322798737771097067197649738932976573837729229038404179992238381339090779534246758253939763462200026384, 366083021996787911206272856169665720981308167177143125303074466648545813452157612764258146407782634619278092168081, 568425067761875823198893591966757461338470700675615033946429149483970138055665377562238998722395767377075284081587, 292063178202410186631443519138674436645163233411161937085629856088259050827382985093506892763617302007759121037731, 572237520943575841301998365238940412928982617335768155394691567092595694943290938278464533099223273214233507106207, 130730938892686892107630262721901246969052318133502728671984157629171554435251506312878040499761922665301495030981, 185117108148352276973404708807613996548096583954940273525781406848525491758486946236965943611210198389159091280333, 37060990092986925132287820152354618271473589014825595897838753632315007172710154561879917551705194656825456571032, 403396730776194870459199627544122636010870768257463359235766775533882938128146112838489577777497432203020030499998, 390519053219213422305599109947414047895590808796368085342860468917268018310638864392199371679272174634278410878307, 128444781947873592602609418783055715736876557725608932301613294446934930933474014020041434831899064316552264614235, 543291373538613455155809248493830432520680330961337677793905220928838352322514565851452650441518480234729892153780, 488514444383813071753894478409325136755661751625837651637348989332739608743318097848609715931362718450900659714726, 345584582429475420526208382863826459005483455209655712636957752389218040279848223862500232738960994712140028026289, 93010878843154734421543561265196548806562081923037074596459052686633775723171466088126269822057315393084026072218, 12533412965882925987419497258660569237455714460582608620237638858642686843645624645184949324869641399446820464020, 562770032030414047557952904910126027215456025343530350248616818594366525600180778011275466074764589844321872364272, 128451705070871056157396910591766296038989235798264982434769256144115712608648937222298167066517556774062311420353, 490278961434267039693706795888817653385586689501848271165345121922956317504140732421546020494675482464550410472502, 212287543946551782522399704940695532581109453008804375002654843122502975490312129477869621998080277682674199046031, 351228167329138957128592454766411142609836239330479331051630155591459798299725613134325016512314887321869487481161, 364056580106158102895694571253671943571916920885795142960090311722444269241247963009814588199874030295862636577768, 323410613174912128865174768949092780979646178505039555025194364419990442219941948707117457621400459111231556621585, 555979459475319018276106133189578589964687373772995549423813902773304274184448885651570001083614054140692063026580, 471645896888183848879918063770091917659270906648819201901346651975957177950753583099047587304484006413716362087065, 595746107902898270905714635379070716651708771264047581902664532594897071557252807014533004074458867603957329534516, 557816517693603351719661411054144374250247040672226934534604151399902780319198098821629853612396635344596388943480, 75653615683769023911143698869320584951015514055697266638646507368530841035631560833198288977975782471517557394092, 386729218862361591185009654369415880766336899946663823664818477204172007165198875809899277634660190797185025579614, 393108265477944240661308455550612796769200470498502703905073280606596277788078742986164286625262059483908055127428, 365065802583204450004435661912506592532468753723399406740663534070289404492293680764078659588454240436160849321237, 343474792575856700080726394177083134771079426798042359193966109700850531408037245425173307797050676647933775237484, 449270583610225180914452784540333562631570453995885992409935055758994173533991695282410200635020830187612444056607, 152477148608000973940085532267319492932629609199964217167273279315109403426434432473053141371160594251975646390787, 215758046810520029171417357963508549726865838830930981174495643955719506571398771447950049727234258305885220507020, 388644732079570479249894814593945177309689613386566508292336098907992239994635374799070003303374928382563877494312, 33174396496627497383579687586254392056231321534282758587681567913835717050445163816449882425899904436708697640574, 293328356964375951072242072976851267186828242468018707810599907336525314670450502681522283876131924077746023996643, 292804486280753504026674757794166015519590385505528937148184945726179320137391480944836180610675717906694042510411, 278315915715399524055936806996907092937794467054749462150463756152176847617395557111508306851465386462011262385630, 103884040577296119486012754822466682224025370872916939490159319500421058932999421365377738193002421767097172706341, 111463652129659874006915288174831654634146152513640366449316440114829594116719772451443937868409442532699879776869, 475152124260969797265060453354454799124845717445357239027249597786029156307488697633998763174770332805926500738683, 220597335944113643138040910019263318251616203954548724660953303915089233301354511542662225751359573592406567125779, 460838912228809947843094986154780694841314087685379351551107763714127613789323858795003275958350186756130179585099, 140183105024444619512158726537661171898184380568070161231133567610679885584873426652521827961950911404383912561621, 100258312363732149931656549158547430770829888011033153048299126820116382987576385251423248018523377569893042593237, 405290867185420593972711092047858403431415058957648108848290712855486205273135789994549738296802436972506132007215, 256955277068974586752505570703153051582682851398012077625721880852140628262494489158976679841716540706155916871083, 598549159802958710401362839481280273681933957841944662088149512518476573000011803427513695903373248355980692446393, 308263288681016807641714404434630877489176754884164049322636274036076916608089721011418189274379096133290778967977, 8342859679410179631729508842147337278025979845268212054683951869690623917413242667876438120214556608223950514653, 439895086294728342454449126955941890844828534912064877350830376651948083146591737071488196253116258629344717466258, 91881226123407259536921548434174382841001791568169293198769940131230256611806601058471105885254628422499512141440, 377266324363766263400630205724731218877243980277025204567255708828742612895175112462476548764041808998472515741645, 116673062533491873681185131034931580572262852751033929144868000941380674942800523209276875356733463592351603448680, 57238242567269156027816815706946539463493497634492900168501163766058930300567388616552782194562204025116893421410, 589774086517371498643669747060802896861503240906569357013148621028285639980785543690656162836694887880501379427719, 299125626128142030020988742420785075132372751191528474146303145649473683269241675130370288768899920531289674244113, 304688395547666111898109663337992917557352968749730125549180444196974698222351897080702952045364871753888027443342, 482739851676824100473920409347215848398789318900117561465297399614115666738614477259195415015272146741220074932513, 223546862652113236935862556158177901803806229739994958195958127700830125319767534179348037800919714328649801362322, 150425375689725206871177727482717625428944121456212788472446922564113718518867636855506280578641904259888006038685, 143374483079122348274771015162872747263883105211675941440480524305910827744168931572051691220561136775398957657059, 128633351158033453796356108560970241527889904619011394383277988372280437398843373552825146090070247278923404428730, 249625701621261544438183108711205773478938560640571200325127252485779481701078452759513943692466279038851599018511, 330098489762871879773681019559732262466172018773272582308614672671671001199307865518506835519360693927579848132122, 97272570979206528424127336981516817168566955222510512261839537633559389914877185855268875504270285494647179225542, 74718841026645027941391238796126141775030441881552798010185595153873780524478674202965665888738730228577064111032, 59009205910055868684561742529451214311094377006520731342399475542159755492342086349692903126315766192176134558364, 147954106872023713951463145691216475084430006306060416221364896834795769425749212897622105818492094458111589403860, 555992830271936179812799550002813412539390844307434015514327261249472823762801208645240806724751727789206958497458, 459223438688559571249116685914649450095540121668933258507609746609794374539448063463326591749261191192370815662117, 571393209200912648822312183637054598815269397678580613768957089116765483865121162495918269935152288322187647411253, 177286186824084038346767370297094817293812392957721642873053028629715330336525966361030541938870465423944241324109, 587491267113142201933590855412985429253948652679543672927232780837039223665539177593879438262959884768626979925026, 121073719992748558849282996502703446279240313956823650619682240860630373634948798695523514085879310433388769297911, 326992821821879354165502695961028240084978294787383957718963930070776372845305415470613976088436935751047043512627, 55897462658973985554837453480984923331777372313619418297379632868358904708526448610515770876401568010074036247, 474281517111080897542557845865286041097457650249727914745876496139882777461227076272058949306156001543709356614827, 40880447006931568560802817837347288973549001731224760995212446282117046967004745589464560120352241602331262757637, 199377582253379978414081552664345738394226248383486423477706857549702059554694037264958719644482986837756496613246, 67583806809325529684782118654476643411516600285151896093983454855502714712133346956141976654071062935812737453191, 452546341988439193982297214011678766258506490290911066090290647614068455151806621409756646430532117713333419814200, 63154079944843452528208874183624055953361990336542165468695871390964383215223885775202331596927466794955939855669, 334551033942583568474606741839213957101383590286251155186668543235920975897931743928357631453433934808796703330473, 437000125133660712403788025992205090698484430907657894066272071296035483375078474260228687865444802416063967634962, 79996507523856267942889507576300340014719316733731500178081582238768493408405645914333660158893963260211116177267, 136957270824318341027124989034235585855646981093281453761145461440890955503793684517186875995202144027265329969201, 280204753198588906275980318398478729285287961542920285529979812275266316580102545873587416433404212703776245726478, 537734235993878341769434982550042490365981751251428660237179942734374485415922424357453321846937022328664895920607, 498357256878949571854248804622370932859926894994690120526235824883083753765132401863605500892090016764206939698756, 593183658694608014094449104249771865876595121367209656250471158771632486392533730913932393504513988512194994235126, 471525047958971655208534107052287853913949987926476676197514310320411235020283503103705707957701802098089852040455, 515550195522086342769232739520750768345601850976320014312405876943691700378141377151414091085616391824613041356222, 229784654767967355149909497709811119368560654037206880944035229827691011815016913131119422451043820980926353941725, 217169654015051285238559403576147518221573574303291047729813710960725792892550445720464605476174663800328177597453, 445865555254101127829958642102675927687168710569707725467286103803938348116926832834254624089519482737855028080263, 83946997792088073746354410376458121354546477090285151121896293987266118404260723878401677521317330022928683440101, 472119354862263268431251633432424976904384210603399093568806291862332048310282050100842204125396472101319620313029, 46843467515693389983627938872598324284244171067988563260495985345821466093790361374194115630948136965603015643581, 277302589126799360982750111603442360555051934636756171066424884732490616874962892980005637968336486277371298105284, 37796860324947087933757452089444569583341754367174335457777874936449439863762482510080776848131952814291888228252, 329201662631483519275850208043421059140347420462580260818216051307977255139454956805683010032538225008290753339066, 410958260744814455637908317160979333881545314073457621559204623145344687279791103290567233048673594441768330391568, 391184069150039601440639067557184862816991051523817132396666190555512106382919904848895224325098711230221328168893, 341778180155955688649827271577690269253924367106359453768062062983194302766144996692233530585116870343939549344048, 482885184891891026832543019680624112333051960746415331234199075553060933581630480706330420552017650892318225421994, 227417029879602291913898154454350465334192275455983368980997243946371067766121862949125088496933933053493304375082, 131891059077173823480681683274809296700667012054595015489329798567668841455882278540434006611778254351469315756836, 103977685400575936876007245351080422734569291709540152622222483086840011211808484758839889045266405362833100572217, 430039690420862864710328860317916251552162738538460131045295388990486621940999260820629946807283129550503791042360, 336054039341779369078755981618338727567421739252984379060088264565052065080902800664605952509539644185937023210384, 414650487301520195860820485747902373712957920758077572646321108690388934071745453432265035539090489903222596288408, 589576193361941267176015154197092338077060428665767302320550323024382985851379047593411265195718688560873123744185, 218382333622730104159935425552756841820388948639519923842495333910150980936866251625988964615764772159578862214025, 2542356543181698813075957157401385706512468063673241076844194782908937880847391489213422972872487843717747974071, 19012712934576590810330358701965194246607393288484627129050567402003333386833300009773236871643918870071025370112, 261459449945270346696260426170010104493420330959761424072408598127181246567262293489464049721489266230568086023687, 393057872763078249377870634042993942252544393136978340205701555086856991894130814830449765311294161681995357980571, 31706670785655144489258744219717253455873175486088498446357251628824725653898017817866303775262383346847940227722, 352845629675989592022318947558037109666715372268243939061740352176833050420783754677666411876876865226448815643420, 579523499570692157776642365278787278074363193157128877724940050501652213832135926670258239249988403301949338255538, 534781322034571849183222718240938369181782069830117215874801137890227720544463940037268498986061166881241864175911, 293947547828174245724554745263997068016996177889470503383528004805559670712802640725469343616840367100443153534752, 20256488447976344493484944853334005566670073013412177398480406734598723283264289836587474269370253077015786359305, 475307340957345844876811923970449788514706891727480716267956523131203845997503382023500463149439850432076379159007, 9532193777031501443256432870520743234491840911054244783623102207162388499144070592024440812057106927678514406207, 30376455906399256126534181227692885553266283699913099449205248506625206632827693466133644861846223565145288661633, 310323302397755654510284518631138079981439265632852684852876254116989091445393487579911757256043570018377230904180, 407387187512823516321154849212634322952876110252179375736935664859854509488826142049903683991617538259494461983206, 211765773488300500716796064525502573590145731868562963063378748592341237756767589777342751660513980880169703658019, 118119996850569812443799306306875048213209686043987665925365129711742300844060014347898233682054000714610165352429, 456288037921986114882644161559494182818651772335241262800783776696209877706906644069180867207555069937013686421247, 321798425169971169912343295962697085577508076571119888196289113181080013814133443673221049860354996979915353284172, 324976521789232911848337505841284978746361536915903971011255451438673522500730537005137182463678372897314198988595, 395621759076694189110473461483468243816716472466025836871653502259071450104902960119128530517955567830675053452079, 539300517585750216948117617165146582589224695990488749904551961039061424290129525221984586819908097960720708938354, 29279302128607422250205549520059282069518559284219582605487413142781822276106373289432262133635053599391124926385, 554047387889265384869858916477442181952403597250555948392949469296673941793381852004501421929101000148453680659392, 117780825424837288494479009381221759361151487239443821133102414888864152904732196195473813006762420646998382258677, 513764579681988270425418630365712613073908798769959690739998792846173650211508078458011456784363312999085649615413, 421686906289957894155024887354760839265000904451245772175308131137467275202489561700021659858819873604538650489994, 420037832423259525388141394520857134457021929872555809167052539034540217718781279113965175987358081438109891771580, 36451605745112040602804954235939462081346791770310181663631699054048414835838956409055640948581948016033003511333, 65866443469866248828119099994518897685990064406903627156894902667947376070679854260383038634727146436274230980496, 27676413701492447763964945205769602759768347623741189980278225943728587187940271050634054217590942659542302722334, 500312789935788689187812810985806111797362028998353677843819125485045576943472901976055579663665267905809820905862, 520064354401353505774803720281331074080600746212325401527048530022713769008774050816490541356142354757805595273068, 495854656037423684061417113244964481431602915324717605570975073575414392233479237472936965636133612283412033946051, 91739870792230359210043046401786959190045929124141709653873699398574077579395785555200462734509728806350612588545, 484531754577892922131892661653620989224382080321025512011181426678442547912964573223048519566085582623517825865418, 112714684344084391078866980839255594355187885339701715768009153551270432322826715969989728340963213693095849427668, 404429204723786534299525333122163342588586991421902466839808468487493896330979873416105908841447535426923681220957, 92404742424217640040375362532444172359091402942418950195520660310216430170054358290537973281349284862065214755739, 224043393969043013532511880223075809120842856165608086692928112430171548569493398551019081676395857489451126409940, 4305919427803364191555497499680058924116536587126751817219863902878291078989381194676206640960307162723876513248]
c=45690752833299626276860565848930183308016946786375859806294346622745082512511847698896914843023558560509878243217521
L = matrix(QQ,len(pubkey) + 1,len(pubkey) + 1)
# N = nextprime(iroot(len(pubkey),2)[0]//2)
for i in range(len(pubkey)):
    L[i,i] = 1
    L[i,len(pubkey)] = pubkey[i]

for i in range(len(pubkey)):
    L[len(pubkey),i]=1/2
    
L[-1,-1] = -c    
L = L.LLL()
print(L)
for i in tqdm(range(len(pubkey) + 1)):
    M = res.row(i).list()[:-1]
    flag = True
    for m in M:
        if m != 1/2 and m != -1/2: # 否定则为m = 1/2 或 -1/2,故此处and是合理的
            flag = False
            break
    if flag:
        m = ''
        print(i,M)
        for j in M:
            if j == -1/2: # 此处并不确定哪个代表二进制1
                m = '1' + m # 上面分析时说过,得出的是从低位到高位,故后面得出的数放前面可得正确m
            else:
                m = '0' + m
        print(long_to_bytes(int(m,2)))
        break
# i = 257
# crypto{my_kn4ps4ck_1s_l1ghtw31ght}

题二(no_modulus)

题目描述

from Crypto.Util.number import *

n = getPrime(512) * getPrime(512)
es = [getPrime(690) for _ in range(69)]
m = bytes_to_long(open("flag.txt", "rb").read().strip())
cs = [pow(m, e, n) for e in es]


# who needs modulus anyway?
# print(f"{n = }")
print(f"{es = }")
print(f"{cs = }")
es = [3947856307653736060430873802806107008316841520102481137204355192219245444534133866140773263438637788624028454791554558255430762084763269165670267255142195177840852256165881250185594504906307489999368227886239, 4863305349799030280936951205834689981462564907085935012306702552244318359903042046118755016436288535956173571225563997522149089058526955785766263649380682875483164316510522307155786325416926579408582302045879, 3152750693225594249357593192207695894262604248844134540241053682799929637975242920954666152119802786928079672123677405746801526143893809341457570285425285061111123902394966844557470727506437860291508125628123, 4320714176923396206276780228101608290445048347241703612624687116581322337521213130177214629042179900618602318508012131648798619198627263187310280008047733877389345565841807366884794327568929083936733831929207, 4910772342983258569056776637966179376063420709419196735849643739265478818364395610188183678562084613049915795735654668853569270651076972845462568964157936494723333872288121312138616244345812626371388056899881, 4091202884223854369664562312729942009776986826750126480190425956787253078427044073559544700486055745092965602337902752795136088339470830104414190073042667657698484363034344078263094239012831290977305176068471, 4755301201380890123996840198185131542009749881186573569453211940942239776739781933666573887215362198560136774567060428263414770713138696941927925058322386217361672124252379474350138532970049640773351218441161, 2812556981213495607297308647211418610527444388067355257024895018324120346118199315617209150399999753201554045653145677481411972986778873954908033050653875080868333444594000571763877400304416177244201587405409, 3835648447904098387582707456030382836474671927434201782887395548158537654685281616315465048056735394323083812614411556805867932656275071594099120116269253202346406128151008805579863879745187394365857484522697, 5083347401603073547142767752218292672929204255332616661281210005236291100542306048690070752082876624391494460203306820626660010073216338088991340221518604971962140564888255377501689662149262377940644928523929, 3421201351579093936332997097080380843264364470651071691842530542548441549668121786809925864452165338456403094369192670243563131857047972279410976458724986916215139726827109930286467128743944317920193421923637, 4897180134152215323892103861080659830826373770657736222981982038286646666071471002682737211213159722847135989631379320570462676106620121430406893297542295162589517981611807567762180494573807581793926680039527, 4538113490278522139461030923333892996893292290122025716372980948840970776676174202370529086931261263463786398109786800611640414146650954671142975445710242903143996555720086198219126794202033971564740391078699, 3777206043115339368632358077185054142268325769868417114829365143419111124926713889385844099334109892565329829956412752792417793251550096598348677166065773388005790313516096684818016636143490133467423564958947, 4137082218604834207130065622053938041989945037125238181191301148088955287669686246431778858244994718265488599814269275768120752258282434681914741850937268433746433869099571286788500597795110368635911412235229, 2929248362941176929329540785753886823680458081400486777709870740775265829539428163889089692307862352014596557495901765301767152421427461441935129536820910215689393031113415629001146046141825984871768082065331, 2994057015445679792519898067634379949626162217834012026156272055034542497892286409662648716765851708138845002211335221178572162503555829610612710644874286269950961968670416984143994581643567701448628196400117, 4439885257550965327916510519645451489044687740716694896945528915740491984115614984105189181718150365206068829099989243667269565803646265461151760045916751890082368257095052339787256851444072113400129777610663, 3899780545974116056676750221721416526892977744133706830928813925068657171777960788113928200975814239479038315267967456309278764653625507344957335766901042926944602563702256536471141017070546607251741109530787, 3299826129819160481785586990943893422682523376910516190399656069882264627994319363541100023170651177895985949038922080439351874859610400419146225194504177004694348929934477657677792429943885391326684798329833, 4142956252673934251572197844889263163846130608786599541263914561949151304195088128168650292598484773622328870702127587922217168472353503776993879963531033406362721124035633187314241980778189831107010224499627, 3150750202055871685064773536705612813536505628947199014733291935285712840841464925662559245981795517598061712223752736169870577373737949850960732964891273918909300836500718199506068341641022608908178920821563, 2663951819777536059344720906901340577962289466440602581188531107550043695539661900888411516680186837018810513066828825836794145427675822773187438505816255787536182435273412260367026661417946844001076664860239, 3329223278609806245205630742764525831423923306258525987664169642299179355172114720406110261637487251575179305450723339137257903451818394545615390376753007067750709049220663363814123693323376236025408211957397, 3085269998852367151247854070753228018260225484197632849174705016803415108752365440612757936447593202128101694045388315550732537261154010759487874402434532085938727123778214152073299352941440190205287406776229, 3514418352942108891554430905306798214017935778284885977986698713242556494535388646135447255516969111292612832206246477994393651593728914532447329564498988807168614275989589502378988573627474023692182556070103, 4751734800840596844187978009285438044923979913972966440475670344742526013746799156328459838101968293049057494415651114166224797892509701449147005323878956017292129111983027099720620408084685019087368274497063, 4561112307291246765640148174794663923849922953347739506890917853175926245610650615271114210755798105621197567609303446928433113018751430754326438679929676331765815402458249071934001193377605879929729856240783, 4536661843470928435125535311413671337985814876316190833801479699556845153365514521158976323736152333264442216184290361838558909064416325406602529880605699308076337407745201291677958311189939120942222822926841, 3948918335191035308136589402295477289197290159488595601037033018196325525763843415427805962962489399020016889805193501625796977593017091606200242296177737298947532412313427341109561529772016365974047403654143, 4208727003971760884887742342185113307169971462794644234375759894151985335833522895345184225590908967285898349133950225911251768374025497905538123225674545316206921184906840207258172492432364324039333145250653, 3116243337897673891077859973160662851799760997788831034345156604455069040430863914239176584231651996715037556072522447878268130555405543024001646468338525171691363578580180733222367721627750422775454260185077, 4292735302300279323397845839215466125244533834083041764694126518053069823432046401689467315894193246938461190672170538564268779844224462291997867736169423367066416384707886578862501330875880216943833336905477, 4906867465636053728659939438700759159974518952121034599313202013902727246105893580419198652675094259450328763106252218997978766038637139324579706394071756014054095259103802380449722419578803557959528359853419, 3288691505004243741486259140357393888278078484172506503764752250067225244132621676670921718719314631773925227476799158405040234852428250603005664754493104232423295243896475682819421171707262987338783093268083, 3684785910476068142884282164030104151867578898402724044054082802850483196633714987805581930588493274793600095135180484695859988554710655174205068824369011347478487978018770598429269923285369800352582862159429, 4136907390384883387894535375819553633594695648796690326997048216464082154318092781846131558476407610801805083331616595713560470489229379108761500166363989326542866007963375520896630189920450369745945029078761, 3549416348945809213108131279040042820824394227019243297401348030240268331369238424157451704346688740117064028254994857382398974940602078258112144712109138987072119077355221876573094574914206041931572084248977, 3754270714301636493704363235532253319825723044526800083605832738676304680614767174946262450133118012103609665611345793862235036630191719103405439012416419888608507634514603833899846172526983142955216867895553, 2634870642810737258520435042595646717470476867444585892830626659531133998449637804893539752037270346995629529503586451406220777608151694227781731030194233331957599173479512057508278357810290969278415330800367, 3084212641617138066322577832563091921913019363465583193467975207426702382400896874216952308240016066532863791571589990002792811927169794631765176070574352414296076956844029232137978004506971366405957309600653, 2948032217339379460031075092707665155827082217665496525685075077818004687326299952407493643985603615651335626823895261463855862945067059980349701529173013091150415951647261754803830262905685957945815858959391, 5110469600116393439765783852746522417369603192560134952144516565996204813078244824570128356637464639012927826853768676369793280226131419501756389622839750875990087609373350820077841590299393123175934468385313, 4163056990522109808608208639570082178162284913614125262489392133656194777994734596110003623323114898655788408250472027218263564663211749752956564629319207781068719851248786930562653093101715557798324878700233, 3584355618400112253114949825023574425981023521857624054147754627909685252050563937682627758125961729199279478366085590530847588734986740650334052140878174985626881279238086448698935526507051053874540676253037, 4021099879270077320948588574506484701500366185361130288800173241715287450048665161346182091400931729080092114093871548140036659815144617693821907607950373354609069379054312146137543503291527524465841759729221, 3772127397051833753831071333467208593622624819682354148449148899069499743119723495282052598643356706671608097982623653380444943241603746076026577629145971671366574363490488304301932952192313452391856250870457, 2842141590326416617689300384804170582817791189124993572530945988057793119685571763763652292100730435976290698220822452934615485511385337375699931267601330190970809175929657769099308853555637057843560444152069, 4650633310513052397831575973605854324413360602472205151865875697303729264273500182239068307132136073068499193285701178710366444362499740104561363398390870414204337578454121374379249331356299192858248277324917, 2999641609245245358600671625637633750082742093821810550738189138973656191755501111551797988357301922072180559444123937735713086819156187989107636185093662182927786459701547740287365225242394030655561897554327, 3966707342978204054812228782137974576656254839407594497365383333597246532520644142711711986592192413375172853087852226904291884386652666913904206605131155902154812818578609613354056755864522233734049418026119, 3087258181680061974656900397586856323987263238429418347124629864089566911942892782674089667595951810608807602971517641648005141749125920300923896600188353648005353907501159588251144862719724636838764571302951, 4694614434346044326515315296908636305448033631493511470435310042914591196863023865144251411415083638625663570167504687167119342034720450502436920479796079341038256869804353205124258208741395625849127216915309, 4819334759250404780258665909405284586763998190598203651814322476012689088177342762492220117873755663249077160784393350921699360324989940317771330009467720382530128708872298728801885407866151313204167712166557, 4985231024295572341528160613060874148903064159641664256462066592951497431571177928235855506671569267551752220489613908424694501014605339516957532401186288185775322241069591791690431812385894734841376579533987, 3601373679498273757765697332261277251493765680973894080574396350555907018506468885318938763533369721165073461971500974949575520821970582124300655566377654337353384578680865069511825545797177179434893815564281, 5017224658511793144877169127016086170261086201744105843913656559888512591030325858741631516587373841504340231150770930044112506026930987106980134994099378323098851333981449813931231138467432846363871013437959, 3988944323438229851428850223236073483186220235974995658560641897349169607303571543979981401314892373721518739346318240466196316651548034258346511594127828270575863282117104022177551303791439934883337901452647, 2634079901821121551140984899774320158183013291944084614326454530652977058357360603605011341771554004244576739888756309576912019181523901998466604518462583431524705219696350730187719795410187904557854626037499, 5135446917590396303074374224761070608297335565695391936041088904298351463594673245844710842719918938102183683555308502688333239270044027789080099443437990684866590404115923343971753968711304075128981823793091, 4878498438749386583133503186877660669066383705862042428667287889562792110171449687404109569205144517807429739302984720408654267690542778269813318768320270104304679105115958779963194853238692030595021725406169, 2707692900021769025772346597163031818233804936970067326664518243801029403127892530449264475688267492648091999009175514926753027911685056283520079982997970544562978350584085251630768821818972888779875327543699, 4489155448260045004067038072445812159200860857582300539900452289451768299735532623491792951696517649342995964510657722812472212936023761072272390969503796880150043837638976230325709307624008809986376000494157, 2861438043687037164742446592258015598036097346963301840104538437475856649135560172802644986583025539187641695075899103472034919027750946804741793703878901069697198721940572391761589152545990174589584970324453, 4858637100859657176680501536909173752999992899234127630724072496311248586449827886086823993146687564859793605116363372055623520010827070417283599803186750958182262852326970623609743071536592403059370809311843, 4489652577623573858149603162709060498907726287288932543945543137328407502472855751682749584856229280104080644594574814361350418547021455824830897078855380323263663633920683511192126619369086155577749752980201, 3058774291994838475460482392370194905047209070117394208791635105713926113570563309029694229615614860723562263820321188606298231024896468362896023791930781543445256426921866264400965242134068307394803068936217, 3086945721328697400666461316590782689579504807651754950411761675835233978140520325558035524011103237958487188140269752181011057342544283121148660498532294134569012307855676277753013895133272514915811277241993, 3156921155503004727521346612252402279434114348784226719171684661378238077626277985900797106134448701698464081669094744117909374291101919691814957313392528927700746167842340492229545081099974336072591895093913]
cs = [52830571841693456172050014826914391097008380924964358882895458123846870021059770523627383558143504000218591314052263358362127448845067501646641058067711615527592385464863824430987804480289937826786331770006805663279686460643408730220396682040659759415407398307249665971300517417829739600538402602568151855902, 100055088024494063570311628758939977369682957799361929103127447487640466690705113308258011855285455067171807121732302848972967206481584317889415872700504964658140609561025143181192587777924598235935018962098608881305828564782810875840493820123901326545747666659793782789992692628643917960377095504905725557829, 87504492360102484609938184006776996901313090402469630728305332193765051569504377410458067308103751889228683740254694889331202551393016476866293235141994708027452130544672497560148550337257029585126007223328794380826125553274036646036209394837684900299920344941974544906886231327318547043595911618604264281975, 21630600390584049890634369068411790076536156920528799735652228631059449161551132930802853808328807048346953720681175010028287105719245622878285331209385297687706743112208430630295338105001691241602797274361447653514750433771096353605993405597882130605842308467568005807646031821063717385281897029862304518077, 38662191266390723214571426443788238771225217474899470091214436900961026008783530353923623333808577960768589512514508829031529685506737712285250842429457982979825717082458645879534751935633953344776685126532307483107698390679346367781977045513292169113584604850705821327935435882899133671560928246740041677081, 59914360028966841464185362204966628979643500802181506138278399927801264598003807785109556727163816402676411059306990096970203621818334745259952981749176712991162999253521453751826595538762534006957822183424808065107689089511938312356237198456885444682854872243448989198915353874013944215039608860117390193335, 50359850033220669960566987472187642396901928623093150864760323331069327138914630680543561810242763039956759814818165198500252774671688263353492215837988322056925003032861980780519842375513667974011696122515924666260314680296475704564576971986274796121170761388091141689313166618417758118685859276891392811647, 30167884010715638451215293151129110268978059600359457462056054398410796616420390733882683885857516904398501644278293640583792561560735640066779834726438458009430031428331025568755020421298282775344224788937136495820338267883988845647147474668449244639927547651745797929512801929113069484891870599023476528098, 66570309872433812748399966780583652227736123818813378870758354789367359594570232521035447373458424089186894632783994885044849406577309607398669519645431262826199616654458424440645067553813756630488978526803567326213029552877745354774106776368530520066925475436842559638835565942974595256744362249310429116584, 54129070362974432605952704256686423816428413794197128089141684551928502086929533798430231397153934404270911453652736339479232986765210126609151677086730133237753726541680116458986371426292924953010065150989941783601495544457556276949999410120570978208249316102660317661177359427599882064663965960733467036944, 65046119061106349995871173622881039063730548098049959170057204388339277419083530319190696782411779484511634541563388537416526850857596535673045033621991681183661849797605473789003715965471326975896521456604955161299175452835614628987399655335154235998680945840834245492687993929973191408584905256065028465326, 102274965369008543844433606935435988917202907528712330002578195979589608052147585162387772445953046684097919759532551498078384085369557227312964149974451814474127060126254105591800029235473655739627948118285938799961594698938405771873900551566790115443842021967455928553869427805936787388807358555703354759328, 99672791726470439366431380304778179399379553173089185645277420345153118656081485663973565696030060512107192805576221736313171656911774583457580418767250300649017654831694559118762776618883805477952487269007314559315534972065350724075806237314629795783123242998872611873519685786505870160124605371356745331863, 14594152239061744657106877747302679472359229726052126919999254904711198262235675486971355557208441182829685173217196719078215054980204497703077474248434494863632640394418833115506448928463628137990493353672902067368689442017945114380535841785287600155283050262626160322050836104100544557754309908740218120361, 45861153769827071613948183999433717541830515075422587961167865777049129367516018468627884874511980196883548949600233297987099833296713148724969002995959149788297519261173098432888228574415366765397100100624240274298822666527924943667225816938310245695030088578028286897529314853004214548756361664186120089161, 94039642899299874797542001288953194226772512304869773797976586196085877481737671228202510248994042637514964238936383138764815138838810604055705957682006958468536967642935026998855548582854510302011904331298374699185986415743629333371801296425653173654155422941093083791380151583519262865394218392908601418200, 89262060698280890424932919408686027133777219946088871678529664274804073146744011910192001932303719016462981332874731076725343296020562930381843843719247350376754937143343451754485916546194930867015519392449937914621926105017785337841303442061665337596106232557898971246940471022908285300474759425596822245644, 70598011739918622103126496111416183982267845452748112537460560378536875379914898971246975237769269082396425739032006154977085354250475831561320470810700004544927596652141465703677598334439223185266251955031396367203476059791385244876640552165469818658659829798905825687781121652996169135401502820467177430950, 101473055998996353392235813513842134585020408435098499061539512999317517657488221696765793789981295753142455343946211398804965119101946388716985370921357516579438634911745164873055935213919525766619795442534501755675742233163361782224672885116188010782917754821090131275452503572377818925786813950436608046635, 18115482659671247239904221902580498388470890580076697991756303269906617968236716906252600117999819016968570873145850416004710096279472137625307024444342813704129057425179764123781672267310851838770937656200822190939675004146298556146434556515619757486983237420935747513097124002823285391380449320253443674941, 30456538714214873053471087492024757447546676489150546651940893031326374181408509122485303919811925710950282613142363318493901612070365806002490302097203828804554841619122901352290514161760784500941198308442896732757037988739726313420715460183437002938370859653623691142772428112290449527902150015266782023289, 95553646567278787431421345639666160579907651716566934504959094459252876228691158681346276907803331435656008897815445004786982789629390434568728330051673479890579373792897730765352397865644488953521570759689150647722749488270179235258138345175816456092572253110548429114657355949408334396823788589025827178637, 26067116431797426749060701212207589051700179219536115031356908708047986226297698271276682916954556933962692227953148092178850555138335826361941959937246233191820754258895459940855486169046046510421042478120525872632328452127788075196603313415519358593952390703445130614593530578386874828329012074483472738410, 22061640343961564497431351262022815872987892773161978446806737918675600062236303477119646423265660086545461532392990382192129555043513365989578952027753822772446973663222652211552774541439332939673193392602161876724294916322225172877631874427569286252065287545860236619432163855797540887863071138384434549414, 70523545483887465240922345944357121230998196374195918851987327782401037120553279764359758417282133022532866945794597780698796654206498550187355008942414476093688656417079885788102046613772304906291971230506642981807275877309660128822602926088445234263876371627499409104120730443510651059646136044607774228983, 64884041989815215457445236097574217307148186641499101321867352392682244709795147413538234303244457659629303107522844568466213139509170328495035600462595742570505175561056017503437152277576933597524124530857212041557816307946643306978081928380090957954116417958745387868202406128343392451348248862495051776738, 40571660848318401133829206165925715361841787088154245825284865651938541241358630793148637016297215714799170548444484596776148255091239594951136575941584191591834103076419524359824077266305472343169122476353553934492982851878945864029994071533106421703227708542130525925475467574172048503484266412587066465000, 75826768561193673536161156270928420737015874041460856924012162021865796486662926727312256736260756256321342019270458413537408956037865310393338770397333149643405353890764661324892442333358343588844377274367605886546086243482885053996947862093643394416744244349474034481091249111617647346570225300846672579989, 31820222617592393409640623101440007993525378621312599436703696089377323275874475531719668112703712822146104456151868178057853188767705801076104410640671067665885102177466002556285857962425619453551881938418992431104482431040904239957013496866510671563380766103589865764039515981655473776275628826589003174736, 73140449408913890286444266569999611122742701865708451428453473526259869054931751870568718382564873188419512629290670645004588263205498276740801567317957693699601002470405898007758396612883751951552675569982513065938947800395835444557767713613943138384903039944207241559709952115323108997315761370041750889841, 70940206773684982035870305033509174591184242604340941740384287270664563833408230493202877842609512561900215938616124988435536470185945783416149543039406600195663207815747305431166875383830158254254333207530520732405915331654092393566290744157147333858893472751216675067730708934104328278086756470627618179242, 60472177573531948032930391849707471715892445743105570264628191655622639691466416300105833022027889129135645813676281134105947543701546762786323898791462066866396910562109837228689246052472985588374940328065260684846484047556233059644579552971600110118393934799616960897174746045194385269666768999860896229043, 77769304165706748555349747127960641509040451252902042160290599163290350785942247069910575580408495269399275104482341003819921774507584937491022083042468401988959232328898375206049535646890591787735395975349638901486755555861360401402679345806011949447457203622044089969558387472906615572361597170252493909669, 57727897672270321703329491301181569263142152401371989070744821370064934010467270116886562135741362811247784578425353886198220239755250180965762467299987848009228592042868202476532675929961322310225975782196899792028042040528393200552092988200141012780607801959981540460476827572381852213577915676482409072892, 64118704483922840433629123236943834030776646061476518632103909131508675351647578796624340483288005328797526181105444264317087932559088294142016787673985907390264849030604851466343729747804594349634829519891299846094862428468507341189069168703283009373388232686725460055798365442714638712256001034103703026598, 24515868371941943096280797252866114517805683238673671666730478067107976655832446823292172204627550024187989465275377452123260713604777857365000503836768024145997309201735737827332121256580654756862670553963847260577936194135380897252920879555966541475228664759766000035647004031535364268926403429336733521263, 94517318198707920307223212268077760032177471217225608884450743535092528607961043443656621516978907166209968027867647603263659772954735361697776253277508619658112491014034475864963290373083591408547028944128975811335843132978307287731048774012147594502160365463515352893223713702543966280436327838660723887287, 55111075863190981811706971043942201289260364255444217894889458482636233484100502949929016249879966934321094430944343700758312455332514887483879567391644230253415340791700188250317320732103887594134422299918918504537120400589482173987790207508764720617373116688071569866644024030094730030985609747720090498037, 57228067976237568059285578074634617185806689072499557858971504582950826470261671355559812788932624165244847707514709014642601903252658756698711109155039952897548153063929435654626532684874779888029661781656711818004939443102551324045405469317799870027730890988599954517638609580938997160500947124784999492500, 90470901368380768956970787764283037884174127388373648583321419402266927007200030989379911136467637789720557032651684774942495574562139752832691926710279840311615102798080407926980880746343057189041037791019392206147409103306016047298521946590670352899256670685320716560229151811693136175360414829327840388849, 58306925211163911898597855984581762123553351725206199890269558014672761387587604035264720863051338381948970768235539121391192883592964234821589497308667426000587341364965118867588142638414479685901805317020822908030311892610767772762866399534486270040435830101316294532761183819108481131828059689267560894704, 83717202089611102783317317507752155470795125474872889021489350056682868839565697228423344720191722603520519342313761799242795246377232107380906161900382021419419038917703677808492033180813805537964125579868205177602438647471315310580843350339628349661062665020863618561944041825003492403886466556971432580148, 4074902004657669976054393732010520223606536813168584928495732068413945082609910265247021909800529865351540385538899211039836175638044161230458653706480423635909685101570015025281837635797674801348100121631060016933352304205236348522378667349539270955133473058270119933624138629669050904877608620261225380445, 7393250528085878410545820252557188333523248338176997471311296885403056492960154103816976205390670782268955948241688203364931084685682380441291872604634462905828819559459878098905183167657930193000465883738276931756815237719483507669347213535145558780427024163156061058981183004722885394253903896061594454648, 10815420069464099503209175409221439324495683431327837796484295065244681313525368680630230557097132982820543149291566104450010584083108481972630094244781200757179780336049710398737530916115194397169103717463479166157813852350956742710724890002131649695740810031074210473253252616337512311779650111235879240336, 81993457089483626582998919148234666997044513971722405873371890750401617254217972448284846250693491059007292715564545754462273438241841114431711670419176099521561648258453839832905493691843870581946713337678121253742335215010082615695460227373444235024689820272318264322295946978691314968981212039882239112268, 28327646182133002940208451695051176460120729836591104038309330138656880523902274894501119027771538293432328059870466306237001736000371332316585896462634908390199674825694815594828443769061584837579536134757420875967753644204009354507469088246303301960763080298826738589964579466852006262729539462247063026414, 51856936321390566264998166135588160171355647354765243075498547279150269069984585969159500030918141233538805048877004904511876881993268258989536908827690630662064263326562909179751548772489175616589028464187459207763675945673821185907423699868807435132507945924579416930693385948587985477852521912497446499628, 65370952498037212208538158357904576235108000096595988927666189761877893986781630184765786287299640747385796893669893451025892598956559477729299291619809149069467441016883478700158947649897633006816449874010825415404596694751378256610744338332371188859851849350616186475793908538304180776259114113015160394195, 81315468051202162132034386425619142461421235031231995747020508891913220976180934248664460309159279870202514296112632499515705006752370835229572954889176743130353114975985183169133527651244684622105902328964772351683002604785774853712119930623990761783315399687808555169698653829550886174962247471073310062131, 70329225954916503323239370373653305121202037955023724484062668291393792043974734680074550153402596256216825405046573031125563962464285260565621659251844622816416707983107082993186857113865896680355848469529683525457247220906188627776475559189358176621140327550868984864550737293762595180635321902163613017817, 20343084559250623226121792873139285571929372091281389816287065103094377260133964722974039607502970612897183154070678124648798104193493980469575909144734890865388964003525248095757970959754904421396377434482439165591393267049358546197184083071422042521225749445576328046328103556928817559097522864369441887000, 32959286087397465787916307079828027914996555118112580605622435415429780317773250595584589138046518794177055886377016640001089382843845277598719063211900101144776934144453039318791989276397433150613569225406488853037668577365985336941359013267959729256716362343171333253569444357127308104208863163650291508663, 106468354349094763907610636582967500445361568187006970218096795102240969271092303630251353090137264356069099391343749389292396854734876295998652794989410898061025267023460567509999653885089977080703072006682288808415112815610089908489273329545938766372484700966821536388361361173122671123816919186794887327082, 44829800833953549096952319911888712500644387571208408148080631655053554526713901948755066476282008316235731225246967411258474245942648609469990172867750391185282722631608580974713336283219464273844147343926168631863936393069595267085185880846480557450332538162161327783679588809501636321488808028621265880534, 67324486287836631009110215751885333692349625417371900181730596357941876624455695254629108176026643589064535599600826005978131482942302875385741853272065966299476891892013402193734336125730503379574570250627969021770462305407747729277163692253502334380483473589134154775875053691372296651030489596314658105399, 55915919720195227201656784155120999861411209527117523545006066295188548089917830394945974572707278988844450378825437399419505312175567310079535856798296286610463284017426041094056558979883262964632585529466164095739952231101179065180656176785516757337056065861124320969500112807427291728118979753777158910364, 26825125097714955460918923635046853983199294389109894969602347719515101024144780497839175629778224814891126133381973407150361185266041516009516573191331668630432504752523976571948319351563764914067483269276817380797869080593817921510600133313966844869070398230952129841215357336115604431435046724140348514897, 74732895402067637117051763515723176763376528133932531713291068711817729436076325948961855613161146013721079185005731659169133112703459105584436602235736006955275572295635102212988513270770376827403703632778433251222620599879918877326085154580953574951338917745117729641041862342674654803175167444165455876219, 83180530184585459989663770820361071077706254270560927339718652397417095501848005840837273474006917374531117720783387554016427228870847738413965938917962649355206663954275867210368122925529862127143124539631750978008945303029431681795855839813301114833172999399883004271787713990543343652583164481158268816196, 100999663433420636058400970774268613084869393812433040694793835428514898958701012424489453735031587511514362185482147881108276781877327160222804971775626987450784020334759062550480875158759002507200430603879895168053048193557829711131592504022604361993786610608196803063945239980616765151259150491286764388247, 25119574021621990958987533513651119858833599199270542657090906846710905933587173801773394356069353686091074727901326994512720306449872294604133716551558312123387401243787380978490851003316572518835457853898610416366345550988678537865932303749728955892750008565282815851801094359547478656489520870409879905825, 6504958979779676386060703257086726169560260722887468692746248939725763992789973673921687540275594617611213902852724138200625080688338820511560697485436293190900601036193353562381594155429995153648179202392017348166466811851056163347971768267123391918043470059570596604042681729563498805046454453638568582798, 86980106233569070713268104813708659349892000993885004966617532466340732908535510200584381691034317599134777698921871202583601718001059887680903275471770431950850571651499817219980275969550574747997247965505138618838867451051929331645528771255405172456906053855845542447373341835685198148847090833770827233446, 51503125416364029724480954307976385033193954176924554397093962003007323284167000031893238563299626344861145061233696769519471479549777601235487589583782553069691303360152641725406095309112744075892743968040592992127890157477768710458407134816285642729248491956134443249239287951043733907353765657503363290331, 105161138780191708349702934602323792116067605247442977482077537885172814672466845494954857521302423170470548223185623238385234181642059987531338259292487901442312319355014806576895296129640434384762956414531876120986094803925814225601810208606246581917987580440817233312668764447994283934546816951824766989631, 71171749260166031891641008013539072438322845605575417680599077801594423844328321759116704147623291265587359235338701498184766532023648702503968330997455331395926328994746232284229780950231220885242455324662136971984503353946835949779890203189915203429814842030280702104874329106146931246129407838656772586251, 80775263488334861244501793103603094719894208265769334812752726216961463457283073218342282442524712192120349933620543456253637636990768692386733959327312089595897273988293930169786318077368419313882621864928789789717627970859479702543883305142451628977327320218827209228002206703325776608170553184630615190480, 33605819037062094048426172914790277446010154390674443728186735437036117128588515430064943511137069762565461812666202966286016287601981386888275814740476926627512474869163674472856407213394423774309053758970646248752793826440340665447947553075039799688699053456011019708855919076353452734016920888829070865767]

题目分析

e s = e , c s = c es = e,cs = c es=e,cs=c
假设能够找到 a i a_i ai,让 ∑ i = 1 n a i ∗ e i = 0 那么 ∏ i = 1 n c i a i = m e i a i = m 0 ≡ 1 ( m o d n ) \sum_{i=1}^na_i * e_i = 0\\那么\prod_{i=1}^{n}c_i^{a_i}=m^{e_ia_i}=m^0\equiv1\quad(\mathrm{mod}n) i=1naiei=0那么i=1nciai=meiai=m01(modn)
所以找到不同的a,即可通过gcd()恢复n
既然要进行 c a c^a ca幂运算,那么a不能过大,可以通过LLL算法找到一些小的线性组合
构造这样的格:

M = ( 1 N e 1 1 N e 2 ⋱ ⋮ 1 N e n )           ( a 1 , a 2 , . . . , a n ) ∗ M = ( a 1 , a 2 , . . . , a n , 0 ) M = \begin{pmatrix} 1&&&&&Ne_1\\ &1&&&&Ne_2\\ &&&\ddots&&\vdots\\ &&&&1&Ne_n \end{pmatrix}\\ \ \\ \ \ \ \ \ \ \ (a_1,a_2,...,a_n) * M = (a_1,a_2,...,a_n,0) M= 111Ne1Ne2Nen         (a1,a2,...,an)M=(a1,a2,...,an,0)
当N符合要求后,目标向量的最后一个元素将会规约成0,前n个元素即是一个符合要求的a,找两个(以末元素是否为0来判断符合条件的a)
因为 a i a_i ai有正有负,所以得到的 ∏ i = 1 n c i a i \prod_{i=1}^{n}c_i^{a_i} i=1nciai是个有理数,假设用 x y \frac{x}{y} yx表示,则
x y ≡ 1   ( m o d   n ) x y − 1 ≡ 0   ( m o d   n ) x − y ≡ 0 ( m o d n ) S o    n = g c d ( x 1 − y 1 , x 2 − y 2 ) \begin{aligned} \frac xy& \equiv1\quad\mathrm{~(mod~}n) \\ \frac xy-1& \equiv0\quad\mathrm{~(mod~}n) \\ x-y& \equiv0\quad(\mathrm{mod}n) \end{aligned}\\ So\ \ n = gcd(x1-y1,x2-y2) yxyx1xy1 (mod n)0 (mod n)0(modn)So  n=gcd(x1y1,x2y2)
n出来后共模攻击一下便能得到m

from Crypto.Util.number import *

es = [3947856307653736060430873802806107008316841520102481137204355192219245444534133866140773263438637788624028454791554558255430762084763269165670267255142195177840852256165881250185594504906307489999368227886239, 4863305349799030280936951205834689981462564907085935012306702552244318359903042046118755016436288535956173571225563997522149089058526955785766263649380682875483164316510522307155786325416926579408582302045879, 3152750693225594249357593192207695894262604248844134540241053682799929637975242920954666152119802786928079672123677405746801526143893809341457570285425285061111123902394966844557470727506437860291508125628123, 4320714176923396206276780228101608290445048347241703612624687116581322337521213130177214629042179900618602318508012131648798619198627263187310280008047733877389345565841807366884794327568929083936733831929207, 4910772342983258569056776637966179376063420709419196735849643739265478818364395610188183678562084613049915795735654668853569270651076972845462568964157936494723333872288121312138616244345812626371388056899881, 4091202884223854369664562312729942009776986826750126480190425956787253078427044073559544700486055745092965602337902752795136088339470830104414190073042667657698484363034344078263094239012831290977305176068471, 4755301201380890123996840198185131542009749881186573569453211940942239776739781933666573887215362198560136774567060428263414770713138696941927925058322386217361672124252379474350138532970049640773351218441161, 2812556981213495607297308647211418610527444388067355257024895018324120346118199315617209150399999753201554045653145677481411972986778873954908033050653875080868333444594000571763877400304416177244201587405409, 3835648447904098387582707456030382836474671927434201782887395548158537654685281616315465048056735394323083812614411556805867932656275071594099120116269253202346406128151008805579863879745187394365857484522697, 5083347401603073547142767752218292672929204255332616661281210005236291100542306048690070752082876624391494460203306820626660010073216338088991340221518604971962140564888255377501689662149262377940644928523929, 3421201351579093936332997097080380843264364470651071691842530542548441549668121786809925864452165338456403094369192670243563131857047972279410976458724986916215139726827109930286467128743944317920193421923637, 4897180134152215323892103861080659830826373770657736222981982038286646666071471002682737211213159722847135989631379320570462676106620121430406893297542295162589517981611807567762180494573807581793926680039527, 4538113490278522139461030923333892996893292290122025716372980948840970776676174202370529086931261263463786398109786800611640414146650954671142975445710242903143996555720086198219126794202033971564740391078699, 3777206043115339368632358077185054142268325769868417114829365143419111124926713889385844099334109892565329829956412752792417793251550096598348677166065773388005790313516096684818016636143490133467423564958947, 4137082218604834207130065622053938041989945037125238181191301148088955287669686246431778858244994718265488599814269275768120752258282434681914741850937268433746433869099571286788500597795110368635911412235229, 2929248362941176929329540785753886823680458081400486777709870740775265829539428163889089692307862352014596557495901765301767152421427461441935129536820910215689393031113415629001146046141825984871768082065331, 2994057015445679792519898067634379949626162217834012026156272055034542497892286409662648716765851708138845002211335221178572162503555829610612710644874286269950961968670416984143994581643567701448628196400117, 4439885257550965327916510519645451489044687740716694896945528915740491984115614984105189181718150365206068829099989243667269565803646265461151760045916751890082368257095052339787256851444072113400129777610663, 3899780545974116056676750221721416526892977744133706830928813925068657171777960788113928200975814239479038315267967456309278764653625507344957335766901042926944602563702256536471141017070546607251741109530787, 3299826129819160481785586990943893422682523376910516190399656069882264627994319363541100023170651177895985949038922080439351874859610400419146225194504177004694348929934477657677792429943885391326684798329833, 4142956252673934251572197844889263163846130608786599541263914561949151304195088128168650292598484773622328870702127587922217168472353503776993879963531033406362721124035633187314241980778189831107010224499627, 3150750202055871685064773536705612813536505628947199014733291935285712840841464925662559245981795517598061712223752736169870577373737949850960732964891273918909300836500718199506068341641022608908178920821563, 2663951819777536059344720906901340577962289466440602581188531107550043695539661900888411516680186837018810513066828825836794145427675822773187438505816255787536182435273412260367026661417946844001076664860239, 3329223278609806245205630742764525831423923306258525987664169642299179355172114720406110261637487251575179305450723339137257903451818394545615390376753007067750709049220663363814123693323376236025408211957397, 3085269998852367151247854070753228018260225484197632849174705016803415108752365440612757936447593202128101694045388315550732537261154010759487874402434532085938727123778214152073299352941440190205287406776229, 3514418352942108891554430905306798214017935778284885977986698713242556494535388646135447255516969111292612832206246477994393651593728914532447329564498988807168614275989589502378988573627474023692182556070103, 4751734800840596844187978009285438044923979913972966440475670344742526013746799156328459838101968293049057494415651114166224797892509701449147005323878956017292129111983027099720620408084685019087368274497063, 4561112307291246765640148174794663923849922953347739506890917853175926245610650615271114210755798105621197567609303446928433113018751430754326438679929676331765815402458249071934001193377605879929729856240783, 4536661843470928435125535311413671337985814876316190833801479699556845153365514521158976323736152333264442216184290361838558909064416325406602529880605699308076337407745201291677958311189939120942222822926841, 3948918335191035308136589402295477289197290159488595601037033018196325525763843415427805962962489399020016889805193501625796977593017091606200242296177737298947532412313427341109561529772016365974047403654143, 4208727003971760884887742342185113307169971462794644234375759894151985335833522895345184225590908967285898349133950225911251768374025497905538123225674545316206921184906840207258172492432364324039333145250653, 3116243337897673891077859973160662851799760997788831034345156604455069040430863914239176584231651996715037556072522447878268130555405543024001646468338525171691363578580180733222367721627750422775454260185077, 4292735302300279323397845839215466125244533834083041764694126518053069823432046401689467315894193246938461190672170538564268779844224462291997867736169423367066416384707886578862501330875880216943833336905477, 4906867465636053728659939438700759159974518952121034599313202013902727246105893580419198652675094259450328763106252218997978766038637139324579706394071756014054095259103802380449722419578803557959528359853419, 3288691505004243741486259140357393888278078484172506503764752250067225244132621676670921718719314631773925227476799158405040234852428250603005664754493104232423295243896475682819421171707262987338783093268083, 3684785910476068142884282164030104151867578898402724044054082802850483196633714987805581930588493274793600095135180484695859988554710655174205068824369011347478487978018770598429269923285369800352582862159429, 4136907390384883387894535375819553633594695648796690326997048216464082154318092781846131558476407610801805083331616595713560470489229379108761500166363989326542866007963375520896630189920450369745945029078761, 3549416348945809213108131279040042820824394227019243297401348030240268331369238424157451704346688740117064028254994857382398974940602078258112144712109138987072119077355221876573094574914206041931572084248977, 3754270714301636493704363235532253319825723044526800083605832738676304680614767174946262450133118012103609665611345793862235036630191719103405439012416419888608507634514603833899846172526983142955216867895553, 2634870642810737258520435042595646717470476867444585892830626659531133998449637804893539752037270346995629529503586451406220777608151694227781731030194233331957599173479512057508278357810290969278415330800367, 3084212641617138066322577832563091921913019363465583193467975207426702382400896874216952308240016066532863791571589990002792811927169794631765176070574352414296076956844029232137978004506971366405957309600653, 2948032217339379460031075092707665155827082217665496525685075077818004687326299952407493643985603615651335626823895261463855862945067059980349701529173013091150415951647261754803830262905685957945815858959391, 5110469600116393439765783852746522417369603192560134952144516565996204813078244824570128356637464639012927826853768676369793280226131419501756389622839750875990087609373350820077841590299393123175934468385313, 4163056990522109808608208639570082178162284913614125262489392133656194777994734596110003623323114898655788408250472027218263564663211749752956564629319207781068719851248786930562653093101715557798324878700233, 3584355618400112253114949825023574425981023521857624054147754627909685252050563937682627758125961729199279478366085590530847588734986740650334052140878174985626881279238086448698935526507051053874540676253037, 4021099879270077320948588574506484701500366185361130288800173241715287450048665161346182091400931729080092114093871548140036659815144617693821907607950373354609069379054312146137543503291527524465841759729221, 3772127397051833753831071333467208593622624819682354148449148899069499743119723495282052598643356706671608097982623653380444943241603746076026577629145971671366574363490488304301932952192313452391856250870457, 2842141590326416617689300384804170582817791189124993572530945988057793119685571763763652292100730435976290698220822452934615485511385337375699931267601330190970809175929657769099308853555637057843560444152069, 4650633310513052397831575973605854324413360602472205151865875697303729264273500182239068307132136073068499193285701178710366444362499740104561363398390870414204337578454121374379249331356299192858248277324917, 2999641609245245358600671625637633750082742093821810550738189138973656191755501111551797988357301922072180559444123937735713086819156187989107636185093662182927786459701547740287365225242394030655561897554327, 3966707342978204054812228782137974576656254839407594497365383333597246532520644142711711986592192413375172853087852226904291884386652666913904206605131155902154812818578609613354056755864522233734049418026119, 3087258181680061974656900397586856323987263238429418347124629864089566911942892782674089667595951810608807602971517641648005141749125920300923896600188353648005353907501159588251144862719724636838764571302951, 4694614434346044326515315296908636305448033631493511470435310042914591196863023865144251411415083638625663570167504687167119342034720450502436920479796079341038256869804353205124258208741395625849127216915309, 4819334759250404780258665909405284586763998190598203651814322476012689088177342762492220117873755663249077160784393350921699360324989940317771330009467720382530128708872298728801885407866151313204167712166557, 4985231024295572341528160613060874148903064159641664256462066592951497431571177928235855506671569267551752220489613908424694501014605339516957532401186288185775322241069591791690431812385894734841376579533987, 3601373679498273757765697332261277251493765680973894080574396350555907018506468885318938763533369721165073461971500974949575520821970582124300655566377654337353384578680865069511825545797177179434893815564281, 5017224658511793144877169127016086170261086201744105843913656559888512591030325858741631516587373841504340231150770930044112506026930987106980134994099378323098851333981449813931231138467432846363871013437959, 3988944323438229851428850223236073483186220235974995658560641897349169607303571543979981401314892373721518739346318240466196316651548034258346511594127828270575863282117104022177551303791439934883337901452647, 2634079901821121551140984899774320158183013291944084614326454530652977058357360603605011341771554004244576739888756309576912019181523901998466604518462583431524705219696350730187719795410187904557854626037499, 5135446917590396303074374224761070608297335565695391936041088904298351463594673245844710842719918938102183683555308502688333239270044027789080099443437990684866590404115923343971753968711304075128981823793091, 4878498438749386583133503186877660669066383705862042428667287889562792110171449687404109569205144517807429739302984720408654267690542778269813318768320270104304679105115958779963194853238692030595021725406169, 2707692900021769025772346597163031818233804936970067326664518243801029403127892530449264475688267492648091999009175514926753027911685056283520079982997970544562978350584085251630768821818972888779875327543699, 4489155448260045004067038072445812159200860857582300539900452289451768299735532623491792951696517649342995964510657722812472212936023761072272390969503796880150043837638976230325709307624008809986376000494157, 2861438043687037164742446592258015598036097346963301840104538437475856649135560172802644986583025539187641695075899103472034919027750946804741793703878901069697198721940572391761589152545990174589584970324453, 4858637100859657176680501536909173752999992899234127630724072496311248586449827886086823993146687564859793605116363372055623520010827070417283599803186750958182262852326970623609743071536592403059370809311843, 4489652577623573858149603162709060498907726287288932543945543137328407502472855751682749584856229280104080644594574814361350418547021455824830897078855380323263663633920683511192126619369086155577749752980201, 3058774291994838475460482392370194905047209070117394208791635105713926113570563309029694229615614860723562263820321188606298231024896468362896023791930781543445256426921866264400965242134068307394803068936217, 3086945721328697400666461316590782689579504807651754950411761675835233978140520325558035524011103237958487188140269752181011057342544283121148660498532294134569012307855676277753013895133272514915811277241993, 3156921155503004727521346612252402279434114348784226719171684661378238077626277985900797106134448701698464081669094744117909374291101919691814957313392528927700746167842340492229545081099974336072591895093913]
cs = [52830571841693456172050014826914391097008380924964358882895458123846870021059770523627383558143504000218591314052263358362127448845067501646641058067711615527592385464863824430987804480289937826786331770006805663279686460643408730220396682040659759415407398307249665971300517417829739600538402602568151855902, 100055088024494063570311628758939977369682957799361929103127447487640466690705113308258011855285455067171807121732302848972967206481584317889415872700504964658140609561025143181192587777924598235935018962098608881305828564782810875840493820123901326545747666659793782789992692628643917960377095504905725557829, 87504492360102484609938184006776996901313090402469630728305332193765051569504377410458067308103751889228683740254694889331202551393016476866293235141994708027452130544672497560148550337257029585126007223328794380826125553274036646036209394837684900299920344941974544906886231327318547043595911618604264281975, 21630600390584049890634369068411790076536156920528799735652228631059449161551132930802853808328807048346953720681175010028287105719245622878285331209385297687706743112208430630295338105001691241602797274361447653514750433771096353605993405597882130605842308467568005807646031821063717385281897029862304518077, 38662191266390723214571426443788238771225217474899470091214436900961026008783530353923623333808577960768589512514508829031529685506737712285250842429457982979825717082458645879534751935633953344776685126532307483107698390679346367781977045513292169113584604850705821327935435882899133671560928246740041677081, 59914360028966841464185362204966628979643500802181506138278399927801264598003807785109556727163816402676411059306990096970203621818334745259952981749176712991162999253521453751826595538762534006957822183424808065107689089511938312356237198456885444682854872243448989198915353874013944215039608860117390193335, 50359850033220669960566987472187642396901928623093150864760323331069327138914630680543561810242763039956759814818165198500252774671688263353492215837988322056925003032861980780519842375513667974011696122515924666260314680296475704564576971986274796121170761388091141689313166618417758118685859276891392811647, 30167884010715638451215293151129110268978059600359457462056054398410796616420390733882683885857516904398501644278293640583792561560735640066779834726438458009430031428331025568755020421298282775344224788937136495820338267883988845647147474668449244639927547651745797929512801929113069484891870599023476528098, 66570309872433812748399966780583652227736123818813378870758354789367359594570232521035447373458424089186894632783994885044849406577309607398669519645431262826199616654458424440645067553813756630488978526803567326213029552877745354774106776368530520066925475436842559638835565942974595256744362249310429116584, 54129070362974432605952704256686423816428413794197128089141684551928502086929533798430231397153934404270911453652736339479232986765210126609151677086730133237753726541680116458986371426292924953010065150989941783601495544457556276949999410120570978208249316102660317661177359427599882064663965960733467036944, 65046119061106349995871173622881039063730548098049959170057204388339277419083530319190696782411779484511634541563388537416526850857596535673045033621991681183661849797605473789003715965471326975896521456604955161299175452835614628987399655335154235998680945840834245492687993929973191408584905256065028465326, 102274965369008543844433606935435988917202907528712330002578195979589608052147585162387772445953046684097919759532551498078384085369557227312964149974451814474127060126254105591800029235473655739627948118285938799961594698938405771873900551566790115443842021967455928553869427805936787388807358555703354759328, 99672791726470439366431380304778179399379553173089185645277420345153118656081485663973565696030060512107192805576221736313171656911774583457580418767250300649017654831694559118762776618883805477952487269007314559315534972065350724075806237314629795783123242998872611873519685786505870160124605371356745331863, 14594152239061744657106877747302679472359229726052126919999254904711198262235675486971355557208441182829685173217196719078215054980204497703077474248434494863632640394418833115506448928463628137990493353672902067368689442017945114380535841785287600155283050262626160322050836104100544557754309908740218120361, 45861153769827071613948183999433717541830515075422587961167865777049129367516018468627884874511980196883548949600233297987099833296713148724969002995959149788297519261173098432888228574415366765397100100624240274298822666527924943667225816938310245695030088578028286897529314853004214548756361664186120089161, 94039642899299874797542001288953194226772512304869773797976586196085877481737671228202510248994042637514964238936383138764815138838810604055705957682006958468536967642935026998855548582854510302011904331298374699185986415743629333371801296425653173654155422941093083791380151583519262865394218392908601418200, 89262060698280890424932919408686027133777219946088871678529664274804073146744011910192001932303719016462981332874731076725343296020562930381843843719247350376754937143343451754485916546194930867015519392449937914621926105017785337841303442061665337596106232557898971246940471022908285300474759425596822245644, 70598011739918622103126496111416183982267845452748112537460560378536875379914898971246975237769269082396425739032006154977085354250475831561320470810700004544927596652141465703677598334439223185266251955031396367203476059791385244876640552165469818658659829798905825687781121652996169135401502820467177430950, 101473055998996353392235813513842134585020408435098499061539512999317517657488221696765793789981295753142455343946211398804965119101946388716985370921357516579438634911745164873055935213919525766619795442534501755675742233163361782224672885116188010782917754821090131275452503572377818925786813950436608046635, 18115482659671247239904221902580498388470890580076697991756303269906617968236716906252600117999819016968570873145850416004710096279472137625307024444342813704129057425179764123781672267310851838770937656200822190939675004146298556146434556515619757486983237420935747513097124002823285391380449320253443674941, 30456538714214873053471087492024757447546676489150546651940893031326374181408509122485303919811925710950282613142363318493901612070365806002490302097203828804554841619122901352290514161760784500941198308442896732757037988739726313420715460183437002938370859653623691142772428112290449527902150015266782023289, 95553646567278787431421345639666160579907651716566934504959094459252876228691158681346276907803331435656008897815445004786982789629390434568728330051673479890579373792897730765352397865644488953521570759689150647722749488270179235258138345175816456092572253110548429114657355949408334396823788589025827178637, 26067116431797426749060701212207589051700179219536115031356908708047986226297698271276682916954556933962692227953148092178850555138335826361941959937246233191820754258895459940855486169046046510421042478120525872632328452127788075196603313415519358593952390703445130614593530578386874828329012074483472738410, 22061640343961564497431351262022815872987892773161978446806737918675600062236303477119646423265660086545461532392990382192129555043513365989578952027753822772446973663222652211552774541439332939673193392602161876724294916322225172877631874427569286252065287545860236619432163855797540887863071138384434549414, 70523545483887465240922345944357121230998196374195918851987327782401037120553279764359758417282133022532866945794597780698796654206498550187355008942414476093688656417079885788102046613772304906291971230506642981807275877309660128822602926088445234263876371627499409104120730443510651059646136044607774228983, 64884041989815215457445236097574217307148186641499101321867352392682244709795147413538234303244457659629303107522844568466213139509170328495035600462595742570505175561056017503437152277576933597524124530857212041557816307946643306978081928380090957954116417958745387868202406128343392451348248862495051776738, 40571660848318401133829206165925715361841787088154245825284865651938541241358630793148637016297215714799170548444484596776148255091239594951136575941584191591834103076419524359824077266305472343169122476353553934492982851878945864029994071533106421703227708542130525925475467574172048503484266412587066465000, 75826768561193673536161156270928420737015874041460856924012162021865796486662926727312256736260756256321342019270458413537408956037865310393338770397333149643405353890764661324892442333358343588844377274367605886546086243482885053996947862093643394416744244349474034481091249111617647346570225300846672579989, 31820222617592393409640623101440007993525378621312599436703696089377323275874475531719668112703712822146104456151868178057853188767705801076104410640671067665885102177466002556285857962425619453551881938418992431104482431040904239957013496866510671563380766103589865764039515981655473776275628826589003174736, 73140449408913890286444266569999611122742701865708451428453473526259869054931751870568718382564873188419512629290670645004588263205498276740801567317957693699601002470405898007758396612883751951552675569982513065938947800395835444557767713613943138384903039944207241559709952115323108997315761370041750889841, 70940206773684982035870305033509174591184242604340941740384287270664563833408230493202877842609512561900215938616124988435536470185945783416149543039406600195663207815747305431166875383830158254254333207530520732405915331654092393566290744157147333858893472751216675067730708934104328278086756470627618179242, 60472177573531948032930391849707471715892445743105570264628191655622639691466416300105833022027889129135645813676281134105947543701546762786323898791462066866396910562109837228689246052472985588374940328065260684846484047556233059644579552971600110118393934799616960897174746045194385269666768999860896229043, 77769304165706748555349747127960641509040451252902042160290599163290350785942247069910575580408495269399275104482341003819921774507584937491022083042468401988959232328898375206049535646890591787735395975349638901486755555861360401402679345806011949447457203622044089969558387472906615572361597170252493909669, 57727897672270321703329491301181569263142152401371989070744821370064934010467270116886562135741362811247784578425353886198220239755250180965762467299987848009228592042868202476532675929961322310225975782196899792028042040528393200552092988200141012780607801959981540460476827572381852213577915676482409072892, 64118704483922840433629123236943834030776646061476518632103909131508675351647578796624340483288005328797526181105444264317087932559088294142016787673985907390264849030604851466343729747804594349634829519891299846094862428468507341189069168703283009373388232686725460055798365442714638712256001034103703026598, 24515868371941943096280797252866114517805683238673671666730478067107976655832446823292172204627550024187989465275377452123260713604777857365000503836768024145997309201735737827332121256580654756862670553963847260577936194135380897252920879555966541475228664759766000035647004031535364268926403429336733521263, 94517318198707920307223212268077760032177471217225608884450743535092528607961043443656621516978907166209968027867647603263659772954735361697776253277508619658112491014034475864963290373083591408547028944128975811335843132978307287731048774012147594502160365463515352893223713702543966280436327838660723887287, 55111075863190981811706971043942201289260364255444217894889458482636233484100502949929016249879966934321094430944343700758312455332514887483879567391644230253415340791700188250317320732103887594134422299918918504537120400589482173987790207508764720617373116688071569866644024030094730030985609747720090498037, 57228067976237568059285578074634617185806689072499557858971504582950826470261671355559812788932624165244847707514709014642601903252658756698711109155039952897548153063929435654626532684874779888029661781656711818004939443102551324045405469317799870027730890988599954517638609580938997160500947124784999492500, 90470901368380768956970787764283037884174127388373648583321419402266927007200030989379911136467637789720557032651684774942495574562139752832691926710279840311615102798080407926980880746343057189041037791019392206147409103306016047298521946590670352899256670685320716560229151811693136175360414829327840388849, 58306925211163911898597855984581762123553351725206199890269558014672761387587604035264720863051338381948970768235539121391192883592964234821589497308667426000587341364965118867588142638414479685901805317020822908030311892610767772762866399534486270040435830101316294532761183819108481131828059689267560894704, 83717202089611102783317317507752155470795125474872889021489350056682868839565697228423344720191722603520519342313761799242795246377232107380906161900382021419419038917703677808492033180813805537964125579868205177602438647471315310580843350339628349661062665020863618561944041825003492403886466556971432580148, 4074902004657669976054393732010520223606536813168584928495732068413945082609910265247021909800529865351540385538899211039836175638044161230458653706480423635909685101570015025281837635797674801348100121631060016933352304205236348522378667349539270955133473058270119933624138629669050904877608620261225380445, 7393250528085878410545820252557188333523248338176997471311296885403056492960154103816976205390670782268955948241688203364931084685682380441291872604634462905828819559459878098905183167657930193000465883738276931756815237719483507669347213535145558780427024163156061058981183004722885394253903896061594454648, 10815420069464099503209175409221439324495683431327837796484295065244681313525368680630230557097132982820543149291566104450010584083108481972630094244781200757179780336049710398737530916115194397169103717463479166157813852350956742710724890002131649695740810031074210473253252616337512311779650111235879240336, 81993457089483626582998919148234666997044513971722405873371890750401617254217972448284846250693491059007292715564545754462273438241841114431711670419176099521561648258453839832905493691843870581946713337678121253742335215010082615695460227373444235024689820272318264322295946978691314968981212039882239112268, 28327646182133002940208451695051176460120729836591104038309330138656880523902274894501119027771538293432328059870466306237001736000371332316585896462634908390199674825694815594828443769061584837579536134757420875967753644204009354507469088246303301960763080298826738589964579466852006262729539462247063026414, 51856936321390566264998166135588160171355647354765243075498547279150269069984585969159500030918141233538805048877004904511876881993268258989536908827690630662064263326562909179751548772489175616589028464187459207763675945673821185907423699868807435132507945924579416930693385948587985477852521912497446499628, 65370952498037212208538158357904576235108000096595988927666189761877893986781630184765786287299640747385796893669893451025892598956559477729299291619809149069467441016883478700158947649897633006816449874010825415404596694751378256610744338332371188859851849350616186475793908538304180776259114113015160394195, 81315468051202162132034386425619142461421235031231995747020508891913220976180934248664460309159279870202514296112632499515705006752370835229572954889176743130353114975985183169133527651244684622105902328964772351683002604785774853712119930623990761783315399687808555169698653829550886174962247471073310062131, 70329225954916503323239370373653305121202037955023724484062668291393792043974734680074550153402596256216825405046573031125563962464285260565621659251844622816416707983107082993186857113865896680355848469529683525457247220906188627776475559189358176621140327550868984864550737293762595180635321902163613017817, 20343084559250623226121792873139285571929372091281389816287065103094377260133964722974039607502970612897183154070678124648798104193493980469575909144734890865388964003525248095757970959754904421396377434482439165591393267049358546197184083071422042521225749445576328046328103556928817559097522864369441887000, 32959286087397465787916307079828027914996555118112580605622435415429780317773250595584589138046518794177055886377016640001089382843845277598719063211900101144776934144453039318791989276397433150613569225406488853037668577365985336941359013267959729256716362343171333253569444357127308104208863163650291508663, 106468354349094763907610636582967500445361568187006970218096795102240969271092303630251353090137264356069099391343749389292396854734876295998652794989410898061025267023460567509999653885089977080703072006682288808415112815610089908489273329545938766372484700966821536388361361173122671123816919186794887327082, 44829800833953549096952319911888712500644387571208408148080631655053554526713901948755066476282008316235731225246967411258474245942648609469990172867750391185282722631608580974713336283219464273844147343926168631863936393069595267085185880846480557450332538162161327783679588809501636321488808028621265880534, 67324486287836631009110215751885333692349625417371900181730596357941876624455695254629108176026643589064535599600826005978131482942302875385741853272065966299476891892013402193734336125730503379574570250627969021770462305407747729277163692253502334380483473589134154775875053691372296651030489596314658105399, 55915919720195227201656784155120999861411209527117523545006066295188548089917830394945974572707278988844450378825437399419505312175567310079535856798296286610463284017426041094056558979883262964632585529466164095739952231101179065180656176785516757337056065861124320969500112807427291728118979753777158910364, 26825125097714955460918923635046853983199294389109894969602347719515101024144780497839175629778224814891126133381973407150361185266041516009516573191331668630432504752523976571948319351563764914067483269276817380797869080593817921510600133313966844869070398230952129841215357336115604431435046724140348514897, 74732895402067637117051763515723176763376528133932531713291068711817729436076325948961855613161146013721079185005731659169133112703459105584436602235736006955275572295635102212988513270770376827403703632778433251222620599879918877326085154580953574951338917745117729641041862342674654803175167444165455876219, 83180530184585459989663770820361071077706254270560927339718652397417095501848005840837273474006917374531117720783387554016427228870847738413965938917962649355206663954275867210368122925529862127143124539631750978008945303029431681795855839813301114833172999399883004271787713990543343652583164481158268816196, 100999663433420636058400970774268613084869393812433040694793835428514898958701012424489453735031587511514362185482147881108276781877327160222804971775626987450784020334759062550480875158759002507200430603879895168053048193557829711131592504022604361993786610608196803063945239980616765151259150491286764388247, 25119574021621990958987533513651119858833599199270542657090906846710905933587173801773394356069353686091074727901326994512720306449872294604133716551558312123387401243787380978490851003316572518835457853898610416366345550988678537865932303749728955892750008565282815851801094359547478656489520870409879905825, 6504958979779676386060703257086726169560260722887468692746248939725763992789973673921687540275594617611213902852724138200625080688338820511560697485436293190900601036193353562381594155429995153648179202392017348166466811851056163347971768267123391918043470059570596604042681729563498805046454453638568582798, 86980106233569070713268104813708659349892000993885004966617532466340732908535510200584381691034317599134777698921871202583601718001059887680903275471770431950850571651499817219980275969550574747997247965505138618838867451051929331645528771255405172456906053855845542447373341835685198148847090833770827233446, 51503125416364029724480954307976385033193954176924554397093962003007323284167000031893238563299626344861145061233696769519471479549777601235487589583782553069691303360152641725406095309112744075892743968040592992127890157477768710458407134816285642729248491956134443249239287951043733907353765657503363290331, 105161138780191708349702934602323792116067605247442977482077537885172814672466845494954857521302423170470548223185623238385234181642059987531338259292487901442312319355014806576895296129640434384762956414531876120986094803925814225601810208606246581917987580440817233312668764447994283934546816951824766989631, 71171749260166031891641008013539072438322845605575417680599077801594423844328321759116704147623291265587359235338701498184766532023648702503968330997455331395926328994746232284229780950231220885242455324662136971984503353946835949779890203189915203429814842030280702104874329106146931246129407838656772586251, 80775263488334861244501793103603094719894208265769334812752726216961463457283073218342282442524712192120349933620543456253637636990768692386733959327312089595897273988293930169786318077368419313882621864928789789717627970859479702543883305142451628977327320218827209228002206703325776608170553184630615190480, 33605819037062094048426172914790277446010154390674443728186735437036117128588515430064943511137069762565461812666202966286016287601981386888275814740476926627512474869163674472856407213394423774309053758970646248752793826440340665447947553075039799688699053456011019708855919076353452734016920888829070865767]

L = Matrix(QQ,len(es),len(es) + 1)
for i in range(len(es)):
    L[i,len(es)] = es[i]
    L[i,i] = 1
L[:, len(es)] *= 2 ^ 11 # N的最小值2^11
L = L.LLL()
print(L)

xx = product([ZZ(y) ^ x for x, y in zip(L[0][:-1], cs)]) # 列表中所有元素乘积
yy = product([ZZ(y) ^ x for x, y in zip(L[1][:-1], cs)])
n = gcd(xx.numer() - xx.denom(), yy.numer() - yy.denom()) # 获取xx,yy的分子分母

s,s1,s2 = xgcd(es[0], es[1])
m = pow(cs[0], s1, n) * pow(cs[1], s2, n) % n

print(long_to_bytes(int(m)))
# ictf{when_in_doubt_use_LLL}

浅记一下

测试不同的N,发现N的最小值为 2 11 2^{11} 211,再往大调也可以,只不过规约之后的元素也会增大,最后得到的n也许会是实际n的倍数,不过也不会影响最后结果。此处乘N是为了限制规约后的最短向量的最后一维为0
也能这样创建以上矩阵

L = Matrix.identity(len(es)) # identity()创建单位矩阵
M = Matrix(ZZ,es).T # T为转置
L = L.augment(M) # augment()把L,M左右相连扩展

# 一行解决
L = Matrix.identity(len(es)).augment(Matrix(ZZ,es).T) 

感觉这题
和背包密码LLL算法解密有点像,所以拿来一起做例题理解了

附加题:
(PS:只是单纯想记一个分解n的工具,所以过程会写的比较粗糙,一笔带过):
题三(N1CTF-2022-ezdlp)
题目描述:

from Crypto.Util.number import *
from math import prod
from secret import flag

def keygen(pbits,kbits,k):
    p = getPrime(pbits)
    x = [getPrime(kbits + 1) for i in range(k)]
    y = prod(x)
    while 1:
        r = getPrime(pbits - kbits * k)
        q = 2 * y * r + 1
        if isPrime(q):
            return p*q, (p, q, r, x)

def encrypt(key, message):
    return pow(0x10001, message, key)

key = keygen(512, 24, 20)
flag = bytes_to_long(flag)
messages = [getPrime(flag.bit_length()) for i in range(47)] + [flag]
enc = [encrypt(key[0], message) for message in messages]

print(messages[:-1])
print(enc)

题目分析:
messages,enc就类似于题二的es,cs,故求解方法一样,通过LLL,gcd()得到n。发现q-1除去一个r的话是 2 25 − S m o o t h 2^{25}-Smooth 225Smooth光滑数,q-1的素因子最大为r,是32bits,其余素因子是25bits,bits过大,使用p-1算法时间复杂度过高,这里推一个工具gmp-ecm,很快便能分解出来,使用方法见文件中的README
Backpack Cryptography【背包密码】 & 例题_第1张图片
取 B 1 = 2 25 , B 2 = 2 32 , 再使用以下命令即可得到 q 取B1 = 2^{25},B2 = 2^{32},再使用以下命令即可得到q B1=225,B2=232,再使用以下命令即可得到q

echo 131158523227880830085100826212925738665356578827561846263073537503153187073136528966506785633847097997799377037969243883439723340886038624250936927221630287086602285835045356221763554989140952262353930420392663280482277832613695689454662506372252641564106136178637816827646124189347219273164844809807934422046441 | ecm -pm1 33554432 4294967296

Backpack Cryptography【背包密码】 & 例题_第2张图片

之后只要在 F q F_q Fq下解DLP就能得到flag

没了,就这样

你可能感兴趣的:(格密码,密码学,安全,ctf,格密码)