主页 > imtoken下载官方 > 详解POW工作量证明原理(从零开始学习区块链122)

详解POW工作量证明原理(从零开始学习区块链122)

imtoken下载官方 2023-06-22 07:42:50

POW工作量证明是区块链世界最常用的共识方式。 之前的文章有提到,但是没有仔细解释。 今天带来一篇比较详细的POW文章

POW 工作量证明(英文全称 Proof of Work)早在比特币出现之前就已经被探索过了。 通常使用 HASH 操作的复杂度来执行 CPU 操作来确定工作量。 当然你也可以用卷积推导, 大质数分解这些复杂的运算达到工作量证明的目的(HASH只是pow使用的一种算法,你可以使用大部分需要迭代运算的算法来实现POW ,其实对pow算法稍微改动一下就可能生出山寨然后大张旗鼓的骗小白,明白原理后就知道没用了)。 随着比特币的成功,POW为人们所熟知。 pow原理很容易解释。 本文仍然以HASH算法为例。

定义

(Proof-of-work)最初是一个经济学术语,指的是系统为达到一定目标而设定的衡量方法。 简单的理解就是证明你已经完成了一定的工作量。整个监控工作的过程通常是极其低效的,而通过认证的结果来证明相应的工作量已经完成是一种非常高效的方式工作

1999 年,Markus Jakobsson 和 Ari Juels 将 pow 的概念引入计算机系统,设计了抵抗拒绝服务攻击和网络爬虫的系统,后来被广泛用于反垃圾邮件。 它的设计理念是普通用户写一封邮件需要一定的时间,垃圾邮件发送者无法接受这个等待时间。 如果 pow 系统可以让垃圾邮件发送者需要更多的时间来发送邮件,可以增加他们的成本,起到抵御攻击的作用。

Pow 系统中必须有两个角色,worker 和 verifiers,他们需要具备以下特征:

战俘历史

工作证明,一种针对拒绝服务攻击和其他服务滥用的经济对策。 它需要发起者进行一定量的计算,这意味着计算机需要消耗一定的时间。 这个概念最早是由 Cynthia Dwork 和 Moni Naor 在 1993 年的一篇学术论文中提出的。工作量证明(Proof of Work,简称 POW)一词实际上是在 Markus Jakobsson 和 Ari Juels 1999 年的文章中提出的。

哈希运算是最常见的工作量证明机制之一。 它由 Adam Back 于 1997 年发明,用于抵抗邮件拒绝服务攻击和垃圾邮件网关滥用。 在比特币之前,hashcash被用于垃圾邮件过滤工作量证明机制随着比特币,也被微软用于hotmail/exchange/outlook等产品中(微软使用了一种不兼容hashcash的格式,并将其命名为e-postmark)。

工作量证明机制随着比特币_比特币矿工怎么工作_比特币交易工作

该机制主要利用了HASH运算的复杂性,通过给定初始值,通过简单的值递增规律,利用HASH碰撞原理,直到找到特定的碰撞值,通过调整长度来实现工作量的调整碰撞值(碰撞值越长,需要的计算量越大)

Hal Finney 还以可重用工作量证明 (RPOW) 的形式在前比特币加密货币实验中使用了 Hashcash。 另外,比特币的前身戴维的B-money和Nick Szabo的Bit-Gold都是在hash cash的框架下挖矿。

哈希现金素养

HashCash HashCash是最典型的解验证实现,HashCash也是应用最广泛的反垃圾pow系统。

在HashCash系统中,发件人发送给邮箱服务器的邮件信息必须包含邮件签名。 电子邮件签名包括收件人地址、发送时间和数字计数器。 柜台需要使邮件签名满足条件:

使用SHA-1哈希算法为邮件签名生成一个160位的哈希值,哈希值的前20位全部为0。该算法利用了哈希算法的不可预测性,以及碰撞概率SHA-1 确定算法的安全性。

在目前的理解中,发送方除了穷举外,无法快速找到满足条件的签名串。 因此,发件人在发送邮件之前的工作就是不断counter++生成新的邮件签名,然后获取SHA-1哈希值判断前20位是否全为0,如果不是则重新生成。 对于邮件服务器来说,只需要做一次SHA-1就可以判断生成的签名是否满足条件,完全符合POW易验证的定义。

算法介绍

客户签名:

比特币交易工作_工作量证明机制随着比特币_比特币矿工怎么工作

计数器 = 0;

while(1) { 结果 = SHA1(邮件地址 + 时间 + 计数器); 如果 (result.substring(0, 20) == "00000000000000000000") { 中断; } counter++;}sig = mailAdress + time + counter;

服务器端验证:

如果 (SHA1(sig).substring(0, 20) == "00000000000000000000") { 返回 true;}

SHA-1等哈希函数基本上是均匀分布的。 对于我们生成的每个电子邮件签名,对应的哈希值在每一位中出现 0 和 1 的概率相同。 SHA-1生成160位的哈希结果,全部可能是2^160种,前20位固定为0的情况有2^140种工作量证明机制随着比特币,所以每个生成的邮件签名满足条件的概率是:2^140 / 2^160 = 1/2^20

问题1,解空间一定存在,解空间的大小为2^140。

问题2. 每个生成的邮件签名命中的概率是1/2^20,客户端需要平均计算2^20次才能找到正确答案。 计算时间为:PerSHA1Time*2^20。

问题3,服务器端需要丢弃已经出现的答案,同时需要检查收件人地址和时间戳的有效性。

哈希 POW 原理

比特币矿工怎么工作_比特币交易工作_工作量证明机制随着比特币

工作量证明系统的主要特点是客户端需要做一些困难的工作才能得到一个结果,而验证者可以很容易地通过结果检查客户端是否做了相应的工作。 该方案的一个核心特征是不对称性:工作对请求者来说是适度的,对验证者来说很容易验证。 它不同于验证码,它被设计成易于人类破解而计算机不易破解。

下图展示了工作量证明的流程:

工作量证明机制随着比特币_比特币矿工怎么工作_比特币交易工作

例如,给定一个基本的字符串“Hello, world!”,我们给出的工作量要求是可以在这个字符串后面加上一个叫做nonce的整数值,对改变后的(nonce added)字符串进行SHA256哈希运算。 如果得到的哈希结果(以十六进制表示)以“0000”开头,则验证通过。 为了实现这个工作量证明的目标。 我们需要不断增加nonce值,并对得到的新字符串进行SHA256哈希运算。 根据这个规则,我们需要经过 4251 次计算才能找到前 4 位恰好为 0 的 hash。

"Hello, world!0" => 1312af178c253f84028d480a6adc1e25e81caa44c749ec81976192e2ec934c64


"Hello, world!1" => e9afc424b79e4f6ab42d99c81156d3a17228d6e1eef4139be78e948a9332a7d8


"Hello, world!2" => ae37343a357a8297591625e7134cbea22f5928be8ca2a32aa475cf05fd4266b7 ...

"Hello, world!4248" => 6e110d98b388e77e9c6f042ac6b497cec46660deef75a55ebc7cfdf65cc0b965


"Hello, world!4249" => c004190b822f1669cac8dc37e761cb73652e7832fb814565702245cf26ebb9e6


"Hello, world!4250" => 0000c3af42fc31103f1fdc0151fa747ff87349a4714df7cc52ea464e12dcd4e9

通过这个例子,我们对工作量证明机制有了初步的了解。 有人认为,如果工作量证明只是这么一个过程,是不是只需要记住nonce是4521,计算就可以通过验证呢? 当然不是,这只是一个例子。

接下来我们简单的把输入改成“Hello, world+整数值”,整数值范围是1到1000,也就是说输入变成了一个1000个值的数组:“Hello, world! 1, Hello, world !2...你好,世界!1000”。 然后,对于数组中的每个输入,依次执行上述示例中所需的工作量证明——找到具有 4 个前导 0 的散列散列。

它很容易计算,预计需要大约 2^16 次尝试(散列值的伪随机属性允许我们进行概率估计)才能得到 4 个前导 0 的散列。 而统计刚才执行的1000次计算的实际计算结果,我们会发现平均计算次数为66958次,非常接近2^16(65536)。 在这个例子中,数学期望的计算次数就是我们需要的“工作量”,重复多次的工作量证明将是一个符合统计规律的概率事件。

比特币交易工作_工作量证明机制随着比特币_比特币矿工怎么工作

统计输入字符串的列表和实际用于获得目标结果的计算次数如下:

Hello, world!1 => 42153
Hello, world!2 => 2643
Hello, world!3 => 32825
Hello, world!4 => 250
Hello, world!5 => 7300
...
Hello, world!995 => 164819
Hello, world!996 => 178486

比特币交易工作_比特币矿工怎么工作_工作量证明机制随着比特币

Hello, world!997 => 22798 Hello, world!998 => 68868 Hello, world!999 => 46821

比特币系统中的工作量证明机制与上面的例子类似,但是比它更复杂,以后会在另一篇文章中解释

关于这篇文章

POW的原理其实很简单,但是涉及到的算法却很复杂; 您也可以分享这篇文章让更多人了解这方面的知识,您的支持和鼓励是我最大的动力,长按二维码关注

工作量证明机制随着比特币_比特币矿工怎么工作_比特币交易工作

长按关注探索未来

相关阅读