参考文献:
- [GGM86] Oded Goldreich, Shafi Goldwasser, Silvio Micali. How to construct random functions. J. ACM 33(4): 792-807 (1986).
- [Merkle87] Ralph C. Merkle. A Digital Signature Based on a Conventional Encryption Function. CRYPTO 1987: 369-378.
- [CE24] André Chailloux, Simona Etinski. On the (in)security of optimized Stern-like signature schemes. Des. Codes Cryptogr. 92(3): 803-832 (2024).
- SDP-based ZKP & SIG
- Merkle Tree & Hash-based SIG
Merkle Tree
场景:Alice 持有 t t t 个数据块,想要将其中的 k k k 个数据块发送给 Bob,并且 Bob 要确认这些数据块的位置和内容的正确性。可以使用 [Merkle87] 提出的 Merkle Tree 实现它。
方便起见,我们假设 t t t 是二的幂次,从而 Merkle Tree 是一颗完全二叉树。如下图所示,将数据 D i D_i Di 的摘要作为叶子,然后两两 Hash,最终得到对全部数据块的承诺 c o m com com,
首先 Bob 已经知道 c o m com com 的值。现在,Alice 发送 k k k 个橙色数据块给 Bob,同时发送从这些叶子到根的路径上各个节点的兄弟(绿色那些)。因为多个橙色数据块的路径存在重叠,某些节点不必发送。确切地说,最近公共祖先的两个孩子被省略,而从该祖先到根的兄弟被共用。因此,最近祖先的深度越大,那么省略的节点数就越多。当 k k k 个数据块最分散时,是最坏情况:每个叶子到最近公共祖先的路径长度约为 log ( t / k ) \log(t/k) log(t/k)
对于一般的
t
t
t,假设
w
t
(
t
)
=
m
wt(t) = m
wt(t)=m,可以用
m
m
m 颗完全二叉树来实现。可以证明 Merkle Proof 的长度上界为:
2
λ
⋅
⌊
k
⋅
log
(
t
/
k
)
+
m
−
1
⌋
2\lambda \cdot \lfloor k \cdot \log(t/k) + m-1\rfloor
2λ⋅⌊k⋅log(t/k)+m−1⌋
其中
2
λ
2\lambda
2λ 是 Hash 值的长度。 但是通常,Merkle Proof 的实际规模会远小于该上界。
PRNG Tree
场景:Alice 秘密生成了 t t t 个随机数,想要将其中的 t − k t-k t−k 个随机数发送给 Bob,并且 Bob 对其余的 k k k 个随机数(在计算意义下)无知。可以使用 [GGM86] 提出的 PRNG Tree 实现它。
方便起见,我们假设 t t t 是二的幂次,从而 PRNG Tree 是一颗完全二叉树。如下图所示,根据种子 s e e d seed seed,迭代计算 PRG 得到两个孩子,最终获得全部随机数 R i R_i Ri,
现在,Alice 想要发送
t
−
k
t-k
t−k 个橙色随机数给 Bob,只需发送
k
k
k 个灰色叶子到根的路径上各个节点的兄弟(绿色那些)。类似的,多个路径可以合并。可以证明 Seed Path 的长度上界是:
λ
⋅
min
(
⌊
k
⋅
log
(
t
/
k
)
+
m
−
1
⌋
,
t
−
k
)
\lambda \cdot \min\big(\lfloor k \cdot \log(t/k) + m-1\rfloor, t-k\big)
λ⋅min(⌊k⋅log(t/k)+m−1⌋,t−k)
其中
λ
\lambda
λ 是 PRG 的种子长度,其中
t
−
k
t-k
t−k 表示直接传输那些叶子。
函数 f t ( k ) = k ⋅ log ( t / k ) f_t(k)=k\cdot\log(t/k) ft(k)=k⋅log(t/k),有两个零点 k = 0 , t k=0,t k=0,t,它在 k ∈ ( 0 , t ) k \in (0, t) k∈(0,t) 上先增后降,并且当 k ∈ ( t / 2 , t ) k \in (t/2,t) k∈(t/2,t) 时满足 f t ( k ) > t − k f_t(k) > t-k ft(k)>t−k,因此这里需要取两者之间的较小值。Merkle Proof 似乎也应当有类似的优化?
CROSS
我们回顾一下,[CVE10] 是一种基于 qSD 问题的 Shamir’s PKP 框架 ZKP 协议,
最近 [BBP+24] 提出了受限的 qSD 问题(R-SD in NPC),提高了错误重量 w w w 的大小,
- 在安全强度上,R-SD 问题比 qSD 更难,因此可以降低参数规模;
- 在通信开销上,R-SD 问题可以选取 full weight 错误向量,从而省略置换 Σ ∈ S n \Sigma \in S_n Σ∈Sn
因为 R-SD 问题是一组(关于有限域上加法的)线性方程组 H e = s He = s He=s,其中 e ∈ E n ⊆ F q n e \in \mathbb E^n \subseteq \mathbb F_q^n e∈En⊆Fqn,所以限制到乘法子群 G ⊆ E n G \subseteq \mathbb E^n G⊆En 基本不影响其安全强度。利用群 G G G 的代数结构和同构关系,可以进一步降低其表示的规模。
ZKP based on R-SDP(G)
CROSS(Codes and Restricted Objects Signature Scheme)是基于 R-SDP(G) 问题的 CVE 方案变体,做了如下的优化:
- 不再采样 σ ∈ G : = ⟨ g 1 , ⋯ , g m ⟩ ⊆ \sigma \in G := \langle g_1,\cdots,g_m\rangle \subseteq σ∈G:=⟨g1,⋯,gm⟩⊆ 然后计算 σ ( u ) , σ ( s ) \sigma(u),\sigma(s) σ(u),σ(s),而是直接根据 S e e d Seed Seed 采样 s ′ ∈ G s'\in G s′∈G 和 u ′ ∈ F p n u' \in \mathbb F_p^n u′∈Fpn,然后计算出满足 s = σ ( s ′ ) s=\sigma(s') s=σ(s′) 的映射 σ ∈ G \sigma \in G σ∈G,以及 y = u ′ + β s ′ y = u'+\beta s' y=u′+βs′,其中 β ∈ F p ∗ \beta \in \mathbb F_p^* β∈Fp∗ 是第一个挑战。因为 G G G 的传递群(transitive group)同构于 G G G 本身,获得的 σ \sigma σ 是均匀随机的。
- 当第二个挑战 b = 1 b=1 b=1 时,仅发送种子 S e e d Seed Seed 即可重构 u ′ u' u′ 和 s ′ s' s′ 从而 y y y,
- 还可以将 y y y 推迟发送,先做承诺 d = H a s h ( y ) d = Hash(y) d=Hash(y);假如 b = 0 b=0 b=0,仍需传输 y y y 本身;但是如果 b = 0 b=0 b=0,那么可以省略 y y y 的传输。
CROSS 使用的基础 ID 协议如下:
该协议满足:Completeness,Zero Knowledge,以及 ( 2 , 2 ) (2,2) (2,2)-out-of- ( p − 1 , 2 ) (p − 1, 2) (p−1,2) special soundness,满足 s.e. = p / ( p − 1 ) p/(p-1) p/(p−1)
这里重点看一下 soundness 的证明过程:敌手 P ∗ P^* P∗ 试图让 V V V 相信其具有 P P P 身份,存在如下的两种策略(构造性的,但是可证明最优,即给出了 s.e. 的上界),
- P ∗ P^* P∗ 随机生成 S e e d Seed Seed 和 β ∗ ∈ F p ∗ \beta^* \in \mathbb F_p^* β∗∈Fp∗,继续做出 u ′ u' u′ 和 e ′ e' e′
- P ∗ P^* P∗ 随机生成 σ ∈ G \sigma \in G σ∈G(不知道 e ∈ G e \in G e∈G),计算出 y ∗ = u ′ + β ∗ e ′ y^*=u'+\beta^*e' y∗=u′+β∗e′
- P ∗ P^* P∗ 计算 s ~ = σ ( y ∗ ) H T − β ∗ s \tilde s=\sigma(y^*)H^T - \beta^*s s~=σ(y∗)HT−β∗s,然后发送 c 0 = H a s h ( s ~ , σ ) c_0=Hash(\tilde s,\sigma) c0=Hash(s~,σ) 和 c 1 = H a s h ( u ′ , e ′ ) c_1=Hash(u',e') c1=Hash(u′,e′) 给 V ( ρ ) V(\rho) V(ρ),这里 ρ \rho ρ 是敌手 P ∗ P^* P∗ 为黑盒子程序 V V V 选取的随机带
- Strategy 0:对于
b
=
0
b=0
b=0 总是成功,并且对于
b
=
1
b=1
b=1 猜测
β
\beta
β 使之有可能成功,
- P ∗ P^* P∗ 求解出 e ~ \tilde e e~ 使之满足 e ~ H T = s \tilde e H^T=s e~HT=s(不限制 e ~ \tilde e e~ 范围,简单高斯消元,然后随机采样),以及 u ~ \tilde u u~ 使之满足 u ~ H T = s ~ \tilde uH^T=\tilde s u~HT=s~(同理,随机采样)
- 收到
V
V
V 的挑战
β
\beta
β,
- 假如 β = β ∗ \beta = \beta^* β=β∗,那么发送 h = H a s h ( y ∗ ) h=Hash(y^*) h=Hash(y∗),再根据 b ∈ { 0 , 1 } b \in \{0,1\} b∈{0,1} 决定发送 ( y ∗ , σ ) (y^*,\sigma) (y∗,σ) 或者 S e e d Seed Seed,两者都必定被接受;
- 假如 β ≠ β ∗ \beta \neq \beta^* β=β∗,那么 P ∗ P^* P∗ 计算 y = σ − 1 ( u ~ ) + β σ − 1 ( e ~ ) y=\sigma^{-1}(\tilde u)+\beta\sigma^{-1}(\tilde e) y=σ−1(u~)+βσ−1(e~),然后发送 h = H a s h ( y ) h=Hash(y) h=Hash(y),对于 b = 0 b=0 b=0 该副本被接受(因为 σ ( y ) H T − β s = s ~ \sigma(y)H^T-\beta s = \tilde s σ(y)HT−βs=s~),但对于 b = 1 b=1 b=1 基本无法成功(得让 S e e d ∗ Seed^* Seed∗ 生成 h h h 的原像/第二原像)
- 该策略的成功率是 1 p − 1 + p − 2 p − 1 ⋅ 1 2 = p 2 ( p − 1 ) \frac{1}{p-1} + \frac{p-2}{p-1}\cdot \frac{1}{2}= \frac{p}{2(p-1)} p−11+p−1p−2⋅21=2(p−1)p
- Strategy 1:对于
b
=
1
b=1
b=1 总是成功,并且对于
b
=
0
b=0
b=0 猜测
β
\beta
β 使之有可能成功,
- 收到
V
V
V 的挑战
β
\beta
β,
P
∗
P^*
P∗ 直接计算
y
=
u
′
+
e
′
β
y=u'+e'\beta
y=u′+e′β,并发送
h
=
H
a
s
h
(
y
)
h=Hash(y)
h=Hash(y)
- 假如 b = 1 b=1 b=1,那么发送 S e e d Seed Seed,此时必定被接受;
- 假如 b = 0 b=0 b=0,则仅当 β = β ∗ \beta=\beta^* β=β∗ 时才被接受(此时有 σ ( y ) H T − β s = s ~ \sigma(y)H^T-\beta s = \tilde s σ(y)HT−βs=s~),否则无法成功(不然 σ ( e ′ ) H T = s \sigma(e')H^T=s σ(e′)HT=s 就破解了 R-SDP)
- 该策略的成功率是 1 2 + 1 2 ⋅ 1 p − 1 = p 2 ( p − 1 ) \frac{1}{2} + \frac{1}{2}\cdot\frac{1}{p-1}= \frac{p}{2(p-1)} 21+21⋅p−11=2(p−1)p
- 收到
V
V
V 的挑战
β
\beta
β,
P
∗
P^*
P∗ 直接计算
y
=
u
′
+
e
′
β
y=u'+e'\beta
y=u′+e′β,并发送
h
=
H
a
s
h
(
y
)
h=Hash(y)
h=Hash(y)
- 这两个策略的公共步骤是随机的,Strategy 0 的专属步骤也是随机的,但是 Strategy 1 的专属步骤却是确定性的(在执行了公共步骤的条件下);两者的成功率都只依赖公共步骤的随机性(确切地说,就是 ρ \rho ρ)
现在,假设对于固定的
c
0
=
H
a
s
h
(
s
~
,
σ
)
c_0=Hash(\tilde s,\sigma)
c0=Hash(s~,σ) 和
c
1
=
H
a
s
h
(
u
′
,
e
′
)
c_1=Hash(u',e')
c1=Hash(u′,e′),存在四个可接受副本,具有以下形式(即使用
(
2
,
2
)
(2,2)
(2,2)-out-of-
(
p
−
1
,
2
)
(p-1, 2)
(p−1,2) 的挑战):
T
1
:
=
(
c
0
,
c
1
,
β
,
h
,
b
0
,
y
,
σ
)
,
T
2
:
=
(
c
0
,
c
1
,
β
,
h
,
b
1
,
S
e
e
d
)
T
3
:
=
(
c
0
,
c
1
,
β
∗
,
h
∗
,
b
0
,
y
∗
,
σ
∗
)
,
T
4
:
=
(
c
0
,
c
1
,
β
∗
,
h
∗
,
b
1
,
S
e
e
d
∗
)
\begin{aligned} T_1 &:= (c_0,c_1,\beta,h,b_0,y,\sigma), &T_2 &:= (c_0,c_1,\beta,h,b_1,Seed)\\ T_3 &:= (c_0,c_1,\beta^*,h^*,b_0,y^*,\sigma^*), &T_4 &:= (c_0,c_1,\beta^*,h^*,b_1,Seed^*)\\ \end{aligned}
T1T3:=(c0,c1,β,h,b0,y,σ),:=(c0,c1,β∗,h∗,b0,y∗,σ∗),T2T4:=(c0,c1,β,h,b1,Seed):=(c0,c1,β∗,h∗,b1,Seed∗)
其中
β
≠
β
∗
∈
F
p
∗
\beta \neq \beta^* \in \mathbb F_p^*
β=β∗∈Fp∗ 以及
b
0
=
0
,
b
1
=
1
b_0=0,b_1=1
b0=0,b1=1
那么,可以构造知识提取器,
- 首先根据 T 2 T_2 T2 和 T 4 T_4 T4,生成 ( u ′ , e ′ ) (u',e') (u′,e′) 和 ( u ′ ∗ , e ′ ∗ ) (u'^*, e'^*) (u′∗,e′∗),构造出 y ′ y' y′ 和 y ′ ∗ y'^* y′∗,满足 H a s h ( u ′ , e ′ ) = H a s h ( u ′ ∗ , e ′ ∗ ) = c 1 Hash(u',e') = Hash(u'^*, e'^*) = c_1 Hash(u′,e′)=Hash(u′∗,e′∗)=c1,由于抗碰撞性,可得到 y − y ∗ = ( β − β ∗ ) e ′ y-y^*=(\beta-\beta^*)e' y−y∗=(β−β∗)e′
- 其次根据 T 1 T_1 T1 和 T 3 T_3 T3,满足 H a s h ( σ ( y ) H T − β s , σ ) = H a s h ( σ ( y ∗ ) H T − β ∗ s , σ ∗ ) Hash(\sigma(y)H^T-\beta s,\sigma) = Hash(\sigma(y^*)H^T-\beta^* s,\sigma^*) Hash(σ(y)HT−βs,σ)=Hash(σ(y∗)HT−β∗s,σ∗),由于抗碰撞性,可得到 σ ( y − y ∗ ) H T = ( β − β ∗ ) s \sigma(y-y^*)H^T = (\beta-\beta^*)s σ(y−y∗)HT=(β−β∗)s
- 最终有 σ ( e ′ ) H T = s \sigma(e')H^T=s σ(e′)HT=s,这就解出了秘密 e : = σ ( e ′ ) e := \sigma(e') e:=σ(e′)
因此 s.e. 严格小于 ( p − 1 ) + 2 2 ( p − 1 ) \frac{(p-1)+2}{2(p-1)} 2(p−1)(p−1)+2(否则敌手就能够给出上述形式的四个可接受副本),这说明 s.e. 恰好就是 p 2 ( p − 1 ) \frac{p}{2(p-1)} 2(p−1)p
人们将第一个挑战有 q q q 种取值、第二个挑战有 2 2 2 种取值的 5-pass 协议称为 q 2 q2 q2-Identification scheme。如果它满足 ( 2 , 2 ) (2,2) (2,2)-out-of- ( q , 2 ) (q, 2) (q,2)-special soundness,那么其 s.e. 不超过 q + 1 2 q \frac{q+1}{2q} 2qq+1。
SUF-CMA SIG
将上述的
q
2
q2
q2-Identification scheme 并行重复
t
t
t 次,采用 Fiat-Shamir transformation 得到 SUF-CMA SIG 方案。令
T
(
i
)
:
=
(
C
o
m
(
i
)
,
C
h
1
(
i
)
,
R
s
p
1
(
i
)
,
C
h
2
(
i
)
,
R
s
p
2
(
i
)
)
T^{(i)} := (Com^{(i)}, Ch_1^{(i)}, Rsp_1^{(i)}, Ch_2^{(i)}, Rsp_2^{(i)})
T(i):=(Com(i),Ch1(i),Rsp1(i),Ch2(i),Rsp2(i)) 表示
t
t
t 个副本,将 Hash 建模为 RO,将挑战设置为当前视图的散列,
C
h
1
=
H
a
s
h
(
M
s
g
,
C
o
m
)
C
H
2
=
H
a
s
h
(
M
s
g
,
C
o
m
,
C
h
1
,
R
s
p
1
)
\begin{aligned} Ch_1 &= Hash(Msg, Com)\\ CH_2 &= Hash(Msg, Com, Ch_1,Rsp_1) \end{aligned}
Ch1CH2=Hash(Msg,Com)=Hash(Msg,Com,Ch1,Rsp1)
其中的
C
o
m
,
C
h
1
,
R
s
p
1
,
C
h
2
,
R
s
p
2
Com, Ch_1, Rsp_1,Ch_2,Rsp_2
Com,Ch1,Rsp1,Ch2,Rsp2 视为长度
t
t
t 的向量。
承诺 C o m Com Com 通常是对长度 λ \lambda λ 比特的种子做的,而承诺方案一般直接使用具有单向、抗碰撞的 Hash 函数来实例化,其为确定性承诺方案。但是根据 [CE24],存在一种利用碰撞的攻击,以 O ( 2 λ / 2 ) O(2^{\lambda/2}) O(2λ/2) 时间打破恢复出私钥(自然打破 SUF-CMA 安全性)
采取随机化承诺方案,即在每次承诺
C
o
m
(
i
)
Com^{(i)}
Com(i) 时都加入
λ
\lambda
λ 比特的随机带,可以避免该问题,然而这导致通信量增大。[CE24] 提出了 salt + index construction,对于多个承诺只需加入单个
2
λ
2\lambda
2λ 比特的盐(视为共享随机带),并且添加索引,承诺形如
C
o
m
(
i
)
=
H
a
s
h
(
x
(
i
)
∥
S
a
l
t
∥
i
)
Com^{(i)} = Hash(x^{(i)}\|Salt\|i)
Com(i)=Hash(x(i)∥Salt∥i)
最终的签名值设置为
S
i
g
n
=
(
S
a
l
t
,
C
o
m
,
R
s
p
1
,
R
s
p
2
)
Sign = (Salt, Com, Rsp_1, Rsp_2)
Sign=(Salt,Com,Rsp1,Rsp2)
为了减小通信开销,继续做如下优化:CROSS-ID 的副本形如 ( c 0 ( i ) , c 1 ( i ) , β ( i ) , h ( i ) , b ( i ) , f ( i ) ) (c_0^{(i)},c_1^{(i)},\beta^{(i)},h^{(i)},b^{(i)},f^{(i)}) (c0(i),c1(i),β(i),h(i),b(i),f(i)),
- 因为 b ( i ) = 0 b^{(i)}=0 b(i)=0 时需要发送 ( y ( i ) , σ ( i ) ) (y^{(i)},\sigma^{(i)}) (y(i),σ(i)),而 b ( i ) = 1 b^{(i)}=1 b(i)=1 时仅需发送 S e e d ( i ) Seed^{(i)} Seed(i),假如选取固定重量 w < t w < t w<t 使之取 1 1 1,令 w w w 尽可能接近 t t t,那么就可以减小签名;注意这会影响 forgery attacks 的复杂度,因此需要增大轮数 t t t
- 使用 PRNG Tree 产生种子 S e e d ( i ) Seed^{(i)} Seed(i),传输 b ( i ) = 1 b^{(i)}=1 b(i)=1 的那些叶子对应 Seed Path;当 w w w 增大时,这部分的规模也会降低
- 只有少量的 c 0 ( i ) c_0^{(i)} c0(i) 可被重构,使用 Merkle Tree 承诺 c 0 ( i ) c_0^{(i)} c0(i),树根为 c 0 c_0 c0;发送 b ( i ) = 1 b^{(i)}=1 b(i)=1 的那些 c 0 ( i ) c_0^{(i)} c0(i) 对应的 Merkle Proof,当 w w w 增大该部分变小
- 因为大多数 c 1 ( i ) c_1^{(i)} c1(i) 可被重构,将 c 1 ( i ) c_1^{(i)} c1(i) 合并承诺,计算 c 1 = H a s h ( c 1 ( 1 ) , ⋯ , c 1 ( t ) ) c_1 = Hash(c_1^{(1)},\cdots,c_1^{(t)}) c1=Hash(c1(1),⋯,c1(t));仅需传输 b ( i ) = 0 b^{(i)}=0 b(i)=0 的那些 c 1 ( i ) c_1^{(i)} c1(i),当 w w w 增大该部分变小
- 将 y ( i ) y^{(i)} y(i) 合并承诺,计算 h = H a s h ( y ( 1 ) , ⋯ , y ( t ) ) h=Hash(y^{(1)},\cdots,y^{(t)}) h=Hash(y(1),⋯,y(t));无论 b ( i ) b^{(i)} b(i) 如何取值, V V V 总可以得到全部的 y ( i ) y^{(i)} y(i)(直接传输、可重构)
CROSS 的签名算法描述如下:
CROSS 的验签算法描述如下:
公钥和签名大小为:
因为 t t t 个副本中有 t / 2 < w < t t/2 < w < t t/2<w<t 个位置是 b ( i ) = 1 b^{(i)}=1 b(i)=1,这会使得伪造更加容易。考虑如下的伪造算法,
- 采样 S a l t Salt Salt 和 M S e e d MSeed MSeed(确定性的签名算法),猜测各个 β ( i ) \beta^{(i)} β(i) 和 b ( i ) b^{(i)} b(i) 的取值,记为 β ~ ( i ) , b ~ ( i ) \tilde \beta^{(i)}, \tilde b^{(i)} β~(i),b~(i)
- 对于各个副本执行 Strategy 0/1 的公共步骤,制作出 ( C o m ( i ) , C h 1 ( i ) ) (Com^{(i)}, Ch_1^{(i)}) (Com(i),Ch1(i))
- 假如位置 S ⊆ [ t ] S \subseteq [t] S⊆[t] 上的 β ~ ( i ) \tilde \beta^{(i)} β~(i) 猜对了,其中 ∣ S ∣ ≥ t ∗ |S| \ge t^* ∣S∣≥t∗,那么继续执行如下步骤;否则回到 Step 1 重新猜测
- 对于 i ∈ S i \in S i∈S,直接根据 CROSS-ID 并做出副本的 y , h y,h y,h 部分(必定被接受)
- 对于
i
∉
S
i \not\in S
i∈S 的副本,
- 如果 b ~ ( i ) = 0 \tilde b^{(i)}=0 b~(i)=0,那么运行 Strategy 0 做出必定被接受的副本(如果猜对了 b ( i ) b^{(i)} b(i))
- 如果 b ~ ( i ) = 1 \tilde b^{(i)}=1 b~(i)=1,那么运行 Strategy 1 做出必定被接受的副本(如果猜对了 b ( i ) b^{(i)} b(i))
- 根据 Step 4, 5 构造出的 R s p 1 ( i ) Rsp_1^{(i)} Rsp1(i),生成 C h 2 ( i ) Ch_2^{(i)} Ch2(i)
- 假如 i ∉ S i \not\in S i∈S 位置的 b ~ ( i ) \tilde b^{(i)} b~(i) 全都猜对了,那么就给出了一个伪造签名;否则回到 Step 5 重新生成 R s p 1 ( i ) Rsp_1^{(i)} Rsp1(i)(随机的 Strategy 0 专属步骤,确定的 Strategy 1 专属步骤)
上述伪造算法包含串行的两个猜测阶段,第一阶段使得足够多位置的 β ( i ) \beta^{(i)} β(i) 猜对,第二阶段使得其余位置的 b ( i ) b^{(i)} b(i) 猜对,期望的计算复杂度为:
这被用来确定 t t t 和 w w w 的取值(但毕竟是构造性算法,给出的是安全强度上界;该算法是否有最优性?虽然 Strategy 0/1 确是最优的)
Parameter Set
CROSS 采取枚举方法来生成参数集:由于 R-SDP 的困难性依赖 E \mathbb E E 的结构,将 F p \mathbb F_p Fp 设置为素域,并让 E \mathbb E E 是素数阶 z z z 的乘法子群,
- 首先枚举素数 17 ≤ p ≤ 2477 17 \le p \le 2477 17≤p≤2477,素数 z ∣ ( p − 1 ) z \mid (p-1) z∣(p−1),还有码率 R ∈ [ 0 , 3 , 0.7 ] R \in [0,3,0.7] R∈[0,3,0.7]
- 采用 full weight 的错误向量,根据 R-SDP 的安全强度评估脚本(国内连不上)找出最小的 n n n 以及最优的 m m m,使得安全强度至少 λ \lambda λ 比特
- 然后枚举 w w w,计算出最小的 t ≥ λ t \ge \lambda t≥λ,使得伪造算法的计算复杂度超过 2 λ 2^\lambda 2λ,并且限制 t < 1100 t < 1100 t<1100 以确保计算足够高效
- 最后根据签名大小和轮数 t t t,挑出某些合适的参数集
对于 R-SDP,他们固定选取
p
=
127
p=127
p=127 以及
z
=
7
z=7
z=7(都是 Mersenne primes),使得
F
p
,
F
z
\mathbb F_p, \mathbb F_z
Fp,Fz 上的运算可以在 int16
内快速完成。但是 R-SDP(G) 要求
z
z
z 足够大,否则容易解码,他们固定选取了
p
=
509
p=509
p=509 和
z
=
127
z=127
z=127,使得至少后者可以高效计算。
参数集如下:
其 ref
实现的性能如下:
CROSS 的公钥规模比 RSA 更小,是 Dilithium 的二十分之一;签名规模与 SPHINCS+ 接近,是 Dilithium 的 3~11 倍;密钥生成的速度远比 SPHINCS+ 快,比 Dilithium 快 2~6倍;签名的速度远比 SPHINCS+ 快,比 Dilithium 慢 2~30 倍,与 RSA 接近;验签速度接近 SPHINCS+,比 Dilithium 慢 7~35 倍。