1. 单向函数求逆实验 I n v e r t A , f ( n ) Invert_{A,f} (n) InvertA,f(n)
\qquad 算法 A A A、安全数值 n n n:
- 选择输入 x ← { 0 , 1 } n x\leftarrow \{0,1\}^n x←{0,1}n,计算 y = f ( x ) y=f(x) y=f(x);
- 1 n 1^n 1n和 y y y值作为 A A A的输入,输出为 x ′ x' x′;
- 若 f ( x ′ ) = y f(x' )=y f(x′)=y,则输出 1 1 1,否则 0 0 0。
\qquad 注意:敌手没有选择 y y y的权力。
2. 单向函数
\qquad 单向函数 f : { 0 , 1 } ∗ → { 0 , 1 } ∗ f:\{0,1\}^*\rightarrow \{0,1\}^* f:{0,1}∗→{0,1}∗满足:
- ∀ x \forall x ∀x, ∃ \exists ∃多项式时间算法 M f M_f Mf,使 M f ( x ) = f ( x ) M_f (x)=f(x) Mf(x)=f(x);
- ∀ \forall ∀多项式时间算法 A A A, ∃ n e g l \exists negl ∃negl,满足 P r [ I n v e r t A , f ( n ) = 1 ] ≤ n e g l ( n ) Pr[Invert_{A,f} (n)=1]\leq negl(n) Pr[InvertA,f(n)=1]≤negl(n)。
3. 一次签名实验 S i g n f o r g e A , Π 1 − t i m e ( n ) Signforge_{A,\Pi}^{1-time} (n) SignforgeA,Π1−time(n)
- ( p k , s k ) ← G e n ( 1 n ) (pk,sk)\leftarrow Gen(1^n ) (pk,sk)←Gen(1n);
- A A A输入 1 n 1^n 1n和对 S i g n s k ( ⋅ ) Sign_{sk} (\cdot) Signsk(⋅)的一次查询 m ′ m' m′,输出 ( m , σ ) (m,\sigma) (m,σ);
- 当且仅当 V r f y p k ( m , σ ) = 1 Vrfy_{pk} (m,\sigma)=1 Vrfypk(m,σ)=1实验输出 1 1 1。
\qquad 一次性签名方案满足:对任意的多项式时间敌手 A A A, ∃ n e g l \exists negl ∃negl,满足 P r [ S i g n f o r g e A , Π 1 − t i m e ( n ) = 1 ] ≤ n e g l ( n ) Pr[Signforge_{A,\Pi}^{1-time} (n)=1]\leq negl(n) Pr[SignforgeA,Π1−time(n)=1]≤negl(n)。
4. Lamport的一次签名
\qquad 设 f f f是单向函数。
- G e n Gen Gen: ∀ i ∈ { 1 , ⋯ , l } \forall i\in \{1,\cdots ,l\} ∀i∈{1,⋯,l},选择随机的两个函数输入 x i , 0 , x i , 1 ← { 0 , 1 } n x_{i,0},x_{i,1}\leftarrow \{0,1\}^n xi,0,xi,1←{0,1}n;计算 y i , 0 = f ( x i , 0 ) y_{i,0}=f(x_{i,0} ) yi,0=f(xi,0), y i , 1 = f ( x i , 1 ) y_{i,1}=f(x_{i,1} ) yi,1=f(xi,1);构成 2 2 2个 2 × l 2\times l 2×l的矩阵, x i , j x_{i,j} xi,j构成私钥, y i , j y_{i,j} yi,j构成公钥。
- S i g n Sign Sign: m = m 1 ⋯ m l m=m_1\cdots m_l m=m1⋯ml,输出 σ = ( x 1 , m 1 , ⋯ , x l , m l ) \sigma=(x_{1,m_1 },\cdots,x_{l,m_l } ) σ=(x1,m1,⋯,xl,ml)。
- V r f y Vrfy Vrfy: ∀ i ∈ { 1 , ⋯ , l } \forall i\in \{1,\cdots ,l\} ∀i∈{1,⋯,l},若有 f ( x i ) = y i , m i f(x_i )=y_{i,m_i } f(xi)=yi,mi,输出 1 1 1。
5. 一次性签名方案的安全性
\qquad 设 l l l为任意多项式。若 f f f为单向函数,则上述构造方案 Π \Pi Π是一次性签名方案。
\qquad 考虑算法 I I I,目的是对单向函数 f f f求逆:输入 y y y和 1 n 1^n 1n,
- 随机选择 i ∗ ← { 1 , ⋯ , l } i^*\leftarrow \{1,\cdots,l\} i∗←{1,⋯,l}和 b ∗ ← { 0 , 1 } b^*\leftarrow \{0,1\} b∗←{0,1}。设 y i ∗ , b ∗ = y y_{i^*,b^* }=y yi∗,b∗=y。
- 对任意的 i ← { 1 , ⋯ , l } i\leftarrow \{1,\cdots ,l\} i←{1,⋯,l}和 b ← { 0 , 1 } b\leftarrow \{0,1 \} b←{0,1},且 ( i , b ) ≠ ( i ∗ , b ∗ ) (i,b)\neq (i^*,b^* ) (i,b)=(i∗,b∗),选择 x i , b ← { 0 , 1 } n x_{i,b}\leftarrow \{0,1\}^n xi,b←{0,1}n并设 y i , b = f ( x i , b ) y_{i,b}=f(x_{i,b} ) yi,b=f(xi,b)。
- 输入 p k = ( y 1 , 0 , y 2 , 0 , ⋯ , y l , 0 y 1 , 1 , y 2 , 1 , ⋯ , y l , 1 ) pk=\begin{pmatrix}y_{1,0},y_{2,0},\cdots,y_{l,0}\\y_{1,1},y_{2,1},\cdots,y_{l,1}\end{pmatrix} pk=(y1,0,y2,0,⋯,yl,0y1,1,y2,1,⋯,yl,1),运行 A A A。
- 当 A A A请求消息 m ′ m' m′的签名时,如果 m i ∗ ′ = b ∗ m_{i^*}'=b^* mi∗′=b∗,停止(实验失败);否则返回正确的签名 σ = ( x 1 , m 1 ′ , ⋯ , x l , m l ′ ) \sigma=(x_{1,m_1' },\cdots,x_{l,m_l' } ) σ=(x1,m1′,⋯,xl,ml′)。
- 当 A A A输出 ( m , σ ) (m,\sigma) (m,σ)且 σ = ( x 1 , ⋯ , x l ) \sigma=(x_1,\cdots,x_l ) σ=(x1,⋯,xl),若 A A A输出一个在 ( i ∗ , b ∗ ) (i^*,b^* ) (i∗,b∗)上的伪造,则输出 x i ∗ x_i^* xi∗。
\qquad
当
A
A
A输出一个在
(
i
∗
,
b
∗
)
(i^*,b^* )
(i∗,b∗)上的伪造时,算法
I
I
I对输入
y
y
y成功求逆。考虑“理想情况”:在开始时,将
x
x
x给
I
I
I,设
x
i
∗
,
b
∗
=
x
x_{i^*,b^* }=x
xi∗,b∗=x,此时在第四步步骤中将总是返回签名
σ
\sigma
σ。此时
A
A
A作为子程序所见情形,与实验
S
i
g
n
f
o
r
g
e
A
,
Π
1
−
t
i
m
e
(
n
)
Signforge_{A,\Pi}^{1-time} (n)
SignforgeA,Π1−time(n)中相同。由于在实验开始时,随机选择
(
i
∗
,
b
∗
)
(i^*,b^* )
(i∗,b∗),可以理解为
A
A
A独立于此选择,则
A
A
A在
(
i
∗
,
b
∗
)
(i^*,b^* )
(i∗,b∗)处输出伪造的概率为
1
2
l
(
n
)
\frac{1}{2l(n)}
2l(n)1 。因为一次签名伪造意味着至少存在一个点
(
i
,
b
)
(i,b)
(i,b)的伪造,而一共有
2
l
(
n
)
2l(n)
2l(n)个点。因此,
A
A
A在
(
i
∗
,
b
∗
)
(i^*,b^* )
(i∗,b∗)处输出伪造的概率至少为
P
r
[
S
i
g
n
f
o
r
g
e
A
,
Π
1
−
t
i
m
e
(
n
)
=
1
]
2
l
(
n
)
\frac{Pr[Signforge_{A,\Pi}^{1-time} (n)=1]}{2l(n)}
2l(n)Pr[SignforgeA,Π1−time(n)=1]。
\qquad
考虑“现实情况”:如果
A
A
A输出在
(
i
∗
,
b
∗
)
(i^*,b^* )
(i∗,b∗)处的伪造,“理想情况”和“现实情况”一致。即如果
A
A
A请求消息
m
′
m'
m′的签名且
m
i
∗
′
=
b
∗
m_{i^*}'=b^*
mi∗′=b∗,
A
A
A不可能输出在
(
i
∗
,
b
∗
)
(i^*,b^* )
(i∗,b∗)处的伪造。因此,
A
A
A在
(
i
∗
,
b
∗
)
(i^*,b^* )
(i∗,b∗)处输出伪造的概率仍然至少为
P
r
[
S
i
g
n
f
o
r
g
e
A
,
Π
1
−
t
i
m
e
(
n
)
=
1
]
2
l
(
n
)
\frac{Pr[Signforge_{A,\Pi}^{1-time} (n)=1]}{2l(n)}
2l(n)Pr[SignforgeA,Π1−time(n)=1]。
于是
P
r
[
I
n
v
e
r
t
I
,
f
(
n
)
=
1
]
≥
P
r
[
S
i
g
n
f
o
r
g
e
A
,
Π
1
−
t
i
m
e
(
n
)
=
1
]
2
l
(
n
)
Pr[Invert_{I,f} (n)=1]\geq \frac{Pr[Signforge_{A,\Pi}^{1-time} (n)=1]}{2l(n)}
Pr[InvertI,f(n)=1]≥2l(n)Pr[SignforgeA,Π1−time(n)=1],所以
6. 参考文献
乔纳森.卡茨,耶胡达.林德尔著,任伟译,现代密码学——原理与协议,国防工业出版社,2017年第一版第4次印刷.