模运算
非对称加密解密所用到的一个非常重要的特性就是模运算不可逆
比如算 33 mod 7 的值, 很容易算出余数为 27 - 21 = 6
但是知道 3x mod 7=6, 然后求 x 的值呢,那么就只能挨个去试了,但是如果式子中的数字稍微大那么一点,比如
520x mod 1011=721
再挨个去试就很不现实了。
试想有3个数字, e,d,n 满足下面的条件
me mod n=c
cd mod n=m
m 可以表示是要加密的信息,c 表示加密后的密文, 那么就可以通过这个规则对信息进行加解密了,其中
- (e,n) 用来当做 公钥
- (d,n) 用来当做 私钥
上面公式经过一些变化可以得到
med mod n=m
如何选取这个 e 和 d 便成了非对称加密中的最关键的问题, 这就提到了欧拉定理
欧拉函数
讲欧拉定理前,先说下什么是欧拉函数
对于正整数N, 欧拉函数 ϕ(n) 的值等于从 1 到 N 中与 N 互质的数的个数
互质: 如果两个整数它们的最大公约数为 1, 则这两个数互质。
比如
正整数 N | 与 N 互质的数 | 欧拉函数值 |
---|
2 | {1} | ϕ(2) = 1 |
3 | {1, 2} | ϕ(3) = 2 |
4 | {1, 3} | ϕ(4) = 2 |
5 | {1, 2, 3, 4} | ϕ(5) = 4 |
6 | {1, 5} | ϕ(6) = 2 |
7 | {1, 2, 3, 4, 5, 6} | ϕ(7) = 6 |
对于质数来说, 小于它的数都与它互质,所以对于质数 n, 有 ϕ(n)=n−1
欧拉定理
对于互质的正整数 m、n,则 m 的 ϕ(n) 次方与1同余,模为 n, 即
mϕ(n)≡1 (mod n)
我们对公式进行一些简单的变换,等式两端同时取 k 次幂, 即
(mϕ(n))k=1k (mod n)
等同于
mkϕ(n)=1 (mod n)
两端同时乘以 m
mkϕ(n)∗m=1∗m (mod n)
再简化
mkϕ(n)+1=m (mod n)
最后将模运算写在等式的左边
mkϕ(n)+1 mod n=m
然后和之前的加解密公式对应起来
med mod n=m
我们可以将 d 与 e 的关系表示成下面这种形式
ed=kϕ(n)+1
即
d=ekϕ(n)+1
我们可以通过选取这里的 k,n,e 来计算用于解密的密钥 d
前面讲欧拉函数的时候我们讲到,对于互质的数,有 ϕ(n)=n−1 , 除此之外欧拉函数还有一个重要的特性,对于互质的 p 和 q
ϕ(p∗q)=ϕ(p)∗ϕ(q)
我们选取 p=3,q=11,因此 n=p×q=33,ϕ(n)=ϕ(3)×ϕ(11)=2×10=20
d=ek×20+1
我们找一个与 20 互质的较小的数 3 当做 e, 然后尝试找满足等式的 d,当 k=1的时候,存在 d=7 满足条件,然后就可以把公钥 e=3,n=33 公布当做公钥,自己保留 d=7 当做私钥。
至此就生成了不容易被破解非对称的密钥。