最近看了几篇RSA加密算法的相关文章,CTF中常见的几种和RSA有关的题目大多都有套路,下面趁写文章学习总结一波:
1.e较大:
wiener攻击
解密代码链接https://codeload.github.com/pablocelayes/rsa-wiener-attack/zip/master
理论基础链接https://blog.csdn.net/oumeixi_wjp/article/details/44747329
这种攻击方法适合在知道e,n,a,m的情况下使用,e一般很大,这时通过a求出p,q,进而求d
2.e较小:
直接开方
相关链接https://blog.csdn.net/jeffreynnn/article/details/77169723
有时数太大需要提高精度,安恒7月赛的writeup里有相关内容
3.低加密指数广播攻击:
相同低指数的e和多个相同的消息m
相关链接https://blog.csdn.net/xuqi7/article/details/75578414
这种情况适合已知多组对应的c,n,同时已知m和e相同
4.coppersmith定理攻击:
只有部分高位的p或q
相关链接https://www.52pojie.cn/thread-653446-1-8.html
这种攻击方法适合用OpenSSL只能分解出p的一部分的情况,具体如链接
5.共模攻击:
相同n,相同m
https://www.cnblogs.com/gwind/p/8013154.html
这种攻击方法适合已知n,以及互相对应的多对c,e,利用e1s1+e2s2 = 1,(c1^s1*c2^s2)%n = m^%n 这两个公式求出m,具体方法见链接。
6.已知dp的攻击:
相关链接https://mp.weixin.qq.com/s/Mkkl_lXLlKJ70VzNVRqOTA
给定e,n,dp,c,dp≡d mod (p-1)经过复杂的推导可得x (p-1)+1=dpe,x∈(0,e),通过遍历x,可以求出p-1,进而求d。
7.已知dp,dq,p,q的攻击:
相关链接https://mp.weixin.qq.com/s/eNerFn4Aw3l7xeVnnDxKpg
给定dp,dq,p,q,c,通过推导可得m≡(((m2-m1)*p-1 mod q)p+m1)mod n ,那么m1,m2怎么求呢?还是经过推导可得m1=cdp mod p,m2=cdq mod q