最新 OpenPGP.js 版本的 3 个新特性

OpenPGP.js 是一个密码学库,它实现了 OpenPGP 标准,该标准最常用于电子邮件加密。
31 位读者喜欢这篇文章。

OpenPGP.js 是一个密码学库,它实现了 OpenPGP 标准,该标准最常用于电子邮件加密。ProtonMail、Mailvelope 和 FlowCrypt 等都使用了 OpenPGP.js。这意味着 OpenPGP.js 库加密了数百万用户的消息。

OpenPGP 标准于 1990 年代首次发布,像几乎所有事物一样,需要进行维护和更新,以确保安全性和可用性。标准的“密码学更新” 正在进行中,它添加了现代加密算法并弃用了过时的算法。为了提高可用性,各种电子邮件应用程序现在允许用户无缝地加密他们的通信——而无需管理他们的密钥或其联系人的密钥。

OpenPGP.js 于 2014 年首次发布,最初基于一个名为 GPG4Browsers 的早期原型,该原型基于 Herbert Hanewinkel 的几个脚本(以及其他贡献者)。OpenPGP.js 的第二个版本于 2016 年发布,经过了完全的重新设计,内部使用 Uint8Arrays 而不是字符串(这显着提高了其性能)和现代 ES6 模块而不是 CommonJS 模块。版本 3 和版本 4 均于 2018 年发布,分别增加了对椭圆曲线密码学 (ECC) 和流媒体的支持。

我和我的团队将继续致力于 OpenPGP.js,以确保它作为一种易于使用的强大加密库不断发展。

1. 默认使用椭圆曲线密码学

在 OpenPGP.js 版本 4 中,默认情况下在生成新密钥时使用 RSA。尽管 ECC 更快、更安全,但 Curve25519 尚未在 OpenPGP 规范中标准化。密码学更新草案确实包含了 Curve25519,并且预计它将“按原样”包含在下一版本的 OpenPGP 规范中,因此 OpenPGP.js 版本 5 现在默认使用 ECC 生成密钥。

2. 仅导入您需要的模块

类似地,虽然 OpenPGP.js 多年来在内部使用 ES6 模块,但版本 4 仍然没有发布适当的 ES6 模块。相反,它仅发布了一个通用模块定义 (UMD) 模块,该模块既可以在浏览器中运行,也可以在 Node.js 上运行。在版本 5 中,这种情况发生了变化,它为浏览器和 Node.js 发布了单独的模块(包括 ES6 和非 ES6),使用户可以更轻松地在所有平台上导入 OpenPGP.js,并且(在使用 ES6 模块时)仅导入他们需要的部分。这在很大程度上是通过将构建系统切换到 rollup 实现的。

3. 拒绝弱密码学

还有许多其他的安全改进。例如,1024 位 RSA 密钥、ElGamal 和 DSA 密钥被认为是不安全的,并且默认情况下会被拒绝。此外,虽然版本 4 已经默认使用 AES 加密,但版本 5 现在完全拒绝默认使用较弱的算法进行加密,即使公钥声称仅支持较弱的算法也是如此。相反,它假设所有 OpenPGP 实现都支持 AES(这种情况已经存在很长时间了)。

OpenPGP.js 的下一步是什么

展望未来,还有一些安全改进要做。用于标识公钥的密钥指纹仍然使用 SHA-1,尽管密码学更新中计划对此进行修复。与此同时,建议使用不同的方法来确定用于加密的任何公钥的真实性,例如使用提议的 Web 密钥目录 (WKD) 标准直接从接收者的域中获取整个密钥——该标准已被各种 电子邮件提供商 实现。WKD 支持已构建到 OpenPGP.js 版本 4 中,但在版本 5 中是一个单独的模块,以保持主库的精简。

类似地,当使用密码而不是公钥加密消息或文件时(当将 OpenPGP 用于电子邮件加密时并不常见,但在用于加密备份时更常见),密码将使用相对较弱的密钥派生函数 (KDF) 转换为对称密钥。因此,建议应用程序在将用户的密码传递给 OpenPGP.js 之前,先通过强 KDF(例如 Argon2scrypt)进行处理。希望密码学更新将包含其中一种算法,以便在未来版本的 OpenPGP.js 中实现。

如何使用 OpenPGP.js 版本 5

目前,OpenPGP.js 版本 5 已发布到 npm 包注册表。如果您喜欢,请随时试用!欢迎在 GitHub 上的讨论选项卡中提供反馈。但是请注意,虽然 OpenPGP.js 是一个通用加密库,但其主要用例是在需要与 OpenPGP 规范兼容的情况下(例如,当发送或接收 PGP 加密的电子邮件时)。对于其他用例,不同的库可能是更合适或性能更高的选择。当然,总的来说,在进行任何密码学操作时都要小心。

感谢您的阅读,祝愿电子邮件的未来更加安全!

接下来阅读什么
User profile image.
Proton 的密码学团队负责人,OpenPGP.js 的维护者,IETF OpenPGP 设计团队成员,以及 Web Cryptography API 规范的编辑。

评论已关闭。

Creative Commons License本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.