NIST SP 800-38D§6.4 GHASH函数对GHASH算法作了如下描述:
先决条件:阻止哈希子项
H。输入:位字符串X,以便某个正整数m的len(X) =128m。输出:块GHASH_H(X)。步骤:
X_1,X_2,.,.,X_{m-1},X_m表示块的唯一序列,使得X = X_1 \x_x X_2 \.\ X_{m-1} \x{e76f}\x{e76f}\Y_0成为“零块”,0^{128}。i = 1,.,m,设Y_i = (Y_{i-1}⊕X_i)·H。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字段-元素到八进制-字符串转换,我们应该“将多项式的系数看作一个在左边具有最高次项的位字符串,并将该位字符串转换为一个八位串”。
发布于 2018-12-18 15:46:46
我的问题是..。使用这种存在主义方法最有效的方法是什么?
好的,您可以重新安排每块一个reverseEndianness操作,再加上每个GCM操作一个reverseEndianness操作(加上每个键设置一个)。
X_1,X_2,.,.,X_{m-1},X_m表示块的唯一序列,使得X = X_1 \x_x X_2 \.\ X_{m-1} \x{e76f}\x{e76f}\Y_0成为“零块”0^{128}。i = 1, ..., m,让Y_i = (Y_{i-1} \oplus \text{ReverseEndianness}(X_i)) \cdot H_{\text{reverse}}。\text{ReverseEndianness}(Y_m)。其中H_{\text{reverse}}是预先计算的\text{ReverseEndianness}(H)值。
这与您所拥有的基本相同,但我们将中间的Y_i值保持为bigendian格式。
https://crypto.stackexchange.com/questions/65960
复制相似问题