标准相关信息
- 编号:NIST FIPS 202
- 名称:SHA-3标准:基于置换的哈希与可扩展输出函数(SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions)
操作基本设计
操作单元
- 三维数据向量,
5 * 5 * w
(w为2的方幂)bit - SHA-3中取
w = 64
,故数据向量总大小为1600bit - 记
l = log w / log 2
,对于SHA-3,l = 6
标记法
x
:横向,中心为原点,左至右方向,3 4 0 1 2
y
:纵向,中心为原点,下至上方向,3 4 0 1 2
z
:面向,最前端为原点,前至后方向,0 1 2 ... w-1
A[x, y, z]
:表示在位置(x, y, z)
的位S[n]
:表示将整个数据向量展开为序列时位置为n的位
命名
- 零维
- 位(Bit):具体位置
- 一维
- 行(Row):横向序列
- 列(Column):纵向序列
- 陆(Lane):面向序列
- 二维
- 面(Plane):
xz
平面 - 片(Slice):
xy
平面 - 表(Sheet):
yz
平面
- 面(Plane):
- 三维
- 态(State):整体数据
存储顺序
z -> x -> y
,即A[x, y, z] = S[w * (5 * y + x) + z]
序列到态的转换
- 将位拼合成陆
- 将陆拼合成面
- 将面拼合成态
基本算法设计
theta代换
- 列间的代换操作
- 对于列中每一位,提取其左列与右前列的总异或值进行异或
rho置换
- 陆内的置换操作
- 从
陆(1, 0)
开始操作,并记操作数t = 0
:- 使陆内所有位循环向后移动
(t + 1)(t + 2) / 2
位 - 从
陆(x, y)
改到陆(y, (2x + 3y) mod 5)
,并使t = t + 1
,重复上述操作直至操作24次为止
- 使陆内所有位循环向后移动
- 笔者注:
陆(0, 0)
不发生改变
pi置换
- 陆间的置换操作
- 将
陆(x, y)
移至陆((x + 3y) mod 5, x)
- 笔者注:
陆(0, 0)
不发生改变
chi代换
- 行内的代换操作
- 对于行中每一位,取下一位的反与再下一位进行与操作,并与本位进行异或
iota代换
- 对
陆(0, 0)
的代换操作 - 额外输入
i_r
(轮参数,后续会说明该参数的取值) - 轮位计算函数
rc()
:- 类似线性反馈移位寄存器LFSR