SHA3(Keccak)设计、大小端与实现

本文探讨了SHA3设计中遇到的不寻常填充方式,重点在于大端与小端平台上的字节转换对实现细节的影响,包括lane填充规则的变化和循环移位方向调整。作者引用了NIST文档和FIPS标准来说明这一现象并提供实例解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值