jarvisoj-crypto部分题目

1.简单ECC

题目比较简单,参考代码如下:

E = EllipticCurve(GF(15424654874903),[16546484,4548674875])
G=E([6478678675,5636379357093])
K=546768
P=G*K
print P

将结果相加即可

2.rsaappend

题目一开始就给了多组加密数据,n也是不能分解的,这里自然可以联想到rsa里面经典的共模攻击,而这里的e也正好满足gcd(ei,ej)=1的条件,所以任意拿两组数据解密即可,参考脚本如下:

from Crypto.Util.number import bytes_to_long ,long_to_bytes
import gmpy2
n=130129008900473203968454456805638875182255844172836031362469765750555629223299054613072677100571707156698316733582683118539756860001556017029333867329591302318262912728008327902112481960175532302595162289611406978353816368008691640641366763939266242207191229240305820321249712345088877729541037319788659353057396178127928848886417880913823432701577855911982710310391664759040416918636673098245499680559140960154217578440590540485803953844560093151975252604098243460784073934982164384904788470380402066708313893480356219937915540825156266934523595689350157227336528136089157698775968997579723271988825396396444999743016035145444220925369592263295741687879468786947998534483539986779457827253891091252408156073413533385415338751818544323853074296042153599429749378847870780593975579477549218822682233583377677693108437331184962345568217859524495625257015837972947971787321584159575618388588687948368216479955807108888453821700067186732627409832722329355336479016104249514839541606562090752437124270651936485389358065775555250883907067083447197860848471728871909151915883316674512739238840179296263390441457949281128267215916340163366686542160467601357340644950755337706786366316621293666173843528346692669268972961669116101104865152273
e1 = 3493354673
e2 = 340864687
c1 = 95302089605615051645253770338205531172677353498946580682786822045513597212422921981567826452072575982096979591435896082106066368909398510427324124083956090397824543655853708684901332136907086372208856759943292176759073194584568350898675282883285945088425893961769183074018286761903249180704401358403273776903672507958464947244563165564687651203497198317095965140433811056890812018746508121991041040929574993486548175817290824525606551459788553765629416110310419007396912225733599205599864440826319234419035248234403040065378375700430311931418759746223148198205862641252459687694589780856855757703678024583642215076094232444641853081607984934672271461513190437757388818064739151861157236855430066735235471068167602037785718403200529481153399754491247323829122718485697100562237822159608309949585990842201041193231738706398444530233533281604482892716292766323711237917277799500317596333142843576977429802405873159965636003943698854699972663575602383960580472190300576561953143218321528070200681456278974433060654128626428761278953024384187213765974659768657721533448706022075747036347982370028705538843276631102928500802573434484354218539824751579164697748967608238067706842975984077663380114254296902060435479795741671231918448537178
c2 = 105918022590727868761989308441554006325741233318901416621101439141134508212362387984949614887131575960019253866892976283979646611794365370050551871112439674346802340152058463892106629344277362169322187627579360245792142005899616101515519718660483000821415412306495286717542069436530262341500852884860324349096274655178057271529986597578695272732947460673640986877589225588415523871081101162696385279491410034057376225511693022693861779342120101749193614060384925056132593068290214170342896671210026723193650534803792328917982049779674425511275821311773130342656939142955431868128759911406827872932920704284125816103225607727270365652734742083302757644298457617564597237089509337896240249999242834787525341715546373108420197569425092674224333823552432226153066667988737348643469923827028254712179077001007265954488404167147591307425224250970874724864947175449960116685682348915647317191880538777148647712260093008241728509225817352093441924045801257015598517963598799676359095235231066752986688784477694024390356904157694178691411759003004184256950519184836209393583431328640341243629167223114681734264945594931213193459079614652400888215324779908031661350565230685273639666615465296133672907093946148188967451042301308884510424218096
def egcd(a, b):
  if a == 0:
    return (b, 0, 1)
  else:
    g, y, x = egcd(b % a, a)
    return (g, x - (b // a) * y, y)
s=[]
s=egcd(e1,e2)
s1=s[1]
s2=s[2]
s1=-s1
c1=gmpy2.invert(c1,n)
m=(pow(c1,s1,n)*pow(c2,s2,n))%n

print(long_to_bytes(m))

3.cry

一道Coppersmith 相关攻击类型的题目,用nc链接后随便写入一段加密的message后可以得到p的前180位,可以参考ctfwiki上面的教程。
1.知道p的高位数据后我们首先要将其补全(具体原理可以参考ctfwiki)
jarvisoj-crypto部分题目
jarvisoj-crypto部分题目
2.得出p和q之后我们就可以将ck和civ给解出来,在用aes求解即可,python脚本如下:

from Crypto.Hash import SHA
from Crypto.Util.number import bytes_to_long,long_to_bytes
import gmpy2
from Crypto.Cipher import AES
from base64 import b64decode as b64
def aes_cbc_decode(password,iv,c):
    cipher = AES.new(password, AES.MODE_CBC, iv)
    return cipher.decrypt(c)
n1="0x1e61bd7d6b4e15bced556490c7024849c0f85f6235d162c1b61c9e613390026a2a18bbd702aed6bdf6b31561e29ff85befd03e155a63c820fb969ce15f5fcba139706a735a6b0dd277a9232c400d379f11bbe29f484ae7c1dcaa759ea9961cb80071a949dc1393cf6bffe72987938e4e7e4b505c872002c157d470d48fbe7671039a5fa2d203e8ead161f7b3775bd74456375976d4006917ebdaf98ee746557efa8c8597d15af125adda404218d5bf2a276a9b57b762e6ff83a0848b12b4f0893d11246bea8796a02086549b4b516c9d43f5a4e5b1ee47bf606624edb121172ca4e6b4a99fc348274d6fab89cf61a2a9ed702e0ec3433e04b4d78e9c355b9661"
n=int(n1,16)
e=int('0x10001',16)
p=int("0xb3bd96ad9aeae21fea641c607fb2b08a27417aa568d1fd284992d0dccf22316b5412123208ea667d2af47ed2a6c71502f7214010b8ee79862194aaf434e935b578d2469d5fdf74071b1723059a6a8fefe16810bf03968180fae302d49f42ca45d6b0f2e59240e5f597c0bac6bf785a5df01da0b5b048bebd5b8209ab5d2f9237",16)
q=int("0x2b45a3e80f4b074608019d49752e2dccd5f651fc03b972cc0d1634f19966ef43a5c4081384c88f8d4953b8735ac56ba198c34c5ba273ec5ceb8b8ba5ad66c94ea6588fdf6dc38102845958b2fe3ff851df13d82582456c7c4878f399f7910decbee6dbd0b0d0492a4033f22bbd88828a470767ce8e7dc1ae7cbafbfd14de3027",16)
phi=(p-1)*(q-1)
flag="gtDL4J6838UGxKwW7iLmlCpA3KEHFyYBuHz5t2dC/kY="
ck=int("0x1df5438382ddf5af13f9b98ad91a4dd65ccca8ecc33cdbfe82f5de9b8fdfb52a9b449d3161f15cd04a0bae581f07a883d27c924dde58a2106daada2d518899a9df1c6b77daade2e5a2047477ad245282f8ef48bf884bd92df0bb3f01685c1809ed82af231c624e0e0064f1c5457229faddffc014bdecbb8b9f1816b18fb9b263317d832c32c89e09c6d6161e16ad679b54b6e1cbc7ba873f22fb5dcd5a7bb138d59876087447852d2771d6cc19a517f22728b30c1a0c2156125f38980e80f89a4a98c56e16621552b1e9efaf1205b1f9dcb50dc2afc35249b8e0aac8fd4d2bce0894e6def30d4ed210ea38cf169dc191834022fee517bd724254fd2abc368283",16)
civ=int("0x1c0d05d7e0fe14919576cdde207d8da9c158560949a6f62f680c265d705390ea419e371238d5bffd030f11a062feec712f7f51c4318b7539de90d078370cd79ab1863069bf9eda2a48b37b621d18fb7693e25da724a82fc30e154c3cd334841bc970a0e96c995169e2c000333f2d9333817d292e5d62710016c54de70bf04edeef568c73117d804e55695caf8dc007789e393b8e49a43b7b7b35ecf8ee7e51557d2e578c6f010b2ce176cf46572f605a649f8bec3f7d95d2751f6c6b7d06ac80d86f8f865d44873821e2bc26106ecd05cb614a31e4c8b3138662f0061f25ddd493c110200be785164bed05ace33d52e5fa0e21560641af9b1e4e91f977c44644",16)
d=gmpy2.invert(e,phi)
mk=pow(ck,d,n)
miv=pow(civ,d,n)
flag=aes_cbc_decode(long_to_bytes(mk),long_to_bytes(miv),b64(flag))
print(flag)
上一篇:NodeJS 加密 —— crypto 模块


下一篇:Deltix Round, Spring 2021 E. Crypto Lights 组合数学 + 推公式