学习RSA之理论知识与算法优化及攻击方式

学习RSA!!!!

本文包含了大量与数论有关的知识和证明(网上冲浪收集总结),不想看的可以直接看算法哈(有python链接)

目录

1.费马小定理与欧拉定理
2.中国剩余定理
3.RSA加解密算法优化
4.裴蜀定理
5.RSA的攻击


1.费马小定理以及欧拉定理

费马小定理:n是整数,p是素数,则 n(p-1)≡1 mod p
证明如下:
设p是素数,利用二项式可得: (n+1)p = np +(p的倍数)+ 1

二项式定理(百度百科
在这里插入图片描述
所以 (n+1)p – np – 1 = (p的倍数)

将(np-n)加上原式(别问我为什么 ),得:

n p - n + (n+1) p - n p - 1

=(n+1) p - n - 1

=(n+1) p - (n+1)

这个跟n p - n很像,如果设(n p - n)是p的倍数,则(n+1) p - (n+1)也是p的倍数。(因为(n+1) p – n p – 1是p的倍数)

因此我们直接用数学归纳法,令n=1,(1p-1) / p = 0,所以是p的倍数。所以原式成立。

所以n p – n 是p的倍数,即n p - n = p 倍,所以n p ≡ n mod p

最终得到费马小定理:n是整数,p是素数,则np≡n mod p(形式一)

因为n p - n = p * n * k(我也不知道哪里听到的)

所以约掉一个n,得:n (p-1) - 1 = p * k

所以n(p-1)≡1 mod p(形式二,更常用)

欧拉定理是基于费马小定理的拓展,证明较为复杂(其实是没看

下面直接给出结论:a,n属于整数且互素,则aφ(n)≡1 mod n
(φ(n)是欧拉函数,n为素数时φ(n)= n - 1)

因为RSA的解密公式是根据欧拉函数推出的,所以此时我们可以推导RSA的解密公式了。

RSA已知公式:e*d≡1 modφ(n)
RSA加密公式:C = me mod n

解密(推导过程)://以下的n*k都表示是n的倍数(懒

C = m e + n * k

C d
= m e*d + n * k;
= m (1+φ(n)*k) + n * k // 分开幂数
= m 1 * m (φ(n)*k) + n * k // 运用欧拉定理
= m * (1+n * k )k +n * k
= m * (1+n * k) + n * k
= m + n * k

所以 m = C d mod n

证明完毕。


2.中国剩余定理(Chinese remainder theorem(CRT))

《孙子算经》卷下第二十六题“物不知数”:

有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?

宋代数学家秦九韶在《数书九章》中对此做出了系统的解答。明朝数学家程大卫将解法编成易于上口的《孙子歌诀》:

三人同行七十稀,五树梅花廿一支,七子团圆正半月,除百零五使得知。

意思是:除3的余数 * 70 + 除5的余数 * 21 + 除7的余数 * 15 - 105的倍数 = 答案

解析:70是5和7的公倍数中除3余1的数,21是3和7的公倍数中除5余1的数,15是3 和5的公倍数中除7余1的数

系统来说就是,已知一个数x,m1,m2,m3 互素,x模m1余a,x模m2余b,x模m3余c,求x。

证法不会
解法:M1= m2 * m3 ; M2 = m1 * m3 ; M3 = m1 * m2;

t1为M1的模m1逆元(t1*M1≡ 1 mod m1 )

t2为M2的模m2逆元

t3为M3的模m3逆元

则 x = a * M1 * t1 + b * M2 * t2 + c * M3 * t3 – m1 * m2 * m3 * k(适当选择k使得x为最小正值)

即:x = (a * M1 * t1 + b * M2 * t2 + c * M3 * t3)mod (m1 * m2 * m3) (此时是唯一解)


3.RSA的算法优化

CRT可以用于解决RSA的加密解密的幂乘运算(也就是算法优化)。其基于两种不同的算法,一是基于单基数交换法(SRC,就是上面这个),二是基于混合基数转换法(MMRC)。

1.利用基于SRC的CRT法计算RSA(常用)

思路:m = c d mod n (原式)

→(m1 = c d mod p) 和 (m2=c d mod q)
(先转化成用这两个式子用SRC)

→(m1=c ^ (d mod (p-1)) mod p) 和 (m2= c ^ ( d mod (q-1)) mod q)

(然后运用费马小定理化简指数后变成用这两个式子用SRC)

下面开始推导:

假设已知c,d,p,q ,求m

先设d = k(p-1)+r 即 r = d mod (p-1) (我也不知道为啥)

令m1 = c d mod p; m2=c d mod q;

则m1
= c d mod p
= c^( k(p-1) + r ) mod p
= (c k(p-1) * c r) mod p //用欧拉定理 or 费马小定理
= (1+p * k ) k mod p * c r mod p
= c r mod p

因为r = d mod (p-1),
所以,m1=c^( d mod (p-1)) mod p
同理,m2= c^( d mod (q-1)) mod q

推导完毕。

算法:
d1 = d mod p-1
d2 = d mod q-1
c1 = c mod p
c2 = c mod q
m1 = c1d1 mod p
m2 = c2d2 mod q
t1 = q–1 mod p
t2 = p–1 mod q
m =(m1 * t1 * q+m2 * t2 * p) mod p * q

2.利用基于MMRC的CRT法计算RSA(速度是原来的4倍)
推理过程较为复杂,恕不展示 (其实是我不会

算法:
d1 = d mod p-1
d2 = d mod q-1
c1 = c mod p
c2 = c mod q
m1 = c1d1 mod p
m2 = c2d2 mod q // 前6步和上面一模一样
B = p–1 mod p
m=m1+(( (m2-m1) * B )mod q ) * p

python代码请参考wdxzkp的博客


4.裴蜀定理

裴蜀定理:a,b是两个整数,d=gcd(a,b) ,对于任意整数x,y都有ax+by =d的倍数。特别地,一定存在两个整数x,y使得ax+by=d。

密码学上的重要推论:对于互质的两个数a,b,一定存在 ax+by =1
(因为结果为1,所以两边可以同乘任何数,所以此时ax+by可以表示任何数)

证明如下:

d = gcd(a,b),所以 d | a , d | b , d | (ax+by)

设s = (ax+by)的最小正值,所以d | s

通过证明2得到(证明2在下面,先理一下思路)

s | a, s | b

又因为d | s

(s是a和b的因子,因为d是a和b的最大公因数,而且d也是s的因子,所以只能是d = s)

所以d = s,所以d = (ax+by) 成立

证明2在这:

设q= a/s 的向下取整
令r = a mod s , 即 r = a – s * q
代入s,得:
r
= a - s * q
= a - (ax+by) * q
= a*(1 - q * x) – b * y * q

所以r 也是a和b的线性组合(r=ax+by)

因为s = (ax+by)的最小正值,0 <= r < s

所以r只能为0

所以 a mod s = 0,
所以s | a,同理 s | b 。


5.关于RSA的攻击

1.RSA共模攻击

使用场景:RSA使用者用一个n得到2个e的情况(且e1,e2互素)

攻击者得到两组密文:
c1 = me1 mod n
c2 = m e2 mod n
即 已知 n,e1,e2,c1,c2,解m

因为e1,e2互素,运用裴蜀定理可得:e1 * r + e2 * s = 1
(r和s可以用扩展欧几里得算法直接解出来)

则c1^ r * c2^ s mod n
= (m^ e1) ^ r * (m^ e2) ^ s mod n
=(m^ e1 * r) * (m^ e2 * s) mod n
=m^(e1 * r + e2 * s) mod n
=m mod n

所以 m = c1 r * c2 s

在实际运算里面,r和s一定会有一个是负数。我们假设r是负数,要求c1r必须先求c1的模N逆元(即c1-1),再求(-r)的次方。
python代码为:m=pow(c1-1,-r,N)*pow(c2,s,N)%N

措施:不要在任意一组用户之间共享公钥

2.RSA选择密文攻击
使用场景:可以让原加密者进行签名

首先任选一个数r<n,并计算下列参数:
x = r e mod n (即r = x d mod n )
y = x * c mod n
t = r –1 mod n (t 为r的模n逆元)

然后将y送给攻击者进行签名,得到u:u = y d mod n

所以

u * t
= y d * r–1 mod n
=(x * c) d * r–1 mod n
= x d * c d * r–1 mod n
=r * c d * r–1 mod n
=cd mod n
= m

所以 m = u * t

还有其他的等有空再更新啦!!

参考链接:
https://www.cnblogs.com/gwind/p/8013154.html

参考文献:《中国剩余定理在 RSA解密中的应用》
文章编号 :1001 - 9383(2003) 03 - 0138 – 06

发布了8 篇原创文章 · 获赞 13 · 访问量 2621

猜你喜欢

转载自blog.csdn.net/jcbx_/article/details/100057294