1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| from sage.modules.free_module_integer import IntegerLattice from Crypto.Util.number import * import hashlib row = 30 column = 1 p = 6897108443075981744484758716081045417854227543713106404294789655180105457499042179717447342593790180943415014044830872925165163457476209819356694244840079 rs = [12844634549263053228759749264403637022740290008286987401585068952741935277415527678380021212624846722242500708422759563558995936977274580301379494195702461, 12251634003683452916928102291170339939586644029776192301741341674585154859358419625191986830852794085541953563738986709807899575511700135958334229151930861, 7051370666077542197248638013011793824477073777322219545882367881807130066168444134964571398112151848834032654978368255218649720738040945429837692857031957, 9773046862351952930368505593284546267554571295872377323111558071278701231472975791962979256551519533723988556870551885073742407630481198192389750289392107, 8883776497660138308720006912582738672888752344326928153810910221453595077711284302041512529457450211602787210761461172326429880594024187025419873043435877, 12056735137145460036580841038332100311160368843873164649606343042416896898793233249873902218683966283969721460087390120622254758027779960740926123005377571, 8819958747150954554494406068232243249186433676383469322817152210037563032056202909377825740775383087605647374150477096718956454225946093710691864988563109, 12246023449098354751049599873213988024512286270964608502444597112110163392131757813461977030270733012385926751192637938686124570227538910606279104888073013, 11308837998867241929817950595621831002334468993828126438599805989088017326675963100044309448653090403889186401929445861220402556074702741108929442867300279, 9184622887414209361516593101129556569811888214607556630094969763910426953786020755838094184972397480276666170685926425137063559394969166216392939257091541, 12896400069515890897430087815982545671830645201023665112429779640768899091287291452408369445919464144390726200808875066389240126909811239597092893733457339, 11227025698697471809912850435140886785315702278826761054472525227951791647003561270585720797267604996360933395122286757099101227901032364782594523739698877, 8162123490656317490361880020667919072708091053716891870691544217490126444997503404094174246087938828993696335191488583306443577208796794274099282013427247, 13366989889442670291461262313757977600095962057470863475519088648267301129719953368943419562144276679400967122727554764013132918505564677243979978807323041, 9920857455945408588203972193444437533164351309299040911469275059092031755811492460585653948481522995557801781838215407648572999358456612525812067538372579, 7139402473546047825312503780125417567716958846513076797328672521987900978293260385267945187604725349720103672258987935569856239987227455748213833342843243, 13108142660294572752252393081421368493392921884487755391460006730258159004638343897340537616297811742032405724656497443006056456690449881719305597286675631, 13276762958403786077380090195631980415297280849950287990717193547481553124160398455403123819234755237450529090601858784999113026218918277529515287668651121, 12463094640052886550696551772104539361264529587569204472038955376345085195998921095774583176899949596998985033050547755235409943131811058035802010421860899, 11307743131694864808301935844724645695851330736969875190167422024500753079857478680029193758960169072890576310607053767920339034290416580654771095674487943, 10053742503547378455068966704402695956702795408343604912294923217443553169726438945982031485796964462946592530592946335569560364464958066521486506177193131, 9703695763451799125258961776229325510814289358679213305418559381901496449849584244211834872313767844996255556721041007654625153809128987422992102292472533, 8148189465927721940294369879439913703690047528695196368949823197675716174991296513758196009346701553643721225250628151384047219921709201619262393792138023, 9114150910964237818418367840207724528917302406836157928223872622442928604249864486858755737149640683259834299165900696585038569188627682022002709058902291, 12273514376180781903469287345188404399033432117915094289694407562166649079228640510678711431664410226301556172582177240184695103942141430877677144285616059, 8355005721684425514882933910286584148305344580589623112959517428993968438533866906223777778058096962333203237111245328436600994120168924143849685728268811, 8957883838807471492147480816683526636019698464133185237668243268667169800811696770484487123560197988448434475112352005768286417529319182162245840523697001, 12168542584724814356632409768687396920143300559579648963851924568387314914334359305942685551210180448419674060219496395116081866784918059237133414041227833, 12285935007930825571672128346804313607196190465690759870758278705086034778808662886056460827935986285259185071514490942831585313190946386878622608868345563, 7719913817859572377164973343651155934060296607908537845256755472465025202751239980758950094865067751407889569369974011139801401586939119147773466111699913] cs = [3911325901261770731066343727353093385607196883601022244426857460074338420692610012414571623512152485474248169220030587839849722757773859682519433853455847, 4198555117325325874584019691418573071733167640213933749582347442518997588452211673143722179281773602455507001395983681009769848414007206268682184816168744, 4422173666634983234895098798813962037875417568235708524339826709271381748884936178371767574064794177416615710120223914725873239836121654705208614576413533, 3540260422555697887869627546208164711550015909378340105077652177481959576550678379723450981807556863572610759824660630418670546203733170058626755080797998, 6451498467498935201092514865627931677091078787997097414208430992183264950579022373372254486595458117887305393317663712337699331503725124287017134808484874, 3439629581963524351810430910737336124616316641656190641248434504621774235943514617301857917041111617104850245148746427180069743940612560718213177903427306, 4279468191481832212496939242093486044278976937965085475567008228061184947513156012369586970486543083130565628906296600553024574099481246534878242920637212, 4102135455518061133919027670571325279976222647984452353051395864554309521223498761823084717077102213648612826513661629599971609555235760152049549057234342, 329051927890365028889097463563711966673066795688728876214731188783168691555262156515161429328581094087585127929869064685419149676592073496155898360311360, 1674347209896897571502352451063188834938904430329951752111921115230349947823188121972980025563878887201507629419811736910690965020923751424101521816057970, 4779084317811375050159574994746297486592271247137823471375199626788956576998627181220489952507937768042501203098391966702297812537463211799837921684467541, 5240331815784322792144549873873658636726233093228415489098002982220769676718681132737794994708716389174162820721646744776624413735318240597745363490427584, 2689716894922604875455207695253665212853470308341743040957367957727155614199743562225147359614514189877983156892749669804800163252617480446565479990148021, 449708769594599088851244243076921016853502252396793496349534051273454215985560340288452398756880916680293627457774430655982228613348249480600180821975835, 1584603978331289335352997151059666773277943458357161051278658090420067023680231414255557805410288144092653121568766136372728095300982743309696347031121424, 4874260053151700374809337053763032489184725334196495160358275038586824027920238733886703163018450814805937363825223459277373073591021082276610135118976834, 3524374131362906900545297291947110177298862564718451821839794960169356082042548386553363480921097452902723033854749443288682983558847052843293666815425196, 6544123591499569232021913370293570477776709315008783531720886545784773471486769240711262562401683145937715612435213816372680189321141928790509490282629891, 4873861166228118967099569086478548167127431415017791678812419676791754466935832034870862000658789609084166891933970013849850146718379819943737269970654866, 4100817874436703071716655163972145036104985973164830547825929590871920825981241934633977227547934514142660786061291026657802357404024236287955309372489516, 343238276681348130286495167739162902430650061145485619903964358840996341335935043000395056684771452815629410388891486531126938900311458948803147120186532, 2683710724350412998770392318832434885304538325033159937379489319924346689197445720734209841902612235485016866254994045969716413020197296428323832404151182, 5909464641105704179999104311562416363090166762341644691188169716182958971270396007422581429813172933930581475771306034495224054972725230757675444731953480, 105593489999747649490909471306354863316673821363863362258853043970534652401274789197677558215188249074837829003335733211890211648501689656345824858507373, 4992379366542645691375959247465888889778118153982142100956809440855745659745235576280578316185469306620017845690312554043770651058126536040173113949524396, 6533456398244789907636779407045515567135195474284185379689518387558345997627435421582437390053234675991361808532278264077968540197407743744279106871716267, 5169360398767270275853790242315213671633880428212603766301308853363063092609582572957561138022806887895634140899640025570759919257615537375706008159680239, 203310740924699994885931266978520636166917734618272844754878785050509801614513144739164450834936178065792112797202959106365282699245578309060905297742706, 3143563289239398127009575193211845399079310618985464994769603542400451633289266080869317336163844517539211542909055869608349639432145332113320465388067087, 4016252180207572047405081190649590978593306403200098541033213590567723751195926093369984531729148621419589009515870336049849542537363832071754623330736088] enc = 1315637864146686255246675143589215932218700984880749264689270214639479160648747323586062096067740047809798944996253169402675772469028914904598116394230426 ss=[1444695997149492190325503358748907180896428744501435959012446197804471238996228693169795874437240656170107638535797004901, 1710106002173551002425444054140394178956124023376657957303230765508377089074717746465653815466763654648249527857825569029, 2055313300434754785614061534661234769322543457763273072311107482412288908659564309179643251560799446038081677516598963457, 2529893752644237783483797815212946495982855556933204694011832676840091910035653685416019963608166318536749345810876453771, 2529138628117798443470937234045077945473928204906198619005287365776711527156367496383631463561676109741862230251586143377, 2262110335813452474430699656412885234503426852605393691899881796634211611052330735315181940758828054398894455017113733227, 2121889637450522029350552877626679809458662297228865521642554573119772081854990312156453774280770474194162502389497160327, 2529142548180563996394639773713532833480273727306125086719935756161917184911736806616267916075735106590544780324467585621, 1305329295536404276170448056500700469825272137020946460143963140200353157377196505556280067991447170875038122866415550101, 1552852098086060808737139123645915631099187828325664479373402352780546739207516108015428990851489119938061929818491926611, 1791104999803661806603955436215385390826508049741363470424060526111730352962999232609779584743853648363257676913487057757, 1899442479566327507595284152198923816070020299280413329026247522765072323119884753949208875377108001657197781777679291871, 1453541167592343188338822229691660044736912312708428492831729087255748263545506909467533920598337452593734393704376978807, 1839970255647517988033776502403781838348352314214922889121617450060735210741294955388142534936822274443404021805803333703, 1912160881436961130805854105580691921433605240682869508192604979038043884642959974735162453664737011078276186132003267537, 2543565462805293682479626661848772865479251641709980622442153819428251437133653745822570184749929330644293218076375940297, 2483083156651635774502843350477278413827965814754343098791424022880695703529884053363101276861390834327295178464586090169, 2003169101542395781256109850378099343661620656525906226012777618825679882882750121108967747380040440812305500025030472703, 1495306582962644344763635303973344887376634002664321023099433581011613385215984473933899539552759121449556619118213926953, 1475475640507405435263556560927151140961838107291429033550823738085598452588645697451453622811307836240178487270066202731, 1585296258758653869729779396633477768935787077644413518874111953612262499991020378795132976171831363612740565577673589949, 1751870981277054153889475362865184270808672777814739187606382420502953249942908536146994775691865449715881103437411562697, 2229385019858443633247567841668512226312552028112872103049568509800432132563139223600501334488455486995847787457023057543, 2509522757833822636876029295601980862244548996153272433687613093337042904569711801805004013230589715380175225102878772429, 1378538686540733061307578409608662896663843431656273949667551098986968433993734090533525999772678987014720821134447883279, 1615745464810222578868113006917238415594773977456189037245148298498578637163332628299020222221658719347173123797381998597, 2064151464294100789516756482456818746190321203565732371731029967136921201410297069827915522687620140104021460523804416353, 1711545496198775131056637405659683132417828376528113270088200929297233962942202546621239829931304134031695960814215807973, 1455761879282217336477189039622363054351048993520687962567785409775020556422692091664440576775863933336882803763246548923, 1880891423536411979565374334582143474888275578342367502429189125513290153271930355071969557105539679922217905887177950249]
prime=p ma=rs res = cs
W = matrix(ZZ, ma) cc = vector(ZZ, res)
def Babai_closest_vector(M, G, target): small = target for _ in range(5): for i in reversed(range(M.nrows())): c = ((small * G[i]) / (G[i] * G[i])).round() small -= M[i] * c return target - small
A1 = matrix.identity(column) Ap = matrix.identity(row) * prime B = block_matrix([[Ap], [W]]) lattice = IntegerLattice(B, lll_reduce=True) print("LLL done") gram = lattice.reduced_basis.gram_schmidt()[0] target = vector(ZZ, res) re = Babai_closest_vector(lattice.reduced_basis, gram, target)
R = IntegerModRing(prime) M = Matrix(R, ma) M = M.transpose()
ingredients = M.solve_right(re)
x=int(ingredients[0]) print(x) m=x c=enc n=p
def r(h, g, N, p, qi): Zp = Zmod(p) h = pow(h, N//qi, p) g = pow(g, N//qi, p) ri = discrete_log(Zp(h), Zp(g)) return int(ri) m=x c=enc n=p
tmp_list=[2,3,193,877,2663,662056037,812430763,814584769,830092927,849943517,969016409,1000954193,1022090869,1048277339]
r_list = [] for qi in tmp_list: tmp = r(c,m,n-1,n,qi) print(tmp) r_list.append(tmp) x = crt(r_list, tmp_list)
module = 1 for i in tmp_list: module *= i
while True: if int(x).bit_length()>304: print('fail') break if int(pow(m, x, n))==c: print('x =', x) print(long_to_bytes(x)) break x += module
|