哈希运算如何工作?

区块链技术是多项技术创新紧密连结的复杂网络。其中最重要的一个部分就是哈希运算。

哈希是一种密码学功能,它将任何长度的字符序列转换为固定长度的独特输出,即哈希。这意味着不管输入的符号组合是什么,它们总是会产生一串独一无二的数字和字符

比特币的哈希看起来像这样:

00000000000000000025e2ba026a8ad462b9a693d80fd0887def167f5f888a11

(区块 540807 的哈希)

哈希要点

  • 哈希是加密编码数据的方法。
  • 它从任何输入产生固定长度的输出。
  • 相同的输入总是产生相同的哈希。
  • 从哈希无法重构输入。
  • 现代哈希函数使得从两个不同的输入产生相同的输出几乎不可能。

加密货币中的哈希

哈希是所有基于区块链的交易的不可或缺的部分,包括加密货币的交易。从挖掘区块到签署交易到生成私钥,哈希函数是必需的。

比特币 比特币现金 以太坊 莱特币 瑞波币
SHA-256 SHA-256 Keccak256 Scrypt SHA-512

哈希函数是一个用于计算哈希的数学算法。不同的加密货币使用不同的哈希函数,但它们都遵循哈希的基本原则。

哈希的主要特性

哈希产生固定长度的输出

哈希总是从任何输入产生唯一的、固定长度的输出。让我们通过几个例子来了解这意味着什么。

输入 输出
hello 2CF24DBA5FB0A30E26E83B2AC5B9E29E1B161E5C1FA7425E73043362938B9824
今天是个持币观望的好日子(It’s a good day to HODL.) 6B89D5D4AD6A3364410DD9BAB95FD250EF4A663D9D3C47CBD7388535A5912E03
查尔斯·狄更斯的整部小说《荒凉山庄》(The entire novel Bleak House by Charles Dickens) 4F144CC612CA27E2DD6DFD6663F68BABC3B758D602B5102BF14E717E823EB741

在上表中,使用 SHA-256 哈希函数生成三个不同输入的哈希。在所有三种情况中,哈希完全是唯一的,但其长度保持不变。SHA-256 生成的哈希是 256 比特长,通常表示为由数字 0-9 和字母 A-F 组成的 64 个符号。无论输入的长度是多少——无论是单个单词(hello)还是整部小说(查尔斯·狄更斯的《荒凉山庄》)——哈希都固定为 64 个字符。

哈希是确定性的

相同的输入将始终产生相同的输出。如果你使用 SHA-256 从“fun”生成哈希,你将始终得到下表中所示的输出。然而,即使改变一个字母,也会产生一个完全不同的哈希。

输入 输出
fun 00C4285274FCC5D6FBA2EE58DAF0D8C2B9B825B68D35D65D0E90A9BB333A51B5
sun 27756F050E14A1CB1C1EE867F0EACE9EA4D9FCB81B8BEE089469F1EBD5FD7B17

哈希是单向函数

从任何给定的输出几乎不可能确定是什么输入。也就是说,用现代技术反转哈希函数几乎是不可能的。确定输入内容的唯一方法是尝试随机字符串,直到找到正确的一个。这种方法被称为暴力破解

使用暴力破解将哈希反转回原始字符串说起来容易做起来难。不存在的计算机能够在合理的时间内找到答案,我们也不太可能构建出能够做到这一点的计算机。即使是目前全球最快的计算机 IBM Summit,它能够每秒进行数万亿次计算,也需要多年时间和惊人的电量来找到单个哈希的答案。

哈希抵抗碰撞

当哈希机制为两个不同的输入产生相同的输出时,就会发生碰撞。理论上,由于唯一哈希的数量有限,但输入的数量却没有限制,哈希碰撞是可能的。然而,发生碰撞的可能性极小。因此,哈希被认为是抵抗碰撞的,但不是免疫的。

比特币使用的 SHA-256 算法输出 256 比特长的哈希(一个由 1 和 0 组成的 256 位长的字符串)。这意味着它可以产生总共 2^256 个唯一的哈希。一旦输入的数量大于所有可能输出的数量,比如说 2^256+1,那么至少有两个输入将会有相同的输出——这就是碰撞。

那么这是否意味着哈希是可被利用的?不,一点也不。2^256 是一个巨大的数字。事实上,巨大甚至无法充分形容它。可以这样想:2^256 大致等于整个可观测宇宙中的原子数量。这个数字的巨大规模意味着发生碰撞的可能性极其微小。

哈希对区块链至关重要

区块链技术结合了来自各个科学领域的一系列重要解决方案。密码学哈希函数作为构建区块链的基础,并利用这些解决方案。难以想象一个完全不使用哈希的去中心化网络。