首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于有限域乘法逆序的GHASH算法

基于有限域乘法逆序的GHASH算法
EN

Cryptography用户
提问于 2018-12-18 14:28:30
回答 1查看 260关注 0票数 1

NIST SP 800-38D§6.4 GHASH函数对GHASH算法作了如下描述:

先决条件:阻止哈希子项H。输入:位字符串X,以便某个正整数m的len(X) = 128m。输出:块GHASH_H (X)。步骤:

  1. X_1X_2,.,.,X_{m-1}X_m表示块的唯一序列,使得X = X_1 \x_x X_2 \.\ X_{m-1} \x{e76f}\x{e76f}\
  2. Y_0成为“零块”,0^{128}
  3. 对于i = 1,.,m,设Y_i = (Y_{i-1}X_iH
  4. 返回Y_m

乘法算法按“小端点”顺序工作。引用NIST SP 800-38D§6.3块上的乘法运算的话,“将字符串解释为多项式的惯例是"<#>little endian”,也就是说,如果u是多项式的变量,那么块D39+ x_1u + x_2u^2 +.+ x{127}u^{127}#qcStackCode#`_“(强调C38)。

因此,假设我有一个存在乘法,它以大endian顺序运算,而不是小endian顺序,这个存在方法比NIST SP 800-38D中提出的方法要快得多。我的问题是..。使用这种存在主义方法最有效的方法是什么?

到目前为止,我能想到的最好的是:

( reverseEndianness(reverseEndianness(Y_{i-1}X_i)·reverseEndianness(H))

reverseEndianness(H)可以预先计算,但idk似乎需要一个更好的方法,不需要太多的endianness。我的意思是,即使使用endian反转(可以实现令人惊讶的快),它仍然比NISTSP800-38D中提出的方法快得多,但我仍然希望将执行的次数降到最低。

我之所以有一个以大数顺序运算的存在乘法方法,是因为在F_{2^m}中,椭圆曲线的运算顺序应该是这样的。对于涉及椭圆曲线的第1节2.3.5字段-元素到八进制-字符串转换,我们应该“将多项式的系数看作一个在左边具有最高次项的位字符串,并将该位字符串转换为一个八位串”。

EN

回答 1

Cryptography用户

回答已采纳

发布于 2018-12-18 15:46:46

我的问题是..。使用这种存在主义方法最有效的方法是什么?

好的,您可以重新安排每块一个reverseEndianness操作,再加上每个GCM操作一个reverseEndianness操作(加上每个键设置一个)。

  1. X_1X_2,.,.,X_{m-1}X_m表示块的唯一序列,使得X = X_1 \x_x X_2 \.\ X_{m-1} \x{e76f}\x{e76f}\
  2. Y_0成为“零块”0^{128}
  3. 对于i = 1, ..., m,让Y_i = (Y_{i-1} \oplus \text{ReverseEndianness}(X_i)) \cdot H_{\text{reverse}}
  4. 返回\text{ReverseEndianness}(Y_m)

其中H_{\text{reverse}}是预先计算的\text{ReverseEndianness}(H)值。

这与您所拥有的基本相同,但我们将中间的Y_i值保持为bigendian格式。

票数 1
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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