banner
Wind_Mask

Wind_Mask

Wind_Mask,technically me.
github
email

关于Secret的沉思(5):PGP安全

PGP 安全#

PGP 确实已经是个有丶糟糕的东西了1,我不得不承认这一点。它高度地集成了太多不必要的功能(实际上是历史包袱),兼容危险的密码原语,过度的复杂度又阻止了实现以至于某些编程语言甚至无法提供充分的库。

诚然,我并不希望 PGP 在没有充分继承其目标的实现出现前失败,但是也是该考虑缓解这些问题了,如果让我在此简单讨论一下对这些问题的缓解:

算法与兼容泥潭#

个人只能通过约定表示密钥要向 Curve 25519 的转移来缓解(事实上,最新的 gpg 默认设置已经在这样做)——尽管软件会接受,但是人不能,至少不应该。密钥的算法本身就是其可信度的一部分,也许 gpg 继续提供各种加密原语和曲线,但是应该尽可能摆脱它们的落后实现,比如说对于落后的实现提供警告(这一点还不够)。

数据包的复杂度#

这个问题由于历史包袱无解,但是考虑到网络传输的发展,只要规范充分,这不是在安全性上致命的问题。

功能过多#

其实这不见得就是致命的,问题在于各功能的解耦与实现。由于各功能都绑定在一组密钥对上,它提供了一种共有身份的加密签名,这本身是有意义的。但是由于兼容性与统一规范的复杂度,这使得各功能相对于专用的系统存在更多的攻击面。不可能完全寄希望于现有实现的完美,因此手动引入某种中间层可能是必要的。

也就是说,使用 pgp 的功能来引入其他工具,而实际工作由其他工具完成。举例而言,使用 pgp 签名作为分发 minsign 签名公钥的渠道之一。

最终目标当然是希望在规范上过渡到用引入的新层面取代旧有功能,当然大概是不会有这一天了……

用户体验#

得承认,PGP 在设计上提供了过多复杂使用方法,但是又没有足够简化而全面的默认配置 。这很大程度上是为了 PGP 当初设想的身份验证网络(信任之网),密钥对间的相互签名和过多的元数据都是这一目的的遗留。

但是我们得说,PGP 从来都是一个额外的安全层。将它比对于某个通信软件,某个加密软件是不合适的,因为它们的简化建立在内置的安全上,但是它们不处理总体问题,也不提供通用功能(尽管通用和安全本身多少有些矛盾)。

命令行工具从来令人生畏,GUI 开发一直勉强(至少我还没见到实现了 GPG 的命令行大部分功能的 gui),这方面我发现一个较新实现GpgFrontend,不幸,其热度很能说明 PGP 面临的处境。

就我所知的 gui 支持仍然存在着各种各样的功能性不足,比如基本没有支持编辑子密钥的,生成密钥功能也不完全,还有自定义 gpg 路径,homedir,导出子密钥等。

要想全面实现 gpg 提供的复杂功能又不失简单的默认配置,这是个有待发展的方向。

长期的密钥#

这并不是关键,或者说这是我们常见的安全思想中最无望的:人人都建议我们频繁更换密码,但这在用户侧根本没有任何可能。任何用户直接接触使用记忆的秘密都不可能频繁变化,这是人类的问题。

启用新密钥的成本应该尽可能降低,这是个分发信任问题,但它终究依赖用户的习惯。因此我的建议是利用密钥过期时间这一点,并不是说真的一定过期,而是假定它可能过期。然后在续期时评估风险。即使如此,要确保分发的同步,这不是某一种方法能做到的。

对应的,应该坚持清除过期密钥。不保留对它们的所有信任。

不连贯的身份#

身份分发机制的单一可能是不存在的,这是一个事实。现在没有人指望线下交换和原有的密钥服务器以及信任网能提供全部(甚至只是大部分的信任)。加密的身份方案只是一种底层 id:它不能证明自身。现在人们还需要更多贯穿各种网络服务的身份证明,在这方面的选择有Keyoxide, 至少它提供的思想是一种可能,关键点是:

  1. 我们确实使用其他网络服务,如果你只用邮箱交流就不需要真正的在线身份。

  2. 这些服务并不为我们所控,我们不能决定它们怎么体现,只能具体的支持各种方式。

  3. 在线身份本身只能归结为一种融贯的诸联络方式,不存在身份背后的真实。

当然,它也准备放弃原用的 pgp 方式了,这是对的,在公钥的注释里放身份信息太滑稽了。但是身份分发系统无疑是没有实现的,即使规范已经存在,但是生态上尚未接受。

泄露元数据#

PGP 本身的 uid 元数据是显见的,但是这是其目的的一环,任何达成相应实现的方法都需要这样一个标识符。但是密钥服务器获取元数据,这是公开元数据信息只有唯一级别的结果。因此,更好的选择是让 PGP 密钥携带尽可能少的公开信息,而是分散它们到其他渠道(如Keyoxide的思想)。

无前向保密性#

这是要注意的。使用 PGP 不应该直接交换消息,而应该交换一次性会话密钥(当然要求用户进行安全的交换是不现实的,应该有工具来实现这一点)。但是,作为更长久的固定加密没有前向保密的加密也无法放弃:穿越时间的发送 (笑

笨拙的密钥#

格式的历史遗留,只能期待工具链的完善可以改善它。

协商#

如果我们在过去 20 年中学到了关于密码学设计的 3 件重要的事情,其中至少 2 件是协商和兼容性是恶魔。密码系统中的缺陷往往出现在细枝末节中,而不是主干上,而广泛的密码兼容性增加了细节的数量。

必须坚决地弃用旧版本,尽管软件会接受,但是人不能,至少不应该

简陋的代码#

GnuPG 也是 PGP 的有效参考实现,也是集成 PGP 加密的大多数其他工具的基础。 它哪儿也不会去,依赖 PGP 就是依赖 GPG。

我们正在期待的是Sequoia-PGP,这可能也是上述各种问题的解决(至少是缓解)期望所在。

信任之网#

信任系统从来有两种思想,我们有了基于权威的 CA 体系,但是也有基于 PGP 的信任之网。但是怎样在现在的技术中搭建统一但可靠的信任网,这是个未解难题。在软件包信任上,刚才我看见的有cargo-crev, 但是至今即使只在开发者范畴这仍待考察,更勿论对于普通用户要想像 CA 证书一样的普遍(但是我们都知道,CA 证书的弊端:Last Chance to fix eIDAS: Secret EU law threatens Internet security)。

即使 PGP 有这种那种的不足,但是其思想却不能弃用。如果失去了这种分散的信任,那么 Last Chance 就不是只是欧洲,只是浏览器证书……

Footnotes#

  1. 「译」PGP 的问题(上) - C 的博客 |UlyC

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。