密碼學 - ChaCha20 加密演算法



加密是保護資料最有效的方法之一,而 ChaCha20 是當今應用最廣泛的加密演算法之一。ChaCha20 是一種安全且快速的加密方法,可在各種應用程式中實現。

本章將討論 ChaCha20 加密演算法,其工作原理以及它與其他加密演算法的不同之處。

ChaCha20 的歷史

Daniel J. Bernstein 在 2005 年至 2008 年間開發了兩種演算法:Poly1305 和 ChaCha20。在 2013 年至 2014 年間,這些演算法的變體被納入 IETF 的提案中,用於 TLS 和 DTLS,谷歌出於安全性和效能方面的考慮而支援這些演算法。

它們最終被 OpenSSH 採用。2015 年,針對 TLS、DTLS 和 IPsec 等協議的 RFC 採用了組合方法。Cloudflare 也採用了它。2018 年 6 月,RFC 7539 被 RFC 8439 取代。

什麼是 ChaCha20 加密?

ChaCha20 是一種對稱加密方法,它使用相同的 256 位金鑰對資料進行加密和解密。

著名的密碼學家 Daniel J. Bernstein 在 2008 年將其建立為流密碼。

ChaCha20 加密演算法旨在在速度和安全性之間取得平衡。

它旨在處理已知的攻擊,例如差分密碼分析和線性密碼分析。此外,它具有高度並行性,使其易於轉移到多核 CPU 和其他高效能計算平臺。

它是如何工作的?

ChaCha20 是一種流密碼,它以連續流而不是固定大小的分組來加密資料。

它產生一個連續的偽隨機位金鑰流,然後將其與明文資料進行異或運算以形成密文。

演算法

以下是 ChaCha20 加密演算法的基本步驟:

  • 第一步是金鑰生成。其中,ChaCha20 演算法使用使用者提供的金鑰和隨機生成的 96 位 nonce 建立一個 256 位金鑰。
  • 第二步是初始化,其中演算法使用金鑰和 nonce 來設定密碼的狀態。
  • 第三步是資料加密,其中 ChaCha20 使用當前密碼狀態對每個資料塊進行加密,在處理每個塊後都會更改密碼狀態。
  • 最後一步是輸出,其中密文是透過將明文與資料加密步驟的輸出進行異或運算生成的。

金鑰生成

ChaCha 的私鑰不必採用特定形式;它們只需要是所需大小的(加密安全的)隨機位。其他方法,如 RSA 或 EC,需要值滿足某些數學條件,但 ChaCha 金鑰不需要。

但是,確保金鑰正確生成至關重要,否則它可能成為一種攻擊手段——如果金鑰建立不夠“隨機”,則可能是一種非常容易的攻擊方法。

以下是實現 ChaCha 金鑰生成時應考慮的一些規則:

  • 如果可能,請使用 CSPRNG(密碼安全偽隨機數生成器)或 HSM(硬體安全模組)。
  • 否則,請確保正確地為您的隨機數生成器播種。
  • 始終使用新的隨機性來獲取金鑰生成器;不要使用相同的隨機數種子生成多個金鑰。
  • 在需要和保留金鑰的地方生成金鑰;例如,不要在伺服器上生成金鑰以在客戶端使用;而應該在客戶端生成它們。
  • 確保私鑰安全。
  • 避免傳輸私鑰。
  • 強烈建議儘可能頻繁地重新協商或輪換金鑰。不要將私鑰視為與個人或節點“永久”連線的東西,而應將其視為可以定期更改的臨時東西。

如何使用密碼進行加密和解密?

ChaCha 通常以一種從使用者必須輸入的密碼生成金鑰的方式使用,以加密/解密資料。由於金鑰具有固定的長度(256 位或 32 位元組),因此不能直接使用密碼作為金鑰,因為這會導致使用者必須選擇的密碼不安全且不實用。

相反,金鑰派生演算法從密碼生成 ChaCha 相容的金鑰。PBKDF2(基於密碼的金鑰派生函式 2)是一種高階金鑰派生函式。

ChaCha20 的優點

以下是使用此技術時需要考慮的 ChaCha20 的一些優點:

  • ChaCha20 是速度最快的加密演算法之一,使其非常適合在各種裝置上使用,特別是移動裝置和低功耗物聯網裝置。
  • ChaCha20 旨在具有高度安全性和對已知攻擊的彈性。它基於與 Salsa20 加密方法類似的原理構建,Salsa20 加密方法經過廣泛測試,被認為是高度安全的。
  • ChaCha20 具有高度並行性,使其非常適合多核處理器和高效能計算系統。
  • 與其他加密演算法相比,ChaCha20 非常易於實現,這使其成為開發人員令人信服的選擇。

ChaCha20 的應用

ChaCha20 加密用於各種應用程式,例如:

  • 安全通訊:ChaCha20 加密個人之間的通訊,如安全訊息應用程式或 VPN 中所示。
  • 檔案加密:它加密儲存在裝置上或透過網路傳輸的檔案。
  • 物聯網安全:ChaCha20 保護物聯網裝置,這些裝置通常計算能力有限,需要輕量級加密技術。
  • 網路安全:它可以保護網路流量,例如 HTTPS 連線。

什麼是 XChaCha20?

密碼學隨機數是一個任意值,僅使用一次以確保操作(例如加密或雜湊)的唯一性。擴充套件隨機數 ChaCha20 (XChaCha20) 是 ChaCha20 的一種變體,它使用 192 位隨機數而不是 96 位隨機數。這使得選擇隨機數更加安全,因為幾乎沒有重複使用的可能性。

(“位”表示密碼金鑰的大小或長度。簡單來說,位數越高,金鑰就越安全。)

然而,XChaCha20 沒有正式認可的標準,2020 年建立標準的最新嘗試也失敗了。這導致這種相對更安全的形式的接受速度緩慢。

ChaCha20 的替代方案

  • AES(高階加密標準)
  • RC4(Rivest Cipher 4)
  • Salsa20
  • Blowfish
  • Twofish
  • Camellia
廣告