我们先来看看如果你将比特币区块链复制到一个USB存储盘中( 现在大约是55GB, 所以仍然可以很容易地复制过去 )会发生什么情况。在将其传递给其他人( 如监管机构 )之前, 你可以如何处理这些信息? 你可以改变数据并且骗过他们吗?
比特币的区块链拥有近400,000个区块。假设你从区块链中200,000(也就是大约一半)的区块中移除一笔交易, 试图假装有一笔付款从未发生。会发生什么?
1. 块的散列失败
监管者(regulator)在接收USB存储器时可以做的第一件事是根据块数据重新计算所有块的哈希值, 并检查提供的块哈希值是否有效并与每个块的内容是否一致。若存在差异, 则意味着块中的交易信息与块的散列值不匹配, 意味着块已被篡改。因此, 为了欺骗监管机构, 你需要重新计算该块的散列, 以使其与修改后的内容保持一致。
2. 链条失效
然而, 这破坏了整条链。请记住, 每个块都包含前一个块的哈希。如果块200,000的散列值发生变化, 则块200,001将引用不再存在的块散列值。块200,001将引用块200,000的 旧散列值, 而不是其 新的散列值。所以区块链破裂, 这很明显失败了。要让区块链不遭到破坏, 你需要在被篡改的块之后重新编译和重新哈希每个块, 替换之前的块哈希指针的内容。
但是, 有一些安全措施可以使重建区块链变得非常困难或不可能发生。这些保护措施分别是基于区块链添加机制和不同规则的区块链, 并且存在两个主要方案: 用于验证工作的公共区块链的目标散列 ; 以及( 一些 )私人区块链的特定签名。
3. 区块链难以重建
对于像比特币这样的公开的证明工作(proof-of-work)区块链, 存在挖矿困难的概念。在比特币中, 只有块散列遵循某个严格的模式, 块才被认为是有效的 -
即散列值必须小于目标数, 通常被描述为“从一定数量的零开始”。有关比特币挖矿的更多细节, 请参阅比特币挖矿简介。
因此, 你不仅需要重新计算块的散列值, 还需要确保重新计算的散列值低于某个数。你需要通过重复调整块内容的另一部分( 称为随机数 )来 重新挖掘块, 直到找到小于目标数的散列值为止。这需要一些重要的计算能力。然后你需要对每个后续块执行此操作。通俗地说, 你需要从该块开始重新挖掘整个区块链。鉴于生成满足条件的有效哈希所需的大量计算工作量, 这将会产生问题, 此外, 链中的区块越早, 你需要做的时间越长, 因为你有更多的区块要去重新挖矿。
对于诸如Multichain的私人区块链, 块添加机制往往有点不同, 在块添加者以随机循环方式轮流添加块的情况下设置规则而非依靠大量的证明工作, 并且每个块需要由块添加者进行数字签名。只有区块链由一组有定义的参与者签署, 区块链才有效且被接受。这意味着为了重新创建区块链, 你需要知道来自其他块添加者的私钥。窃取这些密钥对于工作量证明的哈希来说是一个非常不同的挑战。
小结
如果你做了所有这些, 那么USB存储器上的数据就会在内部保持一致并且看起来像一个有效的区块链。但这只限于对 那些无法对照区块链的其他副本进行检查的人而言。