SHA-3标准(NIST.FIPS.202)阅读笔记
标准相关信息
- 编号:NIST FIPS 202
- 名称:SHA-3标准:基于置换的哈希与可扩展输出函数(SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions)
操作基本设计
操作单元
- 三维数据向量,
5 * 5 * w
(w为2的方幂)bit - SHA-3中取
w = 64
,故数据向量总大小为1600bit - 记
l = log w / log 2
,对于SHA-3,l = 6
标记法
x
:横向,中心为原点,左至右方向,3 4 0 1 2
y
:纵向,中心为原点,下至上方向,3 4 0 1 2
z
:面向,最前端为原点,前至后方向,0 1 2 ... w-1
A[x, y, z]
:表示在位置(x, y, z)
的位S[n]
:表示将整个数据向量展开为序列时位置为n的位
命名
- 零维
- 位(Bit):具体位置
- 一维
- 行(Row):横向序列
- 列(Column):纵向序列
- 陆(Lane):面向序列
- 二维
- 面(Plane):
xz
平面 - 片(Slice):
xy
平面 - 表(Sheet):
yz
平面
- 面(Plane):
- 三维
- 态(State):整体数据
存储顺序
z -> x -> y
,即A[x, y, z] = S[w * (5 * y + x) + z]
序列到态的转换
- 将位拼合成陆
- 将陆拼合成面
- 将面拼合成态
基本算法设计
theta代换
- 列间的代换操作
- 对于列中每一位,提取其左列与右前列的总异或值进行异或
rho置换
- 陆内的置换操作
- 从
陆(1, 0)
开始操作,并记操作数t = 0
:- 使陆内所有位循环向后移动
(t + 1)(t + 2) / 2
位 - 从
陆(x, y)
改到陆(y, (2x + 3y) mod 5)
,并使t = t + 1
,重复上述操作直至操作24次为止
- 使陆内所有位循环向后移动
- 笔者注:
陆(0, 0)
不发生改变
pi置换
- 陆间的置换操作
- 将
陆(x, y)
移至陆((x + 3y) mod 5, x)
- 笔者注:
陆(0, 0)
不发生改变
chi代换
- 行内的代换操作
- 对于行中每一位,取下一位的反与再下一位进行与操作,并与本位进行异或
iota代换
- 对
陆(0, 0)
的代换操作 - 额外输入
i_r
(轮参数,后续会说明该参数的取值) - 轮位计算函数
rc()
:- 类似线性反馈移位寄存器LFSR
- 笔者注:应该可预计算
- 操作步骤:
- 输入计算轮数
t
,并取t = t mod 255
- 寄存器
R
初值为0b1000_0000
,从左至右称为第0位到第7位 - 每轮循环向右移位,对新的第4,5,6位用新的第0位异或
- 进行t轮后结束并输出第一位;
t = 0
时可直接输出1
- 输入计算轮数
- iota代换:
- 设置序列
RC
为b
位长度的0
串 - 将所有第
2 ^ k - 1
位的值设为rc(j + 7 * i_r)
- 使
陆(0, 0)
与RC
异或
- 设置序列
轮操作Rnd
Rnd(A, i_r) = iota(chi(pi(rho(theta(A)))), i_r)
- LaTeX\LaTeXLATEX公式:Rnd(A,ir)=ι(χ(π(ρ(θ(A)))),ir)\text{Rnd}(\mathbf{A}, i_r) = \iota(\chi(\pi(\rho(\theta(\mathbf{A})))), i_r)Rnd(A,ir)=ι(χ(π(ρ(θ(A)))),ir)
主块操作Keccak-p
- 表示方式:
Keccak-p[b, n_r](S)
- 参数说明:
S
:b
位长的输入串n_r
:操作轮数
- 操作步骤:
- 将
S
表示为态A
- 令
i_r
从12 + 2 * l - n_r
到12 + 2 * l - 1
,依次执行A = Rnd(A, i_r)
- 将此时的态
A
转换回S
并输出
- 将
n_r
可以大于12 + 2 * l
,此时i_r
的初始值为负数
特化主块操作Keccak-f
Keccak-f[b] = Keccak-p[b, 12 + 2 * l]
- SHA-3中实际使用的操作
海绵结构(Sponge Construction)
表示方式
sponge[f, pad, r](N, d)
参数说明
- 对
b
位长的串的变换函数f
- “吸收率”
r
,r < b
- 特定的填充规则
pad
: - 输入填充倍率
x
与待填充串长度m
- 输出
pad(x, m)
,使len(pad(x, m)) + m
恰好是x
的倍数
- 输出
- 输入串
N
- 输出长度
d
操作步骤
- 令
P = N ## pad(r, len(N))
(此处##
表示字符串的连接) - 令
n = len(P) / r
- 令
c = b - r
- 令
P = P[0] ## P[1] ## ... ## P[n - 1]
,其中每个P[i]
都是r长 - 令
S
为b
位长度的0
串(记为0 ^ b
) - “吸收(Absorbing)”:
-对从0
到n - 1
的i
执行如下操作:S = f(S xor (P[i] ## (0 ^ c)))
- “挤压(Squeezing)”:
- 令
Z
为一空串;直到Z
的长度len(Z) >= d
,执行如下操作:Z = Z ## Trunc(r, S)
(Trunc(r, S)
表示取S
的前r
位)S = f(S)
- 令
- 输出
Trunc(d, Z)
Keccak算法与SHA-3算法构造
Keccak算法
- 表示方法:
Keccak[c] = sponge[Keccak-p[1600, 24], pad10*1, 1600 - c]
- 参数说明:
- 填充方法
pad10*1
:在填充区首尾均填1
,中间填0
;填充n + 1
位而非1
位
- 填充方法
SHA-3哈希算法
SHA3-224(M) = Keccak[448](M ## 01, 224)
SHA3-256(M) = Keccak[512](M ## 01, 256)
SHA3-384(M) = Keccak[768](M ## 01, 384)
SHA3-512(M) = Keccak[1024](M ## 01, 512)
SHA-3 XOF(SHA-3可扩展输出算法)
SHAKE128(M, d) = Keccak[256](M ## 1111, d)
SHAKE256(M, d) = Keccak[512](M ## 1111, d)
- 另一定义方法:
RawSHAKE128(J, d) = Keccak[256](J ## 11, d)
RawSHAKE256(J, d) = Keccak[512](J ## 11, d)
SHAKE128(M, d) = RawSHAKE128(M ## 11, d)
SHAKE256(M, d) = RawSHAKE256(M ## 11, d)
SHA-3系列算法性质
算法 | 分组大小 (字节) | 输出大小 (位) | 碰撞难度 (位) | 原象攻击难度 (位) | 第二原象 攻击难度 (位) |
---|---|---|---|---|---|
SHA3-224 | 144 | 224 | 112 | 224 | 224 |
SHA3-256 | 136 | 256 | 128 | 256 | 256 |
SHA3-384 | 104 | 384 | 192 | 384 | 384 |
SHA3-512 | 72 | 512 | 256 | 512 | 512 |
SHAKE128 | 168 | d |
min(d / 2, 128)
|
>= min(d, 128)
|
min(d, 128)
|
SHAKE256 | 136 | d |
min(d / 2, 256)
|
>= min(d, 256)
|
min(d, 256)
|
SHA-3标准(NIST.FIPS.202)阅读笔记相关推荐
- Swift标准库源码阅读笔记 - Array和ContiguousArray
关于 ContiguousArray ,这边有喵神的文章介绍的很详细了,可以先看看这个文章. Array 接着喵神的思路,看一下 Array 以下是从源码中截取的代码片段. public struct ...
- SHA-3的获胜者:keccak - 在 3GPP TS 35.231、FIPS 202 和 SP 800-185 中标准化
https://keccak.team/keccak.html 目录 技术细节 标准实例 Keccak是一种通用的加密函数.最著名的是散列函数,但它也可用于身份验证.(经过身份验证的)加密和伪随机数生 ...
- A Survey of Deep Learning-based Object Detection论文翻译 + 阅读笔记
A Survey of Deep Learning-based Object Detection论文翻译 + 阅读笔记 //2022.1.7 日下午16:00开始阅读 双阶段检测器示意图 单阶段检测器 ...
- Mina源码阅读笔记(一)-整体解读
2019独角兽企业重金招聘Python工程师标准>>> 今天的这一节,将从整体上对mina的源代码进行把握,网上已经有好多关于mina源码的阅读笔记,但好多都是列举了一下每个接口或者 ...
- 05《软件需求模式》阅读笔记
剩下的两个阅读笔记写第二部分.各类需求模式,共八个领域和它的需求模式,这一次写前四个. 基础需求模式,它是所有种类的系统都可能需要的一些东西.系统间接口需求模式使用系统间接口需求模式定义被定义的系统和 ...
- 代码分析:NASM源码阅读笔记
NASM源码阅读笔记 NASM(Netwide Assembler)的使用文档和代码间的注释相当齐全,这给阅读源码 提供了很大的方便.按作者的说法,这是一个模块化的,可重用的x86汇编器, 而且能够被 ...
- 01需求工程-软件建模与分析阅读笔记
绪论阅读笔记 绪论这一部分讲的很多,把这本书的框架给讲了一个大概,让我对这本书有了一个大致的了解. 软件的发展经历了以"机器"为中心,以"应用"为中心,以&qu ...
- T5: Text-to-Text Transfer Transformer 阅读笔记
作者:徐啸 知乎专栏:自然语言处理学习之旅 https://zhuanlan.zhihu.com/p/89719631 写在前面 谷歌用一篇诚意满满(财大气粗)的基于实验的综述,试图帮助研究者们「拨开 ...
- [python Cookbook]阅读笔记
@toc] 前记:为了补充一下python语法知识,感谢网友的推荐阅读了pythonCookbook,这本书确实不错,以问题为导向,引导解决思路. 这个博文是从阅读笔记typora中直接复制过来的没有 ...
最新文章
- Java开发四年的程序员想再学习一门语言,该选着C还是Python呢?
- 文件监视器——Filemon
- WebBrowser控件打开https站点
- shell编程系列26--大型脚本工具开发实战
- mysql btree检索策略_MySQL之Btree索引和HASH索引的区别以及索引优化策略
- centos6.4下安装jdk
- 如果给你一个亿,你想去干嘛?各专业的科研狗是这样回答的……
- Adobe illustrator 图的放置和微调 - 连载 9
- 达观杯文本分类——基于N-gram和LogisticRegression
- 存储器火热 大陆厂商3倍薪水赴台挖人
- 用计算机弹极乐净土谱,极乐净土计算器乐谱
- 什么是SRE?一文详解SRE运维体系
- linux 网站图片无法加载失败怎么办,网页无法加载图片怎么办?解决网页图片无法显示的方法...
- Oracle中rank函数详解
- 【最短路】白银莲花池
- Microbiome:粪菌移植改善自闭症Fecal microbiota transplant (FMT)
- 无线局域网中iPhone无法访问IIS
- python ssl module_Python升级后ssl模块不可用问题解决和浅析
- python wx窗体界面
- 无主之地2 不费子弹手枪
热门文章
- 什么是集群?什么又是负载均衡?你未必说的清楚
- 【随笔记】Deepin20系统更换fish,替代bash
- 实验:高次插值的龙格现象(Runge)实验
- 这些MOS管的特点和分类,你未必全都知道
- Elasticsearch:运用 Pinned query 来提升特定的结果
- 第二章 Silicon labs EFR32 MG21 验证蓝牙的私有Characteristic的读/写
- 关于Github项目DCRNN运行问题小结(1)——tables模块包
- 【2018年12月05日】滚动市盈率PE最低排名
- 微信公众号如何进行账号迁移?
- 安泰电子科普:电压源和电流源的区别是什么意思