挑战二:防止交易信息造假 如果有人一个月前进行了一笔比特币交易,现在又反悔了,想悄悄撤回交易,比特币这一去中心化系统里又缺少权威的管理者,怎么才能让这种信息造假的阴谋无法得逞呢?这就要用到哈希算法。 哈希算法 哈希算法可以用于验证数据的真实完整性。任何信息可以通过哈希函数运算得到一个哈希值,但是原始信息发生丝毫改变都会让得到的哈希值变得完全不一样。 假设星爵想将「12345」这串数字传给格鲁特,又担心被灭霸中途截获,篡改信息。他可以算出这串数字哈希值:FE100DDA6D28B2280B34FC228ADAB42E,然后将这串数字和他的哈希值同时传给格鲁特。格鲁特在得到这串数字后同样进行哈希运算,看看得到的哈希值跟星爵告诉他的是否一致。如果一致,说明格鲁特和星爵拥有的原数字是一样的,这串数字在传输过程中没有遭到篡改或发生损坏。如果灭霸悄悄干预了数字传输过程,把原数字串改成了「12346」,再把错误数字传给格鲁特,格鲁特算出的哈希值就会是:1761420899A8F0B731A2EE56A6F71567,与星爵给他的截然不同,自然就会发现数据被篡改了。 区块链环环相扣 比特币中,固定时间段内的交易会被打包成一个区块。每个区块里都储存着前一个区块的哈希值。这些区块通过哈希值前后相连,形成链条状结构,也就是常说的区块链。 下图中 3 个区块记录了交易 1 到交易 9 的信息。 如果删除掉第一个区块中的交易 3,那第 2 个区块中的哈希值就会发生变化,证明第 1 个区块中的交易信息被篡改了。 那可不可以尝试修改第 2 个区块,让它储存的哈希值呼应被篡改后的第 1 个区块中的信息呢?这也行不通。因为修改第 2 个区块中的信息后,第 3 个区块中的哈希值又无法与第 2 个区块的信息对应了,让人一眼就能知道第 2 个区块被篡改了。 由此可见,区块链上的信息是不可篡改的。随便改动一个区块中的信息,就会使其与后一个区块中的哈希值产生矛盾。只有逐个修改之后每个区块中的信息才能掩护最初这个信息篡改动作,这样一来原区块链的信息就会被彻底改变,相当于产生了一条新链。 挑战三:确定交易记录的可靠性和权威性 假设真有人篡改了每个区块中的信息,创建了一条新链,我们应该选择相信新链还是旧链呢?如何才能确定两者的可靠性和权威性呢? 工作量证明(Proof of Work) 这就要用到工作量证明。电脑会将前面讲过的哈希值转换成一串由「0」和「1」构成的数字: 0010111011110100000001000001101010010010001011101111100001001010 我们可以规定只有哈希值以 0 开头的区块才能上链,这样就有 50% 的概率得到一个符合要求的区块。 0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 同理,我们若规定只有哈希值以「00」开头的区块才能上链,概率就是 25%。 00XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 如规定哈希值必须以 32 个「0」开头的区块才能上链,那概率大概就只有 40 亿分之一了。 00000000000000000000000000000000XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 比特币区块链也设置了这样的规定。但是链上每个区块的哈希值都是恒定不变的,如何确保在输入固定信息的情况下能得到一个符合规定的哈希值呢?这就需要在每个区块中随机加入任意一个数值,也称为「随机数」(nonce)。 进行哈希运算的时候要将随机数与区块中的数据相结合。比特币区块链中遍布全世界的计算机要从大量的随机数中找到那个与现有区块结合后能算出以特定数量「0」开头的哈希值的随机数,才能让这个区块上链。这个寻找随机数的过程就是工作量证明。 这个过程会消耗大量算力,完成时间也难以估量。在比特币区块链中,平均 10 分钟会产生一个新区块。但由于该区块链中的整体算力水平一直在不断提高,为了增加找到随机数的难度,比特币区块链也在不断增加规定哈希值开头部分 「0」的个数。 最长链原则 工作量证明这一规则有效限制了新区块产生的速率,那区块数量越多、长度越长的链存在的时间也就越久。因此,个人是不可能制造比官方比特币区块链更长的链的,除非这个人拥有的算力超过该系统中其他所有人算力的总和。 基于以上原因,当系统中出现多条链时,比特币用户只认可区块数量最多,存在时间最长的这条链,并相信这条链上的信息是权威可靠的。 区块链潜在的应用场景 除了比特币,区块链还有哪些应用前景? 我们在上文中从 3 方面简要解释了比特币区块链的工作原理: (责任编辑:admin1) |