概述
SHA3设计、大小端与实现
看NIST提供的SHA3中间值文档会发现非常奇怪,并不符合常见的设计文档中的大端表示法方,与FIPS202中多速率填充也并不一致,附录中是这样填充的M || 0x06 || 0x00 … || 0x80或者M || 0x86。
这是为了在实现中方便为了在小端平台上直接将8bit字节转换为64bit长整数类型而设计的。
我们在实现r=576,c= 1024,b=1600下的SHA3时,一个lane大小为64bits,即一个uint64_t数据类型,我们将其简化变短一点,按照文档的大端表示填充会如下所示:
而按照M || 0x06 || 0x00 … || 0x80或者M || 0x86填充后可以发现直接将字符串放入lanes中,会有如下的效果,
可以发现填充经过小端的自动转换后变得正确了,然而这种实现下起始端也变了,这样我们在实现的时候循环移位的方向就需要与大端表时的方向相反。
ref
Examples with Intermediate Valueshttps://csrc.nist.gov/projects/cryptographic-standards-and-guidelines/example-values
FIPShttps://csrc.nist.gov/publications/detail/fips/202/final
https://cryptologie.net/article/387/byte-ordering-and-bit-numbering-in-keccak-and-sha-3/
-bit-numbering-in-keccak-and-sha-3/
最后
以上就是老迟到灯泡为你收集整理的SHA3(Keccak)设计、大小端与实现SHA3设计、大小端与实现的全部内容,希望文章能够帮你解决SHA3(Keccak)设计、大小端与实现SHA3设计、大小端与实现所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复