作者 | Sajjad Hussain
比特币挖矿是比特币系统安全的一个关键部分。其原理是,比特币矿工将一堆比特币交易归为一个区块,然后反复执行一种叫做 Hash 的加密操作几十亿次,直到有人找到一个特殊的目标 Hash 值。至此,该区块即被开采并成为比特币区块链的一部分。Hash 任务本身并不能完成任何有价值的任务,但由于通过它找到一个成功的目标值非常困难,所以它确保了没有人拥有接管比特币系统的能力和资源。
Hash 函数是指输入一个数据区块并创建一个较小的、不可预测的输出。Hash 函数的设计使得没有 " 捷径 " 来获得所需的输出结果--你只能不断地对区块进行 Hash 操作,直到你通过蛮力找到有效的一个结果为止。对于比特币来说,Hash 函数是一个叫做 SHA-256 的函数。为了提供更高的安全性,比特币将连续重复 SHA-256 函数两次,这个过程被称为双 SHA-256。
在比特币中,一个成功的 Hash 值是一个以足够多的零开头的数值。就像很少能找到一个以多个 0 结尾的电话号码或车牌一样,很少能找到一个以多个 0 开头的 Hash。但比特币的难度是呈指数倍增加的。目前,一个成功的 Hash 必须从大约 17 个 0 开始。换句话说,找到一个成功的 Hash 比在地球上所有沙粒中找到某一粒沙子还要难。
下图显示了比特币区块链中的一个区块以及它的 Hash 值。黄色的字节经过 Hash 后生成区块 Hash 值。在这种情况下,生成的 Hash 值以足够多的 0 开始,因此此次挖矿成功。然而,Hash 很难一次得到的,在这种情况下,矿工会改变 nonce 值或其他区块内容,然后进行反复尝试。
比特币使用的 SHA-256Hash 算法
SHA-256 的 Hash 算法采用 512 位(即 64 个字节)的输入块,对数据进行加密组合,并产生 256 位(32 个字节)的输出。SHA-256 算法由重复 64 次的相对简单的回合组成。下图显示了一个回合,它需要 8 个 4 字节的输入--A 到 H,然后执行一些操作,并生成 A 到 H 的新值。
蓝色方框以非线性的方式将数值混合在一起,因此很难用密码学分析这些值。由于算法使用了几个不同的函数,所以发现攻击就更难了。(如果你能找出一种数学捷径来生成成功的 Hash 值,你就可以接管比特币挖矿了)。
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 的位进行反转和,除了移位是 6 位、11 位和 25 位外,其他与Σ0 类似。
红框执行 32 位加法,生成 A 和 E 的新值,输入 Wt 是基于输入数据,稍加处理。(这是输入块被输入到算法中的地方。) 输入 Kt 是为每一轮定义的常数。
从上图可以看出,一轮中只有 A 和 E 是变化的。其他值不变通过,旧的 A 值变成新的 B 值,旧的 B 值变成新的 C 值,以此类推。虽然 SHA-256 的每一轮都不会对数据有太大的改变,但 64 轮之后,输入的数据将完全被扰乱。
SHA-256 的每一步在数字逻辑中都非常容易实现--简单的布尔运算和 32 位加法。(如果你学过电子学,你可能已经可以把电路可视化了)。出于这个原因,定制的 ASIC 芯片可以在硬件中非常高效地实现 SHA-256 算法,在一个芯片上并行地放上几百轮。
相比之下,Litecoin、Dogecoin 和类似的 altcoins 使用 Crypt Hash 算法,该算法被有意设计成难以在硬件中实现的形式。它将 1024 个不同的 Hash 值存储到内存中,然后以不可预测的方式将它们结合起来,以获得最终结果。因此,与 SHA-256 Hash 相比,Scrypt 需要更多的电路和内存。你可以通过查看挖矿硬件来了解其影响,Scrypt (Litecoin 等)的计算速度比 SHA-256 (比特币)慢数千倍。
SHA-256 算法出乎意料的简单,很容易手动完成。(用于签署比特币交易的椭圆曲线算法用手计算会非常痛苦,因为它有很多 32 字节整数的乘法)。手工做一轮 SHA-256 花了我 16 分 45 秒。按照这个速度,Hash 一个完整的比特币区块 (128 轮) 需要 1.49 天,每天的 Hash 率为 0.67 次 (虽然我可能会通过练习变得更快)。相比之下,目前的比特币挖矿硬件每秒可以做到几兆次的 Hash,比我的手动 Hash 快了约五千万倍。不用说,手动比特币挖矿根本不实用。
有 Reddit 读者问到我的能量消耗。其实不需要太多能量消耗,所以假设静止代谢率为 1500kcal/ 天,人工 Hash 的能耗差不多为 10 兆焦耳 /Hash。一般挖矿硬件的能耗是 1000 兆焦耳 /Hash。所以,我的能源效率低了 10¹⁶。接下来的问题是能源成本。一个便宜的食物能量来源是甜甜圈,200 千卡的热量是 0.23 元。这里的电是 0.15 美元 / 千瓦时,便宜了 6.7 倍--比我预期的要接近。因此,我每 Hash 的能源成本大约是挖矿硬件的 67 倍。很明显,我不会靠人工挖矿发家致富,我甚至还没有包括我需要的所有纸和铅笔的成本。
Sajjad Hussain 作者
李翰博 翻译
Olivia 编辑
内容仅供参考 不作为投资建议 风险自担
版权所有 未经允许 严禁转载
☟☟☟
声明:本内容为作者独立观点,不代表 CoinVoice 立场,且不构成投资建议,请谨慎对待,如需报道或加入交流群,请联系微信:VOICE-V。
简介:分享区块链领域专业、前沿、有趣的内容
评论0条