海绵结构(sponge construction):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


[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 就不再影响安全性。

  • 7
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Sponge结构的密码杂凑函数是一种常见的密码学原语,它可以用于构建安全的密码杂凑算法。下面是对使用Sponge结构的密码杂凑函数的详细描述: 1. Sponge结构概述: - Sponge结构是一种基于置换和固定输入长度的可逆函数结构。它由两个主要部分组成:置换函数(Permutation)和吸收函数(Absorption)。 - 置换函数是一个可逆的变换函数,将输入数据进行置换和混淆,以增加密码杂凑算法的安全性。 - 吸收函数接受输入数据,并将其分成固定长度的块,然后通过与置换函数的迭代运算来混合和处理这些块。 2. Sponge结构的工作方式: - 吸收阶段:输入数据被分成固定长度的块,然后通过与置换函数的迭代运算进行混合和处理。每个块都会与当前状态进行异或运算,然后通过置换函数更新状态。 - 挤压阶段:在吸收阶段完成后,继续进行一些迭代运算,以生成输出数据。输出数据的长度可以根据需要进行调整。 - 迭代次数:Sponge结构的安全性和性能取决于迭代次数。较高的迭代次数可以提供更高的安全性,但也会增加计算成本。 3. 安全性和应用: - 使用Sponge结构的密码杂凑函数,如Keccak和SHA-3,被广泛应用于密码学领域,如数字签名、消息认证码、密钥派生等。 - Sponge结构具有较好的安全性特性,如抗碰撞、抗第二前像和抗预像等性质。 - 由于其灵活性和可扩展性,Sponge结构还可以用于构建其他密码学原语,如伪随机数生成器(PRNG)和可扩展认证(eXtensible Authentication Protocol,EAP)等。 总体而言,使用Sponge结构的密码杂凑函数是一种有效且安全的密码学原语,它通过吸收和挤压阶段的迭代运算来处理输入数据,并提供了多种应用中所需的安全性特性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值