CTF——针对RSA的共模攻击

0x00 背景

在今年的5space比赛中做到一道比较简单的RSA题。由于没怎么接触过crypto的题目(别的题都好难,做不出来呀233),在这里写一下解法,顺便记录一下有关RSA共模攻击的知识。
那么什么是共模攻击呢,大致就是我们可以获取到同一个明文m的经过两个公钥e1,e2加密的密文c1,c2,并且有c1=pow(m,e1,n);c2=pow(m,e2,n)
那么,若e1,e2互素,由扩展欧几里得算法,存在e1*s1+e2*s2==1。我们就可以求m≡m^(e1*s1+e2*s2)≡(m^e1)^s1*(m^e2)^s2≡c1^s1*c2^s2 mod n。其中c1,c2已知,s1,s2可由欧几里得算法求出。
看一下python2的求解代码:
在linux系统下安装gmpy2库我是参考这个博文的:
gmpy2安装使用方法

import libnum
import gmpy2

def common_modulus(n, c1, c2, e1, e2):
    assert(libnum.gcd(e1, e2))
    _, s1, s2 = gmpy2.gcdext(e1, e2)#扩展欧几里得算法
    #若s1<0,则c1^s1==(c1^-1)^(-s1),其中c1^-1为c1模n的逆元。
    if s1 < 0:
        s1 = -s1
        c1 = gmpy2.invert(c1, n)
    if s2 < 0:
        s2 = -s2
        c2 = gmpy2.invert(c2, n)
    return pow(c1, s1, n)*pow(c2, s2, n)%n

0x01 具体题目rosb

加密脚本如下:

from
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值