区块链真的能保证数据的完整性吗? - Bozho


数据的完整性首要目的是保证数据一旦收集,就不会被篡改。那么让我们回顾一下它在实践中是如何工作的。
首先,我们有两个定义两个术语——“防篡改”(有时称为无篡改)和“防篡改”。“防篡改”意味着没有人可以篡改数据,并且始终保证数据结构的状态没有任何修改。另一方面,“防篡改”意味着可以验证数据结构是否存在完整性违规,并且可以知道是否存在修改(更改、删除或回溯条目日期)。因此,通过防篡改结构,您可以证明数据是完整的,但如果不完整,则无法知道原始状态。它仍然是一个非常重要的属性,因为证明数据未被篡改的能力对于合规性和法律方面至关重要。
在所有情况下,区块链都被认为是防篡改的,因为它们以一种足够多的成员拥有数据副本的方式显着分布。如果某个节点修改了该数据,例如过去的 5 个区块,它必须向其他所有人证明这是该区块的正确默克尔根。为了做到这一点,您必须拥有超过 50% 的网络容量(这比仅仅拥有它们更复杂),但它仍然是可能的。在某种程度上,防篡改=篡改证据+分布式数据。
区块链通常建立在几个主要的加密原语之上:加密哈希、哈希链、默克尔树、加密时间戳和数字签名。它们都在完整性保证中发挥作用,但最重要的是 Merkle 树(及其所有变体,如 Patricia Merkle 树)和哈希链。最初的比特币论文将区块链描述为基于多个 Merkle 树(形成单个块)的根的哈希链。一些区块链依赖于一个单一的、不断增长的默克尔树,但我们不讨论具体的实现细节。
但是区块链的许多实际应用依赖于私有网络,为一个或多个实体提供服务。它们通常基于权威证明,这意味着无论谁有权访问一组私钥,都可以控制网络同意的内容。那么让我们回顾一下这两种情况:

  • 多个所有者——在多个节点所有者的情况下,他们中的几个可以串通来重写链。共谋可能基于共同的商业利益(例如,在供应链中,多个成员可能与生产者联手报告失真的数据),也可能基于安全妥协(例如,多个成员被同一组黑客攻击)。在这种情况下,剩余的节点所有者可以备份原始数据,但要确定其余节点是否是恶意的,或者更改是否是业务逻辑的合法部分,则需要进行复杂的调查。
  • 单一所有者——单一所有者可以拥有一个很好的 Merkle 树或哈希链,但有权访问底层数据存储的管理员可以重新生成整个链,它看起来是合法的,但实际上它会被篡改。在多个管理员之间拆分访问权限是一种方法(或者让他们访问单独的节点,但没有人可以访问大多数),但他们经常一起喝啤酒,再次勾结是可能的。但更重要的是,您无法向第三者证明您自己的员工没有在管理层的命令下串通以掩盖一些轨道,从而向监管机构展示更好的情况。

在单一所有者的情况下,您甚至没有防篡改结构——链可以完全重写,没有人会理解这一点。在多个所有者的情况下,这取决于实现。非共谋方会有修改记录,但要证明哪一方“被骗”几乎是不可能的。篡改证据只是部分实现,因为您无法证明谁的数据被修改,谁的数据没有(您只知道其中一个副本篡改了数据)。
为了在这两种情况下实现防篡改结构是使用证据锚定tamper-evident ,据的检查点需要外部锚定,以便清楚地记录不同时间点的链状态。在区块链之前,推荐的方法是将其打印在报纸上(例如作为广告),并且由于它的发行量足够大,没有人可以收集所有报纸并修改已发布的检查点哈希。这个发布的哈希要么是 Merkle 树的根,要么是哈希链中的最新哈希。不断增长的 Merkle 树将允许验证一致性和包含性证明
当我们有数据的电子分发时,我们可以使用公共区块链来定期锚定我们的内部区块链,以实现适当的防篡改数据。例如,我们在 LogSentinel 就是这样做的——我们允许将最新的 Merkle 根和最新的哈希链发布到以太坊。那么即使那些有权访问底层数据存储的人设法修改和重新生成整个链/树,也不会与公开宣传的值匹配。
如果我们想实现防篡改,我们只需要拥有多个数据副本,所有副本都受到防篡改保证。就像在公共网络中一样。但是公共网络提供的是一个层,我们可以信任它为我们提供实现本地篡改证据的必要部分。当然,在硬件方面,只写存储(WORM,一次写入,多次准备)更容易。它的问题在于它很昂贵,而且你不能重复使用它。它不太适用于需要防篡改的短期数据的用例。
因此,总而言之,为了获得适当的完整性保证以及证明单所有者或多所有者私有区块链中的数据未被篡改的能力,我们必须公开发送任何结构的最新哈希值使用(链或树)
否则,我们只会通过集成一项复杂的技术而使我们的生活复杂化,而没有获得它可以带来的真正好处——证明我们数据的完整性。