同态承诺方案
一个非交互式承诺方案允许发送方构造一个值的承诺,发送方可以后续打开这个承诺并揭示这个值,承诺的接收者可以检查和验证承诺的值的确是这个特定的值。一个承诺方案必须具备两个特性:hiding 和 binding。hiding 意味着承诺并不会揭示承诺值,binding 意味着不能打开两个不同值的承诺。
一个非交互式承诺方案是一对概率多项式时间算法 ( G , C o m ) (\mathcal{G} ,Com) (G,Com)。初始化算法 c k ← G ( 1 λ ) ck \leftarrow \mathcal{G}(1^{\lambda}) ck←G(1λ) 生成一个承诺密钥 c k ck ck。 c k ck ck 指定了一个消息空间 M c k \mathcal{M}_{ck} Mck,一个随机空间 R c k \mathcal{R}_{ck} Rck 和一个承诺空间 C c k \mathcal{C}_{ck} Cck,可以被描述为函数 C o m c k : M c k × R c k → C c k Com_{ck}: \mathcal{M}_{ck}\times \mathcal{R}_{ck} \rightarrow \mathcal{C}_{ck} Comck:Mck×Rck→Cck。给定一个消息 m ∈ M c k m\in \mathcal{M}_{ck} m∈Mck,发送者选择一个随机数 r ← R c k r \leftarrow \mathcal{R}_{ck} r←Rck 并计算承诺 c = C o m c k ( m ; r ) c=Com_{ck}(m;r) c=Comck(m;r)。
同态性
我们有承诺密钥
c
k
ck
ck,消息
m
0
,
m
1
∈
M
c
k
m_0,m_1\in \mathcal{M}_{ck}
m0,m1∈Mck 和随机数
r
0
,
r
1
∈
R
c
k
r_0,r_1\in \mathcal{R}_{ck}
r0,r1∈Rck,有以下性质:
C
o
m
c
k
(
m
0
;
r
0
)
⋅
C
o
m
c
k
(
m
1
;
r
1
)
=
C
o
m
c
k
(
m
0
+
m
1
;
r
0
+
r
1
)
Com_{ck}(m_0;r_0)\cdot Com_{ck}(m_1;r_1)=Com_{ck}(m_0+m_1;r_0+r_1)
Comck(m0;r0)⋅Comck(m1;r1)=Comck(m0+m1;r0+r1)
佩德森承诺
佩德森承诺是具有同态性承诺的一个例子。密钥生成算法
G
\mathcal{G}
G 输出一个
q
q
q 阶循环群
G
\mathbb{G}
G,群
G
\mathbb{G}
G 的两个生成元
g
,
h
g,h
g,h。承诺密钥为
c
k
=
(
G
,
q
,
g
,
h
)
ck=(\mathbb{G},q,g,h)
ck=(G,q,g,h)。为了承诺
m
∈
Z
q
m \in Z_q
m∈Zq,承诺者选择一个随机数
r
∈
Z
q
r\in Z_q
r∈Zq 并计算
C
o
m
c
k
(
m
;
r
)
=
g
m
h
r
Com_{ck}(m;r)=g^mh^r
Comck(m;r)=gmhr。在离散对数假设下,承诺方案是完全hiding 和 binding。
S
e
t
u
p
:
c
k
=
(
G
,
q
,
g
,
h
)
;
C
o
m
c
k
(
m
;
r
)
=
(
g
m
h
r
)
\mathrm{Setup}:ck=(\mathbb{G},q,g,h);\quad Com_{ck}(m;r)=(g^mh^r)
Setup:ck=(G,q,g,h);Comck(m;r)=(gmhr)