公钥密码学与RSA
公钥密码学的发展的是整个密码学发展历史中最伟大的革命,也可以说是唯一一次的革命。
公钥密码出现前,几乎所有的密码体制都是基于替换和置换这些初等方法,轮转机和DES是密码学发展的重要标志,但是还是基于替换和置换。
公钥密码学与其前的密码学完全不同。首先,公钥算法是基于数学函数而不是基于替换和置换,更重要的是公钥密码是非对称的,它使用两个独立的**,使用两个**在消息的保密性、**分配和认证领域有着重要的意义。
传统密码存在的问题:
- **分配问题(加密之后,我怎么把**告诉你才是安全的?)
- 数字签名问题:抵赖;伪造。
对公钥密码的几种误解:
- 公钥密码比传统密码更加安全。(事实上,任何加密方法都依赖于**的长度和破译密文所需要的计算量)
- 公钥密码是一种通用密码,传统密码已经过时了。(其实正相反,由于现在公钥密码的计算量大,所以取缔传统密码似乎不太可能,公钥密码的发明者也说“公钥密码学仅限用在**管理和签名这类应用上”)
- 传统密码中**分配中心的会话是一件异常麻烦的事情,公钥密码实现**分配则非常简单。(事实上是不简单,也不见得有效)
公钥密码体制的基本原理
-
公钥加密
- Alice将明文用Bob的私钥加密传送
- 只有用Bob的私钥才能解锁
作用:加密
-
私钥加密
- 用Alice的私钥加密明文
- 所有人都可以用Alice的公钥进行解密
作用:数字签名,认证源
RSA算法实例
算法使用到的元素
两个素数p,q (保密的,选定的)
n=pq (公开的,计算得出的)Φ(n)=(p−1)(q−1)
e满足gcd( Φ(n),e )=1;(1<e<Φ(n)) ,gcd表示最大公约数 (公开的,选定的),意思就是e与Φ(n)互质。
d≡e^(-1)*(mod Φ(n)),即d和e的积模 Φ(n)余1 (保密的,计算得出的)
私钥为{d,n},公钥为{e,n}加密:
密文C=Me(mod n) ,明文M=Cd(mod n)
明文M=Medmod n 计算题:
p=3,q=11,e=7,明文M=5,求密文?
解:
n=p*q=3X11=33
Φ(n)=(3-1)*(11-1)=20
7*d=1(mod 20),所以d可以为3
私钥={3,20},公钥={7,20}
密文C=5^7(mod 33)=14
(转换为明文验证:M=14^3 (mod 33)=5,正确)