一. 公钥私钥生成算法
步骤1
找两个很大的质数p和q
n = p * q
m = Φ(n) =Φ(p) * Φ(q) = (p -1)(q-1)
Note:n的二进制位数即RSA密钥的位数,当前2048ok
步骤2. 生成公钥
找一个和m互质的整数e
(e,n)即为公钥
步骤3. 生成私钥
找一个整数d, 使得e*d mod m = 1
(d,n)即为私钥
Note:
欧拉定理:两个正整数a和n互质,则 a的Φ(n)次方 = 1 (mod n).
引申1:正整数a与质数p互质,则Φ(p) = p -1, a的(p-1)次方 = 1 (mod p) 。即费马小定律
引申2:a的Φ(n)次方 = a * a的Φ(n - 1)次方= 1 (mod n)
a的Φ(n - 1)必为a的一个模反元素(私钥)
{ab=1(mod n), b叫a的模反元素}
二. 加密算法(m明文,c密文)
加密
m的e次方 mod n = c
解密
c的d次方 mod n = m
三. 解密算法证明过程
四. 算法可靠性
求d,只有根据已知条件ed mod Φ(n) = 1来破解
而Φ(n) = (p-1)(q-1), 也就是pq的值需要对n (n = p*q)进行因式分解之后才能取得
对一个大数(2048bits = 156bytes)进行因式分解,对计算机来说,因为时间太长,是目前不得不放弃的。
五. 其他
因算法对称
(e,n) (d,n)任意一个都可作为公钥发布出去,另一个留做私钥。