Redactable Blockchain Protocols with Instant Redaction(具有即时编辑功能的可编辑区块链)

这篇文章是今年放在IACR Cryptol.ePrint Arch上的一篇区块链相关论文,总体质量还行,虽然感觉有些不足,但也有有很多学习的地方。

主要内容是:在许多场景下,区块链的immutability(不可变性)同样带来了许多弊端。例如,存储一些非法数据在链上将带来诸多挑战。因此,本文设计了一种可编辑区块链构造的通用协议,该协议在无授权设置下可即时编辑,并在基于PoS和PoW共识区块链进行了实例化。最后,为编辑协议开发了一个概念验证(Proof of Concept, PoC)实现和应用该协议,实验表明较高的效率,引起的开销也很小。

下面将大致按照文章结构内容,并结合自己读后的学习笔记进行梳理和归纳,可能会有整理不当的地方,仅代表个人理解,详细内容还是建议看原文!

  • 原文链接:Redactable Blockchain Protocols with Instant Redaction

长文警告,本篇大约1.6w个字,谨慎阅读!

文章目录预览

  • Redactable Blockchain Protocols with Instant Redaction(具有即时编辑功能的可编辑区块链)
    • 文章主要贡献:
  • 一、写作背景
  • 二、 主要内容
    • 2.1 传统(不可变)区块链
      • 2.1.1 基本特征概述:
      • 2.1.2 三个重要的安全属性(后面安全性证明需要用到):
    • 2.2 可编辑区块链协议
      • 2.2.1 可编辑区块链概述:
      • 2.2.2 具体步骤:<font color=red size=4>(此处根据自身的理解,本人想象的画了一张步骤图,供参考)
      • 2.2.3 可编辑区块链定义
    • 2.3 安全分析(根据自身理解,本人大概描绘了三个证明的思想)
      • 2.3.1 证明 ∏ideal\prod_{ideal}∏ideal​满足可编辑common prefix。
      • 2.3.2 证明 ∏ideal\prod_{ideal}∏ideal​满足chain quality。
      • 2.3.3 证明∏ideal\prod_{ideal}∏ideal​满足chain growth。
    • 2.4 实例化
      • 2.4.1 可编辑PoS区块链
      • 2.4.2 可编辑PoW区块链
    • 2.5 实现评估与分析
      • 2.5.1 实验一:分析编辑的vote和proof开销
      • 2.5.2 实验二:评估编辑proof如何影响共识的性能
      • 2.5.3 实验三:验证已编辑区块链的额外成本
  • 三、结论与思考
    • 3.1 本文总结
    • 3.2 我的思考

文章主要贡献:

  • 1)具有即时编辑功能的区块链通用构造方法:

    • 第一步,利用通用函数CmtCmtCmt和VerfiyCmtVerfiyCmtVerfiyCmt来随机选举委员会,以确保足够比例的委员会成员是诚实的;
    • 第二步,每个委员的候选编辑区块Bj∗B^*_jBj∗​的哈希上签名进行投票,若>1/2>1/2>1/2的投票通过,则旧区块BjB_jBj​被Bj∗B^*_jBj∗​取代。
  • 2)基于仿真的可编辑区块链的安全性分析:
    • 首次定义了可编辑区块链的理想化功能Ftree\mathcal{F}_{tree}Ftree​,它实时跟踪所有有效链;
    • 并证明任何real-world协议中成功的攻击都可规约到ideal-world的Ftree\mathcal{F}_{tree}Ftree​模型中。
  • 3)实例化和性能评估:
    • 通过在基于PoS和PoW共识区块链上的通用函数CmtCmtCmt和VerifyCmtVerifyCmtVerifyCmt的具体实例化,证明了本文的方案构造是通用的。

一、写作背景

论文名称 作者 / 单位 来源 年份 简要内容
Redactable Blockchain Protocols with Instant Redaction Jing Xu et.al (Institute of Software, Chinese Academy of Sciences) IACR Cryptol.ePrint Arch 2021 本文设计了一种可编辑区块链构造的通用协议,该协议在无授权设置下可即时编辑。

(1)首先,要理解为什么要有可编辑区块链的出现?区块链的内容为什么有编辑需求,该如何进行编辑和审查?

论文中提到,由于任何人都可以在无授权设置(可以理解为是公有链,没有访问限制)的区块链中进行写入(上传)数据操作,一些恶意的用户久可能会滥用发布任意的交易消息[40]\textcolor{blue}{[40]}[40]。

  • 区块链账本上存储的数据可能是敏感的、有害的或非法的,如侵犯知识产权的资料[28]\textcolor{blue}{[28]}[28]、儿童性侵照片[34]\textcolor{blue}{[34]}[34],它们可能会永远影响人们的生活,并阻碍更广泛的区块链应用。
  • 欧盟在2018年发布了数据保护条例(GDPR)[7]\textcolor{blue}{[7]}[7]不再与比特币和以太坊等当前区块链兼容[6]\textcolor{blue}{[6]}[6]记录个人资料。特别是,GDPR将“被遗忘权”规定为关键的数据主体权利。
  • 另外,臭名昭著的DAO漏洞被利用时,以太坊的DAO合约[31]\textcolor{blue}{[31]}[31]的缺陷导致360w以太币(约7900w美元)被盗,必须通过硬分叉“回滚”来解决。

(2)其次,目前可编辑区块链的研究现状是怎样的?一些相关工作主要做了那些方面?

论文中提到,有一些不用编辑的方法就是发起硬分叉,这本质上要求所有社区成员进行投票。这样的方法会带来分裂社区的风险,且非常昂贵和缓慢,那么就有几篇可编辑区块链的研究工作。

  • 在2017年,Ateniese等[12]\textcolor{blue}{[12]}[12]首次引入了可编辑区块链的概念,该方案使用了带陷门的变色龙函数(Chameleon Hash)(变色龙哈希函数的详细介绍)来代替了内层的普通抗碰撞哈希函数,而外层还是普通的哈希函数。带陷门的用户可以计算任意输入数据的哈希碰撞,而不知道陷门的用户则变色龙哈希与传统哈希函数一样具有抗碰撞性。该方案从而可以不改变外层哈希函数H、不破坏哈希链路完整性的情况下,实现对区块内容的修改。
  • 在2019年,Derler等[20]\textcolor{blue}{[20]}[20]提出了一种基于策略的变色龙哈希函数的细粒度可控编辑机制,任何拥有足够特权满足策略的人都可以找到给定哈希的碰撞。他们的解决方案关注于授权设置,而在非授权设置中,没有单个可信实体,用户可以随时加入和离开系统,因此在共享陷门密钥时,他们的解决方案将面临可伸缩性问题。
  • 在2017年,Puddu等[39]\textcolor{blue}{[39]}[39]提出了μ\muμ链,交易发送方可对交易不同版本加密,用解密密钥在矿工之间秘密共享。收到编辑请求时,先根据交易发送方制定的编辑策略进行检测,然后通过执行多方计算协议算出相应的解密密钥,最后对该密钥解密。然而,建立编辑策略的恶意用户可能会逃避编辑,甚至会由于交易之间的影响而破坏交易的稳定性。此外,μ\muμ链采用多方计算协议重建解密密钥也面临可扩展问题。
  • 在2019年,Deuber等[21]\textcolor{blue}{[21]}[21]在无权限设置中提出了第一个可编辑区块链协议,该协议不依赖繁重的加密协议或额外的信任假设。一旦用户提出修订,协议就开始一个基于共识的投票期,只有在获得足够的投票批准修订后,版本才在区块链上执行。每个用户都可查看链上的投票数来验证一个编辑填是否被批准。
  • 最近,Thyagarajan等[42]\textcolor{blue}{[42]}[42]提出了一个称为Reparo的通用协议,用于在任何区块链上执行编辑,其中区块结构通过引入外部数据结构来存储区块内容保持不变。然而,他们的投票周期很长,实例化中需要1024个连续的区块,大约7天时间来确认和发布一个编辑区块。

最后,该论文依据上面的分析,提出设计了一种具有即时编辑的可编辑区块链协议!

该篇论文提出在无授权设置中,让受信任的一方持特定的陷门来修改链区块似乎是不合理的。因此,需要选取一个委员会共同决定。且论文指出编辑至少会与委员会规模大小T和底层区块链区块生成时间t呈线性关系。委员会规模要大,确保诚实的委员居多。论文的目标实现即时的可编辑功能,这意味着编辑链要像底层链一样快。

下面我们看下协议的具体设计。

二、 主要内容

2.1 传统(不可变)区块链

2.1.1 基本特征概述:

  • nnn个参与方P1,P2,...,PnP_1,P_2,...,P_nP1​,P2​,...,Pn​拥有公私钥对(pki,ski)(pk_i, sk_i)(pki​,ski​)
  • slots:表示协议执行被划分的时间单位(记住,在本文中挺重要的,方便理解)
  • chainchainchain:表示链,由一个个区块组成,即chain:={B0,B1,B2,...Bm}chain:=\{B_0,B_1,B_2,...B_m\}chain:={B0​,B1​,B2​,...Bm​}
  • Bj:=(headerj,dj)B_j:=(header_j, d_j)Bj​:=(headerj​,dj​):表示区块;
  • headerj=(slj,stj,G(dj),πj)header_j=(sl_j, st_j, G(d_j), \pi_j)headerj​=(slj​,stj​,G(dj​),πj​):表示区块头信息
  • djd_jdj​:表示区块数据
  • slj∈{sl1,...,slR}sl_j\in \{sl_1,..., sl_R\}slj​∈{sl1​,...,slR​}:表示slots的序号
  • stjst_jstj​:表示前一个区块头的哈希值,即H(headerj−1)H(header_{j-1})H(headerj−1​)
  • G(dj)G(d_j)G(dj​):表示区块数据的状态(实验中表示区块数据的Merkle root)
  • πj\pi_jπj​:表示包含区块的一些特殊头数据(例如在PoS中,表示在生成区块slot 领导者下用密钥计算出的签名(slj,stj,G(dj))(sl_j,st_j,G(d_j))(slj​,stj​,G(dj​)),在PoW中,表示谜题的nonce)

2.1.2 三个重要的安全属性(后面安全性证明需要用到):

  • 1)Common prefix(公共前缀):要求所有诚实参与方的链是相同的,确认后无法编辑;
  • 2)Chain quality(链质量):限制敌手的贡献,即大多数诚实方贡献;
  • 3)Chain growth(链增长):有效性,随时可以上传数据上链。

2.2 可编辑区块链协议

2.2.1 可编辑区块链概述:

  • 链chain更新:表示为chain∗=chain∣∣B∗chain^*=chain||B^*chain∗=chain∣∣B∗,区块结构与不可变区块链类似,区块头信息增加了一个ibibib,即headerj=(slj,stj,G(dj),ibj,πj)header_j=(sl_j,st_j, G(d_j),ib_j,\pi_j)headerj​=(slj​,stj​,G(dj​),ibj​,πj​).
  • Bj∗B^*_jBj∗​:表示第jjj个候选编辑区块。
  • ibibib:表示区块的原始状态。为了维护编辑区块和它相邻区块的关系,将ibibib代表区块的初始和未编辑状态。例如,若在编辑区块B=(header,d)B=(header, d)B=(header,d)中还是原区块数据d0d_0d0​,则ib=G(d0)ib=G(d_0)ib=G(d0​),其中header=(sl,st,G(d),ib,π)header=(sl,st,G(d),ib,\pi )header=(sl,st,G(d),ib,π)。

Definition3.1Definition 3.1Definition3.1(编辑策略RP\mathcal{R} \mathcal{P}RP):如果编辑区块B∗B^*B∗在投票期限内,投票数大于阈值(根据环境不同可动态调整),则表示在序号slslsl的slot上的编辑区块B∗B^*B∗满足编辑策略RP\mathcal{R} \mathcal{P}RP,即RP(chain,B∗,sl)=1\mathcal{R} \mathcal{P}(chain, B^*,sl)=1RP(chain,B∗,sl)=1。

2.2.2 具体步骤:(此处根据自身的理解,本人想象的画了一张步骤图,供参考)

  • 1)提出编辑请求:若参与方PiP_iPi​想将编辑区块Bj∗=(headerj∗,dj∗)B^*_j=(header^*_j,d^*_j)Bj∗​=(headerj∗​,dj∗​)上链,先将Bj∗B^*_jBj∗​编辑请求广播至网络,其中headerj∗=(slj,stj,G(dj∗),ibj,πj)header^*_j=(sl_j,st_j,G(d^*_j),ib_j,\pi_j)headerj∗​=(slj​,stj​,G(dj∗​),ibj​,πj​),若他想移除BjB_jBj​的所有数据,则dj∗d^*_jdj∗​是可以是空数据。
  • 2)更新编辑池:从网络中接收到Bj∗B^*_jBj∗​后,每个参与方PiP_iPi​首先验证Bj∗B^*_jBj∗​是否是一个有效的候选编辑区块,若是,则将其存储在自身的编辑池EP\mathcal{E} \mathcal{P}EP中。每个编辑池EP\mathcal{E} \mathcal{P}EP中的候选编辑区块都有一个有效期tpt_ptp​。在每个新slot的开始,每个参与方PiP_iPi​试图更新自己的编辑池EP\mathcal{E} \mathcal{P}EP。特别地
    • PiP_iPi​检查 Bj∗B^*_jBj∗​有没有过期,如果过期了则删除它;
    • PiP_iPi​计算编辑策略RP(chain,Bj∗,slj)\mathcal{R} \mathcal{P}(chain, B^*_j,sl_j)RP(chain,Bj∗​,slj​),如果输出1(感觉应该是输出0吧),则PiP_iPi​删除Bj∗B^*_jBj∗​。
  • 3)对Bj∗B^*_jBj∗​投票:对于在EP\mathcal{E} \mathcal{P}EP中的每个候选编辑区块Bj∗B^*_jBj∗​,PiP_iPi​检查他在当前投票期间是否有投票权(这点没理解,他自己检查自己吗?),这是由Cmt(chain,[sl′ω]∗ω,Pi,para)Cmt(chain, [\frac{sl'}{\omega}]*\omega, P_i, para)Cmt(chain,[ωsl′​]∗ω,Pi​,para)([ ] 代表向下取整,公式不会打…),其中sl′sl'sl′是当前slot,[sl′ω]∗ω[\frac{sl'}{\omega}]*\omega[ωsl′​]∗ω表示当前投票期间的第一个slot。如果输出(c,proof)(c, proof)(c,proof)且c≠0c\neq 0c=0,PiP_iPi​广播(c,proof)(c, proof)(c,proof)并附上H(Bj∗)H(B^*_j)H(Bj∗​)的签名sigsigsig,即投票。
  • 4)提出新区块:如果他的编辑池是空的,则序号sl′sl'sl′的slot中的leader以不可变链相同方式创建一个区块并广播至chain。此外,对于在编辑池中的候选编辑区块Bj∗B^*_jBj∗​,leader试图用子协议collectVotecollectVotecollectVote(这个算法后面会介绍)收集并验证投票期间内Bj∗B^*_jBj∗​的选票。如果在sl′sl'sl′slot中的collectVotecollectVotecollectVote返回vote-proof,则leader将其添加到他的区块数据中,创建一个新区块并广播到chain。
  • 5)编辑区块:对于在编辑池EP\mathcal{E} \mathcal{P}EP中的每个候选区块Bj∗B^*_jBj∗​,用户检查是否RP(chain,Bj∗,slj)=1\mathcal{R} \mathcal{P}(chain, B^*_j,sl_j)=1RP(chain,Bj∗​,slj​)=1,如果是,则将链上的BjB_jBj​替换成Bj∗B^*_jBj∗​,并从EP\mathcal{E} \mathcal{P}EP中删除Bj∗B^*_jBj∗​。

2.2.3 可编辑区块链定义

此小节,作者定义了几个算法,包括validateBlockvalidateBlockvalidateBlock、validateChainvalidateChainvalidateChain和validateCandvalidateCandvalidateCand,以及collectVotecollectVotecollectVote。

  • 1) 有效区块(AlgorithmAlgorithmAlgorithm 1):首先根据系统规则检查区块B包含的数据的有效性,然后通过合适的函数检查leader的有效性,最后用leader的公钥验证签名π\piπ或验证PoW中谜题随机数π\piπ。
  • 2) 有效链(AlgorithmAlgorithmAlgorithm 2):为了验证区块链chain,算法2首先检查每个区块BjB_jBj​的有效性,然后检查它与前一个区块Bj−1B_{j-1}Bj−1​的关系,它有两种情况,取决于Bj−1B_{j-1}Bj−1​是否是一个编辑过的区块。如果Bj−1B_{j-1}Bj−1​已编辑完成(即stj≠H(headerj−1)st_j\neq H(header_{j-1})stj​=H(headerj−1​),它的检查取决于是否满足编辑策略RP\mathcal{R} \mathcal{P}RP。当且仅当算法2输出1时,我们就说chain是有效的链。
  • 3) 有效候选编辑区块(AlgorithmAlgorithmAlgorithm 3):为了验证区块链chain上第jjj个区块的候选编辑区块Bj∗B^*_jBj∗​,算法3首先检查Bj∗B^*_jBj∗​的有效性,然后检查Bj−1B_{j-1}Bj−1​和Bj+1B_{j+1}Bj+1​的链接关系,其中与Bj+1B_{j+1}Bj+1​的链接是“old“(如stj=H(slj,stj,ibj,ibj,πj)st_j=H(sl_j,st_j,ib_j,ib_j,\pi_j)stj​=H(slj​,stj​,ibj​,ibj​,πj​))。当且仅当算法输出1时,我们就说Bj∗B^*_jBj∗​是一个有效的候选编辑区块。

下面将介绍collectVotecollectVotecollectVote负责收集和验证在(sl,sl+ω−1)(sl, sl+\omega -1)(sl,sl+ω−1) slots内的选票,并将其存储在缓冲器msgsmsgsmsgs中。大致的步骤如下:

  • 通过编辑策略RP\mathcal{R} \mathcal{P}RP检查H(Bj∗)H(B^*_j)H(Bj∗​)的投票数,如果它满足编辑策略,则停止收集,否则开始验证投票;
  • 用投票人的公钥验证H(Bj∗)H(B^*_j)H(Bj∗​)上的签名,并由VerifyCmt(chain,sl,c,proof,para′)VerifyCmt(chain, sl, c, proof, para')VerifyCmt(chain,sl,c,proof,para′)确认投票人投票的正确性和投票数ccc;
  • 算法生成一个对所有有效签名SIGSIGSIG的聚合签名asigjasig_jasigj​,聚合相关的证明PROOFPROOFPROOF,并返回它们;
  • 聚合签名可以降低区块链的通信复杂性和存储开销。

2.3 安全分析(根据自身理解,本人大概描绘了三个证明的思想)

除了common prefix之外,可编辑区块链的安全属性与不可变区块链的安全属性基本相同,下面将依次证明这三个属性的安全性。

由于编辑操作可知,本协议本质上已经不满足common prefix的原始定义(上面2.1.2节).具体来说考虑到参与方P1P_1P1​和P2P_2P2​分别在sl1,sl2sl_1, sl_2sl1​,sl2​ slot上是诚实的,且sl1<sl2sl_1<sl_2sl1​<sl2​。对于一个候选区块Bj∗B^*_jBj∗​替换原始区块BjB_jBj​,后者投票结果被公布在slslsl slot中,且sl1<sl<sl2sl_1<sl<sl_2sl1​<sl<sl2​。在chainP1sl1(view)chain^{sl_1}_{P_1}(view)chainP1​sl1​​(view)中还没有提出编辑请求,但可能已经在chainP2sl2(view)chain^{sl_2}_{P_2}(view)chainP2​sl2​​(view)中生效。对于这样的结果,在chainP1sl1(view)chain^{sl_1}_{P_1}(view)chainP1​sl1​​(view)中的原始BjB_jBj​保持不变,但它在chainP2sl2(view)chain^{sl_2}_{P_2}(view)chainP2​sl2​​(view)中被替换成为候选Bj∗B^*_jBj∗​。

为此,引入一个可扩展协议,称为可编辑common prefix,并考虑每个编辑操作的效果,它适合于可编辑区块链。如下定义:

Definition4.1Definition 4.1Definition4.1:(可编辑common prefix)如果对于所有(A,Z)(\mathcal{A},\mathcal{Z})(A,Z),存在一个可忽略的函数neglneglnegl,使得对每个足够大的λ∈N\lambda \in Nλ∈N和每个k≥k0k\geq k_0k≥k0​都成立,我们就说该区块链协议∏\prod∏满足 k0k_0k0​-可编辑common prefix:
Pr[view←EXEC∏(A,Z,λ):redactprefixk(view)=1]≥1−negl(λ)Pr[view\leftarrow EXEC^{\prod}(\mathcal{A},\mathcal{Z},\lambda):redactprefix^k(view)=1]\geq 1-negl(\lambda)Pr[view←EXEC∏(A,Z,λ):redactprefixk(view)=1]≥1−negl(λ)
其中AAA表示敌手,ZZZ表示环境。

接下来,根据以上这个定义,其证明路线为:

  • 1)先考虑ideal-world协议∏ideal\prod_{ideal}∏ideal​可以访问一个理想化功能Ftree\mathcal{F}_{tree}Ftree​,并满足三个安全属性。

  • 2)再展示了real-world协议安全地模拟了∏ideal\prod_{ideal}∏ideal​。(这里就不再叙述,建议看原文)

2.3.1 证明 ∏ideal\prod_{ideal}∏ideal​满足可编辑common prefix。

证明:假设存在Bj∗B^*_jBj∗​的prefix与其他诚实方的链不相等,它必须根据ideal协议获得足够选票,则编辑策略RP\mathcal{R} \mathcal{P}RP得到满足,即∏ideal\prod_{ideal}∏ideal​满足k0k_0k0​-可编校common prefix。

2.3.2 证明 ∏ideal\prod_{ideal}∏ideal​满足chain quality。

证明:假设将BjB_jBj​替换成恶意的Bj∗B^*_jBj∗​,敌手增加链中恶意区块的比例,以打破chain quality属性。然而根据ideal协议,编辑区块只当票数超过敌对委员数时才被采用,即∏ideal\prod_{ideal}∏ideal​满足chain quality。

2.3.3 证明∏ideal\prod_{ideal}∏ideal​满足chain growth。

证明:根据ideal协议,任何编辑操作不改变链长度(不删除区块),且新区块上链不受投票影响,即∏ideal\prod_{ideal}∏ideal​满足chain growth。

2.4 实例化

假设S为系统总权益,T为投票委员会的预期权益数,委员会中诚实用户的权益至少为n。委员会成员只在每个投票期间的第一个slot 上选出(sl,sl+w−1)(sl, sl+w-1)(sl,sl+w−1)之间的slslsl,可以根据具体网络环境设置www,保证在www slots之后所有用户都能以更大概率收到选票。

2.4.1 可编辑PoS区块链