区块链技术是多项技术创新紧密连结的复杂网络。其中最重要的一个部分就是哈希运算。
哈希是一种密码学功能,它将任何长度的字符序列转换为固定长度的独特输出,即哈希。这意味着不管输入的符号组合是什么,它们总是会产生一串独一无二的数字和字符。
比特币的哈希看起来像这样:
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 大致等于整个可观测宇宙中的原子数量。这个数字的巨大规模意味着发生碰撞的可能性极其微小。
区块链技术结合了来自各个科学领域的一系列重要解决方案。密码学哈希函数作为构建区块链的基础,并利用这些解决方案。难以想象一个完全不使用哈希的去中心化网络。