拉格朗日多項式

最近打的幾個比賽沒意思,不是不會就是不會。不過比賽完后看到別人的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…