RSA算法
倘若在加解密信息的过程中,能让加密密钥(公钥)与解密密钥(私钥)不同,即
- 甲要传密信给乙,乙先根据某种算法得出本次与甲通信的公钥与私钥;
- 乙将公钥传给甲(公钥可以让任何人知道,即使泄露也没有任何关系);
- 甲使用乙传给的公钥加密要发送的信息原文m,发送给乙密文c;
- 乙使用自己的私钥解密密文c,得到信息原文m .
就可以很好的克服对称加密算法的弱点,这种新的加密模式被称为“非对称加密算法”
可以观察到,从始至终,私钥一直都在信息接收方乙处
只要乙自己不泄露出去,私钥就没有泄露的可能
1977年,三位数学家Rivest、Shamir和Adleman设计了一种算法,可以实现非对称加密
这种算法用他们三个人的名字首字母命名,叫做RSA算法
RSA算法非常可靠,密钥越长,它就越难破解
至于难以破解的原理(安全性),在本文介绍完该算法后会有简要说明
下面,先介绍一些基本概念与数学定理
质数与互质数
这是小学数学的概念
- 一个大于1的自然数,除了1和它本身外,不能被其他自然数整除(除0以外)的数称之为质数(素数);否则称为合数。
例如,15=3×5,所以15不是素数
13除了等于13×1以外,不能表示为其它任何两个整数的乘积,所以13是一个素数
1不是质数,也不是合数
- 公约数只有1的两个数,叫做互质数。
判断或选取互质数的方法/定理有很多,如下所示
- 任意两个质数一定构成互质数(如3与11、53与61);
- 大数是质数的两个数一定是互质数(如97与88);
- 一个质数如果不能整除另一个合数,这两个数为互质数;
即一个数是质数,另一个数只要不是前者的倍数,两者就构成互质关系(如3与10、5与26); - 1和任何一个自然数在一起都是互质数;
- 相邻的两个自然数是互质数(如15与16);
- 相邻的两个奇数是互质数(如49与51)。
在RSA算法中,我们通常使用以上第1条与第2条
即选取两个本身都是质数的数作为互质数
而以上第2条定理对于计算欧拉函数值有着积极作用
模运算
模运算的定义如下
- 让m去被n整除,只取所得的余数作为结果,就叫做模运算。
例如,10 mod 3 = 1 、26 mod 6 = 2 、28 mod 2 = 0
同余
“≡”是数论中表示同余的符号
同余的定义如下
- 给定一个正整数m,如果两个整数a和b满足a-b能被m整除,即(a-b)modm=0,
那么就称整数a与b对模m同余,记作a≡b(modm),同时可成立amodm=b
再次提醒注意,同余与模运算是不同的
a≡b(modm)仅可推出b=amodm