RSA算法

一.原理

1.加密方式

  加密过程可以用一个公式来表达: 密文=明文的E次方 mod N

  也就是说RSA加密是对明文的E次方后除以N后求余数的过程。E、N是RSA加密的密钥,也就是说E和N的组合就是公钥,我们用(E,N)来表示公钥:

  即公钥=(E,N)

2.解密方式

  解密通式为:明文=密文的D次方 mod N

也就是说对密文进行D次方后除以N的余数就是明文,这就是RSA解密过程。知道D和N就能进行解密密文了,所以D和N的组合就是私钥:

  即私钥=(D,N)

3.生成密钥对

  1.求N

  准备两个互质数p,q(这两个数不能太小,太小则会容易破解)将p乘以q就是N。

N=p*q

2.求Φ(N)

   Φ(N)是 p-1 和 q-1的最小公倍数,可用如下表达式表示

Φ(N)=lcm(p-1)*(q-1)

3.求E

  E必须满足两个条件:E是一个比1大比Φ(N)小的数,E和Φ(N)的最大公约数为1。

  用gcd(X,Y)来表示X,Y的最大公约数则E条件如下:

1<E<Φ(N)
gcd(E,Φ(N))=1

E和Φ(N)的最大公约数为1保证了一定存在解密时需要使用的数D。求出N即为求出密钥中的公钥。

4.求D

数D是由数E计算出来的,数D必须保证足够大。D、E和L之间必须满足以下关系:

1<D<Φ(N)
E*D mod Φ(N)=1

即D满足上述2个条件,则通过E和N进行加密的密文就可以用D和N进行解密。现在私钥生成了,密钥对也就生成了。

二.数学证明

1.欧拉定理

  设a,m∈N,(a,m)=1,则a^(φ(m))≡1(mod m) (注:φ(m)指模m的简系个数, φ(m)=m-1, 如果m是素数;φ(m=q1^r1 * q2^r2 * ...*qi^ri)=m (1-1/q1)(1-1/q2)...(1-1/qi))

  推论: 费马小定理: 若p为质数,则a^p ≡ a (mod p) 即a^(p-1) ≡ 1 (mod p)

(注:≡是同余号,例如 a mod n ≡ b(a与b对模n同余)

2.一些性质

1 反身性

 a ≡ a (mod m)

2 对称性 

若a ≡ b(mod m) 则b ≡ a (mod m)

3 传递性 

若a ≡ b (mod m),b ≡ c (mod m),则a ≡ c (mod m)

4 同余式相加

若a ≡ b (mod m),c≡d(mod m),则a+-c≡b+-d(mod m)

5 同余式相乘

 若a ≡ b (mod m),c≡d(mod m),则ac≡bd(mod m)

6 乘方

如果a ≡ b (mod m),那么a^n ≡ b^n (mod m)

3.证明

 若证明 m经加解密后还是 m,即证明等式 m = ( m ^e mod N ) ^d  mod N

可分以下两种情况讨论

1.明文m与N互质

(m^e mod N)^d mod N   其中(m<N)

=m^(ed) mod N

=m mod N

=m(因为m<N)

2.明文m与N不互质

m 不与 N互质,N = p*q ,p ,q 都为质数。则一定有m = cp或m=cq,c是正整数。

假设m=cp

则有(cp)^ed mod q

= (cp)mod q

因此可以写成(cp)^ed =cp+kq,k是正整数。又(cp)^ed mod p=0,即(cp+kq) mod p=0,即kq mod p=0,又p,q互质。故k=rp,r是正整数。

因此(cp)^ed=cp+kq=cp+rpq=cp+rN。

所以(cp)^ed mod N=(cp+rN) mod N=(cp)%N

即m^ed mod N=m mod N

故m=(m^e mod N)^d mod N 得证。


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值