![](https://img-blog.csdnimg.cn/20190918140053667.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
密码学知识总结
文章平均质量分 80
密码学的相关知识总结
M3ng@L
有关于技术方面的问题可以私聊交流哦(虽然我已经忘了很多)
展开
-
生日攻击及CTF例子
相同点(给定一个点的大小找是否有另一个点)的概率一般来说很大(有一个近似计算公式),以此概率来判断是否遍历爆破整个集合找出两个相同点(概率很大的情况下,很可能不止两个点相同)生日攻击一般都用作哈希碰撞,构造彩虹表等等,这里我们用浅显的生日悖论的原理来在给定一个点的情况下,来判断是否可以找到一个随机集合中另一个相同点。分别是矩阵和向量,这里进行的并不是矩阵乘法,当前类型的矩阵和向量左乘后得到的就是如上表达式。的生成过程(由于随机数生成大小的参数是给定了的,这里直接用数值表示随机数大小)原创 2022-09-29 11:27:12 · 1491 阅读 · 3 评论 -
Pohlig-Hellman算法解决DLP问题
(光滑数即是该数的质因数都很小,其每个质因数大小在该算法中对应着算法复杂度)是我们设置的变量,后面会对其进行赋值;但是这样的进制表示并没有实质作用,因为我们很可能为了表示。,再对整个同余式组使用中国剩余定理得到最终满足所有同余式的解。来解决这个问题,将等式两侧的大小变到我们能掌握的大小。当我们求出整个同余式组里的满足各个同余式模意义下的。拉到很大的数值,具体大小我们无从得知;的素因子的进制等等操作,这样就可以直接得到。用每个素因子的大小作为进制表示,如以。是原根,那么这样操作是可以的;原创 2022-09-14 17:50:56 · 1598 阅读 · 0 评论 -
应用LLL算法解决背包问题
SVP问题(最短向量),那么要将LLL算法应用于解决背包问题,我们需要通过基向量构造一个合适的格,并且验证我们需要求得的。由于矩阵乘法的特殊性,每行元素依次乘以每列元素的和,其实可以将其看做是一个背包问题;的向量在已知的格上,那么这个向量还必须满足是该格的最短向量,也即是SVP问题的描述。的长度有限,很可能只占有第一行以及第二行的部分元素,剩余元素均是随机生成的字节)的每个元素的生成过程都看作是一个背包问题,那么已知相当于背包问题的。的第一列元素(也可以是其他列的元素),该列元素的生成过程是,矩阵。原创 2022-09-10 11:46:36 · 1486 阅读 · 2 评论 -
非素数模下的二次剩余
那么按照之前提到的解决办法,将每个二次剩余的解都先看作是唯一解构造新的同余式组,直到将每个二次剩余的解按照不同组合遍历完即可,求得的结果设置条件判断输出。二是求解一元二次同余式组中的各个二次剩余,单个二次剩余可能会有多个解满足该二次同余式,那么就。所以要先求解同余式组中每个同余式的二次剩余,得到一元二次同余式组中的每个同余式的解。对于普通的二次剩余来说,要应用正常求解二次剩余的方法有很多种,但前提都是。但是这里我们并不重点看模数为素数的情况,而是看模数为非素数的情况,条件是。原创 2022-09-09 12:21:14 · 1007 阅读 · 0 评论 -
矩阵快速幂模板以及其应用矩阵加速递推
计算这样的递推次数很多的式子,我们需要一个更简化更快捷的计算方式,也就是矩阵快速幂。我们只需要构造最小限度能解决问题的矩阵就好,无论是矩阵初始值还是转移矩阵,所以还是需要具体问题具体分析地来构造矩阵。的矩阵,其实列向量还是行向量都可以,只要转移矩阵也是对应的即可)那么根据转移矩阵表现出来的与原数列的关系,我们可以这样来看。的矩阵初始值浪费了计算空间,所以构造其他形式的初始矩阵。的初始矩阵的话,对应数列的递推关系是不完整的;得到的新矩阵的第一项数据即是斐波那契数列的第。把矩阵乘法展开,得到。......原创 2022-08-27 21:03:02 · 923 阅读 · 0 评论 -
近世代数-群论基础二
近世代数-群论基础二子群与陪集设GGG按运算∘\circ∘形成群,HHH为群GGG的非空子集。若HHH按照运算∘\circ∘ (在笛卡尔集H×HH\times HH×H上限制)也形成群,则称HHH为GGG的子群;记为H≤GH\leq GH≤G.笛卡尔集A,BA,BA,B均为集合,A×BA\times BA×B为AAA和BBB的笛卡尔积,是所有有序偶(a,b)(a,b)(a,b)的集合,其中aaa是来自AAA的元素,bbb是来自BBB的元素A×B={(a,b)∣a∈A且b∈B}A\times B=原创 2022-05-25 20:34:58 · 881 阅读 · 0 评论 -
近世代数-群论基础一
近世代数-群论基础一半群与群半群:在集合,任意x,yx,yx,y经过一元运算x∘yx\circ yx∘y 得到的结果依然是在该集合内的,且满足结合律幺半群:在半群的基础上引入幺元(单位元)定理2.1:括号的添加方式(位置)与结果无关群:每个元素都可逆的幺半群定义:非空集GGG按它的二元运算∘\circ∘,形成群当且仅当GGG对运算∘\circ∘封闭,即a,b∈G⇒a∘b∈Ga,b\in G\Rightarrow a\circ b\in Ga,b∈G⇒a∘b∈G运算∘\circ∘ 满足结合原创 2022-05-17 19:45:20 · 820 阅读 · 0 评论 -
RC4加密以及python实现
RC4加密算法AbstractAbstractAbstractRC4是流加密算法中的一种,主要难点是密钥流生成算法,通过该算法(需要输入密钥)生成的密钥流与明文相异或得到密文密钥长度可变,长度范围为1-256字节(原则上密钥长度不可超过256字节,但是超过的话不会对算法过程造成影响,但是密钥字节中多于256的部分不会代入运算)EncodeEncodeEncodeKSAKSAKSA对密钥key使用KSA算法(key-scheduling-algorithm)生成S盒首先初始化S盒S = [原创 2022-05-12 21:41:07 · 1793 阅读 · 0 评论 -
CTF Crypto中涉及的AES题目
keywords: `AES_CBC模式`,`AES_ECB模式`,`AES_CTR模式` 来源于陇原战疫2021网络安全大赛 `Civet cat for Prince` $keywords:$ `AES_CBC`,`xor`,`狸猫换太子`来源于安洵杯2020 `easyAES` $keywords:$ `AES_CBC`,`AES_CBC所使用的加解密器和AES_ECB模式所使用的相同`来源于安洵杯2021 `air encryption` $keywords:$ `AES_CTR`,`xo原创 2022-04-20 17:04:47 · 7352 阅读 · 0 评论 -
Crypto中常用的数据类型互转方式
Crypto中常用的数据类型互转方式keywords:keywords:keywords:十进制与字节互相转换,十六进制的不同表示方式转换,列表类型与字符串的转换十进制与字节互相转换long_to_bytes()\bytes_to_long()from Crypto.Util.number import long_to_bytes,bytes_to_longflag = b"flag{convert}"nums = bytes_to_long(flag)flag = long_to_byt原创 2022-04-20 16:42:17 · 7452 阅读 · 0 评论 -
CTF密码学中遇见的python 类知识
CTF密码学中遇见的python 类知识keywords:keywords:keywords: 魔法方法PEP 8 代码规范:类定义前后需要两行空行DefinitionDefinitionDefinition定义类class class_name(object): passreal_object = class_name()在类中定义的函数,称为方法调用对象的方法object.func()类外部添加对象属性object.attr = ...类内部操作属性通过se原创 2022-04-10 19:55:32 · 1154 阅读 · 0 评论 -
中国剩余定理及python实现
CRT,中国剩余定理公式推导以及python实现,中国剩余定理模数不互素情况原创 2022-03-23 17:59:45 · 2352 阅读 · 3 评论 -
RSA中coppersmith定理的应用条件
coppersmith在已知p多少位二进制情况下才能生效,RSA高位攻击(已知p的高位,求解p的低位依次分解n),sagemath的small_roots()函数讲解原创 2022-03-20 20:46:43 · 10044 阅读 · 13 评论 -
LSFR流密码小结
LSFR流密码小结IntroductionIntroductionIntroductionCTF ProblemsCTF~ProblemsCTF Problemsstreamgame1-2DescriptionDescriptionDescriptionAnalysisAnalysisAnalysisSolving codeSolving~codeSolving codestreamgame3DescriptionDescriptionDescriptionAnaly原创 2022-03-19 00:09:00 · 2138 阅读 · 0 评论 -
GGH非对称密码体制破解方法
GGH非对称密码体制破解方法EncryptionEncryptionEncryptionDecryptionDecryptionDecryptionAttackAttackAttackExampleExampleExamplePerferencePerferencePerferenceGGH密码体制,基于格的CVP(最近接向量问题)设计的非对称密码算法EncryptionEncryptionEncryption生成密钥:选择幺模矩阵UUU作为私钥公钥:B′=U⋅BB'=U\cdot BB′原创 2022-02-27 16:53:26 · 1286 阅读 · 1 评论 -
在sagemath中运行python文件
在sagemath中运行python文件keywords:keywords:keywords: Sagemath Shell,sagemath导入自己写的模块要让自己写的python文件直接在sagemath中运行,也就是说要用到sagemath中的一些模块和函数如果直接使用Sagemath程序,让ta运行python文件会报错需要使用Sagemath Shell先将所要运行的python文件放入Sagemath的src文件夹中(如果是其他路径的话之后文件似乎可以运行,但是运算速度很低)PS:S原创 2022-02-26 10:51:58 · 4334 阅读 · 0 评论 -
random模块内置伪随机数生成—MT19937算法
在特定条件下逆转MT19937算法所谓MT19937算法也就是梅森旋转算法中的一种,是伪随机数发生算法有关梅森旋转算法可以看:梅森旋转算法 - 维基百科,自由的百科全书 (wikipedia.org)Simply analyze MT19937Simply~analyze~MT19937Simply analyze MT19937Python应用MT19937算法生成范围在[0,232−1][0,2^{32}-1][0,232−1]的均匀分布的32位整数(原创 2022-01-24 17:25:39 · 1959 阅读 · 0 评论 -
Tonelli-Shanks算法_python
Tonelli-Shanks算法_python该算法应用于求二次剩余也就是形如x2≡n(modp)x^2\equiv n\pmod px2≡n(modp)的同余式,已知n,pn,pn,p求xxx判断二次(非)剩余为了执行这个算法,需要知道如何判断二次(非)剩余所谓二次(非)剩余也就是上面提到的同余式有无解的另一个说法而判断二次剩余我们可以使用欧拉准则np−12≡1(modp)n^{\frac{p-1}{2}}\equiv 1\pmod pn2p−1≡1(modp);此情况为有解n原创 2022-01-22 20:16:45 · 1748 阅读 · 1 评论 -
ECDSA算法
ECDSA椭圆曲线数字签名算法简单来说,与DSA本质上区别不大,在原DSA生成rrr的地方引入了椭圆曲线以及一些其他参数的变化不熟悉DSA的可以看这:(14条消息) DSA算法_M3ng@L的博客-CSDN博客公私钥的生成私钥随机取一个在(1,n−1)(1,n-1)(1,n−1)区间上的整数dAd_AdA作为私钥这里的nnn是选取椭圆曲线上的orderorderorder,也就是椭圆曲线加密方程的模数,之后提到的nnn都是这个公钥Q=dA∗GQ=d_A*GQ=dA∗G原创 2022-01-21 17:41:47 · 3406 阅读 · 0 评论 -
中国剩余定理模数不互素的情况
中国剩余定理模数不互素的情况当中国剩余定理在应用中模数不互素时,在求解MiM_iMi对模数mim_imi的逆元Mi′M_i'Mi′时可能会报错说:两个数不是互素的,无法进行求解逆元的操作(我这里用的封装函数gmpy2.invert()求解逆元)那么假定现在有一组同余式需要用到中国剩余定理求解,但是模数不互素;将式1:x≡c1(mod m1)x\equiv c_1(mod~m_1)x≡c1(mod m1) 式2:x≡c2(mod m2)x\equiv原创 2022-01-03 18:40:41 · 1737 阅读 · 1 评论 -
DSA算法
DSA本文主要叙述在CTF中的DSA,根据我自己的理解重述一遍CTF-wiki对DSA的描述公私钥的生成选择一个哈希函数H()H()H();一般选作SHA1选择比特数为646464的倍数的素数ppp,且位数处于512512512到102410241024之间选择160bits160bits160bits的素数qqq(这里对qqq的大小限制准确来说是不大于哈希函数H输出的长度),满足qqq是p−1p-1p−1的素因子总之(p,q)(p,q)(p,q)的大小一般是(原创 2021-12-30 21:53:15 · 2609 阅读 · 0 评论 -
Pell方程
Pell方程形如x2−D∗y2=1x^2-D*y^2=1x2−D∗y2=1的方程当DDD不为完全平方数时有整数解又因为每一个不是完全平方数的整数DDD,其平方根可以写成简单循环连分数的形式取D\sqrt{D}D的连分数的有限周期作为一个有限分数则分子、分母分别对应x、yx、yx、y的最小值sagemath实现def Pell(D,numbers=100): temp = continued_fraction(sqrt(D)) for i in range(number):原创 2021-12-28 22:10:38 · 751 阅读 · 0 评论 -
TEA系列算法
TEA分组加密算法,明文以8字节一组,密钥以16字节一组( (明文以8字节分组最后一组不够时填充)密钥分为四个子密钥进行加密解密加密过程delta = 0x9e3779b9for i in range(32): # 加密轮数(一般是32轮) sum += delta l += ((r<<4)+k0)^(r+sum)^((r>>5)+k1) r += ((l<<4)+k2)^(l+sum)^((l>>5)+k3)v[0] = lv[1] =原创 2021-12-28 11:43:15 · 539 阅读 · 0 评论 -
Paillier密码
Paillier密码原文章:密码学学习笔记 之 paillier cryptosystem - 安全客,安全资讯平台 (anquanke.com)本文只摘取了主要公式及选值要求,原文中还有加密解密公式的证明过程两种类型正常类型随机选取两个大素数p,qp,qp,q满足gcd(p∗q,(p−1)∗(q−1))gcd(p*q,(p-1)*(q-1))gcd(p∗q,(p−1)∗(q−1))n=p∗qn = p*qn=p∗qλ=lcm[p−1,q−1]=(p−1)∗(q−1)/gcd(p−1,q−1转载 2021-12-27 22:03:21 · 241 阅读 · 0 评论 -
python字典型由值查询键
python字典型由值查询键从值查询键:list(dict.keys())[list(dict.values()).index(i)]分析一下: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', 2原创 2021-12-26 12:08:01 · 2908 阅读 · 1 评论 -
sagemath_同余运算总结
同余运算R.<x> = Zmod(module)[]相当于将xxx作为需要求得的未知数Zmod()内填入同余运算的模数f = x^3 + ...将同余运算的所有项移到同一边,赋值给函数fff来表示f.roots()运行之后就求解出来;以列表形式返回所有解列表内部是元组类型或者f.smallroots(upper)以upper为界限在这个上限内求解根例题需要求解n2≡p3+a∗p2+b∗p(mod moudle)n^2 \equiv p^3 + a*p原创 2021-12-20 16:55:00 · 3086 阅读 · 0 评论 -
timing_attack小结
计时攻击下面是我自己的理解:引入假设这样一种情况:一个服务器需要核实客户机传来的登录密码是否与数据库内部的密码相同,最简单的比较函数都容易想到:def login(input): later_password = input now_num = 0 for i in range(len(first_password)): if later_password[i] != first_password[i]: return False break else:原创 2021-12-18 20:54:15 · 483 阅读 · 2 评论