最新 OpenPGP.js 版本的三個新功能
OpenPGP.js 是一個實現了 OpenPGP 標準的密碼學庫,最常用于電子郵件加密。
OpenPGP.js 是一個實現了 OpenPGP 標準 的密碼學庫,最常用于電子郵件加密。ProtonMail、Mailvelope 和 FlowCrypt 都使用 OpenPGP.js,這還僅僅是其中一些。也就是說 OpenPGP.js 庫對數百萬用戶的信息進行了加密。
OpenPGP 標準首次發布于 20 世紀 90 年代,像幾乎任何東西一樣,需要維護和更新,以保證安全和可用性。該標準的“加密刷新” 正在進行中,它增加了現代的加密算法并廢除了過時的算法。為了提高可用性,各種電子郵件應用程序現在允許用戶無縫加密他們的通信,用戶無需管理他們的密鑰或他們的聯系人的密鑰。
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,盡管在加密技術更新中計劃對此進行修復。同時,建議使用不同的方法來確定用于加密的任何公鑰的真實性,例如使用提議的 網絡密鑰目錄(WKD)標準直接從收件人的域中獲取整個密鑰,這已經由各種 電子郵件提供商 實現。WKD 支持內置于 OpenPGP.js 第 4 版,但在第 5 版中是一個單獨的模塊,以保持主庫的精簡。
同樣,當用密碼而不是公鑰加密信息或文件時(例如:在使用 OpenPGP 進行電子郵件加密時不常見,但在用于加密備份時更常見),密碼會使用相對較弱的密鑰衍生函數(KDF)轉換為對稱密鑰。因此,建議應用在將用戶的密碼傳遞給 OpenPGP.js 之前,先通過一個強大的 KDF,如 Argon2 或 scrypt。希望加密刷新草案會包括這些算法中的一種,以便在未來的 OpenPGP.js 版本中實現。
如何使用 OpenPGP.js 第 5 版
不過現在,OpenPGP.js 第 5 版已經 發布 到 npm 倉庫。如果你喜歡,可以隨時試用!歡迎在 GitHub 的 討論版 中進行反饋。然而,請注意,雖然 OpenPGP.js 是一個通用的加密庫,但它的主要使用情況是在需要與 OpenPGP 規范兼容的情況下(例如,在發送或接收 PGP 加密的電子郵件時)。對于其他的使用情況,不同的庫可能是一個更合適或性能更好的選擇。當然,總的來說,在嘗試使用任何加密技術時都要小心。
感謝閱讀,這里是保護電子郵件的未來!