9 公钥密码学与RSA
公钥和我们之前讲的密码完全不同,它是基于函数的而不是替换和置换
澄清几点:任何密码的安全性都依赖于密钥长度和破译密文所需要的时间
公钥密码学和传统密码学各有各的使用场景
9.1 公钥密码体制的基本原理
为了解决两个问题:
- 密钥分配
- 数字签名
9.1.1 公钥密码体制
公钥密码算法特点:
- 只有公钥和算法在计算上求解私钥不可行
- 公钥和私钥都可以用来加密和解密(用私钥加密就是数字签名,别人可以用公钥验证,用公钥就是别人可以用它来发送信息/转账等,然后自己用私钥收取)
公钥密码体制的六个组成部分
- 明文
- 加密算法
- 公钥和私钥
- 密文
- 解密算法
9.1.2 公钥密码体制的应用
加密/解密(发送方使用接收方的公钥对信息进行加密)
数字签名
密钥交换
9.1.3 对公钥密码的要求
建立在基于两个两个相关密钥的密码算法之上,算法应该满足的条件:
- 产生一对密钥在计算上是容易的
- 通过公钥加密消息在计算上是容易的
- 通过私钥恢复密文在计算上是容易的
- 已知公钥和密文,计算私钥在计算上是不可行的
- 加密和解密的顺序可以交换
目前满足这几个条件的算法有:RSA、椭圆曲线密码体制、Diffe - Hellman,DSS
事实上要满足上述的条件,就是要找一个单向陷门函数,每个函数值都存在唯一的逆,计算函数值容易但求逆却不容易
9.1.4 公钥密码分析
面对穷举攻击,公钥密码解决方案也是增长密钥,加随机数
另外,目前未有特定公钥算法证明从公钥推出私钥是不可行的
9.2 RSA算法
9.2.1 算法描述
设通信双方为A和B,发送的消息为M
通过RSA算法获得了公钥d和私钥e,公开数n
A会先把消息M进行M^d,然后mod n, 结果就是加密后的信息N
B会先使用私钥e对密文N进行N^e,然后同样mod n 就能够还原出信息M
这个过程不需要实现通过一个中心结构分配密钥对,而B可以自己通过随机生成,然后把公钥和n高速A即可,告诉也无所谓,这个信息可以是公开的,攻击者在计算上是不可行的
9.2.2 计算方面的问题
可以看到上述中间结果可能很大,所以对过程值mod n,也是可行的
9.2.3 RSA的安全性
- 穷举攻击
- 数学攻击
- 计时攻击
- 基于硬件故障的攻击
- 选择密文攻击
10 密钥管理和其他公共密码体制
10.1 Diffie - Hellman交换
本质是求离散对数
10.1.1 算法
通过交换公钥双方可以获得密钥
10.1.2 密钥交换协议
不能抗重播攻击
10.1.3 中间人攻击
通过数字签名和公钥证书来弥补
10.2 EIGamal密码体制
10.3 椭圆曲线算术
10.3.1 阿贝尔群
这个概念在数论章节我们已经解释过了
10.3.2 椭圆曲线
椭圆曲线并不是椭圆,只是因为形式非常像椭圆曲线方程
10.3.3 Zp上的椭圆曲线
椭圆曲线的密码体制使用的是变元和系数均为有限域中元素的椭圆曲线,密码应用中所使用的两类椭圆曲线是定义在Zp上的素曲线和在GF(2^m)上构造的二元曲线
10.3.4 GF(2^m)
有限域GF(2m)由2m个元素及定义在多项式上的加法和乘法运算组成
10.4 椭圆曲线密码学
对应RSA,椭圆曲线求离散对数
同样的,利用椭圆曲线也可以实现Diffie - Hellman交换 和加密和解密
10.4.1 椭圆曲线密码的安全性
10.5 基于非对称密码的伪随机数生成器
如基于RSA的PRNG和基于椭圆曲线的PRNG
|