在继续讲下去之前,我想提醒一下密码学的使用在历史上有多么重要。
从恺撒大帝到现在,一个国家或一个民族能够安全交流的价值,以人类生命和经济价值计算都是不可估量的。早在巴比伦人占领以色列时期的 《耶利米书》中,巴比伦人被以色列人掳到巴比伦时,巴比伦就被称为代表暗码式翻译的「示沙克」(耶利米书 25 章 26 小节),有可能是指保护先知不受惩罚。甚至托马斯・杰斐逊也参与过密码学,他制作了美国军队使用的杰斐逊圆盘,这个发明一直延用到 20 世纪。后来,英国科学家艾伦・图灵破解德军 Enigma 密码学的工作,被认为缩短了二战的时间。毫无疑问,密码学改变了历史。
为什么需要零知识
在前面演示的私钥 / 公钥示例中,请注意,用户 A 永远不应该暴露她的私钥,因为任何获得她的私钥的恶意方都能够解密其获得的每一条加密消息。
我们来考虑另一种情况:常规密码在大部分数据库中都存储为哈希(hash),而不是明文。哈希是一个函数,会把一个输入转换成另一个惟一的字符串数据,从而掩饰或原始数据。
在哈希函数中,实际上「不可能」从哈希函数创建的惟一数据字符串反推出原始数据。例如,系统可以使用 keccak256 哈希算法,将密码「3nY82$pwt4」哈希为 0xc24ea779490258728751c1789aa30fa007261f5c052e22914599b46 ae13ccc5a。看看这种字母和数字的组合,即使知道哈希算法并使用强大的算力,也无法倒推出原始密码 3nY82$pwt4 。重要的是,哈希函数在定义上是决定性的,这意味着相同的输入总是会得到相同的输出。因此,如果一个网站将您的密码存储为 0xc24ea779490258728751c1789aa30fa007261f5052e22914599b46 ae13ccc5a,那么当您输入「3nY82$pwt4」时,该网站可以通过对其哈希,并与存储在数据库中的哈希进行比较,来检查您是否输入了正确的密码。
在上面的例子中,请注意:虽然网站不会存储您的明文密码,但您仍然需要通过一个安全通道与网站共享密码,这样才能证明你知道你的正确密码。
如果您可以向网站证明您知道正确的密码,而又不向他们共享或透露该密码,那不是更好吗?或者做的更出色,证明以前的那个你就是现在你说的这个你 ?
总体来说,这种方法是当今大多数行业验证信息的方式――需要提供信息来验证它,需要重新执行计算来验证它是否完整地正确执行。比如,如果银行想批准一笔从您的帐户到另一账户的电汇,银行必须在转账前检查你的账户,来确认你的帐户中有足够的钱,来证明您不是在花费你实际不拥有的钱。同样,如果你想证明自己的身份,你必须提供你的社会安全号码或政府签发的其他身份证明。
而在另一些情况下,不需要知道知识的细节就可以检查结果。例如,供应商 A 的出价是否高于供应商 B ? 供应商 B 不应该看到供应商 A 的出价,同样,很可能双方都不想向客户以外的第三方披露自己的出价。不过,零知识证明可以向一个监管或审计机构证明,供应商 A 的出价低于供应商 B 。
这就是零知识证明所提供的东西:一方(证明者)能够向另一方(验证者)证明,他们拥有某一条特定的信息,而又无需披露该信息是什么。
零知识证明 (Zero Knowledge Proof)系统
零知识证明系统是 1989 年由 Shafi Goldwasser、Silvio Micali 和 Charles Rackoff 在《交互证据系统的知识复杂性》(The Knowledge Complexity of Interactive Proof Systems)论文中首次提出的。(值得注意的是,这篇论文在最终发表之前被拒绝了大约三四年。)
这些最初的零知识证明系统是交互的,意味着数学证明的完成,需要验证者和证明者几方的交互才能完成。这意味着验证者不能独立操作,而证明者必须在场或可以出场才能完成证明。现在,我们已经发展到非交互式的证据系统,在这种系统中,证明者可以发布一个证据,并将其留给验证者进行检查。
零知识证明的验证方法强调的是可靠性和完备性。可靠性的原则是指,证明者不能说服验证者接受一个错误的陈述。事实上,这基于一种可能性,即证明者生产一个假的证据的可能性非常、非常、非常低,这一点与几十年来我们一直信任的当前的加密机制没有什么不同。完备性的原则是指,一个证明者能够说服验证者接受一条正确的陈述。
此文由 比特币官网 编辑,未经允许不得转载!:首页 > 比特币行情 » 一文说透密码学历史、工作原理、零知识证明及潜在影响