1.对称加密:
- 甲方选择某一种加密规则,对信息进行加密;
- 乙方使用同一种规则,对信息进行解密。
非对称加密:
- 乙方生成两把密钥(公钥和私钥)。公钥是公开的,任何人都可以获得,私钥则是保密的。
- 甲方获取乙方的公钥,然后用它对信息加密。
- 乙方得到加密后的信息,用私钥解密。
2. 欧拉定理:RSA算法的核心
可以大大简化某些运算,比如,7和10互质,根据欧拉定理,
已知 φ(10) 等于4,所以马上得到7的4倍数次方的个位数肯定是1。
如果n是一个质数,那么这就是费马小定理。
3. 模反元素:
如果两个正整数a和n互质,那么一定可以找到整数b,使得 ab-1 被n整除,或者说ab被n除的余数是1。
这时,b就叫做a的”模反元素”。
- 生成秘钥的步骤:
a. 随机选择两个不相等的质数p和q。
b. 计算p和q的乘积n。
c. 计算n的欧拉函数φ(n),φ(n) = (p-1)(q-1)。
d. 随机选择一个整数e,条件是1< e < φ(n),且e与φ(n) 互质,实际应用中,常常选择65537,但要留心是否互质。
e. 计算e对于φ(n)的模反元素d。其实就是扩展欧几里得解一个二元一次方程。
f. 将n和e封装为公钥,n和d封装为私钥。 - 可靠性:
假设已知n 和 e,那么我们如果求出φ(n)求可以求出来d,但是当n很大时,很难做因数分解求得p和q的值,也就无法求出来φ(n)。 - 如何加密:
加密使用的是公钥,假设加密的信息是m,m必须是一个整数且小于n,字符串可以利用其对应的ascii码或者unicode值。
me ≡ c (mod n)
我们通过这个式子加密后得到c的值,并传递c。 - 如何解密:
解密使用的是私钥,
cd ≡ m (mod n) 通过这个就可以利用私钥得到原文m。
如果m的信息量太大,那么我们一般采取分段加密或对对称性加密的密钥进行非对称加密。 - 加解密正确性的证明:
我们来证明下面这个式子:
cd ≡ m (mod n)
因为,根据加密规则
me ≡ c (mod n)
于是,c可以写成下面的形式:
c = me - kn
将c代入要我们要证明的那个解密规则:
(me−kn)d ≡ m (mod n)
它等同于求证
med ≡ m (mod n)
由于
ed ≡ 1 (mod φ(n))
所以
ed = hφ(n)+1
将ed代入:
mhφ(n)+1 ≡ m (mod n)
接下来,分成两种情况证明上面这个式子。
(1)m与n互质。
根据欧拉定理,此时
mφ(n) ≡ 1 (mod n)
得到
(mφ(n))h × m ≡ m (mod n)
原式得到证明。
(2)m与n不是互质关系。
此时,由于n等于质数p和q的乘积,所以m必然等于kp或kq。
以 m = kp为例,考虑到这时k与q必然互质,则根据欧拉定理,下面的式子成立:
(kp)q−1 ≡ 1 (mod q)
进一步得到
((kp)q−1)h(p−1) × kp ≡ kp (mod q)
即
(kp)ed ≡ kp (mod q)
将它改写成下面的等式
(kp)ed = tq + kp
这时t必然能被p整除,即 t=t’p
(kp)ed = t’pq + kp
因为 m=kp,n=pq,所以
med ≡ m (mod n)
参考资料:
http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html