我了解 GCM Crypto 仅将 ESP 加密用于 ESP 和身份验证算法。而 AES 256 SHA256 将 AES 用于 ESP 加密,将 SHA256 用于 Auth 算法。
与 ASE256SHA256 相比,有人可以帮助澄清使用 AES256GCM 获得更好性能的原因。
我了解 GCM Crypto 仅将 ESP 加密用于 ESP 和身份验证算法。而 AES 256 SHA256 将 AES 用于 ESP 加密,将 SHA256 用于 Auth 算法。
与 ASE256SHA256 相比,有人可以帮助澄清使用 AES256GCM 获得更好性能的原因。
加密操作模式有两个部分:加密/解密和消息认证(防篡改)。您必须同时使用两者,因为加密具有延展性。发送和接收的每条消息都必须由两者完全处理。
加密/解密的可能选项:
CBC模式有一个固有的限制,在加密方向(解密没有这个问题)16字节的块需要一个接一个地处理,限制了并行性。当您需要并行处理许多消息/流时,您可以获得足够的并行度以使 AESNI 单元饱和,但这取决于流量模式。
另一方面,CTR 模式和基于 CTR 的模式(如 GCM 和 CCM)可以并行处理所有块。这意味着对于足够长的消息,单个数据流可以使 AESNI 单元饱和。768 字节足够长。
如果没有特殊的硬件支持,AES 要么很慢,要么不安全。幸运的是,因为自 2010 年以来的所有 x86 芯片都有AESNI,所以 AES 在 x86 上速度很快。当可以并行处理 AES 块时(因此基于 CTR 和 CTR,而不是 CBC),每个内核每秒大约几 GB(而不是 GB)。
ChaCha20 存在于没有硬件 AES 的芯片上,如手机和平板电脑。在 x86 上(例如,在电话连接的另一端)它足够快,可能是 1.6GB/秒。在手机和平板电脑上,大约为 100MB/秒,具体取决于微架构和电源/冷却预算。
MAC 的可能选项:
HMAC 比原始散列函数复杂一点,但对于较长的消息,它只是比原始散列函数慢一点。SHA-256 很慢,大约为 400MB/秒。在处理并行流时使用 AVX 或使用英特尔 SHA 扩展,它可能没问题,每个内核每秒最多几 GB(例如,请参阅this)。SHA 指令是新的,并不常见。支持不好。英特尔的 IPSec 库支持它们。
CBCMAC 使用相同的 AES 执行单元来处理相同数量的数据,因此与仅加密/解密相比,它最多可以将您的吞吐量减半。它在内部使用 CBC,因此它比 CTR 慢。优点是单个加速器电路可用于加密和 MAC,节省芯片面积/成本,并且降低复杂性(出现错误的机会)。
GCM将 GMAC 用于 MAC(和 CTR 用于加密)。如果没有CLMUL 指令形式的硬件支持,GMAC 会很慢。幸运的是,自 2010 年以来的所有 x86 芯片都具有此功能。
Poly1305 的发明是为了在没有特殊硬件(如 SHA 扩展或 CLMUL)(如手机和平板电脑)的芯片上快速运行。那里(可能 100MB/秒)和 x86(可能 2GB/秒)足够快。
理论上,加密和 MAC 模式可以混合搭配使用,但在实践中它们仅以几种组合方式使用。
现在,如何将加密部分的性能数字与 MAC 的性能数字结合起来?
如果它们不能重叠,则需要使用(X*Y)/(X+Y)其中 X 和 Y 是相同单位(例如 MB/秒)中两个单独部分的性能。因此,例如,520MB/秒的加密和 670MB/秒的 MAC 导致 293MB/秒的总和。
但在某些情况下,它们可以重叠,然后您可能会获得两者中最慢的性能,而另一个是“免费的”。GCM就是这种情况,它可以以与CTR相同的速度运行,而GMAC实际上是免费的。这就是它受欢迎的原因。TLS 和 SSH 切换到 GCM(使用 ChaPoly for mobile)。为简单起见,WireGuard 仅适用于 ChaPoly。
以上为笼统。我建议您始终在您打算使用的确切硬件上运行自己的确切实现基准。消息大小发挥作用,并行处理多个消息流发挥作用,重叠加密能力和 MAC 发挥作用。