最近打的几个比赛没意思,不是不会就是不会。不过比赛完后看到别人的WP,感觉受益匪浅。

先看一个多项式:

s_i = \sum_{j=0}^{n} c_j*x_i^j \: mod \, p

当输入Xi时会得到一个Si,要求输入一定数量的xi 来求[c] 

当可以输入的x个数与c的个数相同时,可以用矩阵直接求解。(这块比较简单,就是个矩阵的除法略)

当x个数小于c时,理论上不可能得到全部的解,但可以得到一部分。

第1种情况是求c0 这个比较简单,输入0时0^0=1,其它幂为0所以可以直接得到c0

后边是求某个值的两个题。

import random, osp = 2 ** 256 - 189
FLAG = os.getenv("FLAG", "SEKAI{}")def challenge(secret):t = int(input())assert 20 <= t <= 50, "Number of parties not in range"f = gen(t, secret)for i in range(t):x = int(input())assert 0 < x < p, "Bad input"print(poly_eval(f, x))if int(input()) == secret:print(FLAG)exit(0)else:print(":<")def gen(degree, secret):poly = [random.randrange(0, p) for _ in range(degree + 1)]index = random.randint(0, degree)poly[index] = secretreturn polydef poly_eval(f, x):return sum(c * pow(x, i, p) for i, c in enumerate(f)) % pif __name__ == "__main__":secret = random.randrange(0, p)for _ in range(2):challenge(secret)

这个题输入的次数自定,p已知,只要求出大部分值,并且两次中找到相同值即可。这里边用到一个degree次根g

先找一个比较大的幂k使得g^k = 1 mod p这样求出g,这题可以发现50以内最大的是29

g = pow(2,(p-1)//k,p)   (这里(p-1)%29==0)

其实这样的g有k个分别是g^1==1,g^2==1,g^3==1...

当把这个g代入到式子中,由于g^29==g^0,g^30==g^1...得到

s = (c0+c29)*g^0 +c1*g^1 + c2*g^2+... 

这样可输入的g的个数与系数的个数相同就能直接得到c(不过这里的第1个是c0+c29所以第1个和最后一个c是未知的)这种情况下大概率两次的index都命中从而找到对应的secret值。

p = 2 ** 256 - 189
poly = [random.randrange(0, p) for _ in range(degree + 1)]def poly_eval(f, x):return sum(c * pow(x, i, p) for i, c in enumerate(f)) % pt = 29  #(p-1)%29==0
g = pow(2, (p-1)//t, p)
#assert pow(g, t, p) == 1
xs = [pow(g, i, p) for i in range(t)]
shares = [(x, poly_eval(poly, x)) for x in xs]R.<x0> = GF(p)[]
list(R.lagrange_polynomial(shares))

这里有多少个根不只看(p-1)%k==0,也就是8不一定有8个根可能只有4个或者3个,需要用g^i验证一下。

然后周末遇到另外一个题:

#!/usr/local/bin/python3
import randomp = 2**255 - 19
k = 15
SECRET = random.randrange(0, p)print("welcome to ssss")
# Step 1: Generate a random, degree-(k−3) polynomial g(x)
g = [random.randrange(p) for _ in range(k - 2)]
# Step 2: Select a random c in Fp
c = random.randrange(0, p)
# Step 3: Set f(x)=g(x)x^2+Sx+c
f = [c] + [SECRET] + gdef evaluate_poly(f, x):return sum(c * pow(x, i, p) for i, c in enumerate(f)) % pfor _ in range(k - 1):x = int(input())assert 0 < x < p, "no cheating!"print(evaluate_poly(f, x))if int(input("secret? ")) == SECRET:FLAG = open("flag.txt").read()print(FLAG)

这题的p = 2^255-19,可以输入14个数,这里的最大根的个数是12,对于15个数来说0,1,2会和最后3个重叠,12次只能求出3-11的值,而这题的secret是第2个,剩下两次也求不出第2个来。看了WP感觉走错方向了。

这时候想下数学,每轮两次输入x和-x则有

s1 = c0*x^0 + c1*x^1 +...

s2 = c0*x^0 - c1*x^1 +...

两式相减

s = s1-s2 = c1*2*x^1 + c3*2*x^3 + ...

这样7组14次输入会得到7个式子,回到第1种情况可以求到c1,c3,... 

这里对s要乘2x的逆,并用 x^2作为输入值

这题和用根来折叠没有关系

p = 2**255 - 19shares = [(i^2, (evaluate_poly(f,i)-evaluate_poly(f,-i))*inverse_mod(2*i,p)%p) for i in range(1,8)]R.<x0> = GF(p)[]
v = list(R.lagrange_polynomial(shares))

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

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

相关文章

Vue3 + TypeScript 实现文件拖拽上传

应用效果&#xff1a;实例代码&#xff1a;CommonApplyBasicInfoForm.vue<script setup lang"ts" name"CommonApplyBasicInfoForm"> ...... // 选择文件列表 const selectedFiles ref<FileList | null>(null); // 通过 FormData 对象实现文件…

2025全国大学生数学建模C题保姆级思路模型(持续更新):NIPT 的时点选择与胎儿的异常判定

2025全国大学生数学建模C题保姆级思路模型&#xff08;持续更新&#xff09;&#xff1a;NIPT 的时点选择与胎儿的异常判定&#xff0c;完整持续更新内容见文末名片 胎儿遗传信息检测与临床决策数学建模分析讲义 问题一&#xff1a;Y染色体浓度的影响因素探索——线性回归的“侦…

【笔记】Software Engineering at Google

聚焦核心原则&#xff0c;挑取最让我眼前一亮的实践点&#xff0c;特别是那些能直接启发或解决我当前工作中痛点的部分。0. 序言 最近集中精力速读了关于 ​Google 软件工程实践​ 的诸多资料&#xff08;包括官方出版物、工程博客、技术演讲以及社区讨论&#xff09;。面对 G…

无人机防风技术难点解析

防风防御模块的技术难点主要体现在以下几个方面风场感知与精准建模1.复杂风场的实时感知&#xff1a;风&#xff0c;尤其是近地面的风&#xff0c;常常是无规则、瞬息万变的阵风、湍流或风切变。无人机需要通过各种传感器&#xff08;如空速计、惯性测量单元&#xff08;IMU&am…

HarmonyOS 应用开发深度解析:ArkTS 声明式 UI 与精细化状态管理

好的&#xff0c;请看这篇关于 HarmonyOS 应用开发中声明式 UI 状态管理的技术文章。 HarmonyOS 应用开发深度解析&#xff1a;ArkTS 声明式 UI 与精细化状态管理 引言 随着 HarmonyOS 4、5 的广泛应用和 HarmonyOS NEXT 的发布&#xff0c;基于 API 12 及以上的应用开发已成为…

机器学习入门,第一个MCP示例

前面我们已经搭建了属于自己的AI大模型&#xff1a;详情见 https://blog.csdn.net/hl_java/article/details/150591424?spm1001.2014.3001.5501 近期MCP概念这么火&#xff0c;那么它到底是什么呢&#xff0c;借一个例子为你讲解 第一步&#xff1a;理解MCP的核心价值 MCP (Mo…

flutter 中间组件自适应宽度

使用Flexible IntrinsicWidth Row(children: [Text(第一个text),IntrinsicWidth(child: ConstrainedBox(constraints: BoxConstraints(maxWidth: 200), // 最大宽度限制child: Text(中间的text可能很长也可能很短,overflow: TextOverflow.ellipsis,maxLines: 1,),),),Text(第三…

TDengine 时间函数 DAYOFWEEK 用户手册

DAYOFWEEK 函数使用手册 函数描述 DAYOFWEEK 函数用于返回指定日期是一周中的第几天。该函数遵循标准的星期编号约定&#xff0c;返回值范围为 1-7&#xff0c;其中&#xff1a; 1 星期日 (Sunday)2 星期一 (Monday)3 星期二 (Tuesday)4 星期三 (Wednesday)5 星期四 (T…

【STM32】贪吃蛇 [阶段 3] 增强模块结构(架构优化)

这篇博客是 承接&#xff1a;【项目思维】贪吃蛇&#xff08;嵌入式进阶方向&#xff09;中 聚焦于 &#x1f9f1; 阶段 3&#xff1a;增强模块结构&#xff08;架构优化&#xff09; 中的 菜单系统&#xff08;Menu System&#xff09;&#xff0c;这部分的结构优化可以学到的…

江协科技STM32学习笔记补充之004

STM32 ISP 一键下载电路&#xff08;按功能、逻辑与时序拆解&#xff09;

数据库小册(1)

1. 关系型数据库主要考点关系型数据库&#xff1a;架构索引锁语法理论规范2. 如何设计一个关系型数据库设计即模块划分。数据库最主要的功能是存储我们的数据&#xff0c;所以需要一个存储的文件系统。我们要把涉及到的物流数据提供逻辑的形式给组织和表示出来&#xff0c;这是…

记录收入最高的一次私活 选号网,需要大量卖号的人可能需要,比如游戏脚本批量跑的号

选号网管理后台(上传游戏信息、账号信息、 查看记录) http://124.223.214.5:180/admin1 选号网客户端(PC/H5页面 给客户筛选商品用) http://124.223.214.5:181/ 该在线地址仅供低频率测试&#xff0c;正式使用需要另外部署。 功能不满足可以联系开发者定制 一、项目的由来 …

热烈庆祝“中国抗战胜利80周年”,织信低代码助力国之重器砥砺前行!

“从保家卫国到科技强军&#xff0c;织信低代码平台为军工企业数字化转型注入新动能。”80年后的今天&#xff0c;国人记忆从未褪色。2025年9月3日&#xff0c;正值中国抗战胜利80周年阅兵之际&#xff0c;我国国防军工力量在经历长期的艰苦奋斗后&#xff0c;现今终于迎来了曙…

PostgreSQL与SQL Server:B树索引差异及去重的优势

PostgreSQL与SQL Server&#xff1a;B树索引差异及去重的优势 在优化查询性能方面&#xff0c;索引是数据库工程师可使用的最强大工具之一。PostgreSQL和Microsoft SQL Server&#xff08;或Azure SQL&#xff09;都将B树索引用作其默认索引结构&#xff0c;但每个系统实现、维…

【微实验】使用MATLAB制作一张赛博古琴?

当一个理工音乐人没钱去买古琴&#xff0c;我直接用代码画一个古琴&#xff01;目录 零、总脚本&#xff1a; 一、核心功能&#xff1a;交互模块拆解 二、核心价值 一、初始化脚本&#xff1a;参数配置与启动界面 ①废话不说&#xff0c;直接上代码 ②代码模块拆解与详细解…

毕业项目推荐:67-基于yolov8/yolov5/yolo11的大棚黄瓜检测识别系统(Python+卷积神经网络)

文章目录 项目介绍大全&#xff08;可点击查看&#xff0c;不定时更新中&#xff09;概要一、整体资源介绍技术要点功能展示&#xff1a;功能1 支持单张图片识别功能2 支持遍历文件夹识别功能3 支持识别视频文件功能4 支持摄像头识别功能5 支持结果文件导出&#xff08;xls格式…

无人机小尺寸RFSOC ZU47DR板卡

整板尺寸&#xff1a;120*120mmFPGA: XCZU47DR-2FFVE1156I;DDR&#xff1a;PS侧8GB 2400Mhz*64bit / PL侧 4GB 2400Mhz*32bit&#xff1b;2路(QSP0QSPI1)/单片512Mb、共计1Gb&#xff1b;千兆以太网&#xff1a;1路&#xff08;PS侧&#xff09;&#xff1b;主要接口资源如下&a…

LangGraph(一):入门从0到1(零基础)

文章目录LangGraph入门从0到10️⃣ 安装 & 确认环境1️⃣ 把 LangGraph 想象成「自动化的做菜流水线」2️⃣ 最小可运行例子&#xff1a;一句话复读机3️⃣ 加一个小节点&#xff1a;把用户输入变大写4️⃣ 条件边&#xff1a;如果用户说 quit 就结束&#xff0c;否则复读5…

学习数据结构(16)快速排序

快速排序的基本思想&#xff1a;快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法&#xff0c;其基本思想为&#xff1a;任取待排序元素序列中的某元素作为基准值&#xff0c;按照该基准值将待排序集合分割成两子序列&#xff0c;左子序列中所有元素均小于基准值&am…

uni-app iOS 上架常见问题与解决方案,实战经验全解析

uni-app 让开发者能够“一套代码&#xff0c;多端运行”&#xff0c;极大降低了开发成本。 但当应用进入 iOS 上架阶段 时&#xff0c;不少团队发现流程并没有想象中那么顺利&#xff1a;证书问题、打包失败、上传出错、审核被拒……这些都可能让项目卡壳。 本文结合实际案例&a…