哈希函数能不能直接用于构造承诺方案? 答案是不能.
承诺方案具有两个性质, binding和hiding, 用通俗的语言来说.
- binding: P P P 不能把同一个承诺值 c c c 打开成 2 2 2 个消息.
- hiding: V V V 不能区分两个消息的承诺值.
我们看下面一个方案, 对于消息 m m m 和随机数 r r r,
- Commit: c = C ( m , r ) c = C(m, r) c=C(m,r).
- Reveal: Reveal r , m r, m r,m, and verify that c = C ( m , r ) c = C(m, r) c=C(m,r) or not.
这个方案有什么样的性质取决于我们对hash函数做什么样的要求.
- 抗碰撞. 这是哈希函数最基本的性质, 在这个要求下, 承诺方案是Computational binding的, 但是hiding的性质无法保证. 因为只要求抗碰撞, hash函数是很有可能泄露消息的一些比特的, 区分是可能的. 从另一个角度来说, 对于 c = C ( m , r ) , m ′ ≠ m c = C(m, r), m '\neq m c=C(m,r),m′=m
- Random oracle. 这是一个比较强的假设, 首先 Computational binding肯定是有的. 另外在这个假设下, 貌似可以达到Computational Hiding(我不确定)参考1.
但是不保证Perfect Hiding, 这是因为Perfect Hiding要求对于 c = C ( m , r ) c = C(m, r) c=C(m,r), 一定存在 m ′ ≠ m m' \neq m m′=m, 使得 C ( m ′ , r ′ ) = C ( m , r ) C(m', r') = C(m, r) C(m′,r′)=C(m,r). Random Oracle不保证这个.
参考: