最新论文笔记(+15):Redactable Blockchain Protocols with Instant Redaction /IACR Cryptol.ePrint Arch 2021

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

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

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

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

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

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

一、写作背景

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

(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 基本特征概述:
  • n n n个参与方 P 1 , P 2 , . . . , P n P_1,P_2,...,P_n P1,P2,...,Pn拥有公私钥对 ( p k i , s k i ) (pk_i, sk_i) (pki,ski)
  • slots:表示协议执行被划分的时间单位(记住,在本文中挺重要的,方便理解)
  • c h a i n chain chain:表示链,由一个个区块组成,即 c h a i n : = { B 0 , B 1 , B 2 , . . . B m } chain:=\{B_0,B_1,B_2,...B_m\} chain:={B0,B1,B2,...Bm}
  • B j : = ( h e a d e r j , d j ) B_j:=(header_j, d_j) Bj:=(headerj,dj):表示区块;
  • h e a d e r j = ( s l j , s t j , G ( d j ) , π j ) header_j=(sl_j, st_j, G(d_j), \pi_j) headerj=(slj,stj,G(dj),πj):表示区块头信息
  • d j d_j dj:表示区块数据
  • s l j ∈ { s l 1 , . . . , s l R } sl_j\in \{sl_1,..., sl_R\} slj{sl1,...,slR}:表示slots的序号
  • s t j st_j stj:表示前一个区块头的哈希值,即 H ( h e a d e r j − 1 ) H(header_{j-1}) H(headerj1)
  • G ( d j ) G(d_j) G(dj):表示区块数据的状态(实验中表示区块数据的Merkle root)
  • π j \pi_j πj:表示包含区块的一些特殊头数据(例如在PoS中,表示在生成区块slot 领导者下用密钥计算出的签名 ( s l j , s t j , G ( d j ) ) (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更新:表示为 c h a i n ∗ = c h a i n ∣ ∣ B ∗ chain^*=chain||B^* chain=chain∣∣B,区块结构与不可变区块链类似,区块头信息增加了一个 i b ib ib,即 h e a d e r j = ( s l j , s t j , G ( d j ) , i b j , π j ) header_j=(sl_j,st_j, G(d_j),ib_j,\pi_j) headerj=(slj,stj,G(dj),ibj,πj).
  • B j ∗ B^*_j Bj:表示第 j j j个候选编辑区块。
  • i b ib ib:表示区块的原始状态。为了维护编辑区块和它相邻区块的关系,将 i b ib ib代表区块的初始和未编辑状态。例如,若在编辑区块 B = ( h e a d e r , d ) B=(header, d) B=(header,d)中还是原区块数据 d 0 d_0 d0,则 i b = G ( d 0 ) ib=G(d_0) ib=G(d0),其中 h e a d e r = ( s l , s t , G ( d ) , i b , π ) header=(sl,st,G(d),ib,\pi ) header=(sl,st,G(d),ib,π)

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

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

在这里插入图片描述

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

此小节,作者定义了几个算法,包括 v a l i d a t e B l o c k validateBlock validateBlock v a l i d a t e C h a i n validateChain validateChain v a l i d a t e C a n d validateCand validateCand,以及 c o l l e c t V o t e collectVote collectVote

  • 1) 有效区块( A l g o r i t h m Algorithm Algorithm 1):首先根据系统规则检查区块B包含的数据的有效性,然后通过合适的函数检查leader的有效性,最后用leader的公钥验证签名 π \pi π或验证PoW中谜题随机数 π \pi π
    在这里插入图片描述
  • 2) 有效链( A l g o r i t h m Algorithm Algorithm 2):为了验证区块链chain,算法2首先检查每个区块 B j B_j Bj的有效性,然后检查它与前一个区块 B j − 1 B_{j-1} Bj1的关系,它有两种情况,取决于 B j − 1 B_{j-1} Bj1是否是一个编辑过的区块。如果 B j − 1 B_{j-1} Bj1已编辑完成(即 s t j ≠ H ( h e a d e r j − 1 ) st_j\neq H(header_{j-1}) stj=H(headerj1),它的检查取决于是否满足编辑策略 R P \mathcal{R} \mathcal{P} RP。当且仅当算法2输出1时,我们就说chain是有效的链。
    在这里插入图片描述
  • 3) 有效候选编辑区块( A l g o r i t h m Algorithm Algorithm 3):为了验证区块链chain上第 j j j个区块的候选编辑区块 B j ∗ B^*_j Bj,算法3首先检查 B j ∗ B^*_j Bj的有效性,然后检查 B j − 1 B_{j-1} Bj1 B j + 1 B_{j+1} Bj+1的链接关系,其中与 B j + 1 B_{j+1} Bj+1的链接是“old“(如 s t j = H ( s l j , s t j , i b j , i b j , π j ) st_j=H(sl_j,st_j,ib_j,ib_j,\pi_j) stj=H(slj,stj,ibj,ibj,πj))。当且仅当算法输出1时,我们就说 B j ∗ B^*_j Bj是一个有效的候选编辑区块。
    在这里插入图片描述

下面将介绍 c o l l e c t V o t e collectVote collectVote负责收集和验证在 ( s l , s l + ω − 1 ) (sl, sl+\omega -1) (sl,sl+ω1) slots内的选票,并将其存储在缓冲器 m s g s msgs msgs中。大致的步骤如下:

  • 通过编辑策略 R P \mathcal{R} \mathcal{P} RP检查 H ( B j ∗ ) H(B^*_j) H(Bj)的投票数,如果它满足编辑策略,则停止收集,否则开始验证投票;
  • 用投票人的公钥验证 H ( B j ∗ ) H(B^*_j) H(Bj)上的签名,并由 V e r i f y C m t ( c h a i n , s l , c , p r o o f , p a r a ′ ) VerifyCmt(chain, sl, c, proof, para') VerifyCmt(chain,sl,c,proof,para)确认投票人投票的正确性和投票数 c c c
  • 算法生成一个对所有有效签名 S I G SIG SIG的聚合签名 a s i g j asig_j asigj,聚合相关的证明 P R O O F PROOF PROOF,并返回它们;
  • 聚合签名可以降低区块链的通信复杂性和存储开销。
    在这里插入图片描述

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

除了common prefix之外,可编辑区块链的安全属性与不可变区块链的安全属性基本相同,下面将依次证明这三个属性的安全性。
在这里插入图片描述
由于编辑操作可知,本协议本质上已经不满足common prefix的原始定义(上面2.1.2节).具体来说考虑到参与方 P 1 P_1 P1 P 2 P_2 P2分别在 s l 1 , s l 2 sl_1, sl_2 sl1,sl2 slot上是诚实的,且 s l 1 < s l 2 sl_1<sl_2 sl1<sl2。对于一个候选区块 B j ∗ B^*_j Bj替换原始区块 B j B_j Bj,后者投票结果被公布在 s l sl sl slot中,且 s l 1 < s l < s l 2 sl_1<sl<sl_2 sl1<sl<sl2。在 c h a i n P 1 s l 1 ( v i e w ) chain^{sl_1}_{P_1}(view) chainP1sl1(view)中还没有提出编辑请求,但可能已经在 c h a i n P 2 s l 2 ( v i e w ) chain^{sl_2}_{P_2}(view) chainP2sl2(view)中生效。对于这样的结果,在 c h a i n P 1 s l 1 ( v i e w ) chain^{sl_1}_{P_1}(view) chainP1sl1(view)中的原始 B j B_j Bj保持不变,但它在 c h a i n P 2 s l 2 ( v i e w ) chain^{sl_2}_{P_2}(view) chainP2sl2(view)中被替换成为候选 B j ∗ B^*_j Bj

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

D e f i n i t i o n 4.1 Definition 4.1 Definition4.1:(可编辑common prefix)如果对于所有 ( A , Z ) (\mathcal{A},\mathcal{Z}) (A,Z),存在一个可忽略的函数 n e g l negl negl,使得对每个足够大的 λ ∈ N \lambda \in N λN和每个 k ≥ k 0 k\geq k_0 kk0都成立,我们就说该区块链协议 ∏ \prod 满足 k 0 k_0 k0-可编辑common prefix:
P r [ v i e w ← E X E C ∏ ( A , Z , λ ) : r e d a c t p r e f i x k ( v i e w ) = 1 ] ≥ 1 − n e g l ( λ ) Pr[view\leftarrow EXEC^{\prod}(\mathcal{A},\mathcal{Z},\lambda):redactprefix^k(view)=1]\geq 1-negl(\lambda) Pr[viewEXEC(A,Z,λ):redactprefixk(view)=1]1negl(λ)
其中 A A A表示敌手, Z Z Z表示环境。

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

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

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

2.3.1 证明 ∏ i d e a l \prod_{ideal} ideal满足可编辑common prefix。

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

2.3.2 证明 ∏ i d e a l \prod_{ideal} ideal满足chain quality。

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

2.3.3 证明 ∏ i d e a l \prod_{ideal} ideal满足chain growth。

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

2.4 实例化

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

2.4.1 可编辑PoS区块链
  • 1)检查委员会成员Cmt:Cmt函数用私钥 s k i sk_i ski和权益 s i s_i si检查 P i P_i Pi是否在slot s l sl sl中的委员会成员和输出 ( c , p r o o f ) (c,proof) (c,proof),如算法4。首先,Cmt函数用VRF以私有或非交互的方式去随机选择投票人;为了选择投票人与他们的权益成比例,把每个单位的stake看作是不同的子用户,用 s i s_i si表示。且每个单位的选择概率为 p = T S p=\frac TS p=ST,S为系统总stakes,T为委员会预期stakes值,而子用户 s i s_i si中选择 q q q的概率服从二项分布 B ( q ; s i , p ) = C ( s i , q ) p q ( 1 − p ) s i − q B(q;s_i,p)=C(s_i,q)p^q(1-p)^{s_i-q} B(q;si,p)=C(si,q)pq(1p)siq,其中 C ( s i , q ) = s i ! q ! ( s i − q ) ! C(s_i,q)=\frac {s_i!}{q!(s_i-q)!} C(si,q)=q!(siq)!si! ∑ q = 0 s i B ( q ; s i , p ) = 1 \sum^{s_i}_{q=0}B(q;s_i,p)=1 q=0siB(q;si,p)=1。为了确定参与方中子用户有多少,算法从 I c I^c Ic中将区间 [ 0 , 1 ) [0, 1) [0,1)划分为连续区间。若 h a s h 2 h a s h l e n \frac{hash}{2^{hashlen}} 2hashlenhash落在 I c I^c Ic内,意味着 P i P_i Pi c c c个子用户(c个投票)被选中,其中 h a s h l e n hashlen hashlen表示哈希的bit长度。
    在这里插入图片描述

  • 2)验证委员会成员VerifyCmt:算法5中函数VerifyCmt用 P i P_i Pi的公钥 p k i pk_i pki和proof验证 P i P_i Pi是权重为c的委员。它首先用 V e r i f y V R F p k i ( h a s h , π , s e e d ∣ ∣ s l ) VerifyVRF_{pk_i}(hash,\pi,seed||sl) VerifyVRFpki(hash,π,seed∣∣sl)验证proof,然后验证 h a s h 2 h a s h l e n \frac{hash}{2^{hashlen}} 2hashlenhash落在区间 I c I^c Ic

  • 3)参数选择:如前面所述,将每个权益的单元视为不同的“sub-user”,例如,若用户 U i U_i Ui s i s_i si个权益则他有 s i s_i si个单元。当提出修订建议时,将从所有子用户中选出一个投票委员会。委员会的预期人数T是固定的,并且子用户被选中的概率为 T S \frac{T}{S} ST。然后准确抽取K个子用户的概率为: P = C S K ρ S K ( 1 − ρ S ) S − K = S ⋯ ( S − K + 1 ) T K S K T K K ! ( 1 − T S ) ( S − K ) P=C^K_S\rho^K_S(1-\rho_S)^{S-K}=\frac{S\cdots(S-K+1)T^K}{S^K}\frac{T^K}{K!}(1-\frac{T}{S})^{(S-K)} P=CSKρSK(1ρS)SK=SKS(SK+1)TKK!TK(1ST)(SK)
    若K为定值,有 lim ⁡ S → ∞ S ⋯ ( S − K + 1 ) S K = 1 \lim_{S\to \infty}\frac{S\cdots(S-K+1)}{S^K}=1 limSSKS(SK+1)=1 lim ⁡ S → ∞ ( 1 − T S ) ( S − K ) = e − T \lim_{S\to \infty}(1-\frac{T}{S})^{(S-K)}=e^{-T} limS(1ST)(SK)=eT,则概率逼近
    P = T K K ! e − T P=\frac{T^K}{K!}e^{-T} P=K!TKeT
    用#good和#bad分别表示委员会中诚实和恶意的成员数。假设大多数是诚实的,则满足以下条件。

    • # g o o d ≥ 1 / 2 ⋅ T good\geq 1/2·T good1/2T,当诚实委员数达到<1/2时,违反了这个条件。由上面公式可知,正好抽K个诚实委员的概率是 ( h ⋅ T ) K K ! e − h ⋅ T \frac{(h·T)^K}{K!}e^{-h·T} K!(hT)KehT,其中 h ( h > 1 / 2 ) h(h>1/2) h(h>1/2)是系统中诚实的持股比例。因此,违反这条件的概率为;
      ∑ K = 0 T / 2 − 1 ( h T ) K K ! e − h T ( 1 ) \sum_{K=0}^{T/2-1}\frac{(hT)^K}{K!}e^{-hT} \qquad \qquad \qquad \qquad \qquad \qquad \qquad(1) K=0T/21K!(hT)KehT(1)
    • # b a d < 1 / 2 ⋅ T bad<1/2·T bad<1/2T。由上可知,我们抽取L个恶意委员会成员的概率为 ( ( 1 − h ) T ) L L ! e − ( 1 − h ) T \frac{((1-h)T)^L}{L!}e^{-(1-h)T} L!((1h)T)Le(1h)T。因此,满足条件的概率由公式给出为:
      ∑ L = 0 T / 2 − 1 ( ( 1 − h ) T ) L K ! e − ( 1 − h ) T ( 2 ) \sum_{L=0}^{T/2-1}\frac{((1-h)T)^L}{K!}e^{-(1-h)T} \qquad \qquad \qquad \qquad \qquad \qquad \qquad(2) L=0T/21K!((1h)T)Le(1h)T(2)

    F F F是参数,它标志着两种情况的失败概率可以忽略不计,根据经验设置为 F = 5 ∗ 1 0 − 9 F=5*10^{-9} F=5109我们目标是最小化 T T T,同时保持上面公式(1)或(2)的概率不超过F。如果 T T T的某个值以 1 − F 1-F 1F的概率满足这两个条件,那么任何较大的 T T T的值也以至少 1 − F 1-F 1F的概率满足。基于上述观察,为了找到最优的 T T T,首先令 T T T任意大的值,例如 1 0 4 10^4 104,然后检查是否满足这两个条件,若满足两个条件则减小T(此处应该不满足则减小T,论文写错了吧),再检查,持续这个过程,直到两个条件都满足。

    在本文的系统实现中,我们假设诚实风险的比例为0.65,因此我们选择𝑇= 1000。(后续2.5节再详细介绍)

  • 4)诚实用户比例:只需证明委员会中诚实用户的比例至少为1/2.如果敌手A能够预知地确保哪个用户将成为投票委员会成员,那么他可以自适应地腐败并模范该用户,使委员会中诚实用户的比例小于1/2。然而,底层VRF的唯一性,敌手的获胜概率只有可忽略的 ( 1 2 ) h a s h l e n (\frac12)^{hashlen} (21)hashlen获胜。况且下一投票期间的委员会重新选举,故不会有任何不可忽略的优势。

2.4.2 可编辑PoW区块链

为了根据计算能力分布获得足够数量的委员会,并确保委员会中的诚实多数,只需要收集足够的PoW迷题解决方案。这可以很容易地通过创建一个“虚拟选择”程序来实现PoW带有更大的难度参数D。然而,敌手可以通过保留攻击(若敌手在 s l sl sl之前生成了一个更长的链,它将暂时扣留该链,并开始寻找solution。然后在slot位置敌手发布它的链和solutiion,因此他有更多机会来寻找solution)提前找到“虚拟迷题解决方案”。为了组织这种攻击,在slot连续的位置选举委员会,这样大多数委员会是诚实的,即使在保留攻击。与POS实例化类似,使用与网络相关的参数w来确保所有用户都将以大概率获得投票,其中 w ≥ r w\geq r wr

  • 1)检查委员会成员Cmt:在算法6中的Cmt函数中,若P能在 ( s l , s l + r − 1 ) (sl,sl+r-1) (sl,sl+r1)之间找到一些PoW困难参数 D D D的虚拟难题solution,则 P P P被选为委员会,且赋予 P P P为权重 c c c(即,解答solution的个数)。委员会成员证明包括相应难题solution的proof。
    在这里插入图片描述
    在这里插入图片描述

  • 2)验证委员会成员VerifyCmt:这个算法7与算法6类似,通过解答计算哈希值,用公钥 p k pk pk验证 P P P是否是委员会成员。

  • 3)参数选择:假设敌手能在 t t t slots之前超过诚实节点找到大多数的难题solution且在 r r r slots中选举委员会。假设 h = 1 2 + ϵ ( ϵ ∈ ( 0 , 1 2 ) h=\frac 12+\epsilon(\epsilon \in (0,\frac 12) h=21+ϵ(ϵ(0,21)是底层区块链中诚实节点的比例。令 α = D 2 l h n \alpha=\frac{D}{2^l}hn α=2lDhn β = D 2 l ( 1 − h ) n \beta=\frac{D}{2^l}(1-h)n β=2lD(1h)n分别表示每个slot中诚实节点和腐败节点所能找到难题solution的预期数量,其中 l l l为哈希函数 H ( ⋅ ) H(·) H()的输出长度, n n n为节点总数。

    本文用 N A N_A NA表示敌手从slot ( s l − t , s l + r − 1 ) (sl-t, sl+r-1) (slt,sl+r1)中找到难题solution的最大数量, N H N_H NH表示诚实节点从slot ( s l , s l + r − 1 ) (sl,sl+r-1) (sl,sl+r1)找到难题solution的最小数量。特别地,根据Chernoff界限[17],对于任意 δ > 0 \delta>0 δ>0,除了可忽略概率 p 1 = e x p ( − δ ⋅ m i n { δ , 1 } ⋅ β ( t + r ) 3 ) p_1=exp(-\frac{\delta·min\{\delta,1\}·\beta(t+r)}{3}) p1=exp(3δmin{δ,1}β(t+r)),它满足 N A ≤ ( 1 + δ ) β ( t + r ) N_A\leq(1+\delta)\beta(t+r) NA(1+δ)β(t+r)。类似,对任意 δ ∈ ( 0 , 1 ) \delta \in (0,1) δ(0,1),除了可忽略概率 p 2 = e x p ( − δ 2 α r 2 ) p_2=exp(-\frac{\delta^2\alpha r}{2}) p2=exp(2δ2αr),它满足 N H ≥ ( 1 − δ ) α r N_H\geq (1-\delta )\alpha r NH(1δ)αr。若设置委员会成员大多数是诚实的,然后需要确保 N H > N A N_H>N_A NH>NA,并且满足以下条件 ( 1 + δ ) β ( t + r ) < ( 1 − δ ) α r (1+\delta)\beta(t+r)<(1-\delta)\alpha r (1+δ)β(t+r)<(1δ)αr
    因此,有 r > t ( 1 − δ ) h ( 1 + δ ) ( 1 − h ) − 1 r>\frac{t}{\frac{(1-\delta)h}{(1+\delta)(1-h)}-1} r>(1+δ)(1h)(1δ)h1t( t t t表示敌手可保留区块B的最长slots数)。

    考虑这样一种情况,当敌手保留一些区块时,在最长有效链中挖掘 k 0 k_0 k0个新区块,其中 k 0 k_0 k0是common prefix 参数。根据common prefix属性,这些保留区块永远不会出现在诚实节点链中。因此, t t t应该是小于最长链增加至少 k 0 k_0 k0区块的最小时间。根据chain growth属性[37]可知, t ≈ k 0 α ′ t\approx \frac{k_0}{\alpha'} tαk0,其中 α ′ = D ′ 2 ℓ h n \alpha'=\frac{D'}{2^\ell}hn α=2Dhn

例如:在Bitcoin中,令 k 0 = 6 , h = 0.65 , δ = 0.1 , D ′ 2 ℓ n = 1 k_0=6, h=0.65, \delta=0.1, \frac{D'}{2^\ell}n=1 k0=6,h=0.65,δ=0.1,2Dn=1。根据上式可知 r > 1.93 t r>1.93t r>1.93t,为不失一般性,设置 r = 2 t r=2t r=2t,算出 t = 10 , r = 20 t=10,r=20 t=10,r=20。进一步,设置 p 1 = e x p ( − 13 ) , p 2 = e x p ( − 25 ) p_1=exp(-13), p_2=exp(-25) p1=exp(13),p2=exp(25),则 D = 5000 h r D ′ ≈ 385 D ′ D=\frac{5000}{hr}D'\approx385D' D=hr5000D385D。即
( 1 + δ ) β ( t + r ) = ( 1 − h ) ( 1 + δ ) 5000 h r ( t + r ) ≈ 4443 (1+\delta)\beta(t+r)=(1-h)(1+\delta)\frac{5000}{hr}(t+r)\approx4443 (1+δ)β(t+r)=(1h)(1+δ)hr5000(t+r)4443
所以,只有当一个编辑区块获得超过4443个投票时,它才会被批准。

2.5 实现评估与分析

  • 实验环境:c语言(C11版本)编写了仿真Cardano SL的PoS链,Ubuntu 16.04(64bits)系统, 2.20GHz Intel Core i5-5200U CPU and 8GB内存。
  • 其他参数 h = 0.65 h=0.65 h=0.65(即敌手最多控制35%的stakes),委员会规模 T = 1000 T=1000 T=1000,指定每个区块最多包含10笔交易。
2.5.1 实验一:分析编辑的vote和proof开销

在这里插入图片描述

  • vote和proof产生的计算开销很小
  • 满足了有效编辑的必要条件
2.5.2 实验二:评估编辑proof如何影响共识的性能

在这里插入图片描述

  • 带有编辑proof会持续产生额外的延迟
  • 仅需要约0.7s来验证编辑proof
2.5.3 实验三:验证已编辑区块链的额外成本

在这里插入图片描述

  • 验证链的延迟随着编辑次数的增加呈线性增加
  • 即使50%的区块被编辑,成本仍然可以接受

三、结论与思考

3.1 本文总结

  • 1)提出了具有即时编辑功能的区块链构造方法(实验二表现了即时性)
  • 2)首次定义了可编辑区块链的理想化功能 F t r e e \mathcal{F}_{tree} Ftree,并证明了安全性(创新点)
  • 3)基于PoS和PoW共识的区块链上进行了实例化(虽然实验仅仿真了PoS情况)

3.2 我的思考

本篇论文是比较好的文章,如果深入阅读的话会发现许多有用的知识,不管是加深对不可变区块链的理解,还是创新性的了解可编辑区块链,都会有个很好的认识,值得仔细研读。

另外,作者也提出可以后续进一步优化减少存储proof的开销,以及就像前面提出的问题一样,为什么要用可编辑区块链?可编辑与不可变区块链的防篡改实则是冲突的,该如何共存?为什么我们不直接用分布式数据库呢,它也可以实现编辑和存储?这些问题都值得深思,或许就是下一个研究点。

(还有一些具体的思考和想法这里不便透露,欢迎合作交流!)

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
这个错误是由于在Gradle的仓库地址中使用了不安全的协议(如HTTP)而导致的。从Gradle 7.2版本开始,默认不再支持使用不安全的协议,需要将仓库地址修改为安全的协议(如HTTPS),或者允许使用不安全的协议。 解决这个问题的方法有两种: 第一种方法是在build.gradle文件中将使用不安全协议的仓库地址修改为安全协议。例如,可以将原来的仓库地址"http://maven.aliyun.com/nexus/content/groups/public/"修改为"https://maven.aliyun.com/nexus/content/groups/public/"。 第二种方法是在build.gradle文件中添加配置,允许使用不安全的协议。例如,可以在repositories部分的maven配置中添加"allowInsecureProtocol = true",如下所示: ``` repositories { google() maven { allowInsecureProtocol = true url "http://maven.aliyun.com/nexus/content/groups/public/" } } ``` 另外,请确保Android Studio的Gradle插件版本与build.gradle文件中的classpath配置一致,避免出现版本不匹配的错误。 通过以上两种方法,您应该能够解决"org.gradle.api.InvalidUserCodeException: Using insecure protocols with repositories, without explicit opt-in, is unsupported"的错误。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [AndroidStudio常见错误解决](https://blog.csdn.net/ACM_BMW/article/details/123968194)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值