参考文献:
- [BDPV11] Bertoni G, Daemen J, Peeters M, et al. Duplexing the sponge: single-pass authenticated encryption and other applications[C]//Selected Areas in Cryptography: 18th International Workshop, SAC 2011, Toronto, ON, Canada, August 11-12, 2011, Revised Selected Papers 18. Springer Berlin Heidelberg, 2012: 320-337.
- 海绵结构:Hash as RO
Padding Rules
在海绵结构中,变换 f f f 的宽度是 b = c + r b=c+r b=c+r,容量是 c c c,比率是 r r r
对于变长的输入 M M M,需要做一定的填充,使得它的长度是 r r r 的倍数。填充规则记为 p a d [ r ] ( ∣ M ∣ ) pad[r](|M|) pad[r](∣M∣),应当满足一些条件,使得海绵函数是安全的。
根据 [BDPV11],一个充分条件是:填充可逆、填充后长度大于零、最后一个区块不是零。
- simple reversible padding:定义为 p a d 1 0 ∗ [ r ] ( x ) , ∀ x ≥ 0 pad10^*[r](x), \forall x\ge0 pad10∗[r](x),∀x≥0,其中 0 ∗ 0^* 0∗ 的长度是 [ − x − 1 ] r ∈ [ 0 , r − 1 ] [-x-1]_r \in [0,r-1] [−x−1]r∈[0,r−1]
- multi-rate padding:定义为 p a d 1 0 ∗ 1 [ r ] ( x ) , ∀ x ≥ 0 pad10^*1[r](x), \forall x\ge0 pad10∗1[r](x),∀x≥0,其中 0 ∗ 0^* 0∗ 的长度是 [ − x − 2 ] r ∈ [ 0 , r − 2 ] [-x-2]_r \in [0,r-2] [−x−2]r∈[0,r−2]
注意到填充长度大于零,即使 ∣ M ∣ |M| ∣M∣ 恰好是 r r r 的倍数,也必须添加上一个新的区块。
Duplex Construction
[BDPV11] 提出了双工结构,它是带状态的,其输入流/输出流的速率相同。如图所示:
假设已经确定了某个 padding rule,定义 maximum duplex rate:
ρ
m
a
x
(
p
a
d
,
r
)
=
min
{
x
∣
x
+
p
a
d
[
r
]
(
x
)
>
r
}
−
1
\rho_{max}(pad,r) = \min\{x \mid x+pad[r](x) > r \}-1
ρmax(pad,r)=min{x∣x+pad[r](x)>r}−1
容易验证,
ρ
m
a
x
(
p
a
d
1
0
∗
,
r
)
=
r
−
1
\rho_{max}(pad10^*,r) = r-1
ρmax(pad10∗,r)=r−1 以及
ρ
m
a
x
(
p
a
d
1
0
∗
1
,
r
)
=
r
−
2
\rho_{max}(pad10^*1,r) = r-2
ρmax(pad10∗1,r)=r−2
双工结构的算法为:
如果 σ i = ∅ \sigma_i=\empty σi=∅,称之为 blank call(空的);如果 l i = 0 l_i=0 li=0,称之为 mute call(哑的)
双工结构的每一次调用,都等价于如下的海绵结构:
具体来说,海绵结构本身对
M
M
M 有个 pading,那么有
Z
i
=
S
p
o
n
g
e
(
σ
0
∥
p
a
d
0
∥
⋯
∥
σ
i
−
1
∥
p
a
d
i
−
1
∥
σ
i
,
l
i
)
Z_i = Sponge(\sigma_0\|pad_0\|\cdots\|\sigma_{i-1}\|pad_{i-1}\|\sigma_i,\,\, l_i)
Zi=Sponge(σ0∥pad0∥⋯∥σi−1∥padi−1∥σi,li)
并且
σ
0
∥
σ
i
→
σ
0
∥
p
a
d
0
∥
⋯
∥
σ
i
−
1
∥
p
a
d
i
−
1
∥
σ
i
\sigma_0\|\sigma_i \to \sigma_0\|pad_0\|\cdots\|\sigma_{i-1}\|pad_{i-1}\|\sigma_i
σ0∥σi→σ0∥pad0∥⋯∥σi−1∥padi−1∥σi 是单射,因此可以将双工结构的安全性归约为海绵结构的安全性。
Applications
[BDPV11] 给出了双工结构的一些应用:
- authenticated encryption,带身份验证的加密,提供隐私性和认证性
- key wrapping,密钥打包,提供隐私性和完整性
- reseedable PRG,重新播种的PRG,将新的种子和当前状态组合
- overwrite functions,当前输入覆盖了部分的状态,而非和当前的状态异或