一、基本的数学概念与理论
- 最大公因数,又叫最大公约数,是指两个或多个整数共有约数中最大的一个,使用符号gcd来表示,例如gcd(a,b)表示a和b的最大公约数。
- 欧几里得算法又称辗转相除法,用于计算两个整数的最大公约数,公式表示为gcd(a,b)=gcd(b,a mod b)。
- 欧几里得扩展算法,对于不完全为 0 的非负整数 a,b,必然存在存在整数对 x,y ,使得 gcd(a,b)=ax+by。
- 最小公倍数,两个或多个整数公有的倍数叫做它们的公倍数,其中除0以为最小的一个公倍数就叫做这几个整数最小公倍数,使用符号lcm来表示,例如lcm(a,b)表示,a和b的最小公倍数。
- 质数,又称为素数,是指只能被1或自身整除的正整数。如果整数a和b的最大公约数为1,也就是gcd(a,b)=1,则称a和b互质。
- 同余,使用符号≡表示,假设m是大于1的正整数,a和b是整数,如果m|(a-b),则称a与b关于模m同余,记做a≡b(mod m),读作a同余于b模m。
- 模反元素,如果两个正整数a和n互质,那么一定能知道整数b,使得ab≡1(mod n),那么我们称b为a关于模n的模反元素。
- 欧拉函数,在数论中,对正整数n,小于n的正整数中与n互质的数目称为欧拉函数,使用符号φ(n)来表示。
- 费马小引理,假设a为不能被质数p整除的正整数,则必有a^(p-1)=1(mod p)。
- 欧拉定理又叫费马欧拉定理,假设a和n都是正整数,并且gcd(a,n)=1,则存在a^φ(n)≡1(mod n)。
- 中国余数理论(CRT),假设p和q是两个不同的质数,n=pq,对于任意两个数x1,x2,其中0 ≤ x1 < p, 0 ≤ x2 < q,必然存在唯一的数x,使得 x1 = x mod p 并且 x2 = x mod q。
- 算数基本定理又叫正整数唯一分解定理,对于任意自然数n(n>=2),均可分解为质数的乘积,如果不考虑排列顺序,该分解是唯一的。
二、RSA加密算法概要
非对称加密又叫公开秘钥加密,需要两个秘钥:公开秘钥(publickKey)和私有秘钥(privateKey)。公钥与私钥是一对儿,私钥由公钥决定,一般使用公钥加密,私钥解密,当然使用私钥加密,使用公钥解密也可以,但因为公钥是公开的,失去了加密的的意义。
RSA加密算法,是非对称加密的一种实现,是基于一个简单的数论事实,即将两个大的质数相乘非常容易,但是想要对其乘积进行因式分解为两个大的质数缺非常困难,因此可以将乘积公开作为加密秘钥,使用公式表示为(m^e)^d≡m(mod n),m表示消息,(n,e)表示公钥,(n,d)表示私钥,根据初等数论,即使知道e,n也很难推导出d。
三、RSA秘钥生成步骤
- 选取两个大的质数p和q,出于安全考虑p和q都要随机产生,并且足够大位数也要有差别。
- 计算n=pq,n被用做公钥和私钥的模数。一般以n的二进制表示的位数作为秘钥的长度。
- 计算欧拉函数φ(n)=(p-1)(q-1)。
- 选取一个整数e,使得e大于1小于 φ(n)并且gcd(e,φ(n))=1,也就是说e要与φ(n)互质。
- 计算d使得d*e≡ 1 (mod φ(n))。
- 使用(n,e)作为公钥,(n,d)作为私钥。
四、加密
假设M代表要加密的密文,需要将M转换为一个大数m,使用公钥(n,e)加密,加密后的密文用c来表示,公式表示如下:c≡m^e(mod n)
五、解密
使用私钥(n,d)来解密,公式表示如下:c^d≡(m^e)^d≡m(mod n)
六、例子
- 选取p=61,q=53
- 计算n=61*53=3233
- 计算欧拉函数φ(n)=(61-1)(53-1)=3120
- 选取一个数e,取自范围为(1,3120),并且要与3120互质,这里选取e=17
- 计算d,d*17≡1(mod 3120),根据欧几里得扩展算法,得到d等于2753
- 公钥加密c=m^17(mod 3233),假设m取65,c=65^17(mod 3233)=2790
- 私钥解密c^d≡2790^2753≡m^17^2790≡m(mod 3233)。
七、使用中国余数定理加快解密过程
- d mod (p-1) =2753 mod (61-1)=53,使用符号dp表示
- d mod(q-1)=2753 mod (53-1)=49,使用符号dq表示
- q^-1 mod p = 53 ^ -1 mod 61 = 38,使用符号qinv来表示,其实就是q的关于模p的模反元素。通过模反元素可以得到(qinv * q) mod p = 38 * 53 mod 61 = 1。下面是使用这些常数来计算m的过程:
m1 = c^dp mod p = 2790^