2023春秋杯冬季赛 --- Crypto wp

文章目录

      • 前言
      • Crypto
        • not_wiener

前言

比赛没打,赛后随便做一下题目
在这里插入图片描述

Crypto

not_wiener

task.py:

from Crypto.Util.number import *
from gmpy2 import *
import random, os
from hashlib import sha1
from random import randrange
flag=b''
x = bytes_to_long(flag)def gen_key():while True:q = getPrime(160)p = 2 * getPrime(1024-160) * q+1if isPrime(p):breakh = random.randint(1, p - 1)g = powmod(h,(p-1)//q, p)y=pow(g,x,p)return p,q,g,y
def cry():a =p = getPrime(512)q = getPrime(512)d = getPrime(280)n = p * qe = inverse(d, (p - 1) * (q - 1))c = pow(a, e, n)return n,e,cp,q,g,y=gen_key()
k1 = random.randint(1, q-1)
h1 = bytes_to_long(sha1(os.urandom(20)).digest())
r1 = pow(g, k1, p) % q
s1 = ((h1 + x*r1) * invert(k1, q))% qn,e,c= cry()a= 
b= 17474742587088593627
k2 = a*k1 + b
h2 = bytes_to_long(sha1(os.urandom(20)).digest())
r2 = pow(g, k2, p) % q
s2 = ((h2 + x*r2) * invert(k2, q)) % q
print(n,e,c)
print(p,q,g,y)
print("h1:%s r1:%s s1:%s"%(h1,r1,s1))
print("h2:%s r2:%s s2:%s"%(h2,r2,s2))

1.txt:

n = 98871082998654651904594468693622517613869880791884929588100914778964766348914919202255397776583412976785216592924335179128220634848871563960167726280836726035489482233158897362166942091133366827965811201438682117312550600943385153640907629347663140487841016782054145413246763816202055243693289693996466579973
e = 76794907644383980853714814867502708655721653834095293468287239735547303515225813724998992623067007382800348003887194379223500764768679311862929538017193078946067634221782978912767213553254272722105803768005680182504500278005295062173004098796746439445343896868825218704046110925243884449608326413259156482881
c = 13847199761503953970544410090850216804358289955503229676987212195445226107828814170983735135692611175621170777484117542057117607579344112008580933900051471041224296342157618857321522682033260246480258856376097987259016643294843196752685340912823459403703609796624411954082410762846356541101561523204985391564p= 161310487790785086482919800040790794252181955976860261806376528825054571226885460699399582301663712128659872558133023114896223014064381772944582265101778076462675402208451386747128794418362648706087358197370036248544508513485401475977401111270352593919906650855268709958151310928767086591887892397722958234379
q= 1115861146902610160756777713087325311747309309771
g= 61073566757714587321114447684333928353300944355112378054603585955730395524359123615359185275743626350773632555967063692889668342544616165017003197599818881844811647270423070958521148291118914198811187731689123176313367399492561288350530256722898205674043032421874788802819858438796795768177550638273020791962
y= 23678147495254433946472657196764372220306841739888385605070426528738230369489739339976134564575544246606937803367113623097260181789372915552172469427842482448570540429192377881186772226796452797182435452490307834205012154495575570994963829345053331967442452842152258650027916313982835119514473311305158299360
(h1, r1, s1) = 535874494834828755542711401117152397489711233142, 117859946800380767356190121030392492081340616512, 26966646740134065096660259687229179143947213779
(h2, r2, s2) = 236574518096866758760287021848258048065293279716, 863199000523521111517835459866422731857447792677, 517924607931342012033031470185302567344725962419

看一眼cry(),d为280bit,n为1024bit,d大概为 n 0.273 n^{0.273} n0.273,wiener的界限为 1 3 n 1 4 \frac{1}{3}n^{\frac{1}{4}} 31n41,显然超过了wiener的界,而题目名为not_wiener,那就是boneh and durfee了,boneh and durfee的界限为 n 0.292 n^{0.292} n0.292,刚好在其范围内。
简单设置一下参数,设置delta = .273,m = 7
在这里插入图片描述
最后带入跑出来的d以及已知的n和c计算得到a

n = 98871082998654651904594468693622517613869880791884929588100914778964766348914919202255397776583412976785216592924335179128220634848871563960167726280836726035489482233158897362166942091133366827965811201438682117312550600943385153640907629347663140487841016782054145413246763816202055243693289693996466579973
e = 76794907644383980853714814867502708655721653834095293468287239735547303515225813724998992623067007382800348003887194379223500764768679311862929538017193078946067634221782978912767213553254272722105803768005680182504500278005295062173004098796746439445343896868825218704046110925243884449608326413259156482881
c = 13847199761503953970544410090850216804358289955503229676987212195445226107828814170983735135692611175621170777484117542057117607579344112008580933900051471041224296342157618857321522682033260246480258856376097987259016643294843196752685340912823459403703609796624411954082410762846356541101561523204985391564
d = 1493519932573300884636712093929290985070801830526216141153447882450934993737739146621
a = pow(c,d,n)
print(a)
#a = 24601959430759983424400804734518943158892550216065342062971649989571838687333

另外一部分,看上去和DSA差不多,主要是等式的变换
此时我们已知 p , q , g , y , h 1 , h 2 , r 1 , r 2 , s 1 , s 2 p,q,g,y,h_1,h_2,r_1,r_2,s_1,s_2 p,q,g,y,h1,h2,r1,r2,s1,s2,以及有如下等式
s 1 = ( h 1 + x ∗ r 1 ) ∗ k 1 − 1 m o d q ( 1 ) s_1 = (h_1+x*r_1)*k_1^{-1} \space mod \space q \hspace{2.5cm}(1) s1=(h1+xr1)k11 mod q(1)
s 2 = ( h 2 + x ∗ r 2 ) ∗ k 2 − 1 m o d q ( 2 ) s_2 = (h_2+x*r_2)*k_2^{-1} \space mod \space q \hspace{2.5cm}(2) s2=(h2+xr2)k21 mod q(2)
r 1 = ( g k 1 m o d p ) m o d q r_1 = (g^{k_1} \space mod \space p) \space mod \space q r1=(gk1 mod p) mod q
r 2 = ( g k 2 m o d p ) m o d q r_2 = (g^{k_2} \space mod \space p) \space mod \space q r2=(gk2 mod p) mod q
k 2 = a ∗ k 1 + b k_2 = a*k_1+b k2=ak1+b
我们的目的是求出x,但是等式中的k1和k2也是未知的,那么我们就没办法直接求x了。因此我们可以参照DSA,先消除关于x的式子
对于式1,乘上 k 1 r 2 k_1r_2 k1r2,得到
s 1 k 1 r 2 = r 2 ( h 1 + x ∗ r 1 ) m o d q s_1k_1r_2 = r_2(h_1+x*r_1) \space mod \space q s1k1r2=r2(h1+xr1) mod q
对于式2,乘上 k 2 r 1 k_2r_1 k2r1,得到
s 2 k 2 r 1 = r 1 ( h 2 + x ∗ r 2 ) m o d q s_2k_2r_1 = r_1(h_2+x*r_2) \space mod \space q s2k2r1=r1(h2+xr2) mod q
k 2 = a ∗ k 1 + b k_2 = a*k_1+b k2=ak1+b带入
s 2 ( a ∗ k 1 + b ) r 1 = r 1 ( h 2 + x ∗ r 2 ) m o d q s_2(a*k_1+b)r_1 = r_1(h_2+x*r_2) \space mod \space q s2(ak1+b)r1=r1(h2+xr2) mod q

两式相减消除x,得到
s 1 k 1 r 2 − s 2 ( a ∗ k 1 + b ) r 1 = r 2 h 1 − r 1 h 2 m o d q s_1k_1r_2-s_2(a*k_1+b)r_1=r_2h_1-r_1h_2 \space mod \space q s1k1r2s2(ak1+b)r1=r2h1r1h2 mod q
s 1 k 1 r 2 − s 2 a k 1 r 1 − s 2 b r 1 = r 2 h 1 − r 1 h 2 m o d q s_1k_1r_2-s_2ak_1r_1-s_2br_1 = r_2h_1-r_1h_2 \space mod \space q s1k1r2s2ak1r1s2br1=r2h1r1h2 mod q
此时x已经消除,我们的目的是求出k1
再化简一下,得到
k 1 ( s 1 r 2 − s 2 a r 1 ) = r 2 h 1 − r 1 h 2 + s 2 b r 1 m o d q k_1(s_1r_2-s_2ar_1) = r_2h_1-r_1h_2+s_2br_1 \space mod \space q k1(s1r2s2ar1)=r2h1r1h2+s2br1 mod q
k 1 k_1 k1移到左边
k 1 = ( r 2 h 1 − r 1 h 2 + s 2 b r 1 ) ∗ ( s 1 r 2 − s 2 a r 1 ) − 1 m o d q k_1 = (r_2h_1-r_1h_2+s_2br_1)*(s_1r_2-s_2ar_1)^{-1} \space mod \space q k1=(r2h1r1h2+s2br1)(s1r2s2ar1)1 mod q
此时式子中的变量都已知,带入即可计算出 k 1 k_1 k1
解出k1,然后带入到 s 1 = ( h 1 + x ∗ r 1 ) ∗ k 1 − 1 m o d q s_1 = (h_1+x*r_1)*k_1^{-1} \space mod \space q s1=(h1+xr1)k11 mod q
化简一下,得到x的等式
x = ( s 1 ∗ k 1 − h 1 ) ∗ r 1 − 1 m o d q x = (s_1*k_1-h_1)*r_1^{-1} \space mod \space q x=(s1k1h1)r11 mod q
最后转换一下x即可得到flag
exp如下:

#sage
p= 161310487790785086482919800040790794252181955976860261806376528825054571226885460699399582301663712128659872558133023114896223014064381772944582265101778076462675402208451386747128794418362648706087358197370036248544508513485401475977401111270352593919906650855268709958151310928767086591887892397722958234379
q= 1115861146902610160756777713087325311747309309771
g= 61073566757714587321114447684333928353300944355112378054603585955730395524359123615359185275743626350773632555967063692889668342544616165017003197599818881844811647270423070958521148291118914198811187731689123176313367399492561288350530256722898205674043032421874788802819858438796795768177550638273020791962
y= 23678147495254433946472657196764372220306841739888385605070426528738230369489739339976134564575544246606937803367113623097260181789372915552172469427842482448570540429192377881186772226796452797182435452490307834205012154495575570994963829345053331967442452842152258650027916313982835119514473311305158299360
(h1, r1, s1) = 535874494834828755542711401117152397489711233142, 117859946800380767356190121030392492081340616512, 26966646740134065096660259687229179143947213779
(h2, r2, s2) = 236574518096866758760287021848258048065293279716, 863199000523521111517835459866422731857447792677, 517924607931342012033031470185302567344725962419
a= 24601959430759983424400804734518943158892550216065342062971649989571838687333
b= 17474742587088593627
k1 = (r2*h1-r1*h2+s2*b*r1)*inverse_mod(s1*r2-s2*a*r1,q)%q
x = (s1*k1-h1)*inverse_mod(r1,q)%q
flag = bytes.fromhex(hex(x)[2:])
print(flag)
#l1near_k1s_unsafe

【所有远游,都是为了重逢。】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/427442.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么才能让抖音跳转微信小程序-数灵通

抖音是一款热门的社交媒体应用,许多用户希望能够通过抖音跳转到微信小程序,以实现更多的引流和推广效果。以下是关于抖音跳转到微信小程序的科普信息: 1.优势和用途:通过抖音跳转到微信小程序可以带来多个优势和用途: …

物流实时数仓——概述与准备工作

目录 一、架构设计与技术栈 (一)数仓架构设计 (二)所用技术栈 (三)最终效果 二、关于离线与实时的相关概念 三、实时数仓设计思路 一、架构设计与技术栈 (一)数仓架构设计 (二)所用技术栈 Hadoop 3.3.4 Zookeeper 3.7.1 Kafka 3.3.1 Hbase 2.4.11 Redis 6.0.8 Flink 1.17…

可直接将视频转文字的工具,速到快到离谱!

如何将视频转换成文字,推荐大家使用视频提取文案小助手,三秒一键搞定,真的快到离谱​! 不少草根博主在做短视频的时候,就有很多人给大家支招让大家先模仿后超越的模式,激起一众爱好短视频的草根博主成为短…

Nat实验详解

如图所示 r1 左边属于内部网络,r2 右边属于外部网络,通过Nat技术和acl访问控制列表来实现全网可达。 1.合理规划ip范围 2.然后写acl访问控制列表,在靠近源ip的接口上进行配置,如图所示r1的g0/0/1口上进行配置 允许所有192.168.1.…

机器学习 | 掌握Matplotlib的可视化图表操作

Matplotlib是python的一个数据可视化库,用于创建静态、动态和交互式图表。它可以制作多种类型的图表,如折线图、散点图、柱状图、饼图、直方图、3D 图形等。以渐进、交互式方式实现数据可视化。当然博主也不能面面俱到的讲解到所有内容,详情请…

Revit二次开发 设置材质

设置此处材质,需要在材质浏览器中创建材质,根据材质名字设置此材质。 代码如下: Material material new FilteredElementCollector(doc).OfClass(typeof(Material)).FirstOrDefault(x > x.Name "窗框") as Material; Element…

养猫家庭空气质量差?高质量猫用空气净化器品牌测评推荐

作为一名有着7年铲屎经验的铲屎官,我深知换毛季节给我们带来的困扰:猫毛。虽然猫毛本身并不具有危害性,但是猫毛上的皮屑、细菌和虫螨等微生物可能对我们的健康造成重大影响。尤其是对于老人、小孩、孕妇以及免疫系统较弱的人来说&#xff0c…

最新国内GPT4.0使用教程,AI绘画,GPT语音对话使用,DALL-E3文生图

一、前言 ChatGPT3.5、GPT4.0、GPT语音对话、Midjourney绘画,文档对话总结DALL-E3文生图,相信对大家应该不感到陌生吧?简单来说,GPT-4技术比之前的GPT-3.5相对来说更加智能,会根据用户的要求生成多种内容甚至也可以和…

常见问答解析:人工智能在智能时代的潜力与挑战

在智能时代,人工智能(AI)被视为推动社会和科技进步的关键引擎。让我们通过问答的形式,深入探讨人工智能的潜力与面临的挑战。 问:人工智能在当前社会中扮演什么角色? 答:人工智能已成为现代科技…

消息中间件之RocketMQ(二)

RocketMQ支持的消息类型 了解之前,首先要熟悉RocketMQ中的组件架构设计 1.顺序消息 将同一个订单(即具有相同的orderId)的消息按状态先后顺序消费的,所以消息生产者调用send方法发送时需要传入MessageQueueSelector接口的,实现类,将order…

利用Python实现科学式占卜

一直以来,中式占卜都是基于算命先生手工实现,程序繁琐(往往需要沐浴、计算天时、静心等等流程)。准备工作复杂(通常需要铜钱等道具),计算方法复杂,需要纯手工计算二进制并转换为最终的卦象,为了解决这个问题,笔者基于python实现了一套科学算命工具,用于快速进行占卜…

MySql索引事务讲解和(经典面试题)

🎥 个人主页:Dikz12🔥个人专栏:MySql📕格言:那些在暗处执拗生长的花,终有一日会馥郁传香欢迎大家👍点赞✍评论⭐收藏 目录 索引 概念 索引的相关操作 索引内部数据结构 事务 为…