密码学 - 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
广告
© . All rights reserved.