SHA3浅记

2019-11-30  本文已影响0人  0HP

写在前面:
本文思路及部分图片来自《密码编码学与网络安全——原理与实践(第七版)》

零、基本概念

SHA3:一种HASH函数标准。
输入可变长度n bits消息数据,输出固定长度\mathcal l bits 数据

一、算法步骤

输入n bits数据 \rightarrow 填充(padding)\rightarrow分组\rightarrow吸水(absorbing)(分组丢进f函数里后得出的结果与下一分组XOR运算以此迭代)\rightarrow挤压(squeezing)\rightarrow输出l bits数据

注:以上过程亦称为海绵结构

海绵结构图解

二、具体过程

0.填充+分组

(0). 首先定好分组长度r(一般取r=576
(1). 对数据向后填充,使填充后的数据长度可整除r;填充的位数(0,r]
注意区间开闭:即若原先r\ |\ n,也应填充r位数据
(2). 填充后得到n'数据,且r\ |\ n'。分为k=n/r个分组,每个分组有rbits 数据

其中填充的方法

1.吸水

(0). 每个分组内,rbits数据向后扩充cbits (填充“0”即可),一般c=1024,得b=r+c位的数据
(1). 第一个分组与全零XOR运算后\rightarrow f函数\rightarrow得到s
(2). 第二个分组与s \ XOR运算\rightarrow f函数\rightarrow迭代s
\vdots
以此迭代
(3). 得到 s(b bits)

2.挤压

这个图不科学:r=576,c=1024, 应该画cr长(不要被误解)。

三、吸水挤压过程中的f函数

作用:输入 s=1600bits数据,输出 s'=1600bits数据
过程:共有五个过程;执行顺序依次是 \theta, \rho, \pi, \chi, \iota 。以此循环24轮,输出。

f函数框架

0. 执行前

执行算法前,将 1600bits数据构建成一个 5*5*64 的三维矩阵 a, 其中 5*5 称为行和列,64个位合起来称为一纵。用x为列,y为行,z为纵里的bit坐标
a[x,y,z]标记为一个bit的坐标号,且以左下角为0向上向右坐标标号递增

看以下以3*3*3魔方为例子:

绿色对面蓝色,红色对面橙色,黄色对面白色
黄红绿+红绿+红绿白构成一列
黄红蓝+黄红+黄红绿构成一行
黄红绿+黄绿+黄橙绿构成一纵
记红蓝白(左下角)为坐标 [0,0,0],向上行数增加,向右列数增加,从里向外纵内 值增加;例如:红绿块记为 a[2,1,0],即第二列第一行第零块。同理:纯绿块记为 a[2,1,1]...以此类推。

此步骤的思路可借鉴魔方盲拧构建坐标的方法

注意:计算时所有值应该mod5,加法也是XOR运算

1.\theta 过程(基于列的位代换)

公式:a[x,y,z]=a[x,y,z]XOR \sum^4_{y'=0}a[(x-1),y',z] XOR \sum^4_{y=0}a[(x+1),y',(z-1)]

以魔方为例:


绿色对面蓝色,红色对面橙色,黄色对面白色

纯黄块=纯黄块XOR(黄蓝+纯蓝+蓝白)XOR(黄红绿+红绿+红绿白)

2. \rho 过程(纵内循环位移)

公式:
a[x,y,z]=a[x,y,(z-\displaystyle\frac{(t+1)(t+2)}{2})]
t\in [0,24)$在$GF(5)^{2*2}上有 \begin{bmatrix} 0 & 1\\ 2 & 3 \\ \end{bmatrix}^t \begin{bmatrix} 1\\ 0\\ \end{bmatrix} = \begin{bmatrix} x\\ y\\ \end{bmatrix}(实际上查表可得)
t表如下:

t表

3.\pi过程(纵间混淆)

公式:a[x',y']=a[x,y]
\begin{bmatrix} x'\\ y'\\ \end{bmatrix} = \begin{bmatrix} 0 & 1\\ 2 & 3\\ \end{bmatrix} \begin{bmatrix} x\\ y\\ \end{bmatrix} (mod\ 5)

此步与纵内无关,仅是行和列的计算,可当成二维的运算。计算后结果:


结果

4.\chi过程(基于行的位代换)

公式:
a[x,y,z]=a[x,y,z]XOR(NOT(a[(x+1),y,z))AND(a[(x+2),y,z])
以魔方为例:

绿色对面蓝色,红色对面橙色,黄色对面白色
黄红蓝=黄红蓝XOR黄红XOR黄红绿

5.\iota 过程(第一纵变换)

公式:
a[0,0]=a[0,0]XOR\ RC[i_r]
其中RC为轮常量,查表可得;i_r 为轮序数。
即每一轮计算时,用该轮次的 RC 值与该轮第一纵计算。

轮常量RC表

5个步骤,循环24次(24轮)后输出s

上一篇下一篇

猜你喜欢

热点阅读