首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果CPU没有特殊指令,那么AES或GCM散列(GHASH)哪个更慢?

如果CPU没有特殊指令,那么AES或GCM散列(GHASH)哪个更慢?
EN

Cryptography用户
提问于 2018-06-17 15:39:01
回答 1查看 1.5K关注 0票数 2

对这个问题的回答是:用流密码代替分组密码实现GCM的安全性 ...it说:

GCM的GHASH部分在实现时通常是有问题的,而不是AES。GHASH在有专用操作码的硬件平台上非常快(x86与AES-NI,POWER8.)但是这些平台还提供了一个优于基于软件的流密码的AES硬件实现。

这是真的吗?如果CPU没有任何特殊指令,GHASH真的比AES慢吗?

EN

回答 1

Cryptography用户

回答已采纳

发布于 2018-06-18 14:52:56

First things first:引用的段落并不声称GHASH比AES慢。它的意思是,如果你用一个更快的流密码取代AES/CTR,那么GHASH部分就会比较昂贵。

对于AES和GHASH,有很多种实现;它们具有不同的性能特性,它们可能是固定时间的,也可能不是固定的。我将在这里使用BearSSL进行大多数度量,因为我知道该代码是如何工作的(我编写了它),而且我可以轻松地对其进行基准测试。这里的测量平台是我的笔记本电脑(Inteli7-6567U,3.3 GHz,64位模式):

代码语言:javascript
复制
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实现:

  • “大”是一种经典的基于表的实现(而不是固定时间)。
  • "ct64“是一个固定时间的位片实现,它使用64位寄存器并并行计算4个AES实例(这在CTR模式下运行良好)。
  • "x86ni“使用AES-NI操作码(它并行计算四个实例,很好地映射到Skylake核上这些操作码的4个周期延迟)。

关于GHASH部分:

  • "ctmul“使用带掩蔽的32x32→64整数乘法,以避免携带带来的麻烦。它是恒定的时间。
  • "ctmul64“使用64x64→64整数乘法和掩蔽;它也是常数时间。
  • "pclmul“使用AES-NI操作码。

以下额外说明适用于:

  • BearSSL中的所有GHASH实现都是固定时间的.通过使用查找表,特别是为特定的秘密$h$动态生成表,可以使非恒定时间GHASH实现更快。
  • 有一个AES的恒时间位片实现,它利用SSE2操作码,用于额外的并行性(128位寄存器)和更有效地实现算法的线性部分。它将超过400 MB/s在这台机器上,并将超过恒定时间的GHASH实现。它是否符合“不使用特殊操作码”还有待商榷:它没有使用AES-NI操作码,但并不是所有64位架构都有类似于SSE2的东西(不过,它是64位x86上ABI的一部分)。
  • 如果不在CPU内使用相同的计算单元,AES和GHASH的结合可能会提供加速。例如,使用AES-NI操作码,将AES/CTR加密和GHASH交织在一起,可以产生比上述数字所承诺的2.5 GB/s更好的性能。

An聚合规则是,当只使用“基本”操作(即那些C中没有内联程序集或编译器本质的操作)时,您可以将GHASH的成本保持在AES/CTR成本的一半以下(如果使用非固定时间的AES,则使用非恒定时间的GHASH更有意义)。

现在,让我们与ChaCha20和Poly1305进行比较:

代码语言:javascript
复制
ChaCha20 (ct)                    407.74 MB/s
ChaCha20 (sse2)                  590.59 MB/s
Poly1305 (ctmul)                1248.27 MB/s
Poly1305 (ctmulq)               1936.74 MB/s

ChaCha20的"ct“实现只使用32位整数操作;" SSE2”实现使用SSE2本质。对于Poly1305,"ctmul“实现使用基本的32x32→64乘法,而"ctmulq”实现使用64x64→128乘法(这需要一些编译器本质或扩展)。所有这些都是固定时间的。

这句话告诉我们如下:

  • 没有AES-NI,ChaCha20的性能优于AES。实际上,恒时ChaCha20的性能大大优于所有AES,甚至非固定时间.
  • 没有AES-NI,Poly1305比GHASH快得多.
  • 如果您想将ChaCha20和GHASH混合(这是您想要讨论的前面问题的上下文),那么GHASH部分将比ChaCha20更昂贵,除非您对GHASH使用AES-NI操作码;但是,如果可以使用AES-NI操作码,为什么要使用该ChaCha20混合码而不是标准AES/GCM?
票数 6
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://crypto.stackexchange.com/questions/60089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档