在对称加密算法中,信息的发送方和接收方用同样的密钥对信息进行加密和解密,而如何安全传递key本身成为了一个十分严重的问题,因此产生了公开密钥密码体制。
公开密钥密码体制使用不同的密钥来进行加密和解密,加密密钥公开(公钥),而解密密钥私有(私钥),加密算法和解密算法都是公开的。解密密钥由加密密钥决定,但却无法从加密密钥运算得到。
由于公钥和加密算法的公开,理论上攻击者可以尝试所有可能的原文并对其加密来与密文进行对比从而找出原文,而实际上这样的计算量过于庞大。所以公开密钥密码体制仅仅是计算上的安全,而非完美的安全。
RSA是目前最有影响力的公钥加密算法,其安全性基于对大素数相乘的结果没有有效的因式分解方法。在实际操作上,只要RSA的密钥足够长的,其加密的信息是无法被破解的。
RSA加密算法的流程
Alice向Bob发送加密信息:
1. Bob产生一对密钥对,包含一个公钥和一个私钥。
2. Bob发布他的公钥
3. Alice用Bob的公钥对信息进行加密并发送给Bob
4. Bob用私钥对收到的加密信息进行解密
RSA数学原理
取两个大素数
p和
q,
m = pq,取
d,
e 使
de = 1 mod (p-1)(q-1)。
加密算法:
ek(x) = xemod m
解密算法:
dk(y) = yd mod m
公钥:
e和
m
密钥:
d和
m
注:通常用
快速幂取模算法进行a^n mod bd的运算。
要证明该算法的正确性,我们只需证明
x = dk(ek(x)),即对信息加密并解密后,能否得到原始信息。
证明:
要证明
x等于
dk(ek(x)) = (xe mod m)d mod m = xde mod pq
因为p和q都是素数,所以我们只需证明
xde
= x mod p 且
xde = x
mod q 即可。
已知de = 1 mod (p-1)(q-1),所以存在h使得de - 1 = h (p -1)(q - 1)
xde = xde-1x = xh(p-1)(q-1)x= (xh(q-1))p-1x
由费马小定理 = 1h(q- 1)x mod p = x
(费马小定理:当x为整数p为素数,xp-1 = 1 mod p)
类似可得 xde <