OpenPGP.js是一个加密库,它实现了OpenPGP标准,最常用于电子邮件加密。OpenPGP.js是一个实现OpenPGP标准的加密库,最常用于电子邮件加密。ProtonMail、Mailvelope和FlowCrypt都使用OpenPGP.js,仅举几例。这意味着OpenPGP.js库加密了数百万用户的信息。OpenPGP标准于1990年代首次发布,与几乎所有标准一样,需要维护和更新以确保安全性和可用性。该标准的“加密更新”正在进行中,它添加了现代加密算法并废弃了过时的算法。为了提高可用性,各种电子邮件应用程序现在允许用户无缝加密他们的通信,而无需用户管理他们的密钥或联系人的密钥。OpenPGP.js于2014年首次发布,最初是一个名为GPG4Browsers的早期原型,它基于HerbertHanewinkel(和其他贡献者)的几个脚本。2016年发布的第二版OpenPGP.js完全重新设计,使用Uint8Arrays代替Strings(这大大提高了它的性能),内部使用现代ES6模块代替CommonJS模块。版本3和版本4均于2018年发布,分别增加了对椭圆曲线密码术(ECC)和流媒体的支持。我和我的团队继续致力于OpenPGP.js,以确保它发展成为一个易于使用的强大加密库。1.默认椭圆曲线加密在OpenPGP.js版本4中,生成新密钥时默认使用RSA。虽然ECC更快、更安全,但Curve25519尚未在OpenPGP规范中标准化。CryptoRefresh草案包括Curve25519,预计它将“按原样”包含在下一版本的OpenPGP规范中,因此OpenPGP.js版本5现在默认使用ECC生成密钥。2.只导入你需要的模块同样,尽管OpenPGP.js内部使用ES6模块多年,但版本4仍然没有提供合适的ES6模块。相反,它只是发布了一个在浏览器和Node.js上运行的通用模块定义(UMD)模块。这在版本5中发生了变化,为浏览器和Node.js发布了单独的模块(ES6和非ES6),使库用户更容易在所有平台上导入OpenPGP.js,并且(当使用ES6模块时)仅导入他们需要的零件。这主要是通过将构建系统切换为汇总来实现的。3.拒绝弱加密技术还有很多其他的安全改进。例如,1024位RSA密钥、ElGamal和DSA密钥被认为是不安全的,默认情况下会被拒绝。此外,版本4已经默认使用AES加密,而版本5现在完全默认拒绝使用较弱的算法进行加密,即使公钥声称只支持较弱的算法。相反,它假定所有OpenPGP实现都支持AES(长期以来一直是这种情况)。OpenPGP.js的下一步是什么?展望未来,需要进行一些安全改进。用于识别公钥的密钥指纹仍然使用SHA-1,尽管这已计划在加密更新中修复。同时,提出了不同的方法来确定用于加密的任何公钥的真实性,例如使用提议的Web密钥目录(WKD)标准直接从收件人的域中获取整个密钥,该标准已经通过各种电子邮件实现提供商。WKD支持内置于OpenPGP.js版本4中,但在版本5中是一个单独的模块,以保持主库精简。此外,当使用密码而不是公钥加密信息或文件时(例如:使用OpenPGP进行电子邮件加密时不常见,但用于加密备份时更常见),密码使用相对较弱的密钥派生函数KeyDerivationFunction(KDF)转换为对称密钥。因此,建议应用程序在将用户密码传递给OpenPGP.js之前,先通过Argon2或scrypt等强KDF传递用户密码。希望CryptoRefresh草案将包括这些算法之一,以便在未来的OpenPGP.js版本中实现。如何使用OpenPGP.js版本5但是现在,OpenPGP.js版本5已经发布到npm存储库。如果你喜欢,请随时尝试一下!欢迎在GitHub上的讨论中提供反馈。但是请注意,虽然OpenPGP.js是一个通用加密库,但它的主要用例是需要符合OpenPGP规范的情况(例如,发送或接收PGP加密的电子邮件时)。对于其他用例,不同的库可能是更合适或更高效的选择。当然,一般来说,尝试使用任何加密技术时都要小心。感谢阅读,保护电子邮件的未来就在这里!
