比特币中文维基 >>所属分类 >> 协议(Proposals)   

零知识有条件证明

标签: 暂无标签

顶[2] 发表评论(0) 编辑词条

目录

零知识证明简介编辑本段回目录



零知识证明零知识证明

文艺复兴时期意大利的两个数学家塔尔塔里雅(Tartaglia)、菲奥(A.M.Fior)为竞争一元三次方程求根公式发现者的桂冠,争得不可开交。他们都宣称自己发现了这个求根公式,但谁也不愿把这个公式公布出来。于是他们摆了擂台:双方各出30个一元三次方程给对方求解,谁能全部解出,就说明谁掌握了这个公式。比赛结果是塔尔塔里雅解出了菲奥出的全部30 个方程,而菲奥一个也解不出。于是人们相信塔尔塔里雅是一元三次方程求根公式的真正发现者,虽然当时除了塔尔塔里雅外,谁也不知道这个公式究竟长啥样。这种既能充分证明自己是某项权益的合法拥有者,又不把有关信息泄露出去的方法就叫零知识证明(Zero Knowledge Proof)——即给外界的“知识”为“零”。

“零知识证明”早在1986年就被菲亚特(A.Fiat)和沙米尔(A.Shamir)用数学的方法给出了解决方案,并在同年申请了美国专利,但由于该理论可能被用于军事领域,专利局被军方密令禁止发表,理由是:“该申请发表后会有害于国家安全......所有美国人的研究未经许可而泄露将会被判刑罚款”。这禁令闹了个大笑话,因为作者实际上是在美国申请专利的以色列人,研究也是在以色列的大学里做的。此次乌龙事件也从侧面反映了“零知识证明”的重要性。


零知识有条件付款编辑本段回目录

如果把“零知识证明”与比特币联系起来,你可以实现“零知识有条件付款”。设H()是一个复杂的计算机程序,对于H(X)=Y,给定一些特定的Y,你想推导得出符合条件的X。H()也可能是一个密码哈希算法,给定一个特定的哈希,让你破解哈希找到那个密码。又或者H()是一个复杂的程序,Y的值取决于你找到一个漂亮的图形(举个例子,Y既可以是0也可以是1,你想要在给一定X的前提下,Y恒等于1)。

如果我碰巧知道问题的答案,即那些符合条件的X,并想把答案卖给你,但是我们相互间并不信任,由于我们都是孤独的电脑屌丝,身边没什么朋友,所以也没有谁能充当调解员。我们是否可以在零信任度的情况下使用比特币交易呢?答案是肯定的。

数学上已证:你可以将任何计算机问题转化为零知识证明问题(比如PSPACE IP ),因此,使用零知识证明,我的确可以证明自己知道一些X,使得H(X)=Y。但仅有零知识证明还不够,因为你付钱给我后,我却可以不告诉你答案,或者,我告诉你答案后,你又不付钱了。所以,我们需要引进加密交易,如下:

我用随机密码K加密X,Ex = AES(X,K),然后,我构建程序:

Program(K,Ex,H()) =>  [Ex,Hk,Y] {

  Hk=SHA256(K);

  Y=H(UNAES(Ex,K));

  return [Ex,Hk,Y];

}

这段程序使用密码K对解决方案加密,再输出加密的解决方案(Ex)、解密密码K的哈希(Hk)以及解决方案程序的运行结果(Y)。

我将这个程序转换成零知识证明,从比特币外部告诉你Ex、Hk、Y,然后你可以用这三个参数验证我的确能诚实的执行这个程序。

然后你需要我的公钥(比特币地址)和密码(K)来创建一个比特币付款,我必须给你披露密码K以换取这笔付款,你需要用K来解密Ex并获得解决方案。这样一来,我们任何一方都不能欺诈,所以,这个过程中并不需要信任。

目前,这个方案尚未被人们广泛使用,是因为有学者已经证明“零知识有条件付款”转换成复杂的程序是可能的,比如把密码组合和哈希函数转换成零知识证明,但显然并不是所有人都能搞明白在实际中怎么应用。


附件列表


→如果您认为本词条还有待完善,请 编辑词条

上一篇存在性证明 下一篇彩色币

词条内容仅供参考,如果您需要解决具体问题
(尤其在法律、医学等领域),建议您咨询相关领域专业人士。
2

收藏到:  

词条信息

无主之地
无主之地
举人
最近编辑者 发短消息   

相关词条