加载中…
正文 字体大小:

比特币挖矿一定要用计算机吗?用纸笔来计算可行吗?

(2017-11-07 15:53:57)
作者:酱紫君
链接:https://www.zhihu.com/question/65177936/answer/229054679
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

我觉得高赞答案那个老外还少算了,他就算了下SHA256,事实上还有其他麻烦...

不想看原理可以直接跳到最后一张图开始.


比特币挖矿,说来也容易,其实就是找到如下不等式的一个解而已:

\text{hash}(x)<\text{target}

其中hash就是常说的哈希函数,target则决定了难度.

哈希函数定义域为整数,值域则是某个范围的正整数.

可以看出其实解有无数个,但是发现其中一个并不容易.

你可能要说了,我能不能分析这个函数来求它的部分反函数?

有些哈希函数可以,比如CRC校验函数,但是一类用作加密的哈希函数不可以.

哈希加密函数,基本特点之一就是随机,以比特币使用的SHA256为例,画出前100个数字的哈希值:

比特币挖矿一定要用计算机吗?用纸笔来计算可行吗?


可以看出这个函数图像几乎就是 0\sim 2^{256} \approx 1.15792\times 10^{77} 中的一个随机数.

也就是说随便说一个数,说中答案的概率只有  8.63616^{-78},宇宙原子总数才 10^{80} 左右...

Target用来调节难度.Target越小,找到一个解的难度自然就越高.

而唯一的求解方法就是穷举.


SHA256是SHA-2的一种,SHA-2的第t个加密循环如图所示:

比特币挖矿一定要用计算机吗?用纸笔来计算可行吗?


图中的深蓝色方块是事先定义好的非线性函数.

\begin{aligned} &\operatorname {Ch} (E,F,G)=(E\land F)\oplus (\neg E\land G)\\ &\operatorname {Ma} (A,B,C)=(A\land B)\oplus (A\land C)\oplus (B\land C)\\ &\Sigma _{0}(A)=(A\!\ggg \!2)\oplus (A\!\ggg \!13)\oplus (A\!\ggg \!22)\\ &\Sigma _{1}(E)=(E\!\ggg \!6)\oplus (E\!\ggg \!11)\oplus (E\!\ggg \!25)\\ \end{aligned}

先把输入从16进制翻译成2进制,有256位哦.然后切片输入这个运算器.

  • \operatorname {Ch} 关注E,F,G.如果E为1,那么输出为F。如果E为0,那么输出为G.
  • \operatorname {Ma} 关注A,B,C.相互进行ADN然后相加取模二余数.
  • \Sigma _{0}(A) ,取A分别右移动2Bits,13Bits和22Bits,等价于数学上的除以$2^2$ , $2^13$ , $2^22$,然后相加取模二余数.
  • \Sigma _{1}(E)\Sigma _{0}(E) 类似,只是右移6,11,25 Bits.
  • 遇到红框模 2^{32} ,也就是抹去前面192位.

ABCDEFGH一开始分别是八个初始值,$K_t$是第t个密钥,$W_t$是本区块产生第t个word.

原消息被切成固定长度的区块,对每一个区块,产生n个word,通过重复运作循环n次对ABCDEFGH这八个工作区块循环加密.

最后一次循环所产生的八段字符串合起来即是此区块对应到的散列字符串.

比特币的方程(不等式)可以写成

\text{SHA256}(\text{SHA256}(C+x)) < \text{TARGET},0<x<2^{32}

其中C是个常数,根据环境而定

C = \text{version} + \text{prev_hash} + \text{merkle_root} + \text{ntime} + \text{nbits}

  • version = 版本号
  • prev_hash = 前一区块ID的字节反转
  • merkle_root = 本区块中所有交易的SHA256的墨克哈希树根的字节反转
  • ntime = 时间戳
  • nbits = 网络难度

Target根据之前上千个区块的平均求解速度调整,算法会将找到一个解的期望时间控制在10分钟左右.

解出来还要广播,其他终端会验证是否正确,如果正确就会被接受,然后大家一起去算下一个区块.

如果和别人几乎同时算出来,那么出现小分叉,然后继续挖,直到其中一个比较短被遗弃.


那么问题来了,人力能否求解这个方程?

比特币挖矿一定要用计算机吗?用纸笔来计算可行吗?

不能...第一步就GG了...

时间戳(ntime)是从1970年1月1日0时0分0秒(格林尼治天文台时间)开始经过的秒数...

好吧 题主是最强大脑,大脑内置铯原子钟 ,这个问题不考虑.

然后以上所有运算都是16进制运算

一个这样的输入(prev_hash)有64位16进制之长,然后你得取反然后根据其他条件算出 C ,然后算出 C+x ,而且你得翻译成二进制进一步运算.

好吧 题主作为尖子生熟练掌握16进制加法和进制转换

这么大的整数至少要算20分钟的样子,列竖式大概只要一张纸,然后还不能有错.

当然 题主作为特长生学过珠心算 ,花了1秒打了下算盘就搞定了,然后花59秒写到纸上...

算错...不存在的...这可是国粹......

第二,取两次SHA256,一次是64个循环,两次128.这个比较简单无脑了,都是位运算就是在纸上位移不大方便.

那个老外算了16分钟,题主单身多年手速不知高到哪里去了,只花了4分钟就搞定了一轮(一共有128轮).

然而还是没有什么卵用,题主猜的这个x不是答案,还要继续穷举.

  • 然而呢,上面说了平均运算时间是10分钟.你算得比别人慢......白算!!!
  • 和别人同时几乎同时算出来,还要看谁被更多的终端承认,否则...白算!!!

题主是在上海上大学,聆听过人生经验,知道一些时间的奥秘,所以题主跑的很快...

根据相对论,跑的快的话时间就会变慢...

我查了下今天的全网算力是7,844 PH/s,题主静止状态下算力是1/(5*60*128) H/s

题主希望他能在一天内挖出一个比特币

一天有24*60/10=144个结算周期.根据伯努利概型:

E=n p=144\times\frac{s}{7844P+s}=1

1 P=10^3 T=10^6 G=10^{15}

speed=5.4472\times 10^{16} H/s

根据相对论,题主的速度达到了 1-1.516\times10^{-29} 倍光速!!!!

终于...题主算出了一个比特币...

但是,题主的速度实在是太快了,以至于时空畸变是如此的激烈

强大的能量,散发的辐射足以把地球轰的连原子都不剩!!!

这么大的能量从哪里来?

根据质量守恒,一定是题主燃烧了YY之魂才能换取如此不可思议的能量吧.


终于,地球OL服务器卡机了...题主滥用外挂被封号...

哪天这个问题或回答没了一定是GM回档了...


比特币挖矿一定要用计算机吗?用纸笔来计算可行吗?

0

阅读 评论 收藏 转载 喜欢 打印举报
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有