最新 OpenPGP.js 版本的 3 個新功能
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 加密的電子郵件時)。對於其他的使用情況,不同的庫可能是一個更合適或性能更好的選擇。當然,總的來說,在嘗試使用任何加密技術時都要小心。
感謝閱讀,這裡是保護電子郵件的未來!
via: https://opensource.com/article/21/10/openpgpjs
作者:Daniel Huigens 選題:lujun9972 譯者:geekpi 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive