脑矿机!外国牛人竟用纸笔算比特币

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

脑矿机!外国牛人竟用纸笔算比特币

你知道比特币挖矿是怎么样的么?外国牛人Ken Shirriff用实际行动告诉我们,原来用笔和纸也可以“挖取”比特币!

Ken Shirriff在他的博客中写道:

“我决定用笔和纸来挖取比特币,看看它是如何运行的,事实证明,矿机运行SHA-256算法这个过程其实相当简单,可以通过手工的方法来完成。不用惊讶,这个过程相对于用硬件来挖取时是极其缓慢的,也就是说,它是不切实际的,但在手动执行算法的过程中你能够更好地了解它是如何运行的。”

(以下小编都以第一人称进行翻译..)

挖矿过程

比特币挖矿是比特币系统安全性的重要组成部分。通俗点说,它就是比特币矿工们抱团将一组Bitcoin transactions送进一个块中,然后重复执行被称为哈希散列的加密操作,直到有人发现一个极其特殊且罕见的哈希值。然后,这就标志着这个块已经被挖取出来了,也成为了比特币区块链的一部分。整个寻找哈希值的任务本身并没有实际作用,但是要寻找到这个值是非常困难的(尤其当前全网算力已经爆表),它能够确保没有任何个人能够拥有接管整个比特币系统的资源。

加密散列函数将接收输入的数据块并创建一个更小的,不可预测的输出块。想要获得所需的输出,整个散列函数的过程是没有“捷径”可言,你只能通过不断地计算然后直到找到这个块的值。对于比特币来说,它的哈希函数的名称就是

SHA-256函数,为了提供额外的安全性,比特币采取了两次SHA-256函数,这个过程我们称之为双-SHA-256。

在比特币系统中,一个成功的哈希是它开头拥有足够的零,【1】正如你很难找到一个以多个零结尾的电话号码和车牌号一样,找到多个零开头的哈希值是非常难的。目前,一个成功的哈希散列值必须是以17个零开头,也就是说1.4*10^20 个哈希值中只有一个是会成功的,换句话说,查找一个成功哈希散列值的难度要比从地球所有的砂砾中找到一个特定的砂砾还难。

下图显示了比特币区块链中的一个区块,黄色字节表示生成块的哈希值。在这种情况下,找到足够零的哈希值散列值就表示挖矿成功。如果说,哈希几乎是总是不成功的,这种情况下,矿工就会改变随机数值或其它块的内容然后再次尝试。

比特币所使用的SHA-256散列算法

SHA-256哈希算法需要512位(即64字节)输入到块中,并和加密数据相结合,产生一个256位(32字节)的输出,SHA-256哈希算法是由一个比较简单的算法重复64次而成,下图显示了一轮算法,需要8个8字节的输入,从A至H,执行一些操作,并产生新值(A至H)。

SHA-2.svg

蓝色框是用非线性的方式将这些值混淆,如此就很难分析加密。由于该算法使用了多种不同的函数,你将很难找到破解方式(如果你能找到一个成功哈希的捷径的话,那么恭喜你,你将接管比特币挖矿。)

这个Ma蓝色框对应A,B,C三个位,对于每个位置来说,如果多数位为0时,则输出为0,否则则输出为1.也就是说,如果A,B,C三个位的数字为1位的话,如果多数位位0或者1,则输出为0,如果多数位位2或者3,则输出为1。

Σ0蓝色框是将A位旋转形成三个旋转版本的位,然后将它们相加再以2为模数进行运算。换句话说,如果1位的数字为奇数时,总和为1,否则则为0.三个位的相加值为A向右旋转2位,13位和22位。

Ch是(选择)框,它根据E位的输入值选择输出位,如果E位的输入为1,则输出位相应地为F,如果E位的输入为0,则输出位则为G,也就是说F和G位的输出是根据E位的值而决定的。

Σ1框先将E位旋转然后再相加,过程类似于Σ0,移位分别为6,11和25位。

红色框进行的是32位的加法,然后生成A至E的新值,输入数据Wt就是基于原输入数据,然后经过微处理(输入块送入到算法中运算)输入数据Kt则是每一轮定义中的常数【2】。

如上如中我们可以看出,只有A和E在一次椭圆算法中进行了改变,其他值都没有发生变化。旧的A值变成了新的B值,旧的B值变成了新的C值,等等。虽然每一轮的SHA-256并没有对这个数据做出太大的改变,但是经过64轮运算后,整个输入数据将完全被加密【3】。

人工挖矿

下面的视频演示了如何用纸和笔进行上述SHA-256散列哈希的步骤,我进行了挖区块的第一轮哈希运算,完成这一步骤花了我16分钟45秒。

具体过程略…

对硬件矿机来说有什么意义

SHA-256算法的每一步其实都是很容易通过数字逻辑来实现的——简单的布尔运算和32位加法(如果你学的电子科,你可以轻松实现它的电路),因此,定制SHA-256算法的ASIC芯片很容易实现,。下图就是一个每秒运行20-30亿次哈希散列的挖矿芯片。

与此不同的是,莱特币,狗狗币所使用的scrypt哈希算法被设计成难以用硬件实现这个过程,它存储了1024个不同的散列哈希值到存储器中,然后用一种不可预测的方式将它们组合在一起,其结果是,scrypt要比SHA-256哈希需要更多的电路和存储器,因此你可以看到,scrypt矿机(莱特币)通常比SHA-256 (比特币)的算力要低数千倍。

总结

SHA-256算法的过程其实出奇的简单(而用于签名比特币交易的椭圆曲线算法用手动的方式进行运算将是一件非常痛苦的事情,因为它需要有大量的32字节

整数乘法),做完一轮完整手动运算SHA-256运算花了我16分钟45秒,按照这种速度,哈希一个完整块(128轮)需要花去1.49天,也就是说一天我能够哈希0.67次,相比于目前矿机每秒数T的算力,也就是比我手动快上百万的三次方倍。不用说,手动挖矿完全是不切实际的。

有一个读者问我了一个问题,在我运算的过程中消耗了多少能量,其实并没有太多的体力消耗,假设我每天休息的代谢率为1500kcal/天,手动哈希的能源消耗大概为10兆焦耳/哈希,而通常矿机的运行能源消耗为1000兆哈希/焦耳,所以说我手动运算的能源效率相比于矿机运算将低上十的16次方倍,或者说10万亿倍,然后再来算算成本问题,假设我的食物能量来源是廉价的甜甜圈,大约0.23美元就能提供我200卡路里的能量,而电价定为0.15美元/千瓦时,将比我的能源来源要便宜6.7倍。因此,我手动挖矿的成本将是矿机挖矿成本的67万亿倍,好了,很显然,我用手动的方式去挖矿是相当不明智的行为,这里还没有将纸和笔的成本算进去。

作者:Ken Shirriff

翻译:小蒙牛(粗略翻译,错误请指出,谢谢)

相关文档
最新文档