细粒度的、安全高效的基于区块链数据溯源系统 Fine Grain

2019-05-13  本文已影响0人  SeanC52111

论文作者 Pingcheng Ruan, Gang Chen, Tien Tuan Anh Dinh, Qian Lin, Beng Chin Ooi

简介

区块链实现了一个可以防篡改的账本,可以用来记录交易信息(transactions)进而改变一些存储的全局状态。整个系统记录所有的状态演化的历史信息。对于这些历史信息的管理,通常被称作数据的溯源(data provenance or lineage)。在传统的数据库领域,这一方向已经被广泛研究。但在区块链中对历史数据进行检索,目前的方法只能依赖于分析所有的交易信息。这样的方法适用于大规模的离线分析,而对于在线交易信息的处理是不合适的。
这篇论文实现了LineageChain系统,支持细粒度的、安全高效的区块链数据溯源功能。LineageChain通过简单的API将溯源信息传给给智能合约,从而实现了一类新的区块链应用程序,其执行逻辑依赖于运行时的产生的溯源信息。在智能合约执行的过程当中,LinageChain会获取到溯源信息,然后高效地存储在Merkle Tree当中。LineageChain提供了基于跳表索引的结构来支持更加高效率的数据溯源的检索。整个系统基于Hyperledger来实现。存储系统基于ForkBase实现。论文对LineageChain的性能做出了分析,证实其的高效、安全、需要更少的存储代价等诸多优势。

背景

区块链影响着很多产业,比如金融业、供应链、医疗等。和传统数据管理系统相比,产业界更多看重区块链所具备的两点优势:1) 区块链为一个去中心化系统,这使得互相不信任的人可以共同维护一个共同认可的数据而不需要相信一个可信第三方。2) 区块链提供了对于所存储的交易信息的数据完备性保护(不可篡改)。换言之,区块链保证了完整的交易历史信息的安全性。

对于数据历史的管理,或是数据溯源,已经被数据库方向广泛研究。很多系统也支持了数据溯源。在现有的区块链系统中,可以支持粗粒度的数据溯源功能。进一步讲,区块链可以被视作存有许多的状态(state,并已知其初始状态),每一笔交易信息都会将现有状态更新至新的状态。对于历史状态的演化可以通过对所有交易信息的重放来安全地、完整地重新构建出来。这样的重新构建可以被离线分析完成。但在智能合约执行的过程当中,没有任何溯源信息可以被智能合约使用。换言之,智能合约不可以访问在区块链存储的历史数据状态,从而做到数据溯源。缺乏对于运行时的细粒度的数据溯源功能限制了为了实现商务逻辑对智能合约的使用。

考虑下面这个智能合约的例子


A smart contract that manages for token management

这个智能合约包含一个方法,可以将一部分代币从一个账户转账到另一个账户。假设用户A想要将一部分代币转给B,转账条件基于B的过去几个月的历史账户余额。例如,只有B的每日平均账户余额超过t的时候A才会转账给B。使用现有的智能合约目前不能简单实现这一操作。要解决这一问题,A需要首先查询然后重放有关B的所有历史交易数据,然后基于得到的结果决定是否发起Transfer这笔交易。除去在与区块链网络多次交互所带来的性能开销的缺点,这一做法实际上并不安全:它不能实现交易的可串行化。假设A想要基于B的历史余额发起Transfer交易tx,但在tx被区块链网络认可前,另一个可以使B的余额小于t的交易被区块链认可。这样的后果就是当tx过后被认可,它会基于一个旧的状态。这样的结果会违反最初设定的商业逻辑。在区块链中,违反可串行化会导致用户严重的财产损失。

概念介绍

区块链系统

由多个互相不信任的节点构成。现有的区块链可大致分为公有链和私有链。对于前者,任何节点都可以加入或离开网络。对于后者,加入与否被严格限制。一个节点必须经过认证才会被基于加入网络的权利。

区块的验证算法

首先根据PoW验证Nonce的正确性。如果是确定性的公式算法,这一步可以跳过。接下来查看存储的交易信息没有被篡改,根据验证TransactionDigest来判断。再重新执行包含的交易,之后节点可以检查结果的状态是否和StateDigest匹配。如果都验证通过,新的状态可以被提交到区块链存储。否则状态就会被回滚到之前的状态。

状态的组织(State Organization)

对于区块链来说最重要的特点就是保障数据的完备性,这意味着其存储的全局状态必须保证防篡改。上述的区块验证算法对于区块链的安全至关重要。算法需要访问所存有状态的所有历史快照(history snapshots),同时还要保证可以批量的更新状态。这些需求给设计用于组织区块链状态的索引结构带来了新的挑战。特别的,传统的数据库索引比如B+树不能被直接使用。接下来我们讨论有关设计索引的需求。

现有的区块链系统使用基于Merkle结构的索引。进一步讲,以太坊Ethereum平台使用Merkle Patricia Trie (MPT)索引结构,为Merkle结构和前缀树的结合体。Hyperledger使用Merkle Bucket Tree (MBT)。在Merkle树中,父节点的哈希值是根据子节点哈希值算出的。根节点代表了整个数据内容的唯一标识符。验证完备性的证明可以快速的通过Merkle树来生成而不需要读取整个数据。所以,Merkle树符合第一个要求。这一结构同样适合做增量更新(第二点要求),因为只有在更新中被影响的节点才需要发生变化。为了支持高校的快照,在Merkle树更新时要递归化地在更新路径上生成新的节点。新的根节点可以作为新的快照的索引,其可以被添加到区块头中。

LineageChain的概括

给定一个智能合约,LineageChain支持更加细粒度的、安全的、高效的数据溯源。智能合约可以实现一个helper方法来定义对应在合约被调用时需要被记录的数据溯源信息。默认的情况下,所有的状态的读写依赖都会被记录。获取到的信息会被存储到一个区块链存储上来保证高效的数据追踪和防止篡改的数据溯源。系统有在存储结构之上构建一个基于跳表的索引结构以支持更加快速的数据溯源查询。这些对于区块链存储的改变对于合约开发者来讲是不可见的。

上一篇 下一篇

猜你喜欢

热点阅读