Bitcoin的矿业55年的老将IBM 1401

的出版启发habrapolzovatelya mark_ablov «拜见比特币通过笔和纸»,我们决定,读者会giktaym不知道什么其他的疯狂能够实现的原帖的作者的想法 - 肯Shirriffu I>

我可以使用IBM大型机来自于上世纪拜见比特币的60年代?我决定测试,乍一看,一个疯狂的想法。我在为IBM 1401汇编代码实现的哈希算法比特币,并在这个古老大型机的一个可行的模式运行它在实践中检验。

3c44909c3f.jpg


卡,这是使用SHA-256计算散列主机上的IBM打印机上打孔卡1401.Za可见印刷,示出了该算法的输入和所产生的哈希 i>的

事实证明,随着计算机的帮助下,可主要的,但这个过程需要这么长时间,宇宙甚至一辈子可能没有足够开采的成功单个块。

虽然现代硬件允许每秒计算哈希值数十亿美元,在计算机中1401花80秒来计算一个哈希值。在过去的十年里,清楚地描述了摩尔定律的计算机性能的进展。

冲卡,参与了实验,以及印刷SHA-256行式打印机在照片中所示(第一张牌是一种美 - 这是不容易打破这种格局)。注意,第二线与一组零结束;这意味着一个成功的哈希值。

采矿系统的原理比特币
近年来,电子货币比特币(Bitcoin的),其中互联网用户可以相互发送,是非常受欢迎的。要了解当前的精髓cryptocurrency,比特币系统可以在一个日志的形式来表示,其中数字硬币(比特币)和硬币,他/她拥有数量的业主的记录。买家比特币可以传输数字硬币对方。

应当指出的是,系统比特币分散:它不具有一个单独的监管服务器,这将跟随交易过程。相反,我们正在分发数以千计的互联网上计算机的分布式网络的记录。

的困难在于,这种分配系统必须以某种方式确保在记录的所有用户的同意。这是善意的用户应善意确认交易的有效性,批准它,尽管骗子,慢慢地你的工作网络可能存在。解决这个问题是所谓的“挖掘”。关于采矿的出单元时,每10分钟确认交易,结果,他被认为是正式确认。

挖掘过程中,基于强大的加密技术,是非常困难的,所以没有人能准确地控制哪些交易是采矿。特别是,比特币的关键思想是复杂的和困难的结果获得的,但它很容易检查。这是«-工作证明-»所谓技术(«的工作证明“)。

采矿块的过程需要计算成本的巨大数量。然而,在该单元已通过认证,用户等网络可以很容易地验证其有效性。开采的复杂性可以防止冒用比特币的,并且易于核查单位让用户有信心在交易的有效性。

挖掘的一个副作用是增加新的比特币系统。目前,谁证实了单元接收比特币产生25(现在传统的货币形式的虚拟金币的数量的成本约为6万人。美元)。本次促销活动鼓励“矿工”努力工作,花挖掘其资源。鉴于现有的机会去6日。美元每10分钟,采矿所代表的真正的“金矿”,鼓励用户花费在硬件显著资金用于采矿。

21c179ccd7.jpg

行式打印机以及IBM大型机在1401,在计算机历史博物馆(计算机历史博物馆)的展览会上提出的。这台计算机正在运行我的程序。控制台位于左上角。黑色矩形面板的计算机上是一个“门”的机架放倒,允许访问以进行维护。 I>

挖掘非常困难的过程,但结果是很容易检查。 Bitcoin的矿业使用加密散列函数,称为SHA-256双。散列部获取输入数据,并减少到一个较小的散列值(在此情况下的256位)。

不排出所述输入数据的权重的加密散列算法将不会产生所希望的哈希值。然而,找到该条目后,这给所需的值,就可以很容易地检查散列。因此,加密散列是«证明,工作»比特币的好方法。

更详细地,为了smaynit单元必须首先收集一个新块的事务。然后,有必要产生一个散列块,以产生该块的(基本上是随机的方式)的散列值。如果散列值以16零,该块被当作已确认并发送至网络比特币。大多数时候,哈希没有成功,所以你稍微改变单元,然后再试一次又一次,花费超过十亿计算操作。约每10分钟,有人能成功地确认单元和所述过程重新开始。这让人想起了彩票,其中涉及矿工,试图在尝试,只要有人不成为的“赢家”。的散列过程的复杂性,很难视觉呈现:它是更容易找到砂在整个地球沙粒比找到的有效散列值。要找到这些哈希值矿工使用配有专用硬件挖掘数据中心。

许多解释这篇文章中,我特意简化。如果您想了解更多关于系统和比特币挖掘,我奉劝艰辛的研究我的文章Bitcoin的采矿经验和 挖掘比特币严酷的教训。< BR />
散列算法SHA-256使用比特币
现在我将讨论用于比特币散列函数,它是基于标准的加密哈希函数,称为SHA-256。该系统使用比特币“双SHA-256”。这意味着函数SHA-256进行两次。 SHA-256算法是如此简单,它可以执行从字面上是唯一可用的铅笔和纸,该算法允许你混合数据不可预知的方式。该算法将作为64字节的输入块,加密处理的数据,并输出256位(32字节)加密的数据。该算法使用一个单轮,它被重复64次。下图显示了一个回合的算法,需要8个4字节块,并通过H号,执行多个操作和A到H.
提供新的价值
feff3f1681.png

<我>圆形SHA-256,作为<一个的实例说明href="https://commons.wikimedia.org/wiki/File:SHA-2.svg%22%20/l%20%22mediaviewer/File:SHA-2.svg">Wikipedia,作者kockmeyer, CC BY-SA 3.0 I>

深蓝色块搅拌位非线性的方式是具有挑战性的密码分析。 (如果你能找到一个更快的方法来制作的数学哈希成功,你可以控制开采比特币)。小区通道«选择“选择F或G型的位,基于输入细胞E.Σ«总和值”位旋转A(或E)产生三循环移位版本,然后将它们相加模2

在每个位置A,B和C细胞马«多数“签位,并选择0或1,这取决于居多什么价值。红细胞携带一个32位加法中产生基于略微处理后的输入数据为A和E.日志重量新值。 (这是在输入块输入到算法。)登录的Kt是一个常数确定每轮。

根据上述说明,一个圆形的变化只有A和E.剩余的值传递保持不变。 A的旧值将成为新的价值B,B的旧值变成C的新值,依此类推。而每一轮的SHA-256的64轮后稍有变化的数据,输入数据是完全混合,得到不可预测的输出散列值。

IBM 1401
我决定运行一台电脑主机的IBM 1401它出现在1959年,在算法和60年代中期成为最畅销的电脑 - 的同时,积极利用超过10万辆汽车。 1401年计算机不是很强大的计算机,即使是1960年。然而,这是负担得起的中型公司,以前买不起有一台电脑,因为它可以租用一小笔钱 - 每月2,500元

IBM的1401不使用硅芯片。此外,在该计算机没有芯片。它的晶体管是建立在半导体锗晶体,将其用硅。晶体管,连同其它部件都安装在板上的纸牌的大小,称为短信卡的。该计算机被用于成千上万的卡已经安装在一个被称为“门”机架。 IBM在1401年和这些“门”,这是提出为您的计算机维护二十名。在该图中看到一个敞开的门,它提供接入芯片和电缆。

0389a1b762.jpg

该图显示了开放式机架(所谓的“门”)大型机IBM 1401的照片可以看出短信卡,连接到电路。这一立场运行磁带 I>

这种计算机的工作原理是显著不同于现代PC。在该计算机中,不使用二进制编码的十进制(BCD)的基础上,8位字节和6位代码。由于这台机器是一个计算机解决经济问题,它使用的十进制而不是二进制算术,和每一个字符内存有一个数值从0到9的存储计算机磁芯安置4000个字符。内存扩展模块洗碗机大小,12000字增加了内存容量。将数据输入与穿孔卡的帮助下实现的计算机。的数据和程序从卡读卡器读出。传出数据打印污水打印机速度或他们在地图上的道路。

计算机历史博物馆计算机历史博物馆在山景城有两个可操作的IBM大型机1401其中之一,我跑了SHA哈希-256。有关IBM在1401的更多信息,我告诉他在分形IBM 1401 一>

执行SHA-256的IBM 1401
当然,IBM在大型机1401是最糟糕的,我们可以选择要运行的散列算法SHA-256所有机器。对于该算法的有效运行是可以在32位字上执行按位操作所需的机器。不幸的是,IBM公司1401不支持任何32位字或字节。该计算机可与6位字符,并且不允许位操作。此外,而二进制,十进制算术运算。因此,在1401,计算机上的算法将是缓慢的和不方便给用户。

最后我用一个字符位。 32位值存储为32个字符,或一个“0”或“1”。我的代码应该执行字符位运算,加法和乘法,检查每一个字符,并决定如何处理它。正如预期的那样,该代码的性能花了很长时间。

以下是我写的汇编代码。代码的整个原理评价进行说明。在代码中到底有十六进制算法需要SHA-256的常数表。由于1401的计算机不支持十六进制格式的,我不得不写自己的套路来转换十六进制和二进制格式。在本文中,我不会放弃的汇编代码IBM 1401的解释只强调这是从用现代计算机完全不同。此代码不会导致子程序,并且不产生结果。由于缺乏通用寄存器进行在存储器中。

看代码下扰流:
隐藏文本 B> <前>&LT;代码级=&QUOT; DOS&QUOT;&GT;工作比特币* SHA-256散列*肯Shirriff http://righto.com CTL 6641组织087 X1 DCW @ 000 @组织092 X2 DCW @ 000 @组织097 X3 DCW @ 000 @组织333开始CS 299 - [R SW 001 LCA 064,INPUT0 MCW 064,264宽*初始化的存储MCW + S0,X3 wmloop SW 0放大器文字商标; X3 MA @ 032 @ ,X3的C + H7 + 32,×3蒲式耳wmloop MCW +输入-127,×3 *把输入到WARR [0]至沃尔[15] MCW + WARR,X1 MCW @ 128 @,tobinc b托宾*计算消息调度阵列瓦特[0..63] MCW @ 16 @,I *我是单词索引16-63 * X1是WARR开始[I-16],即位0(0位在左边,31位上右)MCW + WARR,X1 wloopÇ@ 64 @,我被wloopd *计算S0 MCW + S0,X2 ZA + 0,31安培; X2 *零S0 *加入W [我-15] rightrotate 7 SW 7和X2 *文字商标在第7位(左起)的S0一个56安培; X1,31安培; X2 *右移:32 + 31-7 =位24 W [I-15],31 =的端S0一个63安培; X1,6和X 2 *裹:32 + 31 = w末[Ⅰ-15],7-1 = 6位的S0顺时针7和X2 *清除字标*添加瓦特[Ⅰ-15] rightrotate 18 SW 18安培; X2 *文字商标在位S0一个45安培18(左起); X1,31安培; X2 *右移:32 + 31-18 = 13位的W [I-15],31 = S0结束一个63安培; X1,17安培; X2 *包裹:w的[I-15],18-1 = 17位的S0 CW 18安培32 + 31 =结束; X2 *清除文字商标*加入W [I-15] rightshift 3 SW 3及X2 *文字商标在第3位(左起)的S0一个60安培; X1,31安培; X2 *右移:32 + 31-3 =位28 W [I-15],S0 CW 3和31 =结束; X2 *清除文字商标*转换总和XOR MCW X1,x1tmp MCW + S0 + 31,S0 MCW @ 032 @,X2 *过程的X1 * X1 =右端32位b XOR SW S0 *还原文字商标由XOR MCW x1tmp清除, X1,31安培; S1一462安培的X2 *文字商标在17位(左起); X1 *计算S1 MCW + S1,X2 ZA + 0,31安培; X2 *零S1 *加入W [I-2] rightrotate 17 SW 17安培;×2 *右移位:14 * 32 + 31-17 = 14位的瓦特〔I-2〕,31 =端S1一个479&放大器; X1,16和X 2 *裹:14 * 32 + 31 = w的[端I-2],17-1 =位的S1 CW 17安培16; X2 *清除文字商标*加入W [I-2] rightrotate 19 SW 19安培; X2 *文字商标在第19位(左起)的S1一460安培; X1, 31安培; X2 *右移:14 * 32 + 31-19 = 12位的W [I-2],31 =结束S1一479安培; X1,18安培; X2 *包裹:W的14 * 32 + 31 =结束[I-2],19-1 =位18的S1 CW 19安培; X2 *清除文字商标*加入W [I-2] rightshift 10 SW 10安培;对X2 *文字商标在第10位(左起)S1一个469安培; X1 31安培; X2 *右移:14 * 32 + 31-10 =位21 W [I-2],31 = S1的CW 10安培结束; X2 *清除文字商标*转换总和XOR MCW + S1 + 31,X1 * X1 = S1权MCW @ 032 @,X2 *过程结束32位b XOR SW S1 *还原文字商标由XOR *计算清除W [我]:= W [I-16] + S0 + W [I-7] + S1 MCW x1tmp,X1一S1 + 31,S0 + 31 *添加S1到S0一个31安培; X1,S0 + 31 *加入W [I-16]到S0一319安培; X1,S0 + 31 *添加9 * 32 31 = W [I-7]到S0 *转换位总和到一个32位的总和MCW + S0 + 31,S0 MCW的X1 * X1 =右端@ 032 @,×2 *处理32位b总和SW S0 *恢复文字商标清除了一笔MCW x1tmp,X1 MCW S0 + 31,543安培; X1 *移动S0到W [I]马@ 032 @,X1 +1,我MZ @ 0 @,IB wloop x1tmp DCW#5 *初始化:复制十六进制h0init-h7init成二进制H0-H7 wloopd MCW + h0init-7,X3 MCW + H0,X1 MCW @ 064 @,tobinc * 8 * 8的十六进制数字b托宾*初始化啊,从H0-H7 MCW @ 000 @,X1 ILP MCW H0 + 31安培; X1,A + 31安培; X1 MA @ 032 @,X1ÇX1,@ 256 @卜ILP MCW @ 000 @,bitidx * bitidx = I * 32 =位指数MCW @ 000 @,kidx * kidx =我* 8 =键索引*计算S1来自厂商mainlp MCW + E,X1 MCW + S1,X2 ZA + 0,31安培; X2 *零S1 *添加电子邮件rightrotate 6 SW 6安培; X2 *文字商标在第6位(左起) S1的一个25安培; X1,31安培; X2 *右移:31-6 = 25位电子商务,S1一个31安培的31 =结束; X1,5和X2 *包裹:电子商务31 =结束,6-1 =位5 S1连续6安培; X2 *清除文字商标*添加电子邮件rightrotate 11 SW 11安培; X2 *文字商标在第11位(左起)的S1一个20安培; X1,31安培; X2 *右移:31-11 = 20位电子商务; X1,10安培; X2 *裹的S1一个31安培31 =结束:电子商务31 =结束,11-1 = 10位的S1 CW 11安培; X2 *清除文字商标*添加电子邮件rightrotate 25 SW 25安培;文字商标X2 *在S1的第25位(左起)一个6安培; X1,31安培; X2 *右移:31-25 = 6位电子商务,31 =结束S1一个31安培; X1,24安培; X2 *包裹:电子商务31 =结束,25-1 = 24位的S1 CW 25安培; X2 *清除文字商标*转换总和XOR MCW + S1 + 31,S1 MCW的X1 * X1 =右端@ 032 @,X2 *处理32位b XOR SW S1 *还原文字商标由XOR *计算CH清除:选择功能MCW @ 000 @,X1 * X1是指数从0到31叶绿素居权证和放大器; X1,@ 0 @是chzero MN F&放大器; X1,CH和放大器; X1 * 1中,选择f位b chincr chzero万克放; X1,CH和放大器; X1 *为0,选择G以位chincr +1,X1 MZ @ 0 @,X1Ç@ 032 @,X1卜叶绿​​素*计算temp1中:K表[I] + H + S1 + CH + W [I] CS 299 MCW + K-7,X3 *转换K表[I]以二进制的temp1中马kidx,X3 MCW + temp1中,X1 MCW @ 008 @,tobinc * 8十六进制数字b托宾MCW @



















资料来源:<一href="http://geektimes.ru/company/hashflare/blog/252092/">geektimes.ru/company/hashflare/blog/252092/

标签

另请参见

新&值得注意