对这个问题的回答是:用流密码代替分组密码实现GCM的安全性 ...it说:
GCM的GHASH部分在实现时通常是有问题的,而不是AES。GHASH在有专用操作码的硬件平台上非常快(x86与AES-NI,POWER8.)但是这些平台还提供了一个优于基于软件的流密码的AES硬件实现。
这是真的吗?如果CPU没有任何特殊指令,GHASH真的比AES慢吗?
发布于 2018-06-18 14:52:56
First things first:引用的段落并不声称GHASH比AES慢。它的意思是,如果你用一个更快的流密码取代AES/CTR,那么GHASH部分就会比较昂贵。
对于AES和GHASH,有很多种实现;它们具有不同的性能特性,它们可能是固定时间的,也可能不是固定的。我将在这里使用BearSSL进行大多数度量,因为我知道该代码是如何工作的(我编写了它),而且我可以轻松地对其进行基准测试。这里的测量平台是我的笔记本电脑(Inteli7-6567U,3.3 GHz,64位模式):
AES-128 CTR (big) 170.67 MB/s
AES-128 CTR (ct64) 108.91 MB/s
AES-128 CTR (x86ni) 5307.37 MB/s
GHASH (ctmul) 214.63 MB/s
GHASH (ctmul64) 277.17 MB/s
GHASH (pclmul) 4795.76 MB/s对于AES实现:
关于GHASH部分:
以下额外说明适用于:
An聚合规则是,当只使用“基本”操作(即那些C中没有内联程序集或编译器本质的操作)时,您可以将GHASH的成本保持在AES/CTR成本的一半以下(如果使用非固定时间的AES,则使用非恒定时间的GHASH更有意义)。
现在,让我们与ChaCha20和Poly1305进行比较:
ChaCha20 (ct) 407.74 MB/s
ChaCha20 (sse2) 590.59 MB/s
Poly1305 (ctmul) 1248.27 MB/s
Poly1305 (ctmulq) 1936.74 MB/sChaCha20的"ct“实现只使用32位整数操作;" SSE2”实现使用SSE2本质。对于Poly1305,"ctmul“实现使用基本的32x32→64乘法,而"ctmulq”实现使用64x64→128乘法(这需要一些编译器本质或扩展)。所有这些都是固定时间的。
这句话告诉我们如下:
https://crypto.stackexchange.com/questions/60089
复制相似问题