Github账号:
个人博客关于密码学大作业的链接:
题目:RSA大礼包
摘要:
在密码学中,rsa是当今使用最广泛的公开密钥密码体制。它是利用大数分解的困难性而设计的 一种公钥密码算法,凭借其安全性高、体制成熟完善、计算可行性高等优势在公钥密码体制中独树一帜,并在计算机通信、企业身份认证等商业领域得到了广泛的应用。但是不规范的使用rsa会导致很多的安全问题,本次实验就是通过分析一些不规范使用的rsa,编写攻击程序进行破解,从而锻炼我们分析算法能力于程序编写能力,并加深对rsa的理解。
题目描述
题目给出了21个rsa加密后的密文帧于对应的公钥,需要我们通过分析公钥的缺陷来恢复明文。采用 Fermat 分解法和 p - 1 分解法 成功分解了 Frame2、Frame6、Frame10 和 Frame19 的模数并由此得到了正确的明文消 息;使用公共模数攻击法和低加密指数攻击法找到了存在某些安全缺陷的消息片段,成功破 译了 Frame0、Frame3、Frame4、Frame8、Frame12、Frame16 和 Frame20 的明文消 息;借鉴因数碰撞的思想,用欧几里德算法遍历所有模数,求出 Frame1 和 Frame18 的模 数的公因数,进而成功分解了 Frame1 和 Frame18 的模数得到正确的加解密参数,破译了 明文消息;利用已经得到的若干明文片段,通过查阅资料、语义分析等方法,采用猜测明文 攻击,得到了其余分片的所有明文,并验证了其正确性;利用已得到的若干个素数参数,找到了随机数生成的规律,从而破解了所有分片的加解密参数,并对其正确性进行了验证。
过程
理论基础:
费马分解法
费马分解法用于p与q相近的n, 注意到,因此(p+q)/2与根号n相近,通过爆破这个差值能够容易地计算出p+q,从而分解n
Pollard p-1 分解法
如果p-1为k-smooth,则p-1|k!,则通过gcd就能够将n分解
因数碰撞法
对每一个n计算公因数,若能够计算出非0公因数则能够直接将两个n进行分解
共模攻击:
对于使用了相同的n相同m,不同e所对应的两个密文,我们可以通过共模攻击在不分解n的前提下求解出m。由裴蜀定理,对于互素的e有且仅有一对a1,a2,能够满足, 则
def same_module_attack(N , e1 , e2 , c1 , c2):
d1 = invert(e1 , e2)
d2 = (d1 * e1 - 1) // e2
true_c2 = invert(c2 , N)
return (powmod(c1 , d1 , N) * powmod(true_c2 , d2 , N)) % N
小指数广播攻击
对于e=3与5的几个密文,如果他们所对应的明文相同,则可以通过小指数广播攻击来求解出m,用这种方法只求解出了e-=5的5个密文对应的明文,求不出e=3对应的明文,原因是e=3的三个明文不同,而e=5时五个明文相同,使用中国剩余定理,我们可以解出一个C = ci (mod ni),而这个C = m^5 (mod n1n2…n5),又因为m<ni ,所以C < n1n2…n5,所以该式在ZZ上成立,直接对C开5次方根即可求出m
def CRT(mi, ai):
M = reduce(lambda x, y: x * y, mi)
ai_ti_Mi = [a * (M // m) * invert(M // m, m) for (m, a) in zip(mi, ai)]
return reduce(lambda x, y: x + y, ai_ti_Mi) % M
def small_e_boardcast_attack(nlist , e , clist):
m = CRT(nlist , clist)
tmp = iroot(m , e)
if tmp[1] == 1:
return tmp[0]
else:
return 0
Coppersmith partical m方法
攻击过程
通过对所截获加密帧数据的观察,我们发现:在 21 个片段中,有些片段中的加密密钥是相 同的,具体如下:Frame7、Frame11 和 Frame15 这 3 个分片均使 16 用“3”作为加密密 钥;Frame3、Frame8、Frame12、Frame16 和Frame20 这 5 个分片均使用“5”作为加密 密钥,通过验证,这两组消息分片中的模数各自互素。如果这两组数据是由相同的明文片段 加密得到的,那么它们就完全符合低加密指数攻击条件。所以,我们假设这两组数据均符合 条件,尝试低加密指数攻击法进行破译。下面,分别对两组消息片段进行破译并验证: (1)对Frame7、Frame11 和Frame15 的攻击 ①初次尝试 假设 Frame7、Frame11 和 Frame15 三个片段存在相同的明文,基于该攻击方法的原理, 可以对其进行有效攻击,得到有意义的明文消息。然而在攻击过程中,最终得到的结果并不 符合题目中对明文消息格式的要求,且毫无语义。因此,本次攻击没有成功。说明这三组消 息的明文可能并不完全相同,才导致攻击失败。 ②算法改进 仔细研究该攻击方法的原理,我们发现:其所需的消息个数并非一定要等于公钥值的大小, 即不要求模数 N的个数与公钥 e 的值相同;起决定作用的是m^e 与 N_1,…,N k 的大小关 系(N_1 ,… , N_k为加密时所用消息的模数)。当m^e小于N_1,…,N_k时,可以对其进行 有效攻击。观察题目中明文格式和模数格式的要求:明文长度固定为 512bit,模数长度固定 为 1024bit,针对 e = 3 的攻击情形, | m^3 |=1536 远小于任意两个模数的乘积,因此针对 Frame7、Frame11 和Frame15 的攻击,只要其中任意两个消息存在相同明文,即可进行有 效攻击。 通过改进后的攻击算法,依然未能获得正确的明文消息,因此可得出结论: 这三个消息的明文片段均不相同。 (2)对Frame3、Frame8、Frame12、Frame16 和Frame20 的攻击 借鉴上述改进后的算法思想,先对m^e与N_1,…,N k的大小关系做出判断。通过计算可得 知:当 e = 5 时,只需存在3 个消息拥有相同的加密明文即可实施有效攻击。通过编程实现,对任意 3 个消息片段进行计算均可得到有效的明文消息,且得到的这些明文均相同。由此,破解得到 Frame3、Frame8、Frame12、Frame16 和 Frame20 这 5 个消息 的明文片段,并证明这 5个消息由同一明文片段加密所得。 4) 公共模数攻击 当系统中不同的消息共用一个模数 N,只有 e 和 d 不同,系统将是危险的,此时,攻击者 可能无需分解N就能够恢复明文。通过观察加密帧数据,我们已经知道 Frame0 与 Frame4 中的模数 N是相同的,若这两个消息存在相同的明文,则可以使用共模攻击的方法进行有 效攻击。根据共模攻击的原理,通过编程实现对 Frame0 和 Frame4 进行攻击测试,最终得 到了符合明文格式要求,且具有语言意义的明文消息。在实现过程中,我们采用欧几里得算法,对 21 个模数N两两求最大公因数,需要计算 210 次,其中,Frame0 与 Frame4 中的模数 N 是相同的,不予考虑,计算余下的 209 组模数 N,可得到结果:Frame1 与 Frame18 中的两个模数 N存在不为 1 的最大公因数,进而成 功地对 Frame1 的模数与 Frame18 的模数进行分解,得到重要参数 p 和 q ,并依此计算出 phi( N ) ,再由公钥 e 计算得到私钥 d 。最终,使用私钥 d,根据解密算法得到明文消息, 即可最终实现对密文的完全破解。对得到的明文消息进行加密验证,与所截获密文消息完全 相同。至此,完成了对 Frame1 与 Frame18 的完全破解,得到了有意义的明文消息与 RSA 体制参数p和q。
仔细阅读题目,我们发现,题目中提到“素数p由某一随机数发生器生成”和“素数q可以 随机选择,也可以由随机数发生器产生”这两条重要信息。这意味着,在我们现已分解得 到的 Frame1、Frame2、Frame6、Frame10、Frame18 和 Frame19 这六个分片中的 12 个 素数中,至少有 6 个素数是由同一个随机数发生器生成的。于是我们考虑,能否通过已有的素数,找出随机数的生成规律,进而破解所有的素数参数。
总结
掌握了rsa加密的基础知识和基础攻击方式,提高了自己的编程能力。
参考文献
1.RSA大礼包 - Tr0y’s Blog
2.RSA大礼包-CSDN博客
3.密码学RSA解密之Pollard_rho分解_落雪wink的博客-CSDN博客
4.[BUUCTF]Dangerous RSA ->低加密指数攻击_buuctf dangerous rsa_#_##的博客-CSDN博客
5.陈少真,密码学基础,科学出版社, 2008-05-30.
6.任伟, 现代密码学, 北京邮电大学出版社, 2011 年 4 月
7.冯登国等译,密码学原理与实践(第三版),电子工业出版社
8.谢建全,阳春华,RSA 算法中几种可能泄密的参数选择, 《计算机工程》 2006 年 16 期
9.Don Coppersmith: Finding a Small Root of a Univariate Modular Equation. EUROCRYPT 1996 (LNCS 1070, Springer): 155-165.
10.GMP package, GNU Multiple Precision Arithmetic Library, https://gmplib.org/
11.Magma Computational Algebra System, http://magma.maths.usyd.edu.au/magma/
12.Pari, http://pari.math.u-bordeaux.fr/
13.NTL: A Library for doing Number Theory, http://www.shoup.net/ntl/
14.Whitfield Diffie, Martin Hellman. New Directions in Cryptography[J]. IEEETransactions on Information Theory, 1976, 22(6): 644-654.