第16章 · 播客 第7集

安全性和保密性设计 · PGP:五种算法串起的邮件加密

🎙️ 本集播客第7集:Phil Zimmermann 1995 年提出的 PGP 不是新算法而是一套组合拳——IDEA 加正文、RSA 加 IDEA 密钥、MD5 出摘要、ZIP 压缩、BASE64 编码;发送五步、接收六步逐工序过,再讲公钥介绍机制怎么防住「C 偷换 B 公钥」的攻击。 语音由微软 Edge 神经网络语音预生成(女声·晓伊,男声·云希)。点击下方任意对话可直接从该句开始播,当前句朗读时下一句已预先加载,无缝衔接。
🎙️ 第16章播客 第7集
⬇ 下载本集 点击播放
阿明
邮件加密,PGP 是怎么来的?
小雅
先看动机:一般来说,电子邮件在网络上的传输是不加密的,第三者轻易获得通信内容;收信人还要确认邮件没被篡改、确实是发送者本人发出的,这需要数字签名。RSA 公钥体系适合这些要求,但直接拿 RSA 加密电子邮件不方便——慢。
小雅
PGP 是美国人 Phil Zimmermann 于 1995 年提出的一套电子邮件加密方案,可以用来对邮件加密防止非授权者阅读,还能对邮件加上数字签名使收信人确认邮件确实由发送方发出。定性一句:PGP 并不是新的加密算法或协议,它综合采用了多种加密算法——这是一道判断题的原文级答案。
阿明
那它都组合了什么?我记得正文不是 RSA 加密的。
小雅
清单照念:对邮件内容加密采用 IDEA 算法,对于加密信息采用 RSA 公钥加密算法,还采用了用于数字签名的消息摘要算法,加密前还进行压缩处理。它把 RSA 公钥体系的良好加密效果和对称密钥体系的高速度结合起来。问「PGP 对邮件正文加密采用哪种算法」,答 IDEA——选项放 RSA、DES、MD5 全是干扰:RSA 太慢所以只加密 IDEA 密钥,DES 没进这套流程,MD5 是散列不加密。
小雅
PGP 的推广原文给了原因:功能强大、处理迅速、使用简便,而且源代码是免费的,因此在 IT 等多个行业得到广泛应用。除加密电子邮件外,还可以加密重要文件,用 PGP 代替 UUencode 生成 RADIX64 格式——就是 MIME 的 BASE64 格式——的编码文件,或为文件做数字签名防止篡改和伪造。
阿明
发送的完整流水线,一步步来吧。
小雅
假设 A 要发加密邮件给 B,五道工序。第一道,A 对要发送的邮件 P 运用 MD5 散列算法计算,生成一个 128 位的消息摘要——检验邮件是否完整、有没有被篡改。第二道,通过 RSA 算法,用 A 的私钥 SKA 对消息摘要加密,生成消息摘要的密文 H——这就是签名。
小雅
第三道,邮件 P 与加密后的消息摘要 H 共同构成新的报文 P1,接着对 P1 进行 ZIP 压缩,成为压缩报文 P1.Z。第四道,对 P1.Z 采用 IDEA 算法加密,使用一个一次性的密钥 K。第五道,K 必须经 RSA 算法用 B 的公开密钥 PKB 加密,与加密后的报文 P2 一起,再经过 BASE64 编码,得到一系列 ASCII 码作为邮件内容发送到网络上。
阿明
摘要归 MD5、签名归 RSA 私钥、压缩归 ZIP、正文归 IDEA、钥匙归 RSA 加 B 的公钥、最后 BASE64。六件事各就各位。
小雅
接收端与加密过程相反,六步:B 收到后先对邮件内容进行 BASE64 解码;再利用自己的秘密密钥 SKB,通过 RSA 算法解出 IDEA 的密钥 K;用此密钥恢复出 P1.Z;对 P1.Z 解压缩还原出 P1;把明文 P 和消息摘要密文 H 分离,用 A 的公开密钥 PKA 解密 H 得到真正的消息摘要;B 自己也用 MD5 对邮件明文 P 运算生成一个 128 位的消息摘要,比较两个摘要,一致则表明 P 是 A 发来的邮件。
小雅
原文的结论句:通过上述通信过程,PGP 既可以保证邮件不被第三方窃取,又可以防止发信人抵赖和信件被途中篡改。两个「又可以」就是它的三大功效,多选题原文。
阿明
为什么正文偏偏用 IDEA 不用 RSA,我再确认下逻辑。
小雅
原文解释得很细:RSA 算法计算量太大、速度太慢,对邮件正文这种大量数据不适合;IDEA 加密解密用同一个密钥,主要缺点是在公共网络环境中很难安全地传递密钥,不适合 Internet 邮件加密的需要,但速度比 RSA 快得多。所以 PGP 用一个随机生成的密钥——每次加密都不同——用 IDEA 算法对明文加密,然后用 RSA 算法对 IDEA 密钥加密;收件人用 RSA 解出这个随机的 IDEA 密钥,再用 IDEA 解密邮件。链式加密既具 RSA 的保密效果又具 IDEA 的快捷方便。
小雅
随机性还有个妙招:PGP 每次加密邮件所使用的 IDEA 密钥是一个随机数,而且为了增强随机性,PGP 是从用户敲击键盘的时间间隔上取得随机数种子来产生密钥的。这个细节出过判断题。
阿明
键盘敲击间隔当种子,够朴素。压缩这步有什么讲究?
小雅
原文两条好处:一方面压缩后再加密,得到的密文有可能比明文更短,节省网络传输时间;另一方面明文经过压缩实际上相当于多经过一次变换,信息更加杂乱无章,对非法攻击的抵御能力更强。另外 PGP 还可以只签名而不加密,用于公开发表声明:声明人用自己的私钥签名,公众用其公开的公钥验证签名、确认声明人身份。
阿明
加密讲完了,密钥管理呢?PGP 的公钥也有被偷换的风险吧。
小雅
有,而且原文讲了个完整的攻击故事。背景:PGP 用公钥加密,公钥本来就要公开,所以不存在被监听的问题;但是公钥在发布过程中仍存在安全隐患——公钥被非法篡改,这是公钥密码体系中的一大安全隐患,很难被普通用户发现。
小雅
故事是这样:A 要给 B 发加密邮件,从公共目录查到 B 的公钥并加密发送——正常。但攻击者 C 用自己假冒 B 的名字生成的密钥中的公钥替换了 B 的公钥,A 拿到的公钥用户名是 B、实际是 C 的。于是 C 用手中的私钥解密 A 发给 B 的邮件,甚至可以用 B 真正的公钥转发 A 的信,A 和 B 都不会发现异常,通信全部泄漏;C 还可以伪造 B 的签名发信息,A 和其他人正常解密这份伪造签名,以为真是 B 发来的。
阿明
防法就是靠中间人担保?
小雅
PGP 的招叫公钥介绍机制。若 A 和 B 有共同的朋友 D,D 知道他手中 B 的公钥是正确的——假设 D 已认证过——D 就用自己的私钥在 B 的公钥上签名,表示担保这是 B 的真正公钥并发给 A;A 用 D 的公钥验证 D 发来的 B 的公钥。D 同样可以向 B 担保 A 的公钥,D 就成了 A 和 B 之间的公钥介绍人。这样把 D 签过名的 B 的公钥列示到公共目录中,没有人能伪造 B 的公钥而不被 A 发现。
小雅
D 自己的公钥怎么信任?PGP 建议通过一个大家普遍信任的人或权威部门担当认证机构角色:每个由权威认证机构签字的公钥都被认为是真实的,大家只要有一份认证机构的公钥就行;认证机构广泛提供公钥服务、其公钥流传广泛,假冒很困难。使用守则原文一句:在使用任何一个公钥之前一定要首先认证它,无论什么情况下都不要直接信任一个从公共渠道得来的公钥,而要使用可信的人介绍的公钥,或者自己与对方亲自认证。
小雅
收个尾:由于 PGP 能够实现数字签名、不可否认、防止篡改、防止破译等功能,自推出以来受到普遍欢迎,目前几乎成为最流行的公钥加密软件。
小雅
本集必背:PGP 由 Phil Zimmermann 于 1995 年提出,不是新算法而是组合多种算法的一套软件;正文用 IDEA、IDEA 密钥用接收方公钥的 RSA、摘要用 MD5 出 128 位、签名用发送方私钥的 RSA、压缩用 ZIP、最后 BASE64 即 RADIX64 编码;发送流程摘要、签名、合成 P1、压缩、IDEA 加密、RSA 加密钥 K、BASE64;
阿明
接着背。
小雅
接收流程反向六步,最后两摘要比对一致即验真;IDEA 密钥每次随机生成、种子来自用户敲击键盘的时间间隔;压缩两个好处——密文可能更短、多一层变换更抗攻击;可以只签名不加密;公钥安全隐患是被非法篡改,解法是公钥介绍机制与权威认证机构签字,公钥使用前必须认证、不直接信任公共渠道得来的公钥。
阿明
五种算法各司其职,这道题再也不会选 RSA 了。下一集离开协议区了吧?
小雅
对,16.5 计算机病毒:法定的病毒定义、四个特征里谁才是「基本特征」、四阶段四模块,还有特征码、校验和、行为监测、启发式、虚拟机五种检测技术。