AES256 CBC 与 AES256 GCM 性能对比?

问题描述 投票:0回答:2

根据我的搜索,AES256 CBC 似乎比 AES256 GCM 慢。

然而今天我在 iPhone 13 Pro Max 模拟器上测试了这两种模式,它们让我感到困惑。

对于 AES256 CBC,我使用名为 CommonCrypto 的 obj-c 库,对于 AES256 GCM,我使用 CryptoKit https://developer.apple.com/documentation/cryptokit/aes/gcm

结果是,对于一个3MB的字符串,AES256 CBC 128位iv加密或解密需要3秒,而AES256 GCM 96位iv需要10秒!

这里可能出了什么问题?

encryption aes aes-gcm initialization-vector
2个回答
3
投票

首先,如果每个 AES 块密码操作花费相同的时间,则 AES CBC 永远不会比 GCM 慢。 AES-CBC 仅在块加密之间执行 XOR,并且 XOR 的速度非常快,因此开销可以忽略不计。然而,AES-GCM 由计数器 (CTR) 模式和 GMAC 计算组成。 CTR 使用 128 位计数器(可忽略)和 XOR。然而,GMAC 必须在此基础上进行。伽罗瓦乘法的速度取决于硬件,但可以在 ARM 上相对较快

但是,很大程度上取决于实施细节。 Objective-C 非常快,使用托管代码 / swift 可能会带来开销,即使实际实现又是用 C 语言实现的。如果您在使用解释器时不允许预热时间,这可能会特别伤害您,因为有些操作只有执行几次后才会加速。

CBC 通常作为流实现提供,这意味着内存消耗相对有限。如果 GCM 只允许内存中的所有内容(因为您想在使用解密的明文之前验证标签),那么这也可能会带来开销。

请注意,如果密钥存储在密钥存储中与内存中,那么这也可能会产生很大的差异。通常,如果密钥存在于密钥存储中,则密钥将使用特定的受信任环境,否则需要将其复制到“受信任环境”才能使用,这在很大程度上否定了首先拥有受信任环境的任何好处地点。 最后,模拟器不是模拟器;模拟器不是模拟器。他们可能不会在相同(相对)时间内执行操作。因此,依靠模拟器进行速度测试本身就是一个有缺陷的前提。

众所周知,速度测试很难正确进行,如果你混合使用密码学,那么它就会变得更加棘手。


0
投票

© www.soinside.com 2019 - 2024. All rights reserved.