rsa 模数 指数转换 c语言_CTF中RSA的一些攻击思路

903439aa-491e-eb11-8da9-e4434bdf6706.jpeg

本文为看雪论坛优秀文章 看雪论坛作者ID: 丿feng 本文简略总结了前人的一些RSA攻击思路,代码或来源于网上或本人原创。 并已在GitHub上开源,github地址: https://github.com/yifeng-lee/RSA-In-CTF 同时exp也附于附件上。 关于RSA算法

RSA 加密算法是一种非对称加密算法,1977年由Ron Rivest、Adi Shamir和Leonard Adleman一起提出的,算法安全性依赖于极大整数做因数分解的难度。 RSA算法加解密实现 1.随意选择两个大素数p和q,且p不等于q,计算N=p*q。   2.计算n的欧拉函数φ(n) = (p-1)(q-1)(常用phi(n)表示φ(n))。   3.选择一个整数e,满足1< e < φ(n),且e与φ(n) 互质(e通常取65537)。 4.计算模反元素d,ed ≡ 1 (mod φ(n)) 即求解ex + φ(n)y = 1方程组(利用扩展欧几里得算法可以求出d)。   d = gmpy2.invert(e, (p-1)*(q-1))   5.得到公钥(N,e)私钥(N,d)   6.加密 c = pow(m,e,N)   7.解密 m = pow(c,d,N) RSA在CTF中的攻击方法 gmpy2 安装: sudo apt install libmpc-dev pip/pip3 install gmpy2 sage安装: https://mirrors.tuna.tsinghua.edu.cn/sagemath/linux/64bit/index.h tml 明文解秘 >>>>

模互素

d = gmpy2.invert(e,(p-1) * (q-1))   m = gmpy2.powmod(c,d,n) >>>>

模不互素

第一种情况   给出 p,q,c,e且gcd(e, (p-1)*(q-1))非常小(可能为3)。   example:   p,q = 3881, 885445853681787330351086884500131209939   c = 1926041757553905692219721422025224638913707   e = 3 3   第二种情况:   给出n1,n2,e1,e2,c1,c2求满足以下式子:   assert p = gcd(n1,n2)   assert pow(flag,e1,n1)==c1   assert pow(flag,e2,n2)==c2   assert gcd(e1,(p1-1) (q1-1))==gcd(e2,(p2-1) (q2-1)) 0x01 低加密指数攻击

m ^ e = kn + c 其中一般 e = 3,k比较小(k小于10亿爆破时间一般小于半小时)。 0x02 低加密指数广播攻击 c1 ≡ m^e mod n1   c2 ≡ m^e mod n2   ……   ce ≡ m^e mod ne   如以上所示,e比较小,题目给出n[e]和c[e],且m相同,利用中国剩余定理可以求m。 0x03 低解密指数攻击 与低加密指数攻击相反,需要满足e非常大,接近于N。 0x04 共模攻击 c1 ≡ m^e1 mod n   c2 ≡ m^e2 mod n   如以上使用了相同的模数N对相同的明文进行加密。 0x05 Boneh and Durfee attack e 非常大接近于N,跟低解密指数攻击类似,比低解密指数攻击更强,可以解决d的0.292次方的问题。 0x06 Coppersmith 攻击:已知p的高位攻击 知道p的高位为p的位数的约1/2时即可。 0x07 Coppersmith攻击:已知明文高位攻击 0x08 Coppersmith攻击:已知d的高位攻击 如果知道d的低位,低位约为n的位数的1/4就可以恢复d。 0x09 Coppersmith 攻击:明文高位相同 0x0A 已知dp或dq(dp=d mod p-q , dq=d mod q-1) 0x0B Least Significant Bit Oracle Attack 0x0C 其他思路 给出两组数据:   n1,c1,e1,n2,c2,e2 且无以上特征可尝试gcd(n1,n2)得到公因子(存在的话)。   给出一组数据:   n1,c1,e1   尝试yafu或http://www.factordb.com分解n(p,q相差过大或过小yafu可分解成功)。   给出如下数据:   p,q,nextprime(p),nextprime(q)   n1 = p * q   n2 = nextprime(p) * nextprime(q)   n = n1 * n2   用yafu分解n可得到:   n3 = p * nextprime(q)   n4 = q * nextprime(p)

参考文献 https://www.tr0y.wang/2017/11/06/CTFRSA/index.html http://inaz2.hatenablog.com/entry/2016/01/20/022936 943439aa-491e-eb11-8da9-e4434bdf6706.png - End - 9a3439aa-491e-eb11-8da9-e4434bdf6706.png

看雪ID:丿feng

https://bbs.pediy.com/user-809191htm 

*本文由看雪论坛 丿feng 原创, 转载请注明来自看雪社区

推荐文章++++

a03439aa-491e-eb11-8da9-e4434bdf6706.png

* 移动基带安全研究系列之一 概念和系统篇

* Linux Kernel Exploit 内核漏洞学习(4)-RW Any Memory

* Android 调试任意APK - smail工程--多进程

* 使用IDA Python寻找二进制漏洞

* 看雪CTF从入门到存活(六)主动防御

进阶安全圈,不得不读的一本书 a33439aa-491e-eb11-8da9-e4434bdf6706.png ﹀ ﹀ ﹀ a73439aa-491e-eb11-8da9-e4434bdf6706.png ab3439aa-491e-eb11-8da9-e4434bdf6706.gif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值