比赛记录
记录一下以前的一些比赛,这里感谢striving大佬,好多都是问的他哈哈哈哈。
杭师大
一步到喂
佩尔方程求解
1 | from gmpy2 import invert |
checkin
连续24000次开方
quadratic_residue和cipolla
1 | import tqdm |
nothing
sm2签名
hnp问题
1 | from string import * |
NKCTF招新赛
baby_RSA
考点:
- 已知分解
- 费马小定理,数论推导
- coppersmith攻击
第一步:已知,所以。
根据RSA参数之间的关系有:,那么。
所以,即存在使得,注意到,那么。
那么通过枚举可以得到。
第二步:有
根据同余以及费马小定理,有:。
构造多项式:有
第三步:coppersmith攻击可以帮助求解,其中,是一个上界。
1 | n = 114101396033690088275999670914803472451228154227614098210572767821433470213124900655723605426526569384342101959232900145334500170690603208327913698128445002527020347955300595384752458477749198178791196660625870659540794807018881780680683388008090434114437818447523471527878292741702348454486217652394664664641 |
eZ_Math
考点:
- 数论推导,欧拉定理,rsa参数之间的关系等
题目给了很多
注意到都很小,而且有的是幂指关系:如,在不同的底数下,也存在相同的。
我们可以找到其中一组幂指关系的:,并且相同的。
那么此时,
显然此时有:,(欧拉定理、或该循环群的阶为phi)
此时可以得到phi的一个倍数
得到 (用phi的倍数求私钥与phi等价,可由欧拉定理得)
然后解rsa即可。
1 | a1=21606807968454766520529084107175158062623274703294799705984925156349373997035743632649715867216648159433730630939058861636582120303338699113498645592338621228070481894445156769437351313971471061779425442129487317917630554305634797690296919992201174927956121524640438775183413288101169580705360562693274958339417 |
fake_MT、real_MT
考点:
- MT19937的预测、逆向,部件的逆向
- pwntools自动化脚本
1.可以参考https://www.anquanke.com/post/id/205861?display=mobile学习,很经典!很有意思
2.pwntools基本用法:接发数据等等
1 | from randcrack import * |
easyrsa
考点:
- 数论推导
- coppersmith攻击
第一问:,
首先可以求出,而
由欧拉定理有:
即:,较小。
利用coppersmith攻击求出x。
第二问同babyrsa。
1 | from gmpy2 import * |
eZ_Bl⊕ck
考点
- Feistel结构
- 异或
可以参考:http://striving.mapleice.top/index.php/archives/150/第三题学习
1 | from Crypto.Util.strxor import * |
ez_polynomial
考点:
- 典型的多项式rsa
可以参考:https://blog.csdn.net/m0_57291352/article/details/124850426学习
1 | p=40031 |
Raven
挺有意思的一个题目,多项式的系数都比较小。所以可以看作是一个6次的一元多项式。造格子出系数(不过不知道为啥d不能直接出,这里是先出a,b,c。再单独二元copper求d)。
涉及到格基规约和二元coppersimth,较为复杂,先自行研究。
1 | p = |
二元coppersmith恢复key
1 | import itertools |
解AES
1 | from Crypto.Util.number import * |
easy_high
考点:
- 异或
- 已知p的部分比特的coppersmith攻击
参考学习coppersmith攻击的经典应用:已知p的部分比特,已知部分明文,已知部分私钥低位等。
1 | p0=149263925308155304734002881595820602641174737629551638146384199378753884153459661375931646716325020758837194837271581361322079811468970876532640273110966545339040194118880506352109559900553776706613338890047890747811129988585025948270181264314668772556874718178868209009192010129918138140332707080927643141811 |
eZ_LargeCG
考点
-
p+1光滑
-
p-1光滑
-
线性递推->矩阵快速幂
可以参考http://striving.mapleice.top/index.php/archives/141/第四题学习
1 | ''' |
complex_matrix
考点:
- 扩展维纳攻击(四维)
可以参考https://huangx607087.online/2021/03/01/LatticeNotes6/学习
1 | from Crypto.Util.number import * |
baby_classical
看着复杂,把题目函数都理一遍,其实就一个矩阵运算,类维吉尼亚加密
考点:
- python
- 矩阵运算
- 维吉尼亚加密
1 | import string |
N1CTF招新赛
ezezez
知识点:椭圆曲线,数论,Related Message Attack
语言:sagemath
1 | from Crypto.Util.number import * |