定义
定义数字签名方案
Π
=
(
Gen,?Sign,?Vrfy
)
\Pi = (\text{Gen, Sign, Vrfy})
Π=(Gen,?Sign,?Vrfy) 如下:
- Gen:输入安全参数
1
n
1^n
1n,输出长度均为
n
n
n 的公司钥对
(
p
k
,
s
k
)
(pk,sk)
(pk,sk)
- Sign:输入私钥
s
k
sk
sk 和明文
m
m
m,输出签名
σ
←
Sign
s
k
(
m
)
\sigma \leftarrow \text{Sign}_{sk}(m)
σ←Signsk?(m)
- Vrfy:输入公钥
p
k
pk
pk,明文
m
m
m,签名
σ
\sigma
σ。输出
Vrfy
p
k
(
m
,
σ
)
\text{Vrfy}_{pk}(m,\sigma)
Vrfypk?(m,σ)
安全性
定义伪造签名实验
Sig-forge
A
,
Π
(
n
)
\text{Sig-forge}_{\mathcal{A},\Pi}(n)
Sig-forgeA,Π?(n):
-
(
p
k
,
s
k
)
←
Gen
(
1
n
)
(pk,sk)\leftarrow \text{Gen}(1^n)
(pk,sk)←Gen(1n)
- 敌手
A
\mathcal A
A 输入
p
k
,
Sign
s
k
(
?
)
pk, \text{Sign}_{sk}(\cdot)
pk,Signsk?(?),敌手输出
(
m
,
σ
)
(m,\sigma)
(m,σ)。
Q
\mathcal Q
Q 表示
A
\mathcal A
A 查询过的全部明文。
-
A
\mathcal A
A 成功当且仅当
Vrfy
p
k
(
m
,
σ
)
=
1
\text{Vrfy}_{pk}(m,\sigma) = 1
Vrfypk?(m,σ)=1 且
m
?
Q
m \notin \mathcal Q
m∈/?Q。
电子签名方案
Π
=
(
Gen,?Sign,?Vrfy
)
\Pi = (\text{Gen, Sign, Vrfy})
Π=(Gen,?Sign,?Vrfy) 不可伪造,当且仅当对任意多项式时间敌手
A
\mathcal A
A,
Pr
?
[
Sig-forge
A
,
Π
(
n
)
=
1
]
≤
negl
(
n
)
\Pr[\text{Sig-forge}_{\mathcal A, \Pi}(n)=1] \le \text{negl}(n)
Pr[Sig-forgeA,Π?(n)=1]≤negl(n)
RSA-FDH 原理
GenRSA 是一个多项式算法,输入
1
n
1^n
1n,输出两个
n
n
n 位质数的乘积
N
N
N,两个整数
e
,
d
e,d
e,d 满足
e
d
≡
1
(
m
o
d
?
(
N
)
)
ed \equiv 1 \pmod {\phi(N)}
ed≡1(mod?(N))。 定义 RSA-FDH 加密方案如下:
- Gen:
<
N
,
e
,
d
>
←
GenRSA
(
1
n
)
<N,e,d> \leftarrow \text{GenRSA}(1^n)
<N,e,d>←GenRSA(1n)。公钥为
<
N
,
e
>
<N,e>
<N,e>,私钥为
<
N
,
d
>
<N,d>
<N,d>。指定
H
:
{
0
,
1
}
?
→
Z
N
?
H:\{0,1\}^* \rightarrow \mathbb Z_N^*
H:{0,1}?→ZN??
- Sign:输入私钥
<
N
,
d
>
<N,d>
<N,d> 和明文
m
∈
{
0
,
1
}
?
m \in \{0,1\}^*
m∈{0,1}?,计算
σ
←
[
H
(
m
)
d
m
o
d
??
N
]
\sigma \leftarrow [H(m)^d \mod N]
σ←[H(m)dmodN]
- Vrfy:输入公钥 <N,e>,消息
m
m
m,签名
σ
\sigma
σ,当且仅当
σ
e
=
H
(
m
)
m
o
d
??
N
\sigma ^ e = H(m) \mod N
σe=H(m)modN 时,输出 1
证明
当 RSA 假设成立,且
H
H
H 符合随机预言模型,即将输入随机映射到
Z
n
?
\mathbb Z_n^*
Zn?? 时,可以证明其不可伪造性。 设
A
\mathcal A
A 查询
H
H
H 共
q
q
q 次,构造实验
Sig-forge
A
,
Π
′
(
n
)
\text{Sig-forge}'_{\mathcal{A}, \Pi}(n)
Sig-forgeA,Π′?(n):
- 随机选择
j
∈
{
1
,
.
.
.
,
q
}
j \in \{1, ..., q\}
j∈{1,...,q}(不输入给
A
\mathcal A
A)
-
(
N
,
e
,
d
)
←
GenRSA
(
1
n
)
(N,e,d) \leftarrow \text{GenRSA}(1^n)
(N,e,d)←GenRSA(1n),选定随机函数
H
:
{
0
,
1
}
?
→
Z
N
?
H:\{0,1\}^* \rightarrow \mathbb Z_N^*
H:{0,1}?→ZN??
- 给敌手
A
\mathcal A
A 输入
p
k
=
(
N
,
e
)
,
H
,
Sign
<
N
,
d
>
(
?
)
pk = (N,e), H, \text{Sign}_{<N,d>}(\cdot)
pk=(N,e),H,Sign<N,d>?(?),明文
m
m
m,返回
σ
←
[
H
(
m
)
d
m
o
d
??
N
]
\sigma \leftarrow [H(m)^d \mod N]
σ←[H(m)dmodN]。当查询
Sign
<
N
,
d
>
(
m
j
)
\text{Sign}_{<N,d>}(m_j)
Sign<N,d>?(mj?) 时,会返回失败。
-
A
\mathcal A
A 输出此前没有查询过签名的
(
m
,
σ
)
(m, \sigma)
(m,σ)。设
m
=
m
i
m = m_i
m=mi? 为第
i
i
i 次查询
H
H
H 的输入。
Sig-forge
A
,
Π
′
(
n
)
=
1
\text{Sig-forge}'_{\mathcal{A}, \Pi}(n) = 1
Sig-forgeA,Π′?(n)=1 当且仅当
σ
e
≡
H
(
m
)
(
m
o
d
N
)
\sigma^e \equiv H(m) \pmod N
σe≡H(m)(modN) 且
i
=
j
i = j
i=j
由于
Sig-forge
A
,
Π
′
(
n
)
\text{Sig-forge}'_{\mathcal{A}, \Pi}(n)
Sig-forgeA,Π′?(n) 成功,必须输出
m
j
m_j
mj? 的加密码,因此禁止查询
m
j
m_j
mj?。显然,
Pr
?
[
Sig-forge
A
,
Π
′
(
n
)
=
1
]
=
1
q
Pr
?
[
Sig-forge
A
,
Π
(
n
)
=
1
]
\Pr[\text{Sig-forge}'_{\mathcal{A}, \Pi}(n) = 1] = \frac 1q \Pr[\text{Sig-forge}_{\mathcal{A}, \Pi}(n) = 1]
Pr[Sig-forgeA,Π′?(n)=1]=q1?Pr[Sig-forgeA,Π?(n)=1],即输出的
m
m
m 正好是随机确定的那个。
给定
N
,
e
,
y
N, e, y
N,e,y,构造敌手
A
′
\mathcal A'
A′ 解决 RSA 问题:
- 随机选择
j
∈
{
1
,
.
.
.
,
q
}
j \in \{1, ..., q\}
j∈{1,...,q}
- 运行
A
\mathcal A
A。记录所有的三元组
<
m
i
,
σ
i
,
y
i
>
<m_i,\sigma_i,y_i>
<mi?,σi?,yi?> 表明已经查询过
H
(
m
i
)
=
y
i
H(m_i) = y_i
H(mi?)=yi?,
σ
i
e
≡
y
i
(
m
o
d
N
)
\sigma_i^e \equiv y_i \pmod N
σie?≡yi?(modN)
- 当
A
\mathcal A
A 第
i
i
i 次查询
H
H
H 时
- 如果
i
=
j
i = j
i=j,返回
y
y
y
- 否则选择随机的
σ
i
∈
Z
n
?
\sigma_i \in \mathbb Z_n^*
σi?∈Zn??,计算
y
i
←
[
σ
i
e
m
o
d
??
N
]
y_i \leftarrow [\sigma_i^e \mod N]
yi?←[σie?modN] 并返回。记录
<
m
i
,
σ
i
,
y
i
>
<m_i, \sigma_i, y_i>
<mi?,σi?,yi?>
- 当
A
\mathcal A
A 查询
m
m
m 的签名时,设
m
i
=
m
m_i = m
mi?=m
- 如果
j
=
i
j = i
j=i,禁止查询
- 如果有三元组
(
m
i
,
σ
i
,
y
i
)
(m_i, \sigma_i, y_i)
(mi?,σi?,yi?),返回
σ
i
\sigma_i
σi?
- 最后
A
\mathcal{A}
A 输出
(
m
,
σ
)
(m,\sigma)
(m,σ)。如果
m
=
m
j
m = m_j
m=mj? 且
σ
e
≡
y
(
m
o
d
N
)
\sigma^e \equiv y \pmod N
σe≡y(modN),
A
′
\mathcal A'
A′ 输出
σ
\sigma
σ
这个例子很好地用到了随机语言模型的可编程性。要输出一个均匀随机的
y
y
y,
A
′
\mathcal A'
A′ 生成一个均匀随机的
σ
\sigma
σ,并返回
σ
e
m
o
d
??
N
\sigma ^e \mod N
σemodN。
Pr
?
[
RSA-inv
A
′
,
GenRSA
(
n
)
=
1
]
=
Pr
?
[
Sig-forge
A
,
Π
′
(
n
)
=
1
]
=
1
q
Pr
?
[
Sig-forge
A
,
Π
(
n
)
=
1
]
\begin{aligned} \Pr[\text{RSA-inv}_{\mathcal A',\text{GenRSA}}(n)=1] &= \Pr[\text{Sig-forge}'_{\mathcal{A}, \Pi}(n) = 1] \\ & = \frac 1q \Pr[\text{Sig-forge}_{\mathcal{A}, \Pi}(n) = 1] \end{aligned}
Pr[RSA-invA′,GenRSA?(n)=1]?=Pr[Sig-forgeA,Π′?(n)=1]=q1?Pr[Sig-forgeA,Π?(n)=1]?
由于
Pr
?
[
RSA-inv
A
′
,
GenRSA
(
n
)
=
1
]
≤
negl
(
n
)
\Pr[\text{RSA-inv}_{\mathcal A',\text{GenRSA}}(n)=1] \le \text{negl}(n)
Pr[RSA-invA′,GenRSA?(n)=1]≤negl(n),所以
Pr
?
[
Sig-forge
A
,
Π
(
n
)
=
1
]
≤
q
?
negl
(
n
)
\Pr[\text{Sig-forge}_{\mathcal{A}, \Pi}(n) = 1] \le q\cdot \text{negl}(n)
Pr[Sig-forgeA,Π?(n)=1]≤q?negl(n)
构造安全签名
可变长度
若
Π
′
=
(
Gen,?Sign’,?Vrfy’
)
\Pi' = (\text{Gen, Sign', Vrfy'})
Π′=(Gen,?Sign’,?Vrfy’) 是固定长度
n
n
n 的不可伪造签名,则构造如下
Π
=
(
Gen,?Sign,?Vrfy
)
\Pi = (\text{Gen, Sign, Vrfy})
Π=(Gen,?Sign,?Vrfy) 为任意长度签名:
- Sign:输入秘钥
s
k
sk
sk,长度为
l
l
l 的明文
m
m
m,将
m
m
m 切成
d
d
d 块
m
1
,
m
2
,
.
.
.
,
m
d
m_1,m_2,...,m_d
m1?,m2?,...,md?, 每块长度为
n
/
4
n/4
n/4.
随机选择
r
∈
{
0
,
1
}
n
/
4
r \in \{0, 1\}^{n/4}
r∈{0,1}n/4。对
i
=
1
,
2
,
.
.
.
,
d
i = 1, 2, ..., d
i=1,2,...,d,计算
t
i
←
S
i
g
n
s
k
′
(
r
∣
∣
l
∣
∣
i
∣
∣
m
i
)
t_i \leftarrow Sign_{sk}'(r||l||i||m_i)
ti?←Signsk′?(r∣∣l∣∣i∣∣mi?),输出
<
r
,
t
1
,
.
.
.
,
t
d
>
<r,t_1, ..., t_d>
<r,t1?,...,td?> 作为签名。 - Vrfy:输入公钥
p
k
pk
pk,长度为
l
l
l 的明文
m
m
m,数字签名
<
r
,
t
1
,
.
.
.
,
t
d
′
>
<r,t_1, ..., t_{d'}>
<r,t1?,...,td′?>。将
m
m
m 切成
d
d
d 块
m
1
,
.
.
.
,
m
d
′
m_1, ..., m_{d'}
m1?,...,md′?。当且仅当
d
=
d
′
d = d'
d=d′ 且
Vrfy
p
k
′
(
r
∣
∣
l
∣
∣
i
∣
∣
m
i
,
t
i
)
=
1
\text{Vrfy}_{pk}'(r||l||i||m_i,t_i) = 1
Vrfypk′?(r∣∣l∣∣i∣∣mi?,ti?)=1 对任意
1
≤
i
≤
d
1 \le i \le d
1≤i≤d 成立。
|