nist-sha
nist目前支持的sha运算,sha1系列,输出mac160bit。
sha2系列,支持sha2-224,sha2-256,sha2-384,sha2-512,sha2-512/224,sha2-512/256
sha3系列,支持sha3-224,sha3-256,sha3-384,sha3-512
sha1和sha2系列的算法,支持最大的message长度,block size的大小,输出digest的size。
sha1和sha2的算法类似,都分为preprocessing和迭代运算两部分。NIST的标准为FIPS 180-4
1) preprocessing,padding message,将message分为512,或者1024bit的整数倍。
512bit的block,最后64bit表示message的长度,1024bit的block,最后128bit表示message的长度。
2) 迭代运算,迭代开始init vector,H
sha1,是5个32bit的word组成的向量,
512bit的block,是8个32bit的word组成的向量,
1024bit的block,是8个64bit的word组成的向量。
迭代过程中,存在a-f的8个中间变量,由H初始化。
每个block的数据被分为64个或者80个word,在经过64轮或者80轮迭代,更新a-f这几个中间变量。
输出最终的a-f的中间变量的值作为hash digest的值。
sha3系列算法,采用的engine内核不同于sha2,而是基于Keccak-p[b,nr]的置换-------sponge压缩算法。
sponge压缩算法,分为absorb和squeeze两部分,absorb进行数据的迭代压缩,squeeze生成指定长度的digest。
sponge压缩算法的输入Sponge[f, pad(r, len(N)), r](N,d):
1) input string,可以是byte流也可以是bit流,注意sha3中的byte流和bit流的转换,高低位置是相反的。0x80对应0b'0000_0001。
2) padding function,SHA3采用10*1的bit流的方式来padding。padding之后的string len是r的整数倍。
3) rate,r+c = b。
4) f,表示算法每次块的处理长度,处理长度为b。
sha3运算中的核心engine,Keccak-p[b, nr]其中b表示每次置换的bits的长度,NIST给出的标准只有七种选择。25,50,100,200,400,800,1600。
由b的值可以得到两个变量,w表示state的z轴,w = b/25。
l表示算法需要迭代的次数,l = log2w。
Keccak-p[b, nr]算法的输入是一个三维的5*5*w的三维矩阵。每次的置换运算中,包括5个小的运算。
Keccak-p[b, nr]的算法流程:
Keccak-f系列的算法是Keccak-p算法中的一大类,其中nr = 12 + 2l,而sha3采用的Keccak算法正是该系列下的b = 1600的系列。
sha3算法的置换部分的engine为Keccak-p[1600,24]。
sha3的算法表示,N表示输入的最原始的bit字符串,d表示输出的string的长度。并且规定c = 2d。
Keccak[c](N, d) = Sponge[Keccak-p[1600,24], pad 10*1, 1600-c](N, d)
sha3的其中四种运算,需要在M之后加01,之后padding。另外的shake运算,需要在M之后加1111。
其中各个算法中的r*8为(可以通过1600-2d)/8得到:
总结:
sha3运算首先将input string pad 为一个5*5 state,各个block块,以1600bit分组,进行absort操作,每次调用Keccak算法24次。
之后进行squeezing操作。
sha3中的10*1的bit pading方法,对应到byte string中,表示为:(其中q为r - m/ mod r,r为byte表示的长度)
针对nist approve的各个hash algm,他们的安全等级分别为:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决