安全协议工作原理

2024-06-17
2024-06-17
5 min read
Hits

  本文标题“安全协议”主要指《深入浅出密码学》第 9 章《安全协议》主讲的 SSL 和 TLS 以及第 10 章《端到端加密》主讲的 PGP 和 GPG。前者我们每天都在使用,后者是自“邮件安全”观点被提起就一直沿用至今的协议。但绝大多数用户甚至是网络安全从业人员,都处在简单应用这两种协议的层面,并未对其有深入的认知,而此书这两章就很好的补齐了这两种安全协议的知识栈。

虽然本文目前只围绕这两种安全协议,但随着日后博主对各安全协议的学习,后期会在该 post 下继续更新别的安全协议。

SSL 和 TLS

  书是公司质量部杨总力荐的,很符合其书名“深入浅出”,由简至难,由外向内,由密码学理论到经典应用都做了讲解,配图幽默有趣,甚至每一个题注都是一个 Tip,每一章都引人入胜(当然涉及“高数”的纯密码算法部分还是难以下咽😂)

  博主利用闲碎时间泛读至第 9 章《安全协议》时,就想起了之前 RHCSS 培训时华龙飞讲师对 HTTPS 的深入解读。

  记得当时华老师有些失望于国内互联网环境的各种“无脑搬运”和“不负责任”,在网上检索 HTTPS 相关内容,都无法找到准确详实的学习资料,所以无奈自己学习后写了一篇详尽的 HTTPS 原理与应用,供大家学习交流。

  所以在 SSL/TLS 协议方面,博主力荐大家学习华龙飞讲师的 post,比书中讲的详细且深入。

一文厘清 HTTPS 原理与应用

PGP 和 GPG

对于 PGP 和 GPG 协议,博主就直接摘抄书上的片段了(因为书是借阅公司的,避免归还后找不到相应片段)

  电子邮件协议在设计之初就未考虑采用任何加密技术。我们只能归咎于那个将安全当作次要问题的时代。1991 年一款名为 PGP 的邮件加密工具发布后,电子邮件加密开始从理论走向实践。当时,PGP 的创造者菲尔·齐默尔曼(Phil Zimmermann)决定发布 PGP 工具,以回应同年早些时候美国政府提出的一个法案。该法案允许美国政府从任何通信公司和制造商获得所有通信语音和文本数据。菲尔·齐默尔曼在他 1994 年的论文“Why Do You Need PGP?”中表示:社会对隐私的需求与日俱增,PGP 工具使人们能够掌握自己的隐私,这就是开发这款工具的原因。

  1998 年,RFC 2440 文档将该协议标准化为 OpenPGP,大约同一时间内 GUN Privacy Guard(GPG)以开源的形式发布,这引起人们的极大关注。今天,OpenPGP 的主要实现仍然是 GPG,人们可以互换着使用 GPG 和 PGP 这两个术语,它们都表示电子邮件加密协议。

  PGP(或 OpenPGP)邮件加密协议的工作原理就是使用混合加密技术(参见第 6 章内容)。最新版的 OpenPGP 定义于 RFC 4880 文档中,其执行过程可以简化为以下步骤。

  1. 发送者创建一封邮件,并压缩邮件内容。
  2. 在 OpenPGP 的实现中,它会随机生成一个对称密钥,并使用对称加密算法加密已压缩的电子邮件。
  3. 用邮件接收者的公钥加密对称密钥(参见第 6 章内容)。
  4. 将已加密的对称密钥拼接在已加密消息的后面。这样的数据块会作为电子邮件正文发送给收件人。
  5. 解密邮件时,接收者用私钥解密已加密的对称密钥,再用对称密钥解密邮件内容。

  值得注意的是,OpenPGP 还定义了对电子邮件签名的方式,实现对发件人身份的验证。通常做法是,计算明文下电子邮件正文的哈希值,然后利用发件人的私钥对哈希值进行签名。在执行第 2 步加密操作前,会把签名和消息拼接在一起。最后,为了使收件人知道验证签名的公钥,在第 4 步中,发件人会把自身的公钥和加密电子邮件一起发送给收件人。

  PGP 的目标就是对消息加密和签名。当与电子邮件客户端集成时,该协议不关心邮件的主题或其他元数据是否隐藏

需要注意的是,通过加密的方法并不是总能隐藏所有的元数据。在有隐私性要求的应用程序中,元数据会破坏隐私,在最坏的情况下,它可以致使匿名特性失效!例如,在端到端加密协议中,我们可能无法解密用户之间传输的消息,但可以知道他们的 IP 地址,发送和接收的消息的长度,通常与谁交谈(他们的社交图谱),等等。隐藏这种类型的元数据需要大量的工程技术。

  然而,在实现细节上,PGP 实际上相当糟糕。OpenPGP 标准及其主要实现 GPG 都使用了旧的密码算法,而向后兼容性要求又使这种情况无法得到改善。最关键的问题是加密没有经过认证,这意味着任何截获未签名电子邮件的人都可能在一定程度上篡改加密内容,具体允许的篡改成都取决于协议使用的加密算法。仅凭这个原因,本书就不建议使用 PGP 加密邮件。

  PGP 的一个令人惊讶的缺陷来自这样一个事实,即允许签名和加密操作以任何方式组合。2001 年,Don Davis 指出,由于 PGP 允许密码算法随意组合,敌手可以重新加密收到的已签名电子邮件,并将其发送给另一个收件人。这让原来的接收方 Bob 可以向第三方发送 Alice 发送给他的电子邮件,而第三方会认为该邮件是由 Alice 发来的!

  与明文签名相比,对密文签名的做法本身就存在缺陷。例如,敌手可以删除密文附带的签名,然后添加上自己的签名。实际上,敌手可以假装成 Alice,向 Bob 发一封来自 Alice 的电子邮件。

  该算法默认情况下不提供前向保密性。如果无法保证前向保密,那么一旦私钥泄露,就可以用该私钥解密先前发送给我们的所有邮件。通过改变 PGP 密钥可以实现前向保密,但是这个过程操作起来并不简单,例如,用旧密钥对新密钥进行签名。概括起来,PGP 不安全的原因有如下几点:

  1. PGP 在实现时使用的密码算法过于陈旧;
  2. PGP 加密邮件时没有采用认证加密算法,因此在不对加密邮件签名的情况下该协议是不安全的;
  3. PGP 存在设计上的漏洞,即使我们接收到一个已签名的消息,这个消息的目标接收者也不一定是我们;
  4. PGP 默认情况下不提供前向保密性。