第4章 安全电子邮件-PGP
4.1 电子邮件的安全属性
电子邮件的特殊安全需求:
- 通信双方不会同时在线进行通信,无法在线协商会话密钥
- 很难找到双方可信的第三方公钥分发机构
- 传统 SMTP 仅支持可打印的 ASCII,但加密后的密文未必符合要求
4.2 PGP
PGP (Pretty Good Privicy)
PGP 是1990 年左右由 Phil Zimmermann 个人编写的密码软件,不同于常规的引入可信第三方的公钥管理机制,PGP 基于去中心化的分布式网络,通过一次性会话密钥加密消息来确保消息的机密性,通过公钥来传递一次性会话密钥,通过公钥加密传递消息验证码,接收方生成新的 MAC 与发送的加密 MAC 进行比较,确保消息的完整性
三种工作方式:加密、认证、认证并加密
4.2.1 工作流程
认证
认证主要是通过公钥密码,和消息验证码来完成信息内容的比对和双方身份的认证
主要流程如下:
- 发送方使用 Hash 函数,生成消息的散列值
- 发送方用自己的私钥,通过 RSA 算法加密散列值 ,得到 MAC
- 将 MAC 和消息拼合在一起,压缩并进行 Base-64 转换
- 接收方将消息进行解压缩和逆 Base-64 转换
- 接收方将 MAC 和消息分离,用发送方的公钥解密 MAC ,得到消息的散列值
- 接收方同样用 Hash ,生成消息的散列值
- 对比两个散列值,若相同则认证成功,消息完整且发送方属实
加密
由于电子邮件双方不会同时在线,无法在线协商一次性会话密钥,所以先要解决密钥分发问题
发送方使用随机生成的密钥 Ks 作为一次性会话密钥,并加密邮件消息;使用接收方的公钥加密一次性会话密钥 Ks,来完成密钥分发
主要流程如下:
- 发送方首先对消息进行压缩
- 发送方生成一个仅针对当前邮件的随机 128 位的密钥 Ks,使用 CAST-128 (或 IDEA、TDEA) 对称加密算法,用 Ks 加密压缩后的邮件
- 用接收方的公钥加密一次性会话密钥 Ks
- 把加密后的密钥和加密后的压缩邮件拼接,进行 Base-64 转换
- 接收方首先进行逆 Base-64 转换,将加密后的密钥和加密后的邮件分离
- 接收方使用自己的私钥,解密得到一次性会话密钥 Ks,
- 接收方用 Ks 解密,再进行解压缩,得到邮件消息
认证并加密
认证和加密操作合并,首先完成认证部分,再进行加密