密码学的主要用途
密码学的主要用途有:
- 确保消息的机密性:只有得到授权的用户才能阅读消息。
- 确保消息的完整性:在解密时消息没有被篡改过。
- 确保消息来源的真实性:消息应该来自声明发送了消息的人,且他以后也不能否认曾经发送过的消息。
四种攻击手段
在消息中添加完整层和认证层,并对密钥进行安全有效的管理,有助于抵御如下四种类型的攻击:
- 操纵:攻击者截获并篡改消息
- 伪装:攻击者伪装为通信者。
- 重放:记录消息并在未来重新发送消息。
- 否认:通信者否认曾经发出的消息。
密钥交换(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使用的签名算法和公钥加密算法。
- 证书发行机构名
- 有效期
- 用户名称
- 用户的公钥内容和公钥算法
- …
|