密码学的主要用途
密码学的主要用途有:
- 确保消息的机密性:只有得到授权的用户才能阅读消息。
- 确保消息的完整性:在解密时消息没有被篡改过。
- 确保消息来源的真实性:消息应该来自声明发送了消息的人,且他以后也不能否认曾经发送过的消息。
四种攻击手段
在消息中添加完整层和认证层,并对密钥进行安全有效的管理,有助于抵御如下四种类型的攻击:
- 操纵:攻击者截获并篡改消息
- 伪装:攻击者伪装为通信者。
- 重放:记录消息并在未来重新发送消息。
- 否认:通信者否认曾经发出的消息。
密钥交换(Diffie-Hellman)
算法描述
Alice与Bob共享一个素数p
以及该素数的本原根g
(均可以公开)
客户端Alice选一个随机数PrivateA
作为私钥( 1 ⩽ PrivateA ⩽ p−1 )
通过计算得到一个公钥PublicA = g^PrivateA mod p
服务器Bob选一个随机数PrivateB
作为私钥( 1 ⩽ PrivateB ⩽ p−1 )
通过计算得到一个公钥PublicB = g^PrivateB mod p
双方通过公网交换公钥
此时Alice知道的信息有
自己的私钥:PrivateA
自己的公钥:PublicA
Bob的公钥:PublicB
Bob同理
Alice计算共享密钥KeyA : KeyA = (PublicB) ^ PrivateA mod p
Bob计算共享密钥KeyB: KeyB = (PublicA) ^ PrivateB mod p
可证得:KeyA = KeyB
统一用key
表示
这样双方就得到了同一个共享密钥key
Eve能得到p, g,以及双方的公钥,但是求解 k 的方法只能通过计算双方的私钥得到,这个问题等价于离散对数难题。
缺陷
上述版本无法防止中间人攻击,Eve可以通过分别与Alice、Bob建立一次密钥交换来进行中间人攻击。
为了抵御这种攻击,又引入了一层公钥体制:
Alice有一个私钥 A 和一个公钥 g^A
Bob有一个私钥 B 和一个公钥 g^B
首先双方可以计算一个认证值 K = g ^ (A*B),这个认证值是第三方无法计算的,
然后上述过程的 PublicA = g ^ (privateA * K),B同理。
数字签名(如RSA)
Alice生成一个随机数random
用自己的私钥 PrivateA
和 random
生成签名 RSA(PrivateA, random)
然后把签名和随机数random
给Bob发过去
Bob收到后用Alice的公钥 PublicA
对签名进行验签得到签名中的random
如果签名中的random
与一同发送来的随机数random
一样
则证明消息是Alice发过来的
散列函数
六个要求
- 能够接受任何长度的消息作为输入。
- 能够给生成较短的定长输出。
- 对任何输入都能够快速容易地计算输出。
- 应该是一个单向函数,难以逆推。
- 能抵抗弱冲突(两个不同的输入产生相同的输出)。
- 能抵抗强冲突(找到两个有意义的消息使得其散列值相同)
MD5
MD5算法以512位分组来处理输入的任意长度的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
SHA
接受任何长度的输入消息,并生成160位的消息摘要,与MD5相似,这个算法操作划分为32位字的512位长度的块。
由于SHA-1生成的消息摘要比MD5的要长32位,因此抵抗强冲突的能力稍强一些。
PKI与证书
PKI(公钥基础设施)由几部分组成:
- 数字证书认证中心CA:可信的运营PKI的第三方,负责发型证书,跟踪过期的或无效的证书。
- 数字证书注册审批机构RA:为CA验证证书的内容。
- 存储库:用户可用的证书数据库。
- 归档库:证书的状态信息归档库。
遵循X.509国际标准的证书内容:
- 证书格式版本号
- 证书唯一序列号
- 签名算法域:用于指示CA使用的签名算法和公钥加密算法。
- 证书发行机构名
- 有效期
- 用户名称
- 用户的公钥内容和公钥算法
- …