每次哈希10.3秒:在Apollo航天器机载控制计算机上进行挖掘

我们设法恢复了阿波罗号航天器的机载控制计算机。 现在,当我们拥有世界上唯一的工作实例时,我想到了为它编写代码。 尽管使用遥远的60年代的计算机来开采比特币的想法似乎毫无意义,但值得一试。 使用15位计算机在汇编代码中实现比特币加密算法非常困难,但是我仍然设法使其工作。 不幸的是,计算机速度如此之慢,以至于要花很多时间才能形成一个比特币区块。



阿波罗/阿波罗机载控制计算机(AGC)于1960年代开发,在阿波罗计划的飞行过程中进行了计算以及受控的运动,导航以及受控的命令和登月模块。 在一个计算机大小可能从冰箱大小到房间大小不等的时代,《阿波罗指南》足够小,可以飞入太空。 这台历史悠久的计算机是最早使用集成电路的计算机之一。 这样的机器重约32公斤。



在玛格丽特·汉密尔顿(Margaret Hamilton)领导的软件开发中,阿波罗(Apollo)航天器的机载控制计算机发挥了重要作用。

玛格丽特·汉密尔顿(Margaret Hamilton)领导了麻省理工学院(MIT)的软件开发部门。 该部门为NASA的阿波罗太空计划开发了车载软件。
Apollo(AGC)配备了具有协作多任务处理功能的实时操作系统,可以同时执行多个优先任务,并且具有故障排除功能。 大部分软件都在汇编器中;为AGC开发了解释器,该解释器允许在2 KB的内存中同时运行5-7个虚拟机。

比特币采矿如何运作


一点也不是新闻:作为领先的数字货币,比特币在过去几年中一直处于关注的最前沿。 比特币系统可以视为一个账簿,其中保存着比特币所属的人,这使您可以将比特币从一个用户转移到另一个用户。 比特币的革命性特征是完全去中心化,没有中央管理者或其类似物。 而是将记录分发到Internet上的数千台计算机上,并且该系统无需帮助即可工作。
这是一种日记,其中记录了所有交易,而不能更改任何数据,而只能更改它们的添加。 这种日记帐的一种副本位于该网络中所有参与者的系统上,所有有关资金流通和积累的交易和信息也位于所有这些日记帐中。
为了确保每个人都同意哪些交易有效,比特币使用了一种称为挖矿的过程-大约每10分钟提取一次待处理的交易块,这使该交易块成为“正式”交易。 比特币系统的设计方式是,区块挖矿需要大量的计算能力,从而消除了一名矿工的“夺权”。 矿工(比特币矿工)相互竞争,产生数万亿兆的随机“哈希”,直到有人幸运地找到以18个零开头的一个。 此哈希形成一个成功生成的块,此后每个人都将继续挖掘下一个块。 想法:连续获得18个零的可能性极小,因此成功进行某人需要大量尝试。 好吧,这类似于彩票,矿工继续尝试直到有人“获胜”,搜索哈希码可与在地球上所有沙子中找到特定的沙子颗粒相提并论。

每次在挖出区块后,都会创建新的比特币; 目前,成功的矿工可以接收12.5个新的比特币(价值140,000美元)以及交易费。 每10分钟就有机会获得14万美元的机会的想法促使矿工使用大量的电力来建立装有专用设备的数据中心。



上图显示了已开采区块中实际包含的内容。 黄色部分是块标题(已散列),后跟进入块的事务。 每个块都包含前一个块的哈希,结果所有块都连接在一起,形成了一个块链。 在右边,散列是成功的,因为它以大量的零开始。

总结挖掘过程:如上图所示,您收集新的比特币交易并创建标头。 您生成一个密码块哈希。 如果以某种令人难以置信的机会,结果以18个零开始,则将该区块发送到比特币网络并“赢得” 14万美元的比特币。 否则,请稍微更改标题,然后重试。 如果其他人设法获得了冻结,则可以从新的冻结和新的交易重新开始。

比特币哈希算法SHA-256


这些哈希值从何而来? 比特币的挖掘过程基于具有“哈希函数”的密码学,该算法将数据块转换为几乎随机的哈希值。 哈希算法的设计使其可以轻松实现,但是在密码学上是可靠的:除了使用蛮力尝试数百万个哈希值之外,没有其他方法可以快速找到成功的哈希值。 特别是,比特币使用称为SHA-256的标准加密哈希函数。 该算法很简单,但是可以完全不可预测地用于加密数据。
SHA-256是一种单向功能,可根据最大为2.31艾字节(2(位))的输入数据创建固定长度的数字指纹(256位,32字节),并且是SHA-2密码算法家族算法的特例。
SHA-256算法在伪代码页上进行了大致描述

SHA-2系列的哈希函数基于Merkle – Damgard结构。 添加之后,原始消息将分为几个块,每个块分为16个字。 该算法将每个消息块传递给具有64次迭代的循环。 在每次迭代中,将转换2个单词,其余单词设置转换函数。 将每个块的处理结果相加,总和就是哈希函数的值。 由于内部状态的初始化是通过处理前一个块来执行的,因此无法并行处理块。



信息编码步骤(也称为“回合”)重复64次。 上图显示了一个回合,该回合从A到H接受八个4字节哈希值,执行若干操作,并为AH生成新值。 从图中可以看出,每轮只有A和E发生变化,而其他仅发生变化。 但是,经过64回合后,输入数据被完全加扰,从而导致哈希的不可预测的输出。

SHA-256中的操作是简单的按位操作。 上面的红色字段表示32位加法,生成A和E的新值。“选择性”块Ch基于输入E的值从F或G中选择位。“合计”块Σ旋转并求和这些位。 Ma块“ Most”评估每个位置A,B和C的位,并选择占多数的值。 值Kt是一个常数。 输入通过Wt的值进入算法。 使用简单的算术和逻辑运算,可以在计算机上轻松实现这些运算。

阿波罗飞船控制计算机处理器


Apollo(AGC)没有微处理器,因为它是在微处理器本身开发之前就已经建立的。 相反,处理器由大约5600个NOR门组成。
这些门相互连接以创建电路,例如触发器,寄存器,二进制加法器,控制逻辑等。 AGC是最早使用集成电路的计算机之一。 每个集成电路包含两个NOR阀。 该计算机具有24个逻辑模块,与以下模块相似。 每个逻辑模块具有120个集成电路(240个NOR阀)。 例如,寄存器和ALU用四个模块实现,每个模块实现4个处理器位。



按照现代标准,计算机的体系结构是不寻常的:它使用15位字和奇偶校验(当时计算机通常具有与应用程序相对应的字长,而不一定是2个)。 AGC在RAM中只有2K个字,在ROM中只有36K个字。 永久存储设备(ROM)是多个缝合线芯(“编织”存储器)的线性选择。 即使按照1960年代的标准,阿波罗控制计算机的速度仍然很慢。 他每秒可以执行约40,000次操作。 AGC的主要优点是I / O:它具有数百个I / O连接,并且可以提供实时航天器控制。

SHA-256在Apollo导航计算机上的实现


我对SHA-256哈希算法的实现非常严格地遵循伪代码。 但是,由于AGC指令集缺乏现代计算机的许多功能,我遇到了一些困难。 例如,AGC(就像1960年代的许多计算机一样)没有堆栈,因此您必须跟踪对子例程的每次调用的返回地址。

另一个复杂因素是SHA-256算法使用32位无符号数字,而AGC使用15位有符号数字,较长的过时单位,因此即使加法运算也需要复杂的代码。 为了在AGC中输入32位数字,我将每个单词分成一个4位和两个14位的片段。 (我使用14位片段,而不是15位片段,因为我需要使用无符号算术)。

下一个问题是AGC内存,或者说它的大小。 与1960年代的大多数计算机一样,控制计算机在磁芯上使用内存,每个位都存储在一个微小的磁化铁氧体环中。 由于内核内存相当繁琐,因此AGC具有大约4 KB的RAM。 AGC寻址方案使任务更加复杂,因为如果不使用不方便的存储块切换机制,则只能访问256个字。 问题在于SHA-256算法使用了八个(32位)哈希值,一个64字的确认表和8个字的中间值。 只有这三个数组使用了240个AGC字,剩下的约16个字用于其他所有内容(临时值,程序的返回地址,循环计数,指针等)。各种目标,但在变量占用仍在使用的空间时,我花了很多时间来调试问题。



大多数现代计算机都有特殊的shift / rotate命令来对字进行操作,但是AGC使用了三个特殊寄存器。

SHA-256算法使用许多32位移位和旋转,我不得不使用15位循环寄存器将其转换为循环。 尽管移位操作(例如x >> 10)是微不足道的,但我需要实现一个完整的子例程才能在Apollo航天器上启动它。



为了保持指令集和较小的代码长度,AGC有几条指令具有意外的“副作用”。 例如,TS指令(传输到存储设备)将一个值写入内存,乍看之下这是一个简单的过程。 但是,如果前一个加法器有溢出(即结转),则TS跳过下一条指令,并向累加寄存器加+1或-1。 换句话说,简单地将值写入内存可能会导致控制流程跳跃和大小写更改。 这样就可以以更高的精度处理用于算术运算的连字符;大多数计算机仅使用“带有连字符的添加”指令来实现此功能。

程序启动


在下面的视频中-我的比特币程序在真实的Apollo航天器控制计算机上运行,​​结果显示在我们的DSKY中(“显示/键盘-显示/键盘”的缩写)。 DSKY有一个简单的数字键盘,其按钮足够大,供宇航员戴着手套时按下。 计算机以数字显示结果; 宇航员应该知道输出的单位是什么:英尺,秒,度等。 我们使用了由Karl创建的DSKY的副本,因为没有人会让我们研究真实的DSKY。

阿波罗计算机具有非常简单的用户界面。 宇航员通过按下动词键(Verb),输入动词编号并按Enter来选择动作。 然后,他通过输入“名词”(Noun)选择设定值。 (宇航员有一张参考卡片,上面列出了所有动词和名词)。 我在一个叫做Borealis的程序中添加了Verb 65的比特币挖矿功能。 您可以在视频的开头看到Mike如何介绍Verb 65。


阿波罗花了5.15秒创建了一个SHA-256哈希。 由于比特币使用双哈希,因此哈希速率为10.3秒。 当前,比特币网络执行大约65 EH / s(每秒65亿次哈希)。 车载控制计算机将花费4×10 ^ 23秒来获取设备。 这是宇宙年龄的一百万倍(4.3×10 ^ 17)。

鉴于采矿过程的天文复杂性,您可能想知道我如何成功开采了该地块。 很简单-在此演示中,我使用了过去成功开采的区块作为输入,尤其是区块#286819。 因此,该算法很快就起作用了,但是由于它是一个古老的模块,所以我没有从中赚钱。

要评估Apollo计算机采矿的性能,请将其与紧凑型USB矿机的性能进行比较。 一种这样的设备每秒运行1300亿个哈希,其成本不到70美元。 这不能与价值15万美元的Apollo控制计算机相提并论。 一次,Apollo是一款极其紧凑的系统,功耗低,仅消耗55瓦。 但是,USB矿机的功耗为12瓦,很容易戴在手中。 性能上的巨大差异与摩尔定律所描述的计算机速度呈指数级增长有关,同时还具有当前用于挖掘比特币的用户设备的优势。

AGC编程-过去和现在


在1960年代,用于车载控制计算机的代码被写在打孔卡上,并使用称为YUL的软件系统组装在磁带上。 该系统比1960年代预期的要先进,它包括一个源代码管理系统,可以跟踪并包含更改。 在飞行过程中,软件安装在具有线性选择的重复缝合芯线的ROM中(在“编织”内存中),并且导线绕线芯物理穿行为0或穿过芯线为1。换句话说,每个这样的芯都是按顺序制造的,并且数据已存储以编织线的形式。 这确保了高密度ROM的可靠存储,但是需要数周的制造时间。



由于为每次更改都不生产新的绳芯是不切实际的,因此在开发过程中使用了不同的方法。 磁芯存储模拟器使从外部存储设备将程序加载到车载计算机成为可能。 该模拟器是控制设备的一部分,该控制设备的大小与冰箱一样(如下图所示)-通过机载计算机上的诊断连接器连接到AGC的调试接口。 该监视器允许程序员使用指示器和开关设置断点,检查寄存器等。



就我而言,我在笔记本电脑上编写了软件,并使用yaYUL进行了编译,这是Virtual AGC团队编写的YUL的现代版本。 我使用Code :: Blocks IDE在模拟的AGC上测试了该软件,该IDE提供的调试功能与1960年代的功能有些相似。 为了在真正的AGC上运行代码,我们没有生产内核。 幸运的是,迈克·斯图尔特(Mike Stewart)搭建了一块板,用于使用控制设备最初使用的同一AGC测试连接器将代码加载到AGC中。



结论


我实现了SHA-256哈希算法,并在Apollo机载控制计算机上运行了该算法,我们能够对其进行恢复,每个哈希过程耗时10.3秒。 这不是我对荒谬的比特币挖矿的第一个实验。 我试图用铅笔和纸手工开采它们。 哈希率为每天0.67哈希。 从1960年代初开始将IBM大型机与打孔卡配合使用,每个哈希的哈希率最高为80秒。 我最快的实现是在Xerox Alto(1973年著名的计算机,Macintosh的策划者)上,它每秒执行1.5次哈希。 因此,Apollo车载计算机能够超越基于晶体管的旧IBM计算机,但不能超越Alto。



1973年阿波罗计划的费用为254亿美元,相当于今天的1500亿美元。 目前,比特币的市值为2000亿美元,因此,如果NASA在开采比特币,他们可以支付整个Apollo计划的费用,甚至可以省钱。 但是,这样的计划有一个缺点-阿波罗计算机的性能低下,因为块挖掘比宇宙的寿命要长得多。

我的代码可以在Github上找到 ; 挖矿代码在BITCOIN.agc中 。 CuriousMarc提供了一系列AGC视频 ,您可以观看有关恢复项目的更多信息。

感谢您与我们在一起。 你喜欢我们的文章吗? 想看更多有趣的资料吗? 通过下订单或将其推荐给您的朋友来支持我们,在为我们发明的独特模拟入门级服务器上为Habr用户提供30%的折扣: 关于VPS(KVM)E5-2650 v4(6核)的全部真相10GB DDR4 240GB SSD 1Gbps从$ 20还是如何划分服务器? (RAID1和RAID10提供选件,最多24个内核和最大40GB DDR4)。

戴尔R730xd便宜2倍?在荷兰,我们有2台Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100电视 戴尔R420-2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB-$ 99起! 阅读有关如何构建基础架构大厦的信息。 使用价格为9000欧元的Dell R730xd E5-2650 v4服务器的上等课程?

Source: https://habr.com/ru/post/zh-CN466071/


All Articles