RSA选择密文攻击
RSA parity oracle一、举例即RSA奇偶性预言(oracle意为神谕) 这说的是,服务器可以解密任何密文,并至少返回密文的最低位(判断奇偶性),除了某个不可知的密文 那我们可以通过构造密文,进行二分查找,只需要次搜索就能恢复密文 假设 我们构造 那么有我们把这个发给服务器,服务器就会返回解密结果,注意到2m一定是偶数 且由于 那么有两种情况 为奇数,那么这就说明,即 为偶数,这说明 那么有这两种情况这两种情况分别得到范围 ,, 无论哪种情况都可以把m的范围缩小一半,然后我们继续操作 这时候我们发现没有那么显然了,有2种情况, 前者的话,注意这里要-3N,因为必须要减去奇数个N,而1个N不够为奇数,那么这就说明,即 为偶数,这说明 分别把范围缩小到 , 我们发现有一个情况直接出了m=N//2 即使其他情况,每次构造都能使得范围变为原来的1/2,这就是经典的二分搜索 那么时间复杂度是 二、数学归纳法使用数学归纳法进行证明每次都能缩短1/2的区间 n=1的时候是显然的 假设第i次发送,那么有 且 于是有 那么第i+1次就会得到 为了方便对比,我们把上面...
infinite_blog
CSP研究综述image-20250901214517993着重听了Feng Hao教授的课程,ChengluJin教授的有点偏硬件,没怎么听懂 由于我平常会做一些ctf中crypto的问题,所以研究比较偏向于“实现” 了解的比较多的会详细,了解的比较少的就略过了 4种普遍的攻击方式1.Ciphertext-only attack 2.Known-plaintext attack 3.Chosen-plaintext attack 4.Chosen-ciphertext attack 1.古典密码1.凯撒密码加解密使用同一个算法,加密是确定性的,同一个明文用相同的密钥加密完后得到的密文是相同的那就可以使用词频攻击,不过凯撒密码的密钥空间非常小,也就是26,通常直接遍历密钥,寻找有意义的明文字符串就行 Python实现 1234567891011121314151617181920import randomdef Enc(key,plaintext:str): ciphertext = '' for i in plaintext: if i.isupper...
新生赛wp
1.ezfactorN为1024bit,几乎不可能直接分解,一定有其他信息泄露或者参数生成不当 1q = next_prime(p) 注意到q是p的下一个素数,所以q十分接近p 根据这个有很多思路, 解法1.直接枚举素数我们发现q>p 那么 p,q既然是相邻素数,那么,中间隔得数应该是比较少的,于是我们直接枚举之后的素数就行了 exp: 123456789101112131415from Crypto.Util.number import *import gmpy2N=760549286153906420272675577218986061044353476898581373578392920280056061996462602543359833795490767286001287011606586487757912856696627465972185270604466044612017633844252459338842936333986646178148401727701704741618152072159801228914339962255441023251640...
Lilctf2025
Crypto1.ez_math12345678910111213141516171819202122from sage.all import *from Crypto.Util.number import *flag = b'LILCTF{test_flag}'[7:-1]lambda1 = bytes_to_long(flag[:len(flag)//2])lambda2 = bytes_to_long(flag[len(flag)//2:])p = getPrime(512)def mul(vector, c): return [vector[0]*c, vector[1]*c]v1 = [getPrime(128), getPrime(128)]v2 = [getPrime(128), getPrime(128)]A = matrix(GF(p), [v1, v2])B = matrix(GF(p), [mul(v1,lambda1), mul(v2,lambda2)])C = A.inverse() * Bprint(f'p = {p}')print(f'C = {...
infinite_blog
H&NCTF2025 CryptoCryptolcgp常规的LCG问题, 观察函数generate 123def generate(self): self.seed = (self.a * self.seed + self.b) % self.m # %代表取余运算 return self.seed 输入seed,获得一个新的seed 接着循环了5次,产生了5次种子 换而言之,我们需要利用这5个种子,求出一开始的种子 不妨设,一开始的seed为x1,然后我们写成数列的形式 已知求 接着来看算法的关键 这里面a,b,m都是未知的,b好处理,因为在常数的位置,两个式子相减就能消掉 考虑 这时候,我们以作为一个新数列,那么这时候只剩下两个未知数了 设 那么 于是构造了一个等比数列 \begin{align} y_{n+1}=ay_n \mod m\ y_{n+2}=ay_{n+1} \mod m \end{align} 说到等比数列,等比中项就是一个有趣的性质,那么,对于这个同余的等比数列,是否有着等比中项呢,可以一试 a消失了,那么此时...
infinite_blog
SQL注入在ctf中,我们通常通过get请求和post请求,提交参数,然后服务器后端拼接sql代码,进行查询数据 1$sql = "SELECT * FROM users WHERE username = '$username' AND password = '$password'"; 比如说这里就是通过get请求提交username 我们后面都以这个为例 1$sql = "SELECT * FROM users WHERE id = $id"; 根据sql语句的不同,可以分为字符型和数字型 数字型1$sql = "SELECT * FROM users WHERE id = $id"; 这种就是数字型 我们可以在后面加引号来测试 然后看爆错信息 字符型1$sql = "SELECT * FROM users WHERE id = '$id'"; You have an error in your SQL syntax; check the manual thatcorresponds to your MariaDB server version for the ...
SWPU-NSSCTF2025
2025 SWPU-NSSCTF秋季招新入门训练赛 Crypto1.拟态签到题ZmxhZ3tHYXFZN0t0RXRyVklYMVE1b1A1aUVCUkNZWEVBeThyVH0= base64没什么好说的 flag{GaqY7KtEtrVIX1Q5oP5iEBRCYXEAy8rT} 2.base??dict:{0: ‘J’, 1: ‘K’, 2: ‘L’, 3: ‘M’, 4: ‘N’, 5: ‘O’, 6: ‘x’, 7: ‘y’,8: ‘U’, 9: ‘V’, 10: ‘z’, 11: ‘A’, 12: ‘B’, 13: ‘C’, 14: ‘D’, 15: ‘E’,16: ‘F’, 17: ‘G’, 18: ‘H’, 19: ‘7’, 20: ‘8’, 21: ‘9’, 22: ‘P’, 23: ‘Q’,24: ‘I’, 25: ‘a’, 26: ‘b’, 27: ‘c’, 28: ‘d’, 29: ‘e’, 30: ‘f’, 31: ‘g’,32: ‘h’, 33: ‘i’, 34: ‘j’, 35: ‘k’, 36: ‘l’, 37: ‘m’, 38: ‘W’, 39...
infinite_blog
LWE学习1.Background二十年来,格约化算法在破解密码系统方面的成功,确立了格约化作为公钥密码分析中最流行工具的地位。事实上,格在密码学中的应用长期以来主要是“负面的”。有趣的是,在许多实验中,LLL及其他格约化算法的实际表现远好于最坏情况分析所保证的效果,这导致人们普遍认为“格约化在实践中是容易的”。 然而,对于 带噪声学习问题(Learning With Errors,LWE),格约化算法的能力是有限的。当格的维度或误差足够大,或者给出的基被人为放大/混淆时,基约化将无法再找到格中的最短向量。这正是LWE 被认为是一个“困难”问题、适合作为密码学基础的直观原因。 好的,我来翻译成中文(保持学术化、流畅的表述): 2.Introduction带噪声学习问题(Learning With Errors, LWE)指的是这样一个计算问题:我们希望学习一个定义在某个环上的线性函数 ,但是只能获得该函数的带噪声样本。这些样本通常形如: 其中: 是定义该线性函数的秘密元素; 是从某个已知分布中抽取的小噪声项; 是环中的已知元素; 表示矩阵 与向量 的乘积。 基于 LW...
LWE学习
LWE学习1.Background二十年来,格约化算法在破解密码系统方面的成功,确立了格约化作为公钥密码分析中最流行工具的地位。事实上,格在密码学中的应用长期以来主要是“负面的”。有趣的是,在许多实验中,LLL及其他格约化算法的实际表现远好于最坏情况分析所保证的效果,这导致人们普遍认为“格约化在实践中是容易的”。 然而,对于 带噪声学习问题(Learning With Errors,LWE),格约化算法的能力是有限的。当格的维度或误差足够大,或者给出的基被人为放大/混淆时,基约化将无法再找到格中的最短向量。这正是LWE 被认为是一个“困难”问题、适合作为密码学基础的直观原因。 好的,我来翻译成中文(保持学术化、流畅的表述): 2.Introduction带噪声学习问题(Learning With Errors, LWE)指的是这样一个计算问题:我们希望学习一个定义在某个环上的线性函数 ,但是只能获得该函数的带噪声样本。这些样本通常形如: 其中: - 是定义该线性函数的秘密元素;是从某个已知分布中抽取的小噪声项; 是环中的已知元素; 表示矩阵 与向量 的乘积。 基于 LWE...