由于种种原因,对kyber算法的学习需要终止一阶段呜呜呜,现阶段学习SHA-3杂凑算法。SHA-3算法的优化等问题后续不知道还要不要学习,先学该算法的基本结构吧。
SHA-3算法是一种杂凑算法,其涉及到的数学专业知识不多,结构也相对简单,轮运算的5个变换是算法的核心也是难点。话不多说,首先了解算法的大致结构,而后再分解学习。
(一)符号定义
r是消息分组长度,即将输入分成若干长度为r的数据块,r也被称为外部数据位宽。
c表示冗余量,也称为内部数据宽度、容量。
根据SHA-3标准,定义b=r+c为中间状态位宽,即轮函数的输入输出位宽。在SHA-3算法中,b的长度固定为1600bit。
f为轮函数运算,也是该算法中最复杂、最主要的运算,后续拆分来学习。
(二)输出模式
SHA-3算法有4种输出摘要长度:244、256、384、512,每一种输出长度会对应不同的r和c,其定义如下:
摘要长度 |
b |
r |
c |
244 |
1600 |
1152 |
448 |
256 |
1600 |
1088 |
512 |
384 |
1600 |
832 |
768 |
512 |
1600 |
576 |
1024 |
分组长度是在选定摘要长度后确定的。
算法输入进入轮运算前需要填充至r的整数倍。以输出摘要长度为256为例,算法输入M,填充时先在M结尾添“1”,而后添若干“0”,使填充“0”后的数据长度模256=(256-1),而后再次添加“1”即可完成填充。
在填充完成后,会进行如下结构的迭代。
轮函数f稍后学习。对于次轮函数迭代,输入输出均分为两部分,即低r比特部分和长度c部分,r部分会与输入的明文分组P进行异或与上一轮输出的c部分拼接作为本次迭代的输入。
轮函数使用次数与输入数据量有关,轮函数f包含24轮迭代运算,每轮迭代运算包括5步迭代,一般分别起名为θ、ρ、π、χ 和 ι。
今天先到此为止吧,明天继续~