RSA小关

公钥算法(非对称加密算法):公钥加密,私钥解密

RSA安全性基于大数质因数分解困难
RSA:
1、随机选两不同大质数p和q计算N=p×q
2、求Δ(N)=(p-1)×(q-1)
3、选取e与Δ(N)互质,满足1<e<Δ(N)
4、求得e关于Δ(N)的模逆元素d,即ed=1 mod Δ(N),使用d=gmpy2.invert(e,Δ(N))

(N,e)是公钥
(p,q,d)是私钥

加密过程:c=m^e mod N
解密过程:m=c^d mod N

RSA相关:
1、共模攻击
欧几里得算法:gmpy2.gcd(a,b)
扩展欧几里得算法(辗转相除):已知整数a,b,当a,b互素的时候:ax+by=1=>ax+by=gcd(a,b),用不同的e,相同n加密相同数据
gmpy2.gcdext(a,b)#扩展欧几里得算法,所得即为s1,s2
公式:c1(s1)*c2(s2)=m mod n
m=pow(c1,s1,n)*pow(c2,s2,n)%n
2、低加密指数攻击
当e非常小时,因为c=m^e mod N
所以m^e=c+kN即=>m=(kN+c)开e次方根
公式:gmpy2.iroot(x,n)#x开n次根
3、Wiener攻击(低解密指数攻击)
当d非常小时,可用Wiener攻击,特征:e非常大,正常为65535
利用rsa-wiener-attack工具
4、直接分解N
在线工具或yafu

记录几个解题脚本

  • RSA(共模攻击):
#公式:c1^(s1)*c2^(s2)=m mod n
#m=pow(c1,s1,n)*pow(c2,s2,n)%n
import gmpy2
from libnum import n2s
from libnum import s2n
n = 
e1 = 
e2 = 
c1 = 
c2 = 
a,s1,s2=gmpy2.gcdext(e1,e2)
if s1<0:
	s1=-s1
	c1=gmpy2.invert(c1,n)
elif s2<0:
	s2=-s2
	c2=gmpy2.invert(c2,n)
m=pow(c1,s1,n)*pow(c2,s2,n)%n
print(m)
print(n2s(m))
  • RSA(低指数攻击):
#gmpy2.iroot(x,n)#x开n次根
import gmpy2
from libnum import n2s
from libnum import s2n
e = 3 
#且明文很小 
n= 
c= 
#求 m
#m=(c+kN)的开e次方根
m=gmpy2.iroot(c,3)
print(m)
print(n2s(int("{:x}".format(m[0]),16)))
  • RSA(p,q分解):
#p=*A*+B,q=*B*+A
import gmpy2
import random
from libnum import n2s,s2n
c=
n=
e=
n0=n/(10**600)
n1=(n/(10**400))%(10**200)
n2=(n/(10**200))%(10**200)
n3=n%(10**200)
AB=0
if(n1/(10**199)>=n3/(10**199)):
	AB=n0*(10**200)+n3
else:
	AB=(n0-1)*(10**200)+n3
A2B2=(n-AB*(10**400+1))/(10**200)
AplusB=int(gmpy2.iroot(A2B2+2*AB,2)[0])
AminusB=int(gmpy2.iroot(abs(A2B2-2*AB),2)[0])
A=(AplusB+AminusB)/2
B=(AplusB-AminusB)/2
p=A*(10**200)+B
q=B*(10**200)+A
phi=(p-1)*(q-1)
d=gmpy2.invert(e,phi)
print n2s(pow(c,d,n))
  • RSA(n分解三变二):
import gmpy2
from libnum import n2s,s2n
n = 
e = 
c = 
r=
p=
q=
phi=(q-1)*(r-1)
d=gmpy2.invert(e,phi)
print(n2s(pow(c,d,q*r)))

For me

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值