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

nist-sha的更多相关文章
- 密码学系列之:NIST和SHA算法
目录 简介 SHA1 SHA2 SHA3 简介 SHA算法大家应该都很熟悉了,它是一个用来计算hash的算法,目前的SHA算法有SHA1,SHA2和SHA3种.这三种算法都是由美国NIST制定的. N ...
- 数据摘要算法的测试效率(SHA、MD5和CRC32)
1.算法概述 数据摘要算法是密码学算法中非常重要的一个分支,它通过对所有数据提取指纹信息以实现数据签名.数据完整性校验等功能,由于其不可逆性,有时候会被用做敏感信息的加密.数据摘要算法也被称为哈希(H ...
- SHA安全散列算法简析
1 SHA算法简介 1.1 概述 SHA (Secure Hash Algorithm,译作安全散列算法) 是美国国家安全局 (NSA) 设计,美国国家标准与技术研究院(NIST) 发布的一系列密码散 ...
- SHA算法
安全Hash函数(SHA)是使用最广泛的Hash函数.由于其他曾被广泛使用的Hash函数都被发现存在安全隐患,从2005年至今,SHA或许是仅存的Hash算法标准. SHA发展史 SHA由美国标准与技 ...
- 【加密算法】SHA
一.简介 安全散列算法(英语:Secure Hash Algorithm,缩写为SHA)是一个密码散列函数家族,是FIPS所认证的安全散列算法.能计算出一个数字消息所对应到的,长度固定的字符串(又称消 ...
- MD、SHA、MAC消息摘要算法实现与应用
1.消息摘要概述 消息摘要(Message Digest)又称为数字摘要(Digital Digest).它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向Hash加密函数对消息进行作用而产生 ...
- android -------- SHA 加密算法
安全散列算法(英语:Secure Hash Algorithm,缩写为SHA)是一个密码散列函数家族,是FIPS所认证的安全散列算法.能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的 ...
- 加密算法大全图解 :密码体系,对称加密算法,非对称加密算法,消息摘要, Base64,数字签名,RSA,DES,MD5,AES,SHA,ElGamal,
1. 加密算法大全: ***************************************************************************************** ...
- SHA算法(及示例)演变历史
安全散列算法(英语:Secure Hash Algorithm,缩写为SHA)是一个密码散列函数家族,是FIPS所认证的安全散列算法.能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的 ...
- Android数据加密之SHA安全散列算法
前言: 对于SHA安全散列算法,以前没怎么使用过,仅仅是停留在听说过的阶段,今天在看图片缓存框架Glide源码时发现其缓存的Key采用的不是MD5加密算法,而是SHA-256加密算法,这才勾起了我的好 ...
随机推荐
- 2019-2-21.NET中异常类(Exception)
.NET中异常类(Exception) 异常:程序在运行期间发生的错误.异常对象就是封装这些错误的对象. try{}catch{}是非常重要的,捕获try程序块中所有发生的异常,如果没有捕获异常的话, ...
- [linux]主机访问虚拟机web服务(CentOS)
目的为了实现主机和虚拟机的通信,访问虚拟机中架设的web服务.按理说通过虚拟机ip + web服务端口,即可在浏览器访问虚拟机的web服务.但是由于CentOS的防火墙问题,对应web端口无法访问.通 ...
- LOJ.6160.[美团CodeM初赛 RoundA]二分图染色(容斥 组合)
题目链接 \(Description\) 求在\(2n\)个点的完全二分图(两边各有\(n\)个点)上确定两组匹配,使得两个匹配没有交集的方案数. \(n\leq10^7\). \(Solution\ ...
- 洛谷P1379 八数码难题
传送门 1.先用dfs枚举9!的全排列,存到hash数组里(类似离散化),因为顺序枚举,就不需要排序了 2.朴素bfs,判重就用二分找hash:如果发现当前状态=要求状态,输出步数结束程序 上代码 # ...
- python飞机大战代码
import pygame from pygame.locals import * from pygame.sprite import Sprite import random import time ...
- Java之为何配置环境变量
一.不要问一个程序员为什么命名是基础零(^_^) 二.Java为什么跨平台: 因为有java虚拟机,一个程序的运行必然要依赖于系统,java的跨平台是因为java虚拟机jvm把不同平台编写的代码编译成 ...
- Resource Allocation of Yarn
关键词:yarn 资源分配 mapreduce spark 简要指南 适合不想看太多原理细节直接上手用的人. 基本原则: container分配的内存不等于机器实际用掉的内存.NM给container ...
- React 简介及其基本使用
相关概念: 插件: 别人写好的第三方库 xxx 插件: jQuery 插件 / react 插件 全家桶: 核心库 + 相关插件 构建项目: 对项目源码 进行 编译.合并.压缩......处理,生 ...
- vue_class 绑定_style 绑定
1. class 绑定 data: { myClass: "bClass", hasA: true, hasB: false } 字符串模式: 类名不确定 <p class= ...
- CentOS裸机环境下安装php-7.3.1
安装步骤如下 安装必要的软件 获取源码 编译安装 安装过程可能遇到的一些问题 编译参数详解 安装步骤如下 安装必要的软件 yum install -y autoconf automake libtoo ...