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

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

安全的溯源存储

这一章节我们将讨论LineageChain是如何提升现有的区块链存储以支持更高效的溯源和篡改追踪。根本性的变化主要在于,我们将普通的Merkle树的叶子节点重新组合成了Merkle DAG。首先,将介绍Merkle DAG的结构,然后会讨论其特性。最后,我们会解释如何将其应用于区块链的执行模型并支持向后溯源追踪。

Merkle DAG

我们用k来表示一个区块链状态的独一无二的标识符,我们想要追踪它的所有的历史状态。我们用v来表示其演变历史中标识状态的唯一版本号。注意,状态版本号是严格递增的。当v更新后,v'一定会比v大。在LineageChain中,我们直接用区块号来表示它的版本号v。s_{k,v}表示状态的值(标识符为k,版本号为v)。s_{k}^{b}表示标识符为k的,并且在区块b前的最新的版本的状态值。在下面的例子中,对于k=Addr1,v=M,s_{k,v}=90。


image.png

定义1:一个标识为tid并且严格递增的交易,读取一系列的输入状态S_{tid}^{i},并且更新了一些列输出状态S_{tid}^{o}。一笔有效的交易需要满足下列属性:

image.png

属性一:一笔交易的所有输出状态的版本号需要一致,因为他们都是被在同样区块里的同样的交易所更新的。
属性二:输入状态的版本号应该严格小鱼输出状态的版本号。因为区块链构成了一个有序的交易组合,输入状态只能被之前的交易所更新。
属性三:对于所有有相同标识符的状态,未来交易的输入版本号不能有更早的版本。这样可以保证任何交易的输入状态必须在执行时保持最新的版本。
属性四:所有的状态更新都是独一无二的。

定义2:状态s的依存关系是输出s的交易的输入状态的子集。

image.png

注意:被prov_helper返回的dep是一读集合的一个子集合。

定义3:状态项E_{s_{k,v}}是一个元组,其中包含当前版本,状态值及其从属状态项的哈希。

image.png

状态项可以独一无二地标识一个状态。在LineageChain中,我们用其对应的哈希来表征每个状态条目。

定义4:在区块b中一些列的最新状态S_{latest,b}被定义为:

image.png

令U_{b}为在区块b中更新的状态。我们可以递归地有U_{b}和S_{latest,b-1}\U_{b}计算出S_{latest,b}。

定义5:X_{b}是基于映射map S_{b}来构建的Merkle 树,这里的S_{b}:

image.png

LineageChain将X_{b}作为状态摘要存储在区块头中。
image.png

(s_{k2,v4}和s_{k3,v4}都是被同一笔交易tid4更新的,但他们的依赖集合是不同的。b区块包含两笔交易tid3,tid4。它的最新的状态包含s_{k1,v3}, s_{k2,v4}, s_{k3,v4},Merkle树就是基于这三个状态而构建的)。

讨论

新的Merkle DAG可以很容易的被整合到现有的区块链索引结构中。具体的,现有的Merkle索引例如MPT把状态直接存储在叶子节点上,但LineageChain中的Merkle DAG将最新版本状态的条目哈希存储在叶子节点上。通过增加一个间接级别,我们维护了三个关系:tamper evidence (篡改证据), incremental update (增量式更新), snapshot(快照),但有增强了遍历DAG的能力,以便于抽取细粒度的溯源信息。

状态项的哈希可以描述状态的整个演化历史。因为这个哈希是被Merkle树索引保护的,用来实现留下篡改证据的功能,状态的历史也会被保护,从而实现篡改留证据的功能。换句话说,我们对溯源增加了完整性保护,但没有对索引结构增加额外的开销。举个例子,假设一个客户想要读取一个特定版本的一个状态,它可以首先读取状态条目爱最新区块的值。这样的读操作可以被执行防篡改验证。接着,用户可以用这个哈希遍历DAG来读取对应的版本值。因为DAG是防篡改的,读取对应版本的值的完整性也被保护。

支持向后追溯

上述DAG的一个问题就是它不支持向后追踪,因为哈希指针只能引用向前的依赖集合。当一个状态更新的时候,这些向前的依赖集合就会永久地建立,这样他们就会属于同一个不变的值的后代。但是,状态可以被未来的交易所读取,向后的依赖集合不能在更新的时候被确定。

我们发现,只有最新状态的前向依赖集合是可变的。一旦状态更新,根据始终读取最新状态的区块链智能合约的执行模型,先前状态版本的前向依赖关系将变为永久性。最后,它们可以被包括在推演历史中。下图为一个例子


image.png

s_{k1,v1}的后向的依赖在状态被更新至s_{k1,v3}的时候确定。这是因为当输出s_{k0,v4}的交易执行的时候,它读取s_{k1,v3}而不是s_{k1,v1}。在LineageChain中,对于每个在最新版本的状态s_{k,v},我们都会为包含s_{k,v}作为依赖的条目的指针建立一个列表。我们把这个列表称为F_{s_{k,v}}。

image.png

当状态被更新至s_{k,v'},v'>v,我们在s_{k,v'}条目中存储F_{s_{k,v}}。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342