海绵结构:Hash as RO

参考文献:

  1. [BDPA07] Bertoni G, Daemen J, Peeters M, et al. Sponge functions[C]//ECRYPT hash workshop. 2007, 2007(9).
  2. [GPP11] Guo J, Peyrin T, Poschmann A. The PHOTON family of lightweight hash functions[C]//Advances in Cryptology–CRYPTO 2011: 31st Annual Cryptology Conference, Santa Barbara, CA, USA, August 14-18, 2011. Proceedings 31. Springer Berlin Heidelberg, 2011: 222-239.
  3. Secure Hash Algorithm-3 (SHA-3) family

文章目录

  • Hash as RO
  • Sponge Function
  • Collisions
  • Random Sponge
  • Extended Sponge Functions

[BDPA07] 提出了海绵结构(sponge),这是 MD 结构之外的另一种 Hash 构造方法。

Hash as RO

Merkle-Damgard Construction

  • compression function:压缩函数是一个 block cipher,使用 message block 作为秘钥,去加密 chaining value
  • feedforward loop:将输入的消息切分为 message blocks,迭代计算压缩函数,将它的输出作为当前的 chaining value
  • message 被填充到分组密码的秘钥长度的整数倍,digest 就是最后一次迭代得到的 chaining value
  • 只要 compression function 抗碰撞,那么 MD Construction 就抗碰撞

但是在不同的应用中,我们要求 Hash 实例具有多种不同的安全性(不仅仅是抗碰撞性)。事实上很多密码方案中要求 Hash 表现的像是一个 Random Orcale(预期会满足任意的安全性要求)。确切地说,RO 将一个变长的输入映射为一个无限长的完全随机串,而 Hash 应当表现为某个 RO 的截断。

所有的 Iterated hash functions(例如 MD 结构)都存在 state collisions(有限的状态)。假如 M 1 ≠ M 2 ∈ Σ ∗ M_1 \neq M_2 \in \Sigma^* M1=M2Σ 会导致 chaining value 出现碰撞,那么对于任意的后缀 N ∈ Σ ∗ N \in \Sigma^* NΣ,总有 M 1 ∥ N ≠ M 2 ∥ N M_1\|N \neq M_2\|N M1N=M2N 具有相同的 digits,这个性质是 RO 不应该具有的。其实状态碰撞是被允许的,但它不应该表现出外部可见的行为。因此 Iterated hash functions 都不是好的 RO 实例

有两种解决办法,

  1. 避免迭代过程,例如 non-streamable hash functions
  2. 依旧使用迭代结构,但是需要消除状态碰撞的坏影响。根据这个策略,[BDPA07] 提出了海绵结构

Sponge Function

首先,定义字母表、内部状态集、编码函数:

在这里插入图片描述

[BDPA07] 定义了如下的海绵函数,

在这里插入图片描述

定义两个参数,比率和容量,

在这里插入图片描述

由于上述的 Sponge Function 被映射 f f f 确定,状态被输入 p p p 确定,我们简记 S f = ( S A , f , S C , f ) S_f=(S_{\mathcal A,f}, S_{\mathcal C,f}) Sf=(SA,f,SC,f) 是对应的海绵函数, S f [ p ] S_f[p] Sf[p] 是吸收后的状态,并将 p p p 称为到达此状态的路径。定义 S + a = ( S A + a , S C ) S+a = (S_\mathcal A + a, S_\mathcal C) S+a=(SA+a,SC),那么海绵函数可以递归地定义:
S f [ ∅ ] = ( 0 , 0 ) S f [ x ∥ a ] = f ( S f [ x ] + a ) z j = S A , f [ p ∥ 0 j ] \begin{aligned} S_f[\empty] &= (0,0)\\ S_f[x\|a] &= f(S_f[x] + a)\\ z_j &= S_{\mathcal A,f}[p\|0^j] \end{aligned} Sf[]Sf[xa]zj=(0,0)=f(Sf[x]+a)=SA,f[p0j]
注意,

  • 字母表 A \mathcal A A 可以是任意的有限集合,不仅仅是布尔值
  • 内部状态集 C \mathcal C C 是有限的,因此必然会发生碰撞
  • 编码函数将消息 m ∈ Σ ∗ m \in \Sigma^* mΣ 编码到字母 p ( m ) ∈ A p(m) \in \mathcal A p(m)A
    • 由于它是单的,且最后一个字符非凡,这导致 ( m 1 , j ) ≠ ( m 2 , k ) ⇒ p ( m 1 ) ∥ 0 j ≠ p ( m 2 ) ∥ 0 k (m_1,j) \neq (m_2,k) \Rightarrow p(m_1)\|0^j \neq p(m_2)\|0^k (m1,j)=(m2,k)p(m1)0j=p(m2)0k,于是它们的成为了不同的路径
    • 由于编码长度非凡(包括空串 m = ∅ m=\empty m= 的编码),因此海绵函数中的 f f f 至少执行一次,于是输出总是依赖于 f f f 的选取
  • 根据 Squeezing 过程的定义,海绵函数的输出是无限长的(具有和 RO 一样的接口),可以作为 stream cipher

Collisions

[BDPA07] 定义了两种碰撞类型,

  1. 状态碰撞(state collision):不同的路径 p ≠ q p \neq q p=q,使得 S f [ p ] = S f [ q ] S_f[p] = S_f[q] Sf[p]=Sf[q]
    • 它将导致 S f [ p ∥ 0 j ] = S f [ q ∥ 0 j ] , ∀ j ≥ 0 S_f[p\|0^j] = S_f[q\|0^j], \forall j \ge 0 Sf[p0j]=Sf[q0j],j0
    • 假如 q = p ∥ 0 k , ∃ k ≥ 1 q=p\|0^k, \exist k\ge1 q=p0k,k1,则会输出周期序列 S f [ p ∥ 0 j ] = S f [ p ∥ 0 k + j ] , ∀ j ≥ 0 S_f[p\|0^{j}] = S_f[p\|0^{k+j}], \forall j \ge 0 Sf[p0j]=Sf[p0k+j],j0
  2. 内部碰撞(inner collision):不同的路径 p ≠ q p \neq q p=q,使得 S C , f [ p ] = S C , f [ q ] S_{\mathcal C,f}[p] = S_{\mathcal C,f}[q] SC,f[p]=SC,f[q]
    • 很明显,状态碰撞导致了内部碰撞,反之不成立
    • 但是,假如发生了内部碰撞,那么可以构造 p ∥ a ≠ q ∥ b p\|a \neq q\|b pa=qb,使得 a , b a,b a,b 满足 S A , f [ p ] + a = S A , f [ q ] + b S_{\mathcal A,f}[p]+a = S_{\mathcal A,f}[q]+b SA,f[p]+a=SA,f[q]+b(公开计算,没有秘密),这就是一个状态碰撞

Random Sponge

假设 ∣ A ∣ = A |\mathcal A| = A A=A 以及 ∣ C ∣ = C |\mathcal C| = C C=C,由于转换函数 f f f 的定义域和值域都是 A × C \mathcal A \times \mathcal C A×C

  • 共有 ( A C ) A C (AC)^{AC} (AC)AC 个不同的转换函数
  • 共有 ( A C ) ! (AC)! (AC)! 个不同的置换函数

[BDPA07] 定义了两族随机的海绵函数,

在这里插入图片描述

接着,他们证明了:在黑盒归约下,唯一的区分 Random Sponge 以及 Random Oracle 的方式,就是内部碰撞的存在与否

在这里插入图片描述

只要容量 c c c 足够大,那么它就和 RO 统计不可区分(从而抵御各种的攻击)。注意到比率 r r r 对于安全性没有影响。经典的 MD 结构是假设了底层原语(也就是 block cipher)抵御某些攻击,从而给出安全归约。然而 Sponge 结构则是自身就不存在可被敌手利用的属性。[BDPA07] 还分析了 Sponge 对于多种攻击的抵抗性,包括:抗碰撞、抗原像、抗第二原像、抗长度延展、输入输出的相关性免疫。

当然,这里的安全性是关于 Random Sponge Function 的,但是 SHA3 标准使用的是一些固定的 Keccak 置换函数。如果存在设计缺陷(比如可以将 Keccak 对应的多元高次多项式的次数严重降低),那么它也将不是安全的 Hash 函数。注意,给定对称密码的某个实例,它的安全性分析只能利用已有的攻击方法,给出安全强度的上界,但无法给出其安全强度的下界。而公钥密码中的安全归约,在困难假设下,它给出的是安全强度的下界。

Extended Sponge Functions

[GPP11] 为了轻量化 Hash 函数,给出了扩展的海绵结构,

在这里插入图片描述
对于某个 n n n-bit extended sponge hash function with capacity c , c ′ c, c' c,c and bitrate r , r ′ r, r' r,r,在最著名的通用攻击下,安全强度为

在这里插入图片描述
其中 t = c + r = c ′ + r ′ t=c+r=c'+r' t=c+r=c+r 是内部状态的大小。随着比率 r ′ r' r 的增加,挤压阶段的运行时间减小,同时抗原像的能力减弱,两者有个权衡。为了完美的抗(第二)原像,可以要求 c ≥ 2 n c \ge 2n c2n,此时 r ′ r' r 就不再影响安全性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/636783.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PTA 编程题(C语言)-- 统计字符

题目标题:统计字符 题目作者:颜晖 浙大城市学院 本题要求编写程序,输入10个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数。 输入格式: 输入为…

[linux]进程控制——进程等待

一、概念 进程等待,就是通过wait/waitpid的方式,让父进程(一般)对子进程进行资源回收的等待过程。 二、原因 (1) 当一个进程在退出的时候,如果不回收,就会变成僵尸状态&#xff0…

SpringBoot的配置文件application.yml的一些常用语法

目录 一、自定义配置数据 (1)配置简单数据 (2)配置对象数据 (3)配置集合数据 二、Value读取配置文件 三、ConfigurationProperties读取配置文件 配置文件的后缀可以是yaml或者yml,写法类似…

超分中使用的损失函数和经典文章

损失函数 https://towardsdatascience.com/super-resolution-a-basic-study-e01af1449e13 在GAN出现之前,使用的更多是MSE,PSNR,SSIM来衡量图像相似度,同时也使用他们作为损失函数。 MSE 表面上MSE直接决定了PSNR,MSE&#xff…

Golang数据类型

文章目录 数据类型的基本介绍基本数据类型整数类型字符类型浮点数类型复数类型布尔类型string类型 常量类型转换基本数据类型相互转换基本数据类型与string的转换 指针类型值类型和引用类型 数据类型的基本介绍 数据类型的基本介绍 Go中的每一种数据都定义了明确的数据类型&…

从迷宫问题理解dfs

文章目录 迷宫问题打印路径1思路定义一个结构体要保存所走的路径,就需要使用到栈遍历所有的可能性核心代码 部分函数递归图源代码 迷宫问题返回最短路径这里的思想同上面类似。源代码 迷宫问题打印路径1 定义一个二维数组 N*M ,如 5 5 数组下所示&…

Linux的UDEV机制

udev 机制引入: 手机接入Linux热拔插相关 a. 把手机接入开发板 b. 安装adb工具,在终端输入adb安装指令: sudo apt-get install adb c. dmeg能查看到手机接入的信息,但是输入adb devices会出现提醒 dinsufficient permissions for …

NTLM认证

文章目录 1.概念(1) 本地认证(2) SAM(3) NTLM Hash(4) NTLM 和 NTLM Hash(5) NTLM v2 1.概念 (1) 本地认证 Windows不存储用户的明文密码,它会将用户的明文密码经过加密后存储在 SAM (Security Account Manager Database,安全账号管理数据库)中。 (2)…

【UnityShader】图片圆角

1.需求 我们在开发的时候,有时候一些按钮或者菜单栏的边角是直角的需要改成圆角,但是让美术重新绘制耽误时间不说也确实没必要,这个时候我们不妨使用一个简单的shader去解决这个问题,下面我们就讲讲这个shader要如何实现。 需求1…

[阅读笔记15][Orca]Progressive Learning from Complex Explanation Traces of GPT-4

接下来是微软的Orca这篇论文,23年6月挂到了arxiv上。 目前利用大模型输出来训练小模型的研究都是在模仿,它们倾向于学习大模型的风格而不是它们的推理过程,这导致这些小模型的质量不高。Orca是一个有13B参数的小模型,它可以学习到…

【BUG】Hexo|GET _MG_0001.JPG 404 (Not Found),hexo博客搭建过程图片路径正确却找不到图片

我的问题 我查了好多资料,结果原因是图片名称开头是_则该文件会被忽略。。。我注意到网上并没有提到这个问题,遂补了一下这篇博客并且汇总了我找到的所有解决办法。 具体检查方式: hexo生成一下静态资源: hexo g会发现这张图片…

本地消息表模式保障分布式系统最终一致性

系统架构说明 状态转换说明 订单表消息表process_queue库存系统return_queue说明成功失败///订单库回滚成功成功失败//订单系统重发消息成功成功成功失败/Broker自动重试,注意接口幂等成功成功成功库存不足退回/Broker通知回掉,订单/消息作废成功成功成…