RSA加密

rsa加密

基础知识:

rsa是一种非对称加密,(有公钥私钥两把不同密钥)。

单向函数:单方向计算容易,反向难。例:x→f(x)容易,而f(x)→x难。

同余:a ≡ b (mod m)意思是a-b = mk。
推论:ab mod k = (a mod k) * (b mod k) mod k

模逆元:也称模倒数。a-1 ≡ 1 (mod n)相当于:ab = 1 (mod n)。python中有包可以直接用来求模逆元。

模运算:
加法:3+4≡0 (mod 7) , 5+5 ≡ 3 (mod 7), 1+5 ≡ 6 (mod 7)
减法:5-2 ≡ 3 (mod 7) , 3-5 ≡ 3-5+7 ≡ 3+2 (mod 7)
乘法:3 ×4 ≡ 5 (mod 7) , 2×2 ≡ 4(mod 7)
除法:5/4 ≡ 5×4-1 ≡ 5×invert(4,7) ≡5×2 ≡ 3 (mod 7)(除法说法不严谨)

欧拉函数:对正整数N,欧拉函数是小于等于N的正整数中与N互质的数的数目。易知,当N数很大时,计算就很困难了,而当N的因式分解已知时,就会有简单的方法:在这里插入图片描述
例:N=240,已知240=24×3×5
则Ψ(N)=23 ×(2-1)×(3-1)×(5-1)=8×1×2×4=64
费马小定理:假如a为一个整数,p为一个素数,则 a(p-1)≡1 (mod p)
欧拉定理:假如a和m都是整数,且gcd(a,m) = 1则有aΨ(m) ≡ 1(mod m)
(gcd:最大公约数)
费马小定理是欧拉定理的特殊情况

RSA加密
密钥对的产生:
①、选择两个大素数p、q,使得n=pq
②、计算Ψ(n) =(p-1)(q-1)
③、随机数e,要求e与Ψ(n)互素
④、计算d满足ed=1(mod Ψ(n))
加密:
c = me(mod n)
解密:
m = cd(mod n)
实现RSA加密
下载python中crypto包
from Crypot.Util.number import*导入包中所有函数。

getPrime()函数,括号里为参数长度,此函数用于产生一个指定长度的随机素数。

getStrongPrime()函数,括号里为参数长度,此函数用于生成一个更安全的素数。

inverse()函数,括号有两个参数,当两个参数不互素的时候返回除以最大公约数后的逆元,两个参数互素时,和gmpy2的invert返回值相同。而invert函数当两个参数不互素时会报错。

isPrime()函数可以用来判断是否为素数

GCD()函数用来求最大公因数

gmpy2的iroot函数用于开n次方,两个参数m,n,返回结果为一个数字(对m开n次方),结果为整数,和一个布尔数(结果的n次方是否刚好等于原来的数)

pow(m,e,n)函数计算m 的e次方 模n的值
pow(m,e)函数计算m的e次方

RSA相关攻击算法

1、分解素因数攻击
已知e,n,c,求m

m=pow(c,d,n)
d=invert(e,Ψ(n))

由于单向性,一直n并不能容易得出p q,也就不能容易得出Ψ(n)

当n的值很大时,往往不能通过枚举法来分解因数,(而如果生成的素数是不安全的,就可能使n很容易被分解)(通常生成的素数约2048位)

有分解n的网址:

https://www.alpertron.com.ar/ECM.HTM

http://www.factordb.com/index.php

共模攻击

如果在RSA的使用中使用了相同的模n对相同的明文m进行了加密,那么就可以在不分解n是情况下还原出明文m:在这里插入图片描述

通过扩展欧几里得算法 可以计算出:在这里插入图片描述
在这里插入图片描述
若已知p+q或p-q或者其他pq之间的关系,则可通过方程组求得p, q进而得出Ψ(n),也可直接使用SageMath中Solve函数来解方程组:
Solve([p*q = = n,p+q = = a], [p,q])

小公钥指数攻击

当e很小时,则c可能不比n大多少,则可以用枚举法来求:m^e=c+k*n
尝试枚举k并开根,能得到m

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值