赞
踩
一次一密(one-time pad): E n c ( s , m ) = s ⊕ m Enc(s,m)=s \oplus m Enc(s,m)=s⊕m,密钥过长。
准一次一密:设 G G G 是 PRG, E n c ( s , m ) = G ( s ) ⊕ m Enc(s,m)=G(s) \oplus m Enc(s,m)=G(s)⊕m,密钥不可重用。可以证明它是单消息 IND 的,归约到 PRG 与 U n U_n Un 的计算不可区分上。如果询问两次 ( m 0 , m 1 ) , ( m 0 ′ , m 1 ′ ) (m_0,m_1),(m_0',m_1') (m0,m1),(m0′,m1′),其中 m 0 ⊕ m 1 ≠ m 0 ′ ⊕ m 1 ′ m_0 \oplus m_1 \neq m_0' \oplus m_1' m0⊕m1=m0′⊕m1′,获得 c , c ′ c,c' c,c′,只需计算 c ⊕ c ′ = m b ⊕ m b ′ c \oplus c' = m_b \oplus m_b' c⊕c′=mb⊕mb′ 便可识别 b b b,因此不是多消息 IND 的。
若 PRF 存在,那么多消息 IND 的私钥加密方案存在。设
{
F
s
}
\{F_s\}
{Fs} 是 PRF。加密时随机选取
r
r
r,令
E
n
c
(
s
,
m
)
=
(
r
,
F
s
(
r
)
⊕
m
)
Enc(s,m) = (r,F_s(r) \oplus m)
Enc(s,m)=(r,Fs(r)⊕m)
那么 Π \Pi Π 是多消息密文不可区分的。归约时,分别证明 F s ( r ) ⊕ m F_s(r) \oplus m Fs(r)⊕m 与 R F n ( r ) ⊕ m RF_n(r) \oplus m RFn(r)⊕m 计算不可区分, R F n ( r ) ⊕ m RF_n(r) \oplus m RFn(r)⊕m 与 U n ⊕ m U_{n} \oplus m Un⊕m 计算不可区分, U n ⊕ m U_n \oplus m Un⊕m 与 U n U_n Un 统计不可区分,于是 E x p t A , Π I N D ( 1 n , U 1 ) Expt_{A,\Pi}^{IND}(1^n,U_1) ExptA,ΠIND(1n,U1) 的优势 A d v Adv Adv 可忽略。
任意单消息 IND 的私钥加密方案,都可以利用 PRF 提升到多消息 IND。设
Π
′
\Pi'
Π′ 是 IND 的,
{
f
k
}
\{f_k\}
{fk} 是 PRF。加密时随机选取
r
r
r,令
E
n
c
(
k
,
x
)
=
(
r
,
E
n
c
′
(
f
k
(
r
)
,
x
)
)
Enc(k,x) = (r,\, Enc'(f_k(r),x))
Enc(k,x)=(r,Enc′(fk(r),x))
那么 Π \Pi Π 是多消息 IND 的。
单消息 IND 的私钥加密方案存在 ⟺ \iff ⟺ OWF 存在。令 Π \Pi Π 是安全的加密方案,那么 { E n c k } k ∈ K \{Enc_k\}_{k \in K} {Enck}k∈K 就是 OWF。
若 PRF 存在,那么 IND-CPA 的私钥加密方案存在。第 3
条的
E
n
c
(
s
,
m
)
=
(
r
,
F
s
(
r
)
⊕
m
)
Enc(s,m) = (r,F_s(r) \oplus m)
Enc(s,m)=(r,Fs(r)⊕m) 的构造,就是 IND-CPA 的(自然也是 IND-Multiple 的),PRF + One time pad -> IND-CPA
。归约证明时,用
R
F
n
RF_n
RFn 替换
F
n
F_n
Fn,得到的方案是 IND-CPA 的。如果使用
F
n
F_n
Fn 时它不是 IND-CPA 的,那么就可以区分
F
n
,
R
F
n
F_n,RF_n
Fn,RFn
若 PRF 存在,任意 IND 的私钥加密方案都可以提升到 IND-CPA。第 4
条的
E
n
c
(
k
,
x
)
=
(
r
,
E
n
c
′
(
f
k
(
r
)
,
x
)
)
Enc(k,x) = (r,\, Enc'(f_k(r),x))
Enc(k,x)=(r,Enc′(fk(r),x)) 的构造,就是 IND-CPA 的,PRF + IND -> IND-CPA
。
若 PRF 存在,那么是 IND-CCA1 但不是 IND-CCA2 的私钥加密方案存在。第 3
条的
E
n
c
(
s
,
m
)
=
(
r
,
F
s
(
r
)
⊕
m
)
Enc(s,m) = (r,F_s(r) \oplus m)
Enc(s,m)=(r,Fs(r)⊕m) 的构造,是 IND-CCA1 的,但不是 IND-CCA2 的。CCA1 安全的证明,与第 6
条类似。不是 CCA2 安全的,可以构造敌手,挑战
(
x
0
,
x
1
)
(x_0,x_1)
(x0,x1) 获得
c
=
(
r
,
σ
=
f
k
(
r
)
⊕
x
b
)
c=(r,\sigma=f_k(r)\oplus x_b)
c=(r,σ=fk(r)⊕xb),然后随机选择
σ
′
≠
σ
\sigma' \neq \sigma
σ′=σ 并以
(
r
,
σ
′
)
(r,\sigma')
(r,σ′) 询问解密 Oracle(强制 one time pad 密钥重用),得到
x
’
=
σ
′
⊕
f
k
(
r
)
x’=\sigma' \oplus f_k(r)
x’=σ′⊕fk(r),于是异或可得
x
=
σ
⊕
(
x
′
⊕
σ
′
)
x=\sigma \oplus (x' \oplus \sigma')
x=σ⊕(x′⊕σ′),从而以概率
1
1
1 区分
b
b
b
若 PRF 存在,那么 IND-CCA2 安全的私钥加密方案存在。设
{
F
n
}
,
{
F
n
′
}
\{F_n\},\{F_n'\}
{Fn},{Fn′} 是 PRF,抽样
F
k
,
F
k
′
′
F_k,F'_{k'}
Fk,Fk′′(前者为 one time pad,后者为 MAC)。加密时随机选择
r
r
r,计算
E
n
c
s
k
(
x
)
=
(
r
,
f
(
k
,
r
)
⊕
x
,
f
′
(
k
′
,
(
r
,
f
(
k
,
r
)
⊕
x
)
)
)
=
(
r
,
c
,
t
)
Enc_{sk}(x) = (r,\, f(k,r) \oplus x,\, f'(k',(r,\, f(k,r) \oplus x))) = (r,c,t)
Encsk(x)=(r,f(k,r)⊕x,f′(k′,(r,f(k,r)⊕x)))=(r,c,t)
解密时,先判断 t = ? f ′ ( k ′ , ( r , c ) ) t \overset{?}{=} f'(k',(r,c)) t=?f′(k′,(r,c)),不满足则解密失败,从而阻止敌手利用一个合法密文做出另一个合法密文(敌手必须拥有明文的知识,才可以做出合法密文)。归约时,如果不是 IND-CCA2 的,那么要么 ( r , f ( k , r ) ⊕ x ) (r,\, f(k,r) \oplus x) (r,f(k,r)⊕x) 不是 IND-CCA1 的,要么 { F n ′ } \{F_n'\} {Fn′} 不是 PRF。
若 trapdoor OWP 存在,那么 IND 的公钥加密方案存在。设
{
f
e
,
f
d
−
1
}
\{f_e,f_d^{-1}\}
{fe,fd−1} 是单向陷门置换,
B
(
x
)
B(x)
B(x) 是其硬核。加密时随机选取
x
←
S
i
m
p
l
e
(
e
)
x \leftarrow Simple(e)
x←Simple(e),令
E
n
c
(
e
,
σ
)
=
(
f
(
e
,
x
)
,
B
(
x
)
⊕
σ
)
Enc(e,\sigma) = (f(e,x),\, B(x) \oplus \sigma)
Enc(e,σ)=(f(e,x),B(x)⊕σ)
此方案 Π \Pi Π 是 IND 的(因为是公钥系统,它同时也是多消息 IND 的)。令 σ 0 = 0 , σ 1 = 1 \sigma_0=0,\sigma_1=1 σ0=0,σ1=1,归约时 A ′ A' A′ 为 A A A 提供 ( e , Y , α ← U 1 ) (e,Y,\alpha \leftarrow U_1) (e,Y,α←U1),假设 A A A 在输入 ( e , Y , B ( X ) ) (e,Y,B(X)) (e,Y,B(X)) 时输出 b = 0 b=0 b=0 的概率,比在输入 ( e , Y , B ‾ ( X ) = B ( x ) ⊕ 1 ) (e,Y,\overline B(X)=B(x) \oplus 1) (e,Y,B(X)=B(x)⊕1) 时输出 b = 0 b=0 b=0 的概率要显著的大,由于 α = B ( X ) ⊕ b \alpha=B(X)\oplus b α=B(X)⊕b,因此 A ′ A' A′ 输出 b ⊕ α b \oplus \alpha b⊕α 作为对 B ( X ) B(X) B(X) 的回应。
更高效的 IND 的公钥加密方案:设
{
f
e
,
f
d
−
1
}
\{f_e,f_d^{-1}\}
{fe,fd−1} 是单向陷门置换,
B
(
x
)
B(x)
B(x) 是其硬核。加密时随机选取
x
0
←
S
i
m
p
l
e
(
e
)
x_0 \leftarrow Simple(e)
x0←Simple(e),类似 PRG 的构造,
x
j
+
1
=
f
(
e
,
x
j
)
,
τ
j
=
B
(
x
j
)
⊕
σ
j
x_{j+1}=f(e,x_j),\, \tau_j = B(x_j) \oplus \sigma_j
xj+1=f(e,xj),τj=B(xj)⊕σj
输出 E n c ( e , σ ) = ( x l , τ 0 ⋯ τ l − 1 ) Enc(e,\sigma) = (x_l, \tau_0\cdots \tau_{l-1}) Enc(e,σ)=(xl,τ0⋯τl−1),其中 ∣ σ ∣ = l |\sigma|=l ∣σ∣=l。归约中把 c 0 , c 1 c_0,c_1 c0,c1 计算不可区分,转化为 G ( x 0 ) , U t G(x_0),U_t G(x0),Ut 计算不可区分,然后类似 PRG 的证明,使用混合技术。
若 trapdoor OWP 存在,那么 IND-CPA 的公钥加密存在。第 1
条的
E
n
c
(
e
,
σ
)
=
(
f
(
e
,
x
)
,
B
(
x
)
⊕
σ
)
Enc(e,\sigma) = (f(e,x),\, B(x) \oplus \sigma)
Enc(e,σ)=(f(e,x),B(x)⊕σ) 的构造,就是 IND-CPA 的(自然是 IND–Multiple 的),trapdoor OWP + One time pad -> IND-CPA
。这不是 IND-CCA2 的,敌手发送挑战
(
σ
0
=
0
,
σ
1
=
1
)
(\sigma_0=0,\sigma_1=1)
(σ0=0,σ1=1) 获得回应
(
y
,
c
)
(y,c)
(y,c),以
(
y
,
c
⊕
1
)
(y,c\oplus 1)
(y,c⊕1) 询问解密预言机得到
σ
′
\sigma'
σ′,比较
σ
′
⊕
1
=
σ
b
\sigma'\oplus 1=\sigma_b
σ′⊕1=σb 从而区分出
b
b
b。它不一定是 IND-CCA1 的,除非
{
F
n
,
F
n
−
1
}
\{F_n,F_n^{-1}\}
{Fn,Fn−1} 是 strong OWF。
若 NIZKP 存在,那么 IND 的公钥加密方案可以提升到 IND-CCA1、IND-CCA2。这里的 NIZKP 用于约束敌手确实知道某密文的明文知识,从而解密预言机对敌手无帮助。定义双加密的关系(确保敌手知道随机带
s
0
,
s
1
s_0,s_1
s0,s1 的知识)
R
=
{
(
(
e
0
,
e
1
,
c
0
,
c
1
)
,
(
x
,
s
0
,
s
1
)
)
:
c
0
=
E
n
c
e
0
(
x
;
s
0
)
,
c
1
=
E
n
c
e
1
(
x
;
s
1
)
}
R=\{ ((e_0,e_1,c_0,c_1),(x,s_0,s_1)):\, c_0=Enc_{e_0}(x;s_0),\, c_1=Enc_{e_1}(x;s_1) \}
R={((e0,e1,c0,c1),(x,s0,s1)):c0=Ence0(x;s0),c1=Ence1(x;s1)}
令
<
P
,
V
>
<P,V>
<P,V> 是 NIZKP 的双方,
r
r
r 是 CRS。调用 IND 的
Π
′
\Pi'
Π′ 的
G
e
n
′
Gen'
Gen′ 两次,公钥是
(
e
0
,
e
1
,
r
)
(e_0,e_1,r)
(e0,e1,r),私钥是
(
d
0
,
d
1
,
r
)
(d_0,d_1,r)
(d0,d1,r),加密过程中选择随机数
s
0
,
s
1
s_0,s_1
s0,s1,计算
c
0
=
E
n
c
e
0
(
x
;
s
0
)
c
1
=
E
n
c
e
1
(
x
;
s
1
)
π
←
P
(
(
e
0
,
e
1
,
c
0
,
c
1
)
,
(
x
,
s
0
,
s
1
)
,
r
)
输出 E n c p k ( x ) = ( c 0 , c 1 , π ) Enc_{pk}(x) = (c_0,c_1,\pi) Encpk(x)=(c0,c1,π),在解密时先验证 V ( π , ( e 0 , e 1 , c 0 , c 1 ) , r ) = 1 V(\pi,(e_0,e_1,c_0,c_1),r)=1 V(π,(e0,e1,c0,c1),r)=1,然后再解密 x = D e c d 0 ′ ( c 0 ) = D e c d 1 ′ ( c 1 ) x=Dec'_{d_0}(c_0)=Dec'_{d_1}(c_1) x=Decd0′(c0)=Decd1′(c1)
RO 模型下,基于单向陷门置换和 IND 安全的对称加密方案,高效的 IND-CPA 公钥加密方案。令
H
H
H 是 Hash 函数(归约时被 Random Oracle 取代),
{
F
n
,
F
n
−
1
}
\{F_n,F_n^{-1}\}
{Fn,Fn−1} 是 trapdoor OWP,
Π
′
\Pi'
Π′ 是 IND 的私钥加密方案,加密时随机选择
x
x
x,计算
y
=
F
(
p
k
,
x
)
,
k
′
=
H
(
x
)
y=F(pk,x),\, k'=H(x)
y=F(pk,x),k′=H(x)
输出 E n c ( p k , m ) = ( y , E n c ′ ( k ′ , m ) ) Enc(pk,m) = (y,\, Enc'(k',m)) Enc(pk,m)=(y,Enc′(k′,m)),除了计算 k ′ k' k′ 速度较慢,执行对称加密 E n c ( k ′ , m ) Enc(k',m) Enc(k′,m) 时速度很快。归约时,要么 OWP 被求逆,要么 Priv-IND 被区分。
RO 模型下,基于单向陷门置换和 IND-CCA 安全的对称加密方案,高效的 IND-CCA 公钥加密方案。与第 5
条完全相同,除了将
Π
′
\Pi'
Π′ 提升为 IND-CCA 的私钥加密方案。
RSA 方案:简单输出 E n c ( e , x ) = x e ( m o d N ) Enc(e,x)=x^e \pmod{N} Enc(e,x)=xe(modN),确定性加密算法,不是 IND 的。
Padded RSA 方案:对于 ∣ x ∣ = l |x|=l ∣x∣=l,随机选择 r ∈ { 0 , 1 } ∣ N ∣ − l − 1 r \in \{0,1\}^{|N|-l-1} r∈{0,1}∣N∣−l−1,设置 E n c ( e , x ) = ( r ∥ x ) e ( m o d N ) Enc(e,x)=(r\|x)^e \pmod{N} Enc(e,x)=(r∥x)e(modN)。在 RSA 假设下,如果 l = O ( log N ) l=O(\log N) l=O(logN),这是 IND-CPA 的。
ElGamal 方案:私钥 d = x d=x d=x,公钥 e = ( G , q , g , h = g x ) e=(G,q,g,h=g^x) e=(G,q,g,h=gx), E n c ( e , x ) = ( g r , h r ⋅ m ) Enc(e,x)=(g^r,h^r \cdot m) Enc(e,x)=(gr,hr⋅m), D e c ( d , c ) = c 2 / c 1 x Dec(d,c)=c_2/c_1^x Dec(d,c)=c2/c1x。在 DDH 假设下,这是 IND-CPA 的。归约过程中,将 ( g , g x , g y , g z ) (g,g^x,g^y,g^z) (g,gx,gy,gz) 转化为 c = ( g y , g z ⋅ m b ) c=(g^y,g^z \cdot m_b) c=(gy,gz⋅mb),我们认为 g z ≠ g x y g^z \neq g^{xy} gz=gxy 时 c c c 就是真随机数。
Gramer-shoup 方案:循环群
G
G
G 随机元
g
1
,
g
2
g_1,g_2
g1,g2,令
d
=
g
1
x
1
g
2
x
2
,
f
=
g
1
y
1
g
s
y
2
,
h
=
g
1
z
d=g_1^{x_1}g_2^{x_2},\, f=g_1^{y_1}g_s^{y_2},\, h=g_1^z
d=g1x1g2x2,f=g1y1gsy2,h=g1z,设置私钥
(
x
1
,
x
2
,
y
1
,
y
2
,
z
)
(x_1,x_2,y_1,y_2,z)
(x1,x2,y1,y2,z),公钥
(
g
1
,
g
2
,
d
,
f
,
h
)
(g_1,g_2,d,f,h)
(g1,g2,d,f,h),加密时先生成随机数
r
r
r,然后计算
u
1
=
g
1
r
,
u
2
=
g
2
r
,
e
=
h
r
⋅
m
α
=
H
(
u
1
,
u
2
,
e
)
,
v
=
d
r
f
r
α
u_1=g_1^r,\, u_2=g_2^r,\, e=h^r \cdot m\\ \alpha=H(u_1,u_2,e),\, v=d^rf^{r\alpha}
u1=g1r,u2=g2r,e=hr⋅mα=H(u1,u2,e),v=drfrα
输出
E
n
c
p
k
(
m
)
=
(
u
1
,
u
2
,
e
,
v
)
Enc_{pk}(m)=(u_1,u_2,e,v)
Encpk(m)=(u1,u2,e,v),解密时先验证
v
=
u
1
x
1
+
y
1
α
u
2
x
2
+
y
2
α
v=u_1^{x_1+y_1\alpha}u_2^{x_2+y_2\alpha}
v=u1x1+y1αu2x2+y2α,然后才解密
m
=
e
/
u
1
z
m=e/u_1^z
m=e/u1z
这是 ElGamal + NIZKP 的形式,确保敌手知道随机带
r
r
r 的知识。设
H
H
H 是 Hash 函数(ZKP 的无偏挑战发生器),在 DDH 假设下,它是 IND-CCA2 的。归约时,
A
′
A'
A′ 将
(
g
1
,
g
2
,
u
1
,
u
2
)
(g_1,g_2,u_1,u_2)
(g1,g2,u1,u2) 转化为
p
k
=
(
g
1
,
g
2
,
d
,
f
,
h
′
=
g
1
z
1
g
2
z
2
)
pk=(g_1,g_2,d,f,h'=g_1^{z_1}g_2^{z_2})
pk=(g1,g2,d,f,h′=g1z1g2z2) 交给
A
A
A,如果
log
g
1
u
1
=
log
g
2
u
2
\log_{g_1}u_1 = \log_{g_2}u_2
logg1u1=logg2u2 那么
h
′
≡
h
h' \equiv h
h′≡h 同分布,如果
log
g
1
u
1
≠
log
g
2
u
2
\log_{g_1}u_1 \neq \log_{g_2}u_2
logg1u1=logg2u2 那么对于任意的
m
m
m 总存在
(
z
1
,
z
2
)
(z_1,z_2)
(z1,z2) 使得
e
=
(
h
′
)
r
⋅
m
e=(h')^r \cdot m
e=(h′)r⋅m(完美保密的,
A
A
A 区分优势为
0
0
0)。
ROM 下基于 CDH 和 Priv-IND 的 IND-CPA 公钥加密方案: p k = ( g , g x ) , s k = x pk=(g,g^x),sk=x pk=(g,gx),sk=x,加密为 E n c p k ( m ) = ( g r , E n c ′ ( H ( h r ) , m ) ) Enc_{pk}(m)=(g^r,Enc'(H(h^r),m)) Encpk(m)=(gr,Enc′(H(hr),m))
分块签名:设 Π ′ \Pi' Π′ 是长度为 l l l 的签名方案,构造一般签名方案 Π \Pi Π 如下:
归约很简单,一旦给出 Π \Pi Π 的伪造,那么就有一个 σ i \sigma_i σi 是对 Π ′ \Pi' Π′ 的伪造。
基于 CRHF 将长度受限签名方案,扩展到一般签名方案。设
{
H
s
}
\{H_s\}
{Hs} 是 CRHF,
Π
′
\Pi'
Π′ 是长度受限的签名方案,那么令
s
k
=
(
s
,
s
k
′
)
,
v
k
=
(
s
,
v
k
′
)
sk=(s,sk'),\, vk=(s,vk')
sk=(s,sk′),vk=(s,vk′),签名算法为
S
i
g
n
s
k
(
m
)
=
S
i
g
n
s
k
′
′
(
H
s
(
m
)
)
Sign_{sk}(m) = Sign'_{sk'}(H_s(m))
Signsk(m)=Signsk′′(Hs(m))
归约时, A ′ A' A′ 成功,仅当 A A A 成功且 H s H_s Hs 没发生碰撞。于是 P r [ E x p t A = 1 ] ≤ P r [ E x p t A ′ = 1 ] + P r [ C o l l ] Pr[Expt_A=1]\le Pr[Expt_{A'}=1]+Pr[Coll] Pr[ExptA=1]≤Pr[ExptA′=1]+Pr[Coll],若 Π \Pi Π 不安全,则 Π ′ , H s \Pi',H_s Π′,Hs 至少有一个被攻破。
基于抗第二原像 Hash 函数(SPRHF)将长度受限签名方案,扩展到一般签名方案。将
H
s
H_s
Hs 在签名时才随机选择,可降低要求。签名算法为
S
i
g
n
s
k
(
m
)
=
(
S
i
g
n
s
k
′
′
(
H
s
(
m
)
)
,
s
)
,
s
←
I
(
1
λ
)
Sign_{sk}(m) = (Sign'_{sk'}(H_s(m)),\, s),\, s \leftarrow I(1^\lambda)
Signsk(m)=(Signsk′′(Hs(m)),s),s←I(1λ)
类似的, A ′ A' A′ 成功,仅当 A A A 成功且 H s H_s Hs 没被找到第二原像。
若 OWF / CRHF 存在,那么安全的 one-time 签名方案存在。设
f
f
f 是 OWF,随机选择
s
k
∈
U
d
2
×
l
sk \in U_d^{2 \times l}
sk∈Ud2×l,计算
v
k
=
[
f
(
s
k
i
j
)
]
i
j
vk=[f(sk_{ij})]_{ij}
vk=[f(skij)]ij,签名算法为
S
i
g
m
(
s
k
,
m
)
=
(
s
k
m
1
,
1
,
s
k
m
2
,
2
,
⋯
,
s
k
m
l
,
l
)
Sigm(sk,m) = (sk_{m_1,1},\, sk_{m_2,2},\, \cdots, sk_{m_l,l})
Sigm(sk,m)=(skm1,1,skm2,2,⋯,skml,l)
更高效的 one-time 签名方案:使用 PRG 缩短签名密钥,使用 Hash 函数缩短消息长度。
若安全的 one-time 签名方案存在,那么 EUF-CMA 的签名方案存在。
链式记忆依赖签名:令
Π
′
\Pi'
Π′ 是一次签名方案,签署
j
j
j 个消息后,简记
η
j
=
S
i
g
n
s
k
j
′
(
m
j
,
v
k
j
+
1
)
\eta_j=Sign'_{sk_j}(m_j,vk_{j+1})
ηj=Signskj′(mj,vkj+1),状态为
s
t
a
t
e
=
(
s
k
2
,
(
m
1
,
v
k
2
,
η
1
)
)
∥
⋯
∥
(
s
k
j
+
1
,
(
m
j
,
v
k
j
+
1
,
η
j
)
)
state = (sk_2,(m_1,vk_2,\eta_1)) \|\cdots\| (sk_{j+1},(m_j,vk_{j+1},\eta_j))
state=(sk2,(m1,vk2,η1))∥⋯∥(skj+1,(mj,vkj+1,ηj))
签署第
j
+
1
j+1
j+1 个消息时,先
(
s
k
j
+
2
,
v
k
j
+
2
)
←
G
e
n
(
1
λ
)
(sk_{j+2},vk_{j+2}) \leftarrow Gen(1^\lambda)
(skj+2,vkj+2)←Gen(1λ),然后计算
η
j
+
1
\eta_{j+1}
ηj+1,并在签名中加上
O
(
j
)
O(j)
O(j) 的 history,
σ
=
(
m
1
,
v
k
2
,
η
1
)
∥
⋯
∥
(
m
j
,
v
k
j
+
1
,
η
j
)
∥
(
m
j
+
1
,
v
k
j
+
2
,
η
j
+
1
)
\sigma = (m_1,vk_2,\eta_1)\|\cdots\|(m_j,vk_{j+1},\eta_j)\|(m_{j+1},vk_{j+2},\eta_{j+1})
σ=(m1,vk2,η1)∥⋯∥(mj,vkj+1,ηj)∥(mj+1,vkj+2,ηj+1)
设置 s t a t e = s t a t e ∥ ( s k j + 2 , ( m j + 1 , v k j + 2 , η j + 1 ) ) state = state\|(sk_{j+2},(m_{j+1},vk_{j+2},\eta_{j+1})) state=state∥(skj+2,(mj+1,vkj+2,ηj+1))
二叉树记忆依赖签名:
把链式结构变为二叉树:每个节点 node 上记录自己的公私钥 s k n o d e , v k n o d e sk_{node},vk_{node} sknode,vknode 和 S i g n ( s k n o d e , m n o d e , v k n o d e . L , v k n o d e . R ) Sign(sk_{node},m_{node},vk_{node.L},vk_{node.R}) Sign(sknode,mnode,vknode.L,vknode.R),签名中含有 O ( log j ) O(\log j) O(logj) 的 history。随着签名数量增加,状态树越来越深。
分离消息签名和密钥认证:预设二叉树深度 L L L,每个中间节点 node 上记录自己的公私钥 s k n o d e , v k n o d e sk_{node},vk_{node} sknode,vknode 和 S i g n ( s k n o d e , v k n o d e . L , v k n o d e . R ) Sign(sk_{node},vk_{node.L},vk_{node.R}) Sign(sknode,vknode.L,vknode.R),每个叶子节点上的公私钥 s k n o d e , v k n o d e sk_{node},vk_{node} sknode,vknode 用于签名验签。签名中不含签名历史,含有 O ( L ) O(L) O(L) 个认证。可以动态生成叶子。
一般的二叉树签名:为了不维护状态,需要使用 PRF 来重构确定的随机状态。生成
s
k
=
(
s
k
′
,
s
)
,
v
k
=
v
k
′
sk=(sk',s),vk=vk'
sk=(sk′,s),vk=vk′,对于每个中间节点 node 计算随机带
r
=
f
s
(
n
o
d
e
)
,
r
0
=
f
s
(
n
o
d
e
.
L
)
,
r
1
=
f
s
(
n
o
d
e
.
R
)
r=f_s(node),r_0=f_s(node.L),r_1=f_s(node.R)
r=fs(node),r0=fs(node.L),r1=fs(node.R)(这里的
r
r
r 是有必要固定下来的,因为
Π
′
\Pi'
Π′ 是 one-time 的,同样的消息和不同的随机带,可视作不同的消息),然后
(
s
k
n
o
d
e
.
L
,
v
k
n
o
d
e
.
L
)
←
G
e
n
′
(
1
λ
;
r
0
)
(
s
k
n
o
d
e
.
R
,
v
k
n
o
d
e
.
R
)
←
G
e
n
′
(
1
λ
;
r
1
)
η
n
o
d
e
=
S
i
g
n
′
(
s
k
n
o
d
e
,
(
v
k
n
o
d
e
.
L
,
v
k
n
o
d
e
.
R
)
;
r
)
a
u
t
h
n
o
d
e
=
(
v
k
n
o
d
e
.
L
,
v
k
n
o
d
e
.
R
,
η
n
o
d
e
)
(sk_{node.L},\, vk_{node.L}) \leftarrow Gen'(1^\lambda;r_0)\\ (sk_{node.R},\, vk_{node.R}) \leftarrow Gen'(1^\lambda;r_1)\\ \eta_{node} = Sign'(sk_{node},\, (vk_{node.L},vk_{node.R});r)\\ auth_{node} = (vk_{node.L},vk_{node.R},\eta_{node})
(sknode.L,vknode.L)←Gen′(1λ;r0)(sknode.R,vknode.R)←Gen′(1λ;r1)ηnode=Sign′(sknode,(vknode.L,vknode.R);r)authnode=(vknode.L,vknode.R,ηnode)
最后到达一个未使用过的叶子 leaf,输出 S i g n s k ( m ) = ( l e a f , a u t h r o o t , ⋯ , a u t h l e a f . p a r e n t , S i g n ′ ( s k l e a f , m ) ) Sign_{sk}(m) = (leaf,auth_{root}, \cdots,auth_{leaf.parent}, Sign'(sk_{leaf},m)) Signsk(m)=(leaf,authroot,⋯,authleaf.parent,Sign′(skleaf,m))
若 EUF-CMA 的非确定性签名方案存在,那么 EUF-CMA 的确定性签名方案存在。设 Π ′ \Pi' Π′ 是 S i g n ( s k , m ; U n ) Sign(sk,m;U_n) Sign(sk,m;Un) 的非确定性签名,令 { F n } n \{F_n\}_n {Fn}n 是 PRF,构造 Π \Pi Π 中的确定性签名为 S i g n ( s k , m , F k ( m ) ) Sign(sk,m,F_k(m)) Sign(sk,m,Fk(m))。归约时,先构造 Π ′ ′ \Pi'' Π′′ 为 S i g n ( s k , m ; f ( m ) ) Sign(sk,m;f(m)) Sign(sk,m;f(m)),先证明 Π ≡ c Π ′ ′ \Pi \overset{c}{\equiv} \Pi'' Π≡cΠ′′(因为 F n ≡ c R F n F_n \overset{c}{\equiv} RF_n Fn≡cRFn ),再将 Π ′ \Pi' Π′ 归约到 Π ′ ′ \Pi'' Π′′ 上(类似 RO,使用一个字典 Q S Q_S QS 记录第一次对 m i m_i mi 的签名结果 Q S [ m i ] = S i g n ( s k , m i ; r ) Q_S[m_i] = Sign(sk,m_i;r) QS[mi]=Sign(sk,mi;r),后续的 m j = m i m_j=m_i mj=mi 的询问使用 Q S [ m j ] Q_S[m_j] QS[mj] 来回应)
安全的签名方案存在 ⟺ \iff ⟺ OWF 存在。设 Π \Pi Π 是安全签名方案,那么 f ( s k , m , S i g n s k ( m ; r ) , r ) = ( m , S i g n s k ( m ; r ) ) f(sk,m,Sign_{sk}(m;r),r)=(m,Sign_{sk}(m;r)) f(sk,m,Signsk(m;r),r)=(m,Signsk(m;r)) 就是 OWF。
ROM 下,基于 trapdoor OWP 的签名方案:设
{
F
s
,
F
s
−
1
}
\{F_s,F_s^{-1}\}
{Fs,Fs−1} 是单向陷门置换,
H
:
{
0
,
1
}
∗
→
{
0
,
1
}
l
H:\{0,1\}^* \to \{0,1\}^l
H:{0,1}∗→{0,1}l 是随机预言机,那么签名算法为
S
i
g
n
s
k
(
m
)
=
F
−
1
(
s
k
,
H
(
m
)
)
Sign_{sk}(m) = F^{-1}(sk,H(m))
Signsk(m)=F−1(sk,H(m))
归约思路:单向性 < < < 交互单向性 < < < ROM 下不可伪造性。
RSA 方案:很简单,签名就是 S i g n ( d , m ) = m d ( m o d N ) Sign(d,m)=m^d \pmod{N} Sign(d,m)=md(modN),验签 m = ? σ e ( m o d N ) m\overset{?}{=}\sigma^e\pmod{N} m=?σe(modN)
Hashed RSA 方案:令 H H H 是 RO, v k = ( e , s ) , s k = ( d , s ) vk=(e,s),sk=(d,s) vk=(e,s),sk=(d,s),签名变为 S i g n s k ( m ) = h s ( m ) d ( m o d N ) Sign_{sk}(m)=h_s(m)^d\pmod N Signsk(m)=hs(m)d(modN)
Probabilistic RSA 方案:签名时先随机选取 r r r,然后计算 S i g n s k ( m ) = h s ( r ∥ m ) d ( m o d N ) Sign_{sk}(m)=h_s(r\|m)^d\pmod N Signsk(m)=hs(r∥m)d(modN)
ElGamal 方案:设
H
H
H 是 CRHF,设置
s
k
=
x
,
v
k
=
(
p
,
g
,
y
=
g
x
)
sk=x,vk=(p,g,y=g^x)
sk=x,vk=(p,g,y=gx),签名
S
i
g
n
s
k
(
m
)
=
(
r
=
g
k
(
m
o
d
p
)
,
s
=
(
H
(
m
)
−
x
r
)
k
−
1
(
m
o
d
p
−
1
)
)
Sign_{sk}(m)=\left(r=g^k\pmod{p}, s=(H(m)-xr)k^{-1}\pmod{p-1}\right)
Signsk(m)=(r=gk(modp),s=(H(m)−xr)k−1(modp−1))
验签 V e r v k ( m , ( r , s ) ) = 1 ⟺ y r r s = g H ( m ) ( m o d p ) Ver_{vk}(m,(r,s))=1 \iff y^rr^s=g^{H(m)}\pmod{p} Vervk(m,(r,s))=1⟺yrrs=gH(m)(modp)
若 PRF 存在,那么 EUF-CMA 的长度受限的 MAC 存在。令 { F k : { 0 , 1 } l → { 0 , 1 } t } \{F_k:\{0,1\}^l \to \{0,1\}^t\} {Fk:{0,1}l→{0,1}t} 是PRF,那么 M a c ( k , m ) = F k ( m ) Mac(k,m)=F_k(m) Mac(k,m)=Fk(m)。安全归约时,伪造 ( m , t a g ) (m,tag) (m,tag) 就是对 F k ( m ) F_k(m) Fk(m) 的预测。
若长度受限的 MAC 存在,那么任意长度的一般 MAC 存在。类似签名的扩展方案,分块、CRHF、SPRHF。
Enc-and-MAC 是 INT-PTXT 的,不是 IND-CPA 的,不是 INT-CTXT 的。由于 MAC 是确定性函数,因此 CPA 下两个不同消息的密文很容易区分,只需调用一次加密 Oracle 即可。MAC 没作用在密文上,IND-CPA 的加密方案不满足 INT-CTXT。安全的 MAC 本身就是 INT-PTXT 的。
MAC-then-Enc 是 IND-CPA 的,是 INT-PTXT 的,但不是 INT-CTXT 的。内层是安全的 MAC,因此明显是 INT-PTXT 的。最外层是 IND-CPA 的加密方案,因此明显是 IND-CPA 的。然而,假设密文形如 ( r , c , d ) (r,c,d) (r,c,d),其中 d d d 是冗余项不参与解密运算,那么构造 ( r , c , d ′ ≠ d ) (r,c,d'\neq d) (r,c,d′=d) 就得到了一个伪造的密文。
Enc-then-MAC 是 IND-CCA2 的,且是 INT-PTXT / INT-CTXT 的。由于密文上 MAC 的不可伪造性,使得敌手无法从解密预言机中获取知识,因此 CPA 等价于 CCA2。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。