沙-3使用填充,所以原始消息有一定的长度。
在SHA-3-512的情况下,每个块的大小为576,因此任何消息都必须进行填充,以便它是块大小576的倍数。
我知道填充是通过公式来完成的。
p(m)=P10*1
其中P是预定的位字符串,*是占位符,其中插入的数量为0,这样就满足了条件。
现在出现了一个问题:当我们想要将575位的信息放入算法中时,会发生什么?显然,我们比所需的长度少了1位,填充规则至少有3位长。在这种情况下会发生什么?
发布于 2020-06-26 15:55:56
当我们想要将575位的消息放入算法中时,会发生什么呢?显然,我们比所需的长度少了1位,填充规则至少有3位长。在这种情况下会发生什么?
在这种情况下,我们只是扩展填充直到它到达下一个多重-576边界;在这种情况下,这意味着填充是577位长(并跨越块边界)。
发布于 2020-06-26 20:27:05
从FIPS 202中定义填充。多速率填充:
填充规则pad10*1,其输出是1,后面是(可能为空的) 0s字符串,后面是1。填充规则pad是生成填充的函数,即具有适当长度的字符串以附加到另一个字符串。通常,给定一个正整数x和一个非负整数m,输出pad(x, m)是一个字符串,该字符串的属性是m + len(pad(x, m))是x的正倍数。在海绵结构中,x = r和m = len(N),这样就可以将填充的输入字符串划分成一个r-bit字符串序列。
其中r是块大小或速率。r可以由r = 1600 - 2\cdot r计算。
下面的算法是SHA3的填充算法,内部确定所需的零点数。
算法9: pad10 10*1(x,m)
当我们想要将575位的消息放入算法中时,会发生什么呢?显然,我们比所需的长度少了1位,填充规则至少有3位长。在这种情况下会发生什么?
用575 (pad10 10*1(576,575) )调用算法pad10 10*1(x,m ),然后j = (-575 -2) \bmod 576 =575,使0's的数目为575。
填充的消息是m\mathbin\|1\,\underbrace{00\ldots00}_{575-zeroes}\,1
填充的总大小为577,这需要一个额外的块,因为r=576。
https://crypto.stackexchange.com/questions/81562
复制相似问题