Cryptohack刷题记录(二) Mathematics部分 Modular Math WriteUp
文章目录
- MATHEMETICS
- MODULAR MATH
- 1. Quadratic Residues
- 2. Legendre Symbol
- 3. Modular Square Root
- 4. Chisese Remainder Theorem
MATHEMETICS
刚考完信安就忘完了…
MODULAR MATH
1. Quadratic Residues
模平方根
取 p = 29 , a = 11 p=29,a=11 p=29,a=11,有
a 2 = 5 m o d 29 a^2=5\mod29 a2=5mod29
我们定义5在模29下的模平方根为11
We say that an integer
x
is a Quadratic Residue if there exists ana
such that $ a^2=x\mod p$ . If there is no such solution, then the integer is a Quadratic Non-Residue.
题目:
给了 p = 29 , i n t s = [ 14 , 6 , 11 ] p=29,ints=[14,6,11] p=29,ints=[14,6,11],找到三个书中的QR的那一个(QR和QNR叫模平方剩余和模非平方剩余),解出这个数的模平方根,小的一个根即flag
数值比较小,暴力解吧
>>> for t in [14,6,11]:for i in range(1,29):if pow(i,2,29) == t:print(f"{i} ^ 2 = {t} mod 29")8 ^ 2 = 6 mod 29
21 ^ 2 = 6 mod 29
flag就是8
2. Legendre Symbol
勒让德符号
是这么个规律
Q R ∗ Q R = Q R Q R ∗ Q N R = Q N R Q N R ∗ Q N R = Q R QR*QR=QR\\ QR*QNR=QNR\\ QNR*QNR=QR QR∗QR=QRQR∗QNR=QNRQNR∗QNR=QR
勒让德符号:
( a p ) = a p − 1 2 m o d p \left(\frac{a}{p}\right)=a^{\frac{p-1}{2}}\mod p (pa)=a2p−1modp
满足:
题目:
给了p
和包含10个元素的数组ints
从ints
中找出模p
的一个二次剩余,计算这个数的模平方根,较大的那个数即flag
>>> for i in ints:l = pow(i,p//2,p)if l == p-1:passelse:print(ints.index(i))5
>>> a = ints[5]
>>> pow(a,p//2,p)
1
接下来解方程
x 2 ≡ a m o d p x^2\equiv a\mod p x2≡amodp
注意到p为4k+3
型的素数
>>> p%4
3
刚刚计算过勒让德符号 ( a p ) = 1 \left(\frac{a}{p}\right)=1 (pa)=1
则有
a p − 1 2 ≡ 1 m o d p a^{\frac{p-1}{2}}\equiv1\mod p a2p−1≡1modp
同余号两边同时乘以a
:
a p + 1 2 ≡ a m o d p ( a p + 1 4 ) 2 ≡ a m o d p a^{\frac{p+1}{2}}\equiv a\mod p\\ (a^{\frac{p+1}{4}})^2\equiv a\mod p a2p+1≡amodp(a4p+1)2≡amodp
则 ± a p + 1 4 ±a^{\frac{p+1}{4}} ±a4p+1 即方程的解
直接计算即可
>>> t = pow(a,p//4+1,p)
>>> pow(t,2,p) == a
True
>>> t
93291799125366706806545638475797430512104976066103610269938025709952247020061090804870186195285998727680200979853848718589126765742550855954805290253592144209552123062161458584575060939481368210688629862036958857604707468372384278049741369153506182660264876115428251983455344219194133033177700490981696141526
t即flag
3. Modular Square Root
Tonelli-Shanks
算法是一种计算模平方根的算法
任何非2的素数都是 p ≡ 1 m o d 4 p\equiv1\mod4 p≡1mod4 或者 p ≡ 3 m o d 4 p\equiv3\mod4 p≡3mod4 的形式
上一道题已经使用过了,对于4k+3
型的素数,计算模平方根的方式很简单,但对于4k+1
型的素数并不能这种方法计算
对于 r 2 ≡ a m o d p r^2\equiv a\mod p r2≡amodp,Tonelli-Shanks
算法能够计算r
该算法要计算椭圆曲线的交点,不深入讨论,但Sage已经有内置的方法实现
遂用Sage解方程
不知道他说的那个算法在Sage内是否有具体的函数实现,反正我是硬解出来了
sage: R.<x> = Zmod(p)[]
sage: f = x^2-a
sage: rr = f.roots()
sage: rr
[(28169512554311284614348161812907461395482195258388583125795498809297226147214152907614055638917789190356917578259717792167302913007927989841763977292434488782635964253677743342038748567333074043589267896292373028724763808006697707070301035339291758998923066001985927788808579330075671953036025191791621915640175242425390397212674797332132801882880223506177201168864920484993546017284338829512010922075018689505381642887042980971582058343875078178836965895987271392081926458392283354971823611423820865651283490761548053384731721391637064349021755899877224522161311561209530712702153163501623531290150340903913036821041, 1),
(2362339307683048638327773298580489298932137505520500388338271052053734747862351779647314176817953359071871560041125289919247146074907151612762640868199621186559522068338032600991311882224016021222672243139362180461232646732465848840425458257930887856583379600967761738596782877851318489355679822813155123045705285112099448146426755110160002515592418850432103641815811071548456284263507805589445073657565381850521367969675699760755310784623577076440037747681760302434924932113640061738777601194622244192758024180853916244427254065441962557282572849162772740798989647948645207349737457445440405057156897508368531939120, 1)]
sage: min(rr[0][0],rr[1][0])
2362339307683048638327773298580489298932137505520500388338271052053734747862351779647314176817953359071871560041125289919247146074907151612762640868199621186559522068338032600991311882224016021222672243139362180461232646732465848840425458257930887856583379600967761738596782877851318489355679822813155123045705285112099448146426755110160002515592418850432103641815811071548456284263507805589445073657565381850521367969675699760755310784623577076440037747681760302434924932113640061738777601194622244192758024180853916244427254065441962557282572849162772740798989647948645207349737457445440405057156897508368531939120
解出两个根,较小的一个为flag
4. Chisese Remainder Theorem
中国剩余定理 CRTyyds!!
对于方程组
{ x ≡ a 1 m o d n 1 x ≡ a 2 m o d n 2 . . . x ≡ a n m o d n n \left\{ \begin{array}{l} x\equiv a_1\mod n1\\ x\equiv a_2\mod n2\\ ...\\ x\equiv a_n\mod n_n \end{array} \right. ⎩⎪⎪⎨⎪⎪⎧x≡a1modn1x≡a2modn2...x≡anmodnn
有唯一解 x ≡ a m o d N x\equiv a\mod N x≡amodN,其中 N = ∏ n i N=\prod n_i N=∏ni
题目:
已知
{ x ≡ 2 m o d 5 x ≡ 3 m o d 11 x ≡ 5 m o d 17 \left\{ \begin{array}{l} x\equiv 2\mod 5\\ x\equiv 3\mod 11\\ x\equiv 5\mod 17 \end{array} \right. ⎩⎨⎧x≡2mod5x≡3mod11x≡5mod17
找到满足 x ≡ a m o d 935 x\equiv a\mod935 x≡amod935 的整数 a a a
进入sage
首先对 935 935 935 进行分解
sage: factor(935)
5 * 11 * 17
则
>>> a = (2*11*17*invert(11*17,5) + 3*5*17*invert(5*17,11) + 5*5*11*invert(5*11,17))%n
>>> a
mpz(872)
flag是872
Cryptohack刷题记录(二) Mathematics部分 Modular Math WriteUp相关推荐
- Cryptohack刷题记录(四) Mathematics部分 Brainteasers Part 1 writeup
文章目录 Mathematics Brainteasers Part 1 1. Successive Powers 2. Adrien's Signs 3. Modular Binomials 4. ...
- 每日刷题记录 (二十)
文章目录 第一题: 16. 最接近的三数之和 解题思路: 代码实现: 第二题: 43. 字符串相乘 解题思路: 代码实现: 第三题: 59. 螺旋矩阵 II 解题思路: 代码实现: 第四题: 89. ...
- Cryptohack刷题记录(一) General部分 WP
cryptohack,很不错的一个密码学习平台. 很适合没有基础的beginner系统进行学习 文章目录 注册平台账号 General Encoding 第一题 第二题 第三题 第四题 第五题 XOR ...
- 每日刷题记录 (二十七)
文章目录 第一题: 1108. IP 地址无效化 解题思路: 代码实现: 第二题: 1431. 拥有最多糖果的孩子 解题思路: 代码实现: 第三题: 1720. 解码异或后的数组 解题思路: 代码实现 ...
- buuctf rsa刷题记录(记几种类型的RSA攻击二)
前言 最近学习了点儿rsa这里总结以下我的buctf rsa部分刷题记录 dp,dp泄露 场景描述: 假设题目仅给出p,q,dp,dq,c,即不给公钥e 这种参数是为了让解密的时候更快速产生的 dp= ...
- 二、lintcode刷题记录--二叉树的路径和
LintCode刷题记录---二叉树的路径和(效率可能没有那些专业的高,主要是代码结构比较简单) ) 题目地址:http://www.lintcode.com/zh-cn/problem/binary ...
- CSP-S集训刷题记录
$ CSP.S $ 集训刷题记录: $ By~wcwcwch $ 一.字符串专题: 1. [模板]$ manacher $ 算法 模型: 求出字符串 $ S $ 中所有回文串的位置及长度. $ sol ...
- $2019$ 暑期刷题记录 $2$(基本算法专题)
$ 2019 $ 暑期刷题记录 $ 2 $ (基本算法专题) $ by~~wch $ $ BZOJ~1958~Strange~Towers~of~Hanoi $ (动态规划,递推) 题目大意: 求有 ...
- Codeforces 刷题记录(已停更)
Codeforces 每日刷题记录 (已停更) 打'+'是一些有启发意义的题目,部分附上一句话题解,每日更新3题,大部分题目较水. Day ID Problem Tutorial Note 1 1 + ...
最新文章
- 用数学方式打开Facebook新Logo,真的和视频号Logo来自同一方程
- 李彦宏:人工智能不是零和游戏
- Oracle-使用切片删除的方式清理非分区表中的超巨数据
- 清原高中2021高考成绩查询,2021年抚顺高考状元是谁分数多少分,历年抚顺高考状元名单...
- 自写sonar 插件加载到sonar 服务中的展示信息
- java中输出拼json,java poi 解析excel 输出json 并且拼接字符串显示到jsp
- iOS开发之国际化(二)
- AMD RX580刷BIOS提高ETH算力
- 代码整洁之道Clean Code笔记
- GFLOPs、GMACs、FMA之间的关系
- stm32f103电子钟心得体会_stm32f103时钟树讲解
- Messaging短信源码导入AndroidStudio
- 关于input自动过滤特殊字符的简单方法
- 痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU启动那些事(3)- Serial ISP模式(blhost)
- JIRA常用的企业项目管理和开发软件
- 程序员是否可以在家办公——在家办公的利与弊
- Excel数据录入快捷操作:
- 修复计算机管理员账户密码多少,win10管理员账户密码忘记了图文解决教程
- UIButton上同时显示图片和文字的方法
- 浅析网站的基本构成和主要类型