最新 OpenPGP.js 版本的三個新功能
OpenPGP.js 是一個實現(xiàn)了 OpenPGP 標(biāo)準(zhǔn)的密碼學(xué)庫,最常用于電子郵件加密。
OpenPGP.js 是一個實現(xiàn)了 OpenPGP 標(biāo)準(zhǔn) 的密碼學(xué)庫,最常用于電子郵件加密。ProtonMail、Mailvelope 和 FlowCrypt 都使用 OpenPGP.js,這還僅僅是其中一些。也就是說 OpenPGP.js 庫對數(shù)百萬用戶的信息進(jìn)行了加密。
OpenPGP 標(biāo)準(zhǔn)首次發(fā)布于 20 世紀(jì) 90 年代,像幾乎任何東西一樣,需要維護(hù)和更新,以保證安全和可用性。該標(biāo)準(zhǔn)的“加密刷新” 正在進(jìn)行中,它增加了現(xiàn)代的加密算法并廢除了過時的算法。為了提高可用性,各種電子郵件應(yīng)用程序現(xiàn)在允許用戶無縫加密他們的通信,用戶無需管理他們的密鑰或他們的聯(lián)系人的密鑰。
OpenPGP.js 于 2014 年首次發(fā)布,開始基于一個名為 GPG4Browsers 的早期原型,該原型基于 Herbert Hanewinkel(以及其他貢獻(xiàn)者)的幾個腳本。OpenPGP.js 的第二個版本于 2016 年發(fā)布,完全重新設(shè)計,使用 Uint8Arrays 而不是字符串(這大大增加了其性能),并在內(nèi)部使用現(xiàn)代 ES6 模塊而不是 CommonJS 模塊。第 3 和第 4 版都是在 2018 年發(fā)布的,分別增加了對橢圓曲線加密法(ECC)和流的支持。
我和我的團(tuán)隊繼續(xù)在 OpenPGP.js 上工作,以確保其發(fā)展為一個易于使用的強加密庫。
1、默認(rèn)的橢圓曲線加密
在 OpenPGP.js 第 4 版中,生成新密鑰時默認(rèn)使用 RSA。雖然 ECC 更快、更安全,但 Curve25519 還沒有在 OpenPGP 規(guī)范中得到標(biāo)準(zhǔn)化。加密刷新草案包括了 Curve25519,并且預(yù)計它將“按原樣”包含在下一版本的 OpenPGP 規(guī)范中,因此 OpenPGP.js 第 5 版現(xiàn)在默認(rèn)使用 ECC 生成密鑰。
2、只導(dǎo)入你需要的模塊
同樣,雖然 OpenPGP.js 內(nèi)部使用 ES6 模塊多年,但第 4 版仍然沒有發(fā)布一個合適的 ES6 模塊。相反,它只發(fā)布了一個通用模塊定義(UMD)模塊,可以在瀏覽器和 Node.js 上運行。在第 5 版中,這種情況有所改變,為瀏覽器和 Node.js 發(fā)布了單獨的模塊(包括 ES6 和非 ES6),使庫用戶更容易在所有平臺上導(dǎo)入 OpenPGP.js ,且(當(dāng)使用 ES6 模塊時)只導(dǎo)入他們需要的部分。這在很大程度上是通過將構(gòu)建系統(tǒng)切換到 rollup 來實現(xiàn)的。
3、拒絕弱加密技術(shù)
還有許多其他的安全改進(jìn)。例如,1024 位 RSA 密鑰、ElGamal 和 DSA 密鑰被認(rèn)為是不安全的,并被默認(rèn)拒絕。此外,第 4 版已經(jīng)默認(rèn)使用 AES 加密,第 5 版現(xiàn)在完全默認(rèn)拒絕使用較弱的算法進(jìn)行加密,即使公鑰聲稱只支持較弱的算法。相反,它假定所有的 OpenPGP 實現(xiàn)都支持 AES(這種情況已經(jīng)存在很長時間了)。
OpenPGP.js 的下一步是什么?
展望未來,有一些安全方面的改進(jìn)要做。用于識別公鑰的密鑰指紋仍然使用 SHA-1,盡管在加密技術(shù)更新中計劃對此進(jìn)行修復(fù)。同時,建議使用不同的方法來確定用于加密的任何公鑰的真實性,例如使用提議的 網(wǎng)絡(luò)密鑰目錄(WKD)標(biāo)準(zhǔn)直接從收件人的域中獲取整個密鑰,這已經(jīng)由各種 電子郵件提供商 實現(xiàn)。WKD 支持內(nèi)置于 OpenPGP.js 第 4 版,但在第 5 版中是一個單獨的模塊,以保持主庫的精簡。
同樣,當(dāng)用密碼而不是公鑰加密信息或文件時(例如:在使用 OpenPGP 進(jìn)行電子郵件加密時不常見,但在用于加密備份時更常見),密碼會使用相對較弱的密鑰衍生函數(shù)(KDF)轉(zhuǎn)換為對稱密鑰。因此,建議應(yīng)用在將用戶的密碼傳遞給 OpenPGP.js 之前,先通過一個強大的 KDF,如 Argon2 或 scrypt。希望加密刷新草案會包括這些算法中的一種,以便在未來的 OpenPGP.js 版本中實現(xiàn)。
如何使用 OpenPGP.js 第 5 版
不過現(xiàn)在,OpenPGP.js 第 5 版已經(jīng) 發(fā)布 到 npm 倉庫。如果你喜歡,可以隨時試用!歡迎在 GitHub 的 討論版 中進(jìn)行反饋。然而,請注意,雖然 OpenPGP.js 是一個通用的加密庫,但它的主要使用情況是在需要與 OpenPGP 規(guī)范兼容的情況下(例如,在發(fā)送或接收 PGP 加密的電子郵件時)。對于其他的使用情況,不同的庫可能是一個更合適或性能更好的選擇。當(dāng)然,總的來說,在嘗試使用任何加密技術(shù)時都要小心。
感謝閱讀,這里是保護(hù)電子郵件的未來!