RSA算法

非对称加密

1、乙方生产公钥和密钥。公钥是公开的,任何人都可以获得,私钥则保密,只有乙方看得到。
2、乙方将公钥给甲方,甲方用它给信息加密。
3、乙方获得加密的信息,用私钥解密。

一些数论知识

1、互质关系

  1. 任意两个质数构成互质关系,比如13和61。
  2. 一个数是质数,另一个数只要不是前者的倍数,两者就构成互质关系,比如3和10。
  3. 如果两个数之中,较大的那个数是质数,则两者构成互质关系,比如97和57。
  4. 1和任意一个自然数是都是互质关系,比如1和99。
  5. p是大于1的整数,则p和p-1构成互质关系,比如57和56。
  6. p是大于1的奇数,则p和p-2构成互质关系,比如17和15。

欧拉函数

任意给定正整数n,请问在小于等于n的正整数之中,有多少个与n构成互质关系?

1、如果n=1,则 φ(1) = 1 。因为1与任何数(包括自身)都构成互质关系。
2、如果n是质数,则 φ(n)=n-1 。因为质数与小于它的每一个数,都构成互质关系。
3、如果n是质数的某一个次方,即 n = p^k (p为质数,k为大于等于1的整数),则
4、如果n可以分解成两个互质的整数之积,n = p1 × p2,则φ(n) = φ(p1p2) = φ(p1)φ(p2)
5、通用计算公式

欧拉定理

如果两个正整数a和n互质,则n的欧拉函数 φ(n) 可以让下面的等式成立:

模反元素

如果两个正整数a和n互质,那么一定可以找到整数b,使得 ab-1 被n整除,或者说ab被n除的余数是1。



b就叫做a的"模反元素"

RSA算法原理

1、随机选择两个不相等的质数p和q(两个质数越大越难破解)。
2、计算p和q的乘积n。n的二进制长度就是密钥长度。
3、计算n的欧拉函数φ(n) = (p-1)(q-1)。
4、随机选择一个整数e,条件是1< e < φ(n),且e与φ(n) 互质。
5、计算e对于φ(n)的模反元素d。
6、将n和e封装成公钥,n和d封装成私钥。

如何推导出d?

(1)ed≡1 (mod φ(n))。只有知道e和φ(n),才能算出d。
(2)φ(n)=(p-1)(q-1)。只有知道p和q,才能算出φ(n)。
(3)n=pq。只有将n因数分解,才能算出p和q。

加密和解密

(1)加密要用公钥 (n,e)
利用公钥 (n,e) 对m进行加密。这里需要注意,m必须是整数(字符串可以取ascii值或unicode值),且m必须小于n。
m^e ≡ c (mod n)
(2)解密要用私钥(n,d)
c^d ≡ m (mod n)

那么如果要加密大于n的整数,该怎么办?有两种解决方法:一种是把长信息分割成若干段短消息,每段分别加密;另一种是先选择一种"对称性加密算法"(比如DES),用这种算法的密钥加密信息,再用RSA公钥加密DES密钥。

你可能感兴趣的:(RSA算法)