非对称加密 symmetric encryption
公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。
原理:
取两个大质数p q,p<>q,N=pq
根据欧拉函数,不大于N且与N互质的整数个数为(p-1)(q-1)
选择一个整数E与(p-1)(q-1)互质,并且e小于(p-1)(q-1)
用以下这个公式计算d:D×E≡1(mod(p-1)(q-1)) 或 D×E mod(p-1)(q-1)≡1
(N,E)是公钥,(N,D)是私钥
假设密文是m,将m按照约好的格式将m转换为一个小于N的整数n(可以分为多段)
将n加密:
c=n^E modN
将c解密:
n=c^E modN
解码原理:假如p是质数,且gcd(a,p)=1,那么 a^(p-1)≡1(mod p)
=>n^ED=n(mod pq) =>n^ED=n(modN) (2)
结合(1)(2)可知 c^D=n(mod N) 证明完成。
实践举例
我们用具体的数字来实践下RSA的密钥对对生成,及其加解密对全过程。为方便我们使用较小数字来模拟。
1 求N
我们准备两个很小对质数,
p = 17
q = 19
N = p * q = 323
2 求L
L = lcm(p-1, q-1)= lcm(16,18) = 144
144为16和18对最小公倍数
3 求E
求E必须要满足2个条件:1 < E < L ,gcd(E,L)=1
即1 < E < 144,gcd(E,144) = 1
E和144互为质数,5显然满足上述2个条件
故E = 5
此时公钥=(E,N)= (5,323)
4 求D
求D也必须满足2个条件:1 < D < L,E*D mod L = 1
即1 < D < 144,5 * D mod 144 = 1
显然当D= 29 时满足上述两个条件
1 < 29 < 144
5*29 mod 144 = 145 mod 144 = 1
此时私钥=(D,N)=(29,323)
5 加密
准备的明文必须时小于N的数,因为加密或者解密都要mod N其结果必须小于N
假设明文 = 123
则 密文=明文^E mod N=123^5mod323=225