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,他们的安全等级分别为:

  

nist-sha的更多相关文章

  1. 密码学系列之:NIST和SHA算法

    目录 简介 SHA1 SHA2 SHA3 简介 SHA算法大家应该都很熟悉了,它是一个用来计算hash的算法,目前的SHA算法有SHA1,SHA2和SHA3种.这三种算法都是由美国NIST制定的. N ...

  2. 数据摘要算法的测试效率(SHA、MD5和CRC32)

    1.算法概述 数据摘要算法是密码学算法中非常重要的一个分支,它通过对所有数据提取指纹信息以实现数据签名.数据完整性校验等功能,由于其不可逆性,有时候会被用做敏感信息的加密.数据摘要算法也被称为哈希(H ...

  3. SHA安全散列算法简析

    1 SHA算法简介 1.1 概述 SHA (Secure Hash Algorithm,译作安全散列算法) 是美国国家安全局 (NSA) 设计,美国国家标准与技术研究院(NIST) 发布的一系列密码散 ...

  4. SHA算法

    安全Hash函数(SHA)是使用最广泛的Hash函数.由于其他曾被广泛使用的Hash函数都被发现存在安全隐患,从2005年至今,SHA或许是仅存的Hash算法标准. SHA发展史 SHA由美国标准与技 ...

  5. 【加密算法】SHA

    一.简介 安全散列算法(英语:Secure Hash Algorithm,缩写为SHA)是一个密码散列函数家族,是FIPS所认证的安全散列算法.能计算出一个数字消息所对应到的,长度固定的字符串(又称消 ...

  6. MD、SHA、MAC消息摘要算法实现与应用

    1.消息摘要概述 消息摘要(Message Digest)又称为数字摘要(Digital Digest).它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向Hash加密函数对消息进行作用而产生 ...

  7. android -------- SHA 加密算法

    安全散列算法(英语:Secure Hash Algorithm,缩写为SHA)是一个密码散列函数家族,是FIPS所认证的安全散列算法.能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的 ...

  8. 加密算法大全图解 :密码体系,对称加密算法,非对称加密算法,消息摘要, Base64,数字签名,RSA,DES,MD5,AES,SHA,ElGamal,

    1. 加密算法大全: ***************************************************************************************** ...

  9. SHA算法(及示例)演变历史

    安全散列算法(英语:Secure Hash Algorithm,缩写为SHA)是一个密码散列函数家族,是FIPS所认证的安全散列算法.能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的 ...

  10. Android数据加密之SHA安全散列算法

    前言: 对于SHA安全散列算法,以前没怎么使用过,仅仅是停留在听说过的阶段,今天在看图片缓存框架Glide源码时发现其缓存的Key采用的不是MD5加密算法,而是SHA-256加密算法,这才勾起了我的好 ...

随机推荐

  1. C# 数据为空,不能对NULL调用此方法或属性的解决办法

    在运行C#项目时,报出了以下错误,错误原因是数据库中的值为null时,查询时会触发该错误提示 部分源代码如下: public List<Student> findData2() { ; / ...

  2. java 解析富文本处理 img 标签

    很多项目都需要到富文本来添加内容,就好比新闻啊,旅游景点之类的,都需要使用富文本去添加数据,然而怎么我这边就发现了两个问题 1)怎样将富文本的图片的 src 获取出来? 2)后台上传的时候用的是相对路 ...

  3. VS2015编译FFMPEG,修改FFmpeg缓冲区大小解决实时流解码丢包问题,FFmpeg错误rtsp流地址卡死的问题,设置超时

    之前尝试过很多网上利用Windows编译FFmpeg的文章,都没有办法编译X64位的FFmpeg,有些教程中有专门提到编译64位的FFmpeg需要下载mingw-w64-install,但是编译的过程 ...

  4. BZOJ5254 : [Fjwc2018]红绿灯

    显然所有询问都要经过至少$\sum d$,只需要考虑除了$\sum d$之外的等待红灯的时间. 将所有询问的时间模$g+r$,并按时间用set维护. 那么对于每个红灯,在set中可以找出$1$到$2$ ...

  5. Hibernate 映射一对一关联关系

    基于外键的方式: 附上代码: public class Manager { private Integer mgrId; private String mgrName; private Departm ...

  6. CSS3_线性渐变_径向渐变----背景

    渐变的本质: 绘制一张背景图片,所以使用 background 或者 background-image background 的诸多属性,渐变都是可以使用的(repeat,position) 百分比: ...

  7. vue_条件渲染_v-if_v-else_v-show

    data: { ok: true flag: false } 1. 成对出现的 v-if 和 v-else 原理是: 标签的删除与重新创建 ,有些情况必须用 v-if <p v-if=" ...

  8. centos中安装配置nginx完成之后主机无法访问

    原因 VMware中安装centos7,安装配置完成nginx后,主机无法访问.虚拟机没有放行Nginx默认端口80. 解决办法 首先:开启 web 端口 firewall-cmd --permane ...

  9. Kruskal模板

    Kruskal模板 struct Edge { int from,to,v; }edge[maxn*10]; int fa[maxn]; int n,m; int find(int x) { retu ...

  10. 我了解到的新知识之----如何使用Python获取最新外汇汇率信息

    这个需求本来是来源于公司同事工作中需求,用户需要使用数据分析工具Power BI抓取多页的中国银行官网上当天的外汇数据.但是没能研究出来. 我就开始在网络上找关于使用python来抓取当天汇率的案例分 ...