如何能参与所要求的工作量证明


任何用户都可以通过生成新的私钥—公钥对来轻易地(并且花很少的钱)在我们的P2P网络中生成新的“身份”。同样,任何用户都可以用他们的私钥签名投票并将其发送到P2P网络——这也很便宜,我们的收件箱中大量的垃圾邮件清楚地说明了这一点。 因此,提交新的投票很便宜,恶意用户可以轻易地用尽可能多的投票淹没网络。


但是,如果将以上其中一个步骤变得昂贵,使你不得不消耗更多的精力、时间或金钱,情况会怎样呢? 这就是工作量证明背后的核心思想:


1. 工作量证明步骤对于发送者来说应该是“昂贵的”。


2. 他人验证工作量证明的步骤应该是“便宜的”。


这样一种方法有很多种可能的执行方式,但是为了达到我们的目的,我们可以再次使用之前遇到的密码散列函数的属性(如图9所示)。



640?wx_fmt=png


图9


1. 很容易计算任何给定消息的散列值。


2. 生成具有给定散列值的消息很昂贵。


我们可以在我们的系统中施加一个新规则,要求每个签名投票必须具有以特定子串开始的散列值,即需要部分散列冲突,比如两个零的前缀。如果这看起来完全是任意的,那是因为它确实是任意的。跟着我的思路,我们通过几个步骤来看看这是如何生效的:


1. 我们假定一个有效的投票陈述是个简单的字符串:"I vote for Bob" (“我投票给Bob”)。


2. 我们可以用同样的SHA-256算法来为我们的投票生成一个散列值。


sha256("I vote for Bob") → b28bfa35bcd071a321589fb3a95cac...


3. 生成的散列值无效因为它没有以我们要求的两个零子串开头。


4. 我们修改一下投票陈述,附加一个任意字符串再试一下:


sha256("I vote for Bob - hash attempt #2") → 7305f4c1b1e7...


5. 生成的散列值也不满足我们的条件,我们更新值,一次又一次地尝试…… 155次尝试之后我们最终得到了:


sha256("I vote for Bob - hash attempt #155") → 008d08b8fe...


上述工作流程的关键属性是,每次我们修改完输入,加密散列函数(在这种情况下是SHA-256)的输出是完全不同的:当我们增加计数时,前一次尝试的散列值并不能透露下一次尝试所得到的散列值的任何信息。因此,生成有效投票并不仅仅是个“难的问题”,我们可以把它比喻成彩票,每次新尝试都会给你一个随机的输出。同时我们也可以通过更改所需前缀的长度来调整彩票的赔率:


1. SHA-256校验和中的每个字符都有16个可能的值: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f.


2. 为了生成有两个零前缀的有效散列,发送者平均需要256 (16^2)次尝试。


3. 将要求变为5个零平均会需要1,000,000 (16^5) 多次尝试……关键是,我们可以轻易提高成本,让发送者找到一个有效散列需要耗费更多CPU周期。


我们可以在一个现代CPU上计算多少个SHA256校验和?它的成本取决于信息大小,CPU 架构和其他变量。如果你对此感到好奇,可以打开控制台,运行一个基准测试程序: $> openssl speed sha.


最终结果是,生成有效投票对于发送者来说是“昂贵的”,但对于接收者验证仍然是微不足道的。接收者散列交易(一次运算)并且核实校验和中包含所需的散列冲突前缀……太好了,那么这对我们的P2P系统有什么用呢?上述工作证明机制使我们能够调整提交投票的成本,从而使破坏系统的总成本(即假冒足够多的有效投票来确保特定结果)高于攻击系统能够获得的价值。


注意,“生成消息的高成本”在很多其他环境中是个有用的属性。例如,垃圾邮件能够运作恰恰是因为生成信息特别便宜。如果我们可以提高发送电子邮件的成本,例如要求工作量证明签名,那么我们可以通过使成本高于利润来打破垃圾邮件的商业模式。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


猜你喜欢

转载自blog.csdn.net/gaiyan8765/article/details/79347718