软件学报  2020, Vol. 31 Issue (12): 3909-3922   PDF    
可修改的区块链方案
任艳丽1 , 徐丹婷1 , 张新鹏1 , 谷大武2     
1. 上海大学 通信与信息工程学院, 上海 200444;
2. 上海交通大学 电子信息与电气工程学院, 上海 200240
摘要: 随着区块链的迅速发展,上链数据不仅包括金融交易数据,还包括科技、文化、政治等多类数据.而在现有的区块链系统中,数据一旦上链便无法更改,可能会面临失效数据无法删除、错误数据无法修改等问题.因此,特定条件下可修改的区块链方案具有广阔的应用前景.在POSpace(proof of space)共识机制下,基于陷门单向函数和新型区块链结构,提出了可修改的区块链方案.只要超过阈值数的节点同意,便可实现区块数据的合法修改,否则不能进行修改.除修改数据外,其余区块数据保持不变,全网节点仍可按原始验证方式对数据合法性进行验证.仿真实验表明:只要选定合适的阈值,所提方案中,区块生成与数据修改的效率均很高,数据的修改并不改变区块之间的链接关系,具有现实可操作性.
关键词: 区块链    可修改    陷门单向函数    空间证明    数据安全         
Scheme of Revisable Blockchain
REN Yan-Li1 , XU Dan-Ting1 , ZHANG Xin-Peng1 , GU Da-Wu2     
1. School of Communication and Information Engineering, Shanghai University, Shanghai 200444, China;
2. School of Electronic Information and Electrical Engineering, Shanghai Jiao Tong University, Shanghai 200240, China
Abstract: With the rapid development of the blockchain, the data on the chain not only include financial data, but also have data of technology, culture, politics, and so on. However, the data will not be revised once it is packaged on the existing blockchain system, which has the problem that the invalid data cannot be deleted and the wrong data cannot be modified. Therefore, a revisable blockchain under certain conditions has broad application prospects. Under the POSpace (proof of space) consensus mechanism, a revisable blockchain scheme is proposed based on the trapdoor one-way function and a new blockchain structure. In this scheme, the nodes can execute the revision operation as long as their number exceeds the threshold. Otherwise, the revision operation cannot be executed. Except for the revised data, the remaining data on the blocks keeps unchanged, and all of the nodes on the network can still verify the validity of data by using the original verification ways. The experiments show that block generation and data revision all have high efficiency as long as the threshold is selected appropriately, and the link relationship between the blocks will not be changed after the data revision, and the scheme has practical operability.
Key words: blockchain    revisable    trapdoor one-way function    proof of space    data security    data security    

近年来, 区块链技术得到学术界和企业界的广泛关注.从以比特币[1]为代表的加密货币系统——区块链1.0, 到以太坊为代表的智能合约——区块链2.0, 再到现在, 区块链应用走出金融, 走向社会多行业, 进入区块链3.0时代.去中心化和上链数据不可篡改的特性, 使其有别于传统的中心化系统, 为金融、科技甚至政治等领域的数据存储提供了新的模式[2].

在区块链系统中, 共识机制为各节点制定信任标准, 构建激励机制, 使得各节点就系统状态达成共识, 共同维护系统健康运行[3].目前, 主流的共识机制有基于工作量证明的POW(proof of work)共识机制[1, 4]、基于权益证明的POS(proof of stake)共识机制[5-7]、基于授权股权证明的DPOS(delegated proof of stake)共识机制[8, 9]等.现有的区块链系统基本以POW与POS共识机制为主, 但POW基于算力竞争, 挖矿电力损耗巨大, 不利于节能环保. POS基于权益竞争, 信用机制不牢固, 大量低成本货币被分配于开发者, 若利益驱使其大量抛售货币, 将不利于系统维护. Park等人基于POSpace(proof of space)共识机制提出SpaceMint区块链系统[10], 节点基于可循环利用的本地空间竞争挖矿, 计算代价低, 避免了算力竞争而造成的资源浪费.同时, 安全的证明机制保证其信用牢固性, 实现了对安全性与资源效率的兼顾.另外, SpaceMint系统采用新型链式结构.传统的区块链利用哈希函数将区块头、区块体以及前后区块链接起来, 以哈希函数的不可碰撞性保证数据安全.而SpaceMint通过加入签名子块, 打破区块头和区块体的直接链接关系, 构建了新型的区块链接结构, 详见第1.3节.

现有的区块链系统中, 数据一旦上链便无法更改.而随着区块链的发展, 除金融数据外的科技、文化甚至政治等多类社会数据也将上链, 失效数据无法删除、错误数据无法修改等问题将变得更加突出.例如:一个公司宣布破产, 其交易数据失效, 不再具备永久存储的价值, 无法及时删除将造成存储资源浪费; 或者某些上链的经典技术参数、公式在若干年后被推翻, 需做出修正; 又或者恶意、负面的舆论数据由于别有用心的挖矿者而上链, 区块链的公开性将导致其不断扩散传播, 造成恶劣影响.及时的数据修正在现有的区块链系统中均无法完成, 可能造成巨大的经济损失和恶劣的社会影响.因此, 上链数据无法更改将在一定程度上限制了区块链的进一步发展, 而在特定条件下实现可修改的区块链, 具有广阔的应用前景.

在可修改区块链研究中, 爱哲森公司基于带陷门的变色龙哈希函数[11], 在已知陷门时, 可对区块数据进行修改.但该方案中, 陷门被交于可信中心, 修改权被中心化, 数据安全面临威胁.Li等人[12]对可修改区块链技术进行了改进, 利用秘密共享方案, 将陷门分配给系统各节点, 当且仅当阈值节点联合时方可恢复陷门, 实现数据修改.但上述方案均基于变色龙哈希函数实现区块数据修改, 而现有的区块链系统大多基于传统的抗碰撞哈希函数, 所以上述方案应用价值不高.Ren等人[13]基于抗碰撞哈希函数, 提出了可删除区块链系统, 利用安全的门限环签名方案, 在超过门限值的节点同意时, 可对单个区块的全部交易数据进行删除.但该方案无法删除指定交易数据, 也无法进行数据修改.本文使用抗碰撞哈希函数, 基于POSpace共识机制实现可修改的区块链方案, 在绝大多数节点同意后, 可对指定交易数据进行修改或删除, 具有重要的应用价值.

本文基于文献[10]中的区块结构和陷门单向函数, 提出了可修改的区块链方案.通过引入机动因子, 重构区块签名子块, 在数据失效或错误时, 只要超过阈值数节点同意, 便可实现区块数据的合法修改; 同时保持区块链接不变, 除修改数据, 其余数据不变, 全网仍可按原始验证方式对数据合法性进行验证.而且我们设置了特定的阈值, 使得修改操作必须经过绝大多数节点同意, 恶意的非法修改无法完成, 保证了数据的安全.

1 基础知识

本节将介绍一些基本概念, 包括陷门单向函数、Grinding Blocks攻击及基于空间证明的区块链结构.

1.1 陷门单向函数

陷单向函数是密码学领域的一个重要概念, 可简单描述为:正向求解容易, 但反向求解不可实现的函数.陷门单向函数[14, 15]不同于单向函数的“不可逆”, 它是“陷门”可逆的.在陷门未知时, 它等同于普通单向函数; 当陷门已知时, 求逆便计算上可实现.

定义1(陷门单向函数).   陷门单向函数f(x)是指满足以下性质的函数:

(1)   对于属于f定义域的任意x, 可在多项式时间内计算得到y=f(x);

(2)   对于属于f值域的任意y, 无法在多项式时间内求出x, 使得x=f-1(y);

(3)   当k已知时, 对于属于f值域的任何y, 可在多项式时间内计算出$x = f_k^{ - 1}(y)$, 其中, k为该陷门单向函数的陷门.

1.2 Grinding Blocks攻击10, 16

传统的区块结构分为区块头与区块体两部分:区块体存储交易信息, 区块头包含版本号、父区块哈希、交易Merkle Tree根、时间戳、难度目标和Nonce.挖矿挑战在于:寻找合适的随机数Nonce, 使区块头哈希结果小于难度目标.因此, 挖矿挑战与交易信息相关.为了利益最大化, 矿工可能将交易信息拆分成多份, 以形成不同挖矿挑战, 在同一时间寻找多个Nonce, 以打包形成不同区块, 提高挖矿成功概率.此类行为没有遵守“将挖矿期间产生的交易全部打包于区块”的原则, 影响系统效率, 也可能进一步导致自私挖矿与双花攻击.此类行为称为Grinding Blocks攻击, 如图 1所示.

Fig. 1 Schematic diagram of Grinding Blocks attack 图 1 Grinding Blocks攻击示意图

图 1中, Version, Hashpre, MT_Rootτ, T, Nonceτ依次表示区块头中的版本号、父区块哈希、交易Merkle Tree根、时间戳、矿工用以完成挖矿挑战的随机数和交易信息.

“Grinding Blocks”攻击在POW共识下不常见, 因为POW共识机制基于算力挖矿, 完成一次挖矿挑战需要耗费巨大算力, 矿工在同一时间进行多个挑战的计算难度巨大.但在同时进行多个挖矿挑战难度较小的共识机制下, 如第1.3节中介绍的基于空间证明的区块链中, “Grinding Blocks”攻击将变得相对容易.

1.3 基于空间证明的区块链[10, 13]

最近, Park等人构建了以“空间”为可信度衡量标准的区块链系统SpaceMint, 其共识机制为POSpace.不同于POW和POS, POSpace将拥有最大存储空间的节点视为最可信节点, 由其完成系统相关操作, 获取奖励.各节点向全网证明自己空间大小、竞争成为记账者的过程, 便是POSpace共识机制下的挖矿过程.因此, 安全可靠的空间大小衡量标准是POSpace共识机制的关键.

POSpace共识机制使用“pebble game”, 通过节点对有向无环图的构造速度来衡量空间大小.当时间一定时, 节点空间越大, 对有向无环图的构造越快; 反之亦然.具体而言, POSpace共识机制要求各节点在本地存储一有向无环图G=(V, E), 其中, V={v1, v2, …, vN}为顶点集合, N为顶点个数, E为有向边集合.有向无环图示例如图 2所示.

Fig. 2 Directed acyclic structure diagram 图 2 有向无环结构图

为了突出有向无环图的结构, 每个顶点i将被赋予特定的标签值, 记为li:

$ {l_i} = Hash(\mu , i, {l_{{p_1}}}, {l_{{p_2}}}, ..., {l_{{p_t}}})i = 1, 2, \ldots , N, $

其中, i为顶点序号, μ为与挖矿节点公钥关联的随机数, ${l_{{p_1}}}, {l_{{p_2}}}, ..., {l_{{p_t}}}$为顶点i的所有母节点的标签值.

共识机制要求矿工存储有向无环图顶点信息, 若矿工空间足够, 便可全部存储; 反之, 矿工只能存储部分顶点标签值, 未存储部分依靠后续计算得到, 以时间换取空间.每次竞争时, 系统随机要求矿工返回相关顶点标签值, 显然, 存储空间越大, 矿工结果返回效率越高, 赢取记账权概率越高.挖矿的具体实现过程见文献[10].这便形成了基于空间证明的共识机制.

同时, POSpace对挖矿算力要求下降, 矿工在同一时间完成多个挖矿挑战变得容易.因此, 如第1.2节所述, 在传统区块结构下, 实行POSpace机制将使得Grinding Blocks攻击突出.为了对抗该攻击, SpaceMint构建了全新的区块链结构.

图 3所示, 新型区块i包含3个部分:证明子块φi、签名子块σi和交易子块τi.其中, 证明子块φi和交易子块τi相当于传统区块结构中的区块头和区块体, 而新增的签名子块σi则用于打破区块头和区块体之间的链接, 使证明子块与交易子块不相连.因此, 挖矿挑战与交易本身无关, 矿工无法通过拆分交易以产生不同的挖矿挑战, 从而增加挖矿成功概率, 防止了Grinding Blocks攻击对系统的伤害.3个子块的具体内容如下.

Fig. 3 Blockchain structure of SpaceMint 图 3 SpaceMint区块链结构

(1)   Hash子块φi=Hash(i, ζφ, (pki, γi, ci, ai)), 具体包含:当前区块序号i、记账者对前一区块的Hash子块φi-1的签名ζφ、记账者在竞争记账权时给出的承诺证明以及空间证明(pki, γi, ci, ai);

(2)   签名子块σi={i, ζτ, ζσ}, 具体包含:当前区块序号i、记账者对当前区块的交易子块τi的签名ζτ、记账者对前一区块的签名子块σi-1的签名ζσ;

(3)   交易子块τi={i, ctx}, 具体包含当前区块序号i、交易信息列表ctx.

上述区块结构在保证数据安全的前提下, 打破了证明子块φi与交易子块τi的直接链接关系, 能更好地对抗“Grinding Blocks”攻击, 也为可修改区块链提供了可能性.

2 可修改的区块链

我们基于SpaceMint提出的区块链结构, 使用陷门单向函数提出了可修改的区块链.在超过阈值数的节点同意时, 可对失效或错误的上链交易数据进行合法修改, 具体阈值设定会在下文给出分析.修改前后, 区块链接结构不变, 也不影响区块其他数据的使用和验证.而且由于阈值的设定, 所有修改操作将代表系统意志, 不合法的恶意修改无法完成.本节首先给出可修改的区块链结构, 然后对修改原理及安全性进行分析.

2.1 可修改的区块链结构

基于SpaceMint的区块结构, 我们提出可修改的区块链方案.如图 4所示, 其本质是重构签名子块σi, 在记账者对交易的签名ζτ中加入机动因子Gi, 将σi变更为σi, G, 而证明子块φi与交易子块τi保持不变.

Fig. 4 Revisable blockchain structure 图 4 可修改的区块链结构

图 5对SpaceMint区块与可修改区块结构进行对比.原始签名子块σi={i, ζτ, ζσ}, 其内容分别为当前区块序号i、记账者对当前区块的交易子块τi的签名ζτ和记账者对前一区块的签名子块σi-1的签名ζσ.

Fig. 5 Structure comparison of SpaceMint blockchain and revisable blockchain 图 5 SpaceMint区块与可修改区块结构对比

在可修改区块结构中, 签名子块的内容变更为σi, G={i, ζHash(τ)⊕G, ζσ}, 其内容分别为:当前区块序号i、记账者对交易子块τi的哈希值与机动因子Gi异或结果的签名ζHash(τ)⊕G和记账者对前一区块签名子块σi-1, G的签名ζσ.

我们称Gi为签名子块σi, G对应的机动因子, 由陷门单向函数构成, 具体如下:

${G_i}:{G_i}(x_i^1, x_i^2, ..., x_i^Q) = {g_{P_i^1}}(x_i^1)||{g_{P_i^2}}(x_i^2)||...||{g_{P_i^Q}}(x_i^Q)$ .

其中, Q=N×阈值比例, N为系统总节点数, 阈值比例设置将在第2.2节进行说明.另外, ${g_{P_i^j}}(j = 1, 2, ..., Q)$表示基于矿工$P_i^j$的陷门单向映射, $P_i^j(j = 1, 2, ..., Q)$为区块i挖矿排名前Q位的各个矿工, $x_i^j(j = 1, 2, ..., Q)$为矿工$P_i^j$的专属随机数, 初始化时由系统分配, 作为公开参数被各节点记录在本地空间.超过阈值(N×阈值比例)节点同意时, 随机数才能被修改.

SpaceMint区块链系统使用签名子块承诺交易合法性, 交易信息作为签名消息, 与签名子块一一对应, 交易信息改变, 签名子块随之改变, 区块的前后链接便被打破, 因此交易数据无法修改.而本文提出的可修改区块链, 在记账者对交易信息τ的签名中引入机动因子G, 签名消息变为Hash(τ)⊕G, 即使交易改变, 亦可重构机动因子得到G', 保证签名消息与签名结果不变, 实现除交易子块外, 其余区块数据, 即签名子块、证明子块和前后区块的所有信息均不变.在改变交易数据时, 保证区块链结构完好, 实现区块交易数据可修改.

图 6中, ττ'、MT_Rootτ$MT{\rm{\_}}Roo{t'_\tau }$ζτ${\zeta '_\tau }$σσ'、GG'ζHash(τ)⊕G${\zeta '_{Hash(\tau ) \oplus G}}$以及σi, G${\sigma '_{i, G}}$依次代表区块i交易修改前后的交易信息、交易信息的Merkle Tree根、记账者对交易信息的签名、传统签名子块信息、可修改区块链的机动因子、记账者关于交易信息哈希值与机动因子异或结果的签名以及可修改区块链的签名子块信息.

Fig. 6 Comparison of transaction modification results under different block structures 图 6 不同区块结构下的交易修改结果对比

2.2 可修改的区块链原理

在可修改区块链中, 超过阈值的节点同意时, 可对上链数据进行符合系统利益的合法修改, 修改操作不破坏区块链接结构.下面详细说明如何实现数据修改和保证修改操作合法.

2.2.1 如何实现数据修改

(1) 修改请求合法性验证

当区块链网络节点认为相关交易数据需要修改时, 可向全网发送修改请求ReviseTx, 其合法性由区块i的修改群组验证.群组成员为区块i挖矿排名前Q位的各个矿工$P_i^j(j = 1, 2, ..., Q)$.当Q名矿工全部认可ReviseTx时, 本次修改请求被视为合法, 进入数据修改进程; 否则请求将被驳回.通过合理的阈值设定(具体在第2.2.2节进行分析), 修改群组意见可代表系统意志和利益, 由修改群组进行修改请求的合法性验证是合理的.其中, ReviseTx= {idBlock, reason, ctxold, ctxnew}, 其内容依次为:修改交易所在的区块号、修改原因、待修改交易信息集合以及建议修改成的新交易信息集合.

(2) 数据修改操作实施

当修改请求合法时, 区块i的修改群组即相应Q名矿工将实施数据修改操作.Q名矿工将根据ReviseTx中的ctxoldctxnew, 计算交易子块τi对应的${\tau '_i}$, 即修改后的交易信息.接着, Q名矿工重新计算一组新的随机数$ x\prime _i^1,x\prime _i^2,...,x\prime _i^Q $, 得到全新的${G'_i}$, 使得$Hash({\tau _i}) \oplus {G_i}(x_i^1, x_i^2, ..., x_i^Q) = Hash({\tau '_i}) \oplus {G_i}(x\prime_i^1, x\prime_i^2, ..., x\prime_i^Q)$, 保证签名子块σi, G中的ζHash(τ)⊕G不变, 也即:$sign(Hash({\tau '_i}) \oplus {G'_i}) = sign(Hash({\tau _i}) \oplus {G_i}) = {\zeta _{Hash(\tau ) \oplus G}}$.如此, 交易数据改变并未引起签名子块的变化, 无需对后续区块数据进行调整, 维持了区块链接结构, 是具有可操作性的区块数据修改.然后, Q名矿工新随机数在系统更新.如第2.1节所述, Q=N×阈值比例, 因此, Q名矿工满足随机数更新条件, 更新合法; 同时, 矿工将交易子块τi变更为${\tau '_i}$, 全网可随时验证数据的合法性.交易数据的合法修改正式完成.

(3) 系统状态更新

交易数据修改后, 系统会进行相关状态更新, 主要包括上述随机数及交易信息的更新; 同时, 为记录本次数据修改过程以供溯源, 修改完成后, 将生成一条对应的交易信息:

$ctx = (revise, i{d_{Tx}}, t, i{d_{Block}}, reason, x_i^1, x_i^2, ..., x_i^Q, x\prime_i^1, x\prime_i^2, ..., x\prime_i^Q, ct{x_{old}}, ct{x_{new}}).$

其内容依次为:交易的类型标识符、交易号、生成时间、数据修改的区块号、修改原因、修改前、后相应矿工的专属随机数以及修改前、后的交易信息集合.特别地, ctxoldctxnew为实际修改的交易集合, 并非整个交易块数据, 以便节约空间.若对数据的修改为删除操作, 则ctxnew=0.该交易将于后续挖矿中被打包上链.

数据修改总流程如图 7所示.

Fig. 7 Process of data modification 图 7 数据修改流程

●  第一, 网络中出现区块i的交易数据修改请求, 申请将交易子块τi变更为${\tau '_i}$;

●  第二, 对应验证群组的矿工$P_i^j(j = 1, 2, ..., Q)$会对该次修改请求的合法性进行验证:请求若非法, 则修改

请求被驳回; 反之, 交易数据的修改正式进行.如第2.2.1节分析, 为保证数据修改前后区块结构及内容不变, 验证群组只能重新计算一组专属随机数作为机动因子Gi的入参, 以配合交易数据的变化;

●  第三, 验证群组在全网将自己重新计算的专属随机数进行更新, 并正式将交易子块τi变更为${\tau '_i};$

●  最后, 用于记录该次修改操作的交易ctx生成并进入交易池.

至此, 整个数据修改过程完成, 全网可对修改后的数据进行验证.

2.2.2 如何保证修改操作合法

“可修改”不会挑战区块链本身的安全性, 它是对“不可篡改”造成的应用局限性的补充.因为修改操作必须代表系统意志与利益, 也即合法才能被完成, 否则修改后的区块数据无法通过全网验证, 因此, “可修改”的存在仍可保证数据安全, 具体由陷门单向函数特性及相关方案设计保证.

其核心思想如图 8所示:首先, 如第2.2.1节介绍, 为保证数据修改前后区块i结构及内容不变, 只能调整机动因子Gi的入参以配合交易数据τi的变化.而机动因子GiQ个陷门单向函数构成, 陷门单向函数的性质决定只有拥有全部陷门, 才能反向求逆, 获取Gi的新入参, 使Gi配合交易数据τi的变化做出正确调整.在本文中, 陷门也即验证群组Q名矿工$P_i^j(j = 1, 2, ..., Q)$的私钥$sk_i^j(j = 1, 2, ..., Q)$.因此, 只有Q名矿工同意数据修改(与方案数据修改条件一致), 联合一起, 才能在交易数据τi变为${\tau '_i}$时, 利用各自私钥为机动因子计算全新入参$x_i^j(j = 1, 2, ..., Q)$, 使得区块结构与内容不变的前提下, 完成交易数据的改变.

Fig. 8 Q private keys (trap doors) ensure the validity of data modification 图 8 Q个私钥(陷门)确保数据修改的合法性

具体而言, 我们选择ECC加密算法[17, 18]作为陷门单向映射${g_{P_i^j}}$, 本质上, 即以矿工$P_i^j$的公钥对其专属随机数$x_i^j$进行加密, 即${g_{P_i^j}} = E_{P_i^j}^{ECC}(x_i^j)(j = 1, 2, ..., Q)$, $P_i^j$的私钥即单向映射函数的陷门.由陷门单向函数的性质可知, 任何节点都可以根据公开参数计算得到Gi, 但计算$x_i^j = D_{P_i^j}^{ECC}({g_{P_i^j}})(j = 1, 2, ..., Q)$, 只能由拥有私钥(陷门)的矿工$P_i^j$才能完成.换言之, 如果要计算新的随机数$ x\prime_i^1, x\prime_i^2, ..., x\prime_i^Q $, 使得交易数据τi变为${\tau '_i}$后,

$Hash({\tau _i}) \oplus {G_i}(x_i^1, x_i^2, ..., x_i^Q) = Hash({\tau '_i}) \oplus {G_i}(x\prime_i^1, x\prime_i^2, ..., x\prime_i^Q)$

仍然成立, 只能由Q名矿工联合才可完成.其中, Q=N×阈值比例, 阈值比例的设置需要兼顾方案安全性及效率:一方面, 阈值比例越大, 交易数据修改权由更多的节点掌控, 方案安全性越高, 但是计算时间会越长, 方案效率越低; 另一方面, 阈值比例越小, 计算时间会越短, 方案效率越高, 但是交易数据修改权由更少的节点掌控, 方案安全性越低.本文通过实验测试, 权衡安全性与效率两方面, 选定阈值比例为80%, 具体实验过程在第3.3节展开.

2.3 数据修改安全性分析

可修改区块链实现了交易数据的合法修改, 该操作不会破坏已有区块链结构, 也不改变除修改数据外的其他区块数据.其安全性体现在修改操作的合法性, 也即交易数据的修改操作是代表系统意志, 符合系统利益的, 恶意非法的修改操作无法完成.

为了说明可修改区块链方案的安全性, 下面模拟恶意敌手在不符合系统利益时, 企图将区块i的交易子块τi恶意修改为${\tau '_i}$, 以谋取私利的过程.由方案设计可知, 恶意攻击的条件为:修改区块的节点小于阈值Q.如第2.2节分析, 为了使修改后的数据被系统认可, 数据必须符合原始区块链接结构.敌手可采取以下两种方法.

(1)   从当前区块i出发, 向后依此调整每个签名子块数据, 使τi修改为${\tau '_i}$后, 前后区块链接关系仍然正确;

(2)   调整当前签名子块中的机动因子Gi, 使得交易字块变为${\tau '_i}$的同时, 签名子块σi, G保持不变.

对于方法(1), 由于τi变为${\tau '_i}$, σi, G随之变为${\sigma '_{i, G}}$, 因此, σi+1, Gζσ需重新生成.以此类推, 区块i后所有签名子块都需重新生成, 从区块i开始后的整条链被颠覆, 这需要耗费巨大的计算量, 不具有现实操作性.

对于方法(2), 为确保$Hash({\tau _i}) \oplus {G_i}(x_i^1, x_i^2, ..., x_i^Q) = Hash({\tau '_i}) \oplus {G_i}(x\prime_i^1, x\prime_i^2, ..., x\prime_i^Q)$成立, 敌手需要对Q个陷门单向函数求逆, 计算新的随机数组.由陷门单向函数的性质, 敌手必须获取Q名矿工的陷门, 才能完成陷门单向函数求逆, 否则计算上不可行.而由恶意攻击条件可知, 此时修改区块的节点数小于Q, 无法获取Q个陷门, 修改操作无法完成.综上, 如果要求修改的节点达不到规定的阈值, 则不能进行区块数据的修改, 可修改的区块链方案是安全有效的.

3 实验仿真

本节进行仿真实验, 对POSpace共识下的挖矿、区块生成和交易数据修改过程进行模拟.挖矿节点用Intel i5 Processor(2.4GHz, 4G memory)模拟, 并在Visual Studio Ultimate开发环境下, 使用C++语言编程实现.在区块生成与修改时, 哈希函数、签名算法以及陷门单向函数分别使用SHA-256, DSA-512和ECC-200实现.

3.1 基于POSpace共识机制的记账权竞争

仿真实验基于图 9的有向无环图, 模拟基于POSpace共识机制的记账权竞争过程.

Fig. 9 Directed graph of system 图 9 系统有向图

当前系统中序号1~10的矿工空间存储信息情况见表 1.

Table 1 Store information of the miner vertex in directed graph 表 1 矿工有向图顶点存储信息

系统初始化时, 矿工利用相关参数对有向无环图的各顶点标签值进行计算, 并依据各自的存储空间大小进行最优存储, 具体存储情况见表 1.无法进行全图存储的节点将利用已存储的顶点标签值计算未存储顶点的标签值, 实现对有向无环图的恢复.每一轮空间竞争中, 系统将充当验证者向矿工充当的证明者发起挑战, 记为C(c1, c2, …, ck), 也即顶点序号集合.证明者需返回C中各顶点对应的标签值.很显然, 空间越大, 存储的顶点越多, 越能尽快返回结果.存储顶点数少的证明者只能牺牲时间, 计算未存储的顶点标签值再返回.因此空间越大, 竞争成功概率越高.以上便是基于空间竞争的挖矿过程, 具体细节详见文献[10].本实验模拟多次竞争过程, 记录不同挑战下各矿工的证明时间, 部分结果如表 2所示.

Table 2 Space proof time comparison of multiple miners 表 2 多名矿工空间证明时间比较

表 2可以看出:本地空间越大、存储顶点数越多的证明者即矿工10, 返回证明结果的时间越短, 成功挖矿概率越大.这符合Pospace共识机制下, 区块记账权竞争的基本过程.

3.2 新区块的生成

本节模拟区块生成过程, 在第3.1节模拟的空间竞争中胜出的矿工获得记账权, 可发布相应区块.以区块72为例, 其记账者为矿工10, 挖矿排名交易消息ctx={ranking, 90F2246A, A, 9, 8, 5, 7, 4, 3, 2}, Q/N=80%(80%的设置原因在第3.3节展开), N=10, Q=8.如第2.1节节介绍, 区块72包含φ72, σ72, Gτ72, 其中, φ72, τ72分别为证明子块与交易字块, 由实验测试得:

●  φ72=1c98228c2086fbd9d74b4645eba94d151d47fd9ecdcb0287729caf52b76906b8;

●  τ72={72, ctx}, ctx包含25条交易信息.

下面主要对新构建的σ72, G生成过程进行介绍.σ72, G={i, ζ(Hash(τ)⊕G), ζσ}, i=72;

ζ(Hash(τ)⊕G)为记账者关于Hash(τ)⊕G的DSA签名, 其中,

$G = {G_{72}}(x_{72}^1, x_{72}^2, ..., x_{72}^8) = {g_{P_{72}^1}}(x_{72}^1)||{g_{P_{72}^2}}(x_{72}^2)||...||{g_{P_{72}^8}}(x_{72}^8).$

$P_{72}^1, P_{72}^2, ..., P_{72}^8$分别为矿工10, 9, 8, 5, 7, 4, 3, 2的公钥, 即挖矿排名前8位的矿工.实验中, ${g_{P_{72}^j}}(j = 1, 2, ..., 8)$使用ECC-200实现, 当${g_{P_{72}^j}}(j = 1, 2, ..., 8)$输出长度为200bit时, G的长为200×8bit.为了使得每个${g_{P_{72}^j}}(j = 1, 2, ..., 8)$都参与Hash(τ)⊕G结果的构建, 防止Hash(τ)⊕G结果被部分矿工掌控, 取Hash(τ)=Hash256(μ1||τ72)||…||Hash256(μ6||τ72), 其中, μ1, μ2, …, μ6为随机数, 剩余位补零, 使得Hash(τ)与G长度相等.最终计算得:

$ {\zeta _{Hash({\tau _{72}}) \oplus {G_{72}}}} = {\rm{A2BF2998C76CD6415EEB8E102F4D72DEC0D38EC9}}; $

ζσ则为记账者关于σ71, G的DSA签名, ζσ=4B66BF0111FCD4841DD75621535870049130F182.

因此,

$ \begin{array}{l} {\sigma _{72, G}} = \left\{ {{\rm{72, A2BF2998C76CD6415EEB8E102F4D72DEC0D38EC9, }}} \right.\\ \left. {\;\;\;\;\;\;\;\;\;\;\;\;\;{\rm{4B66BF0111FCD4841DD75621535870049130F182}}} \right\}. \end{array} $

随后, 矿工10将以上数据打包成区块并发布, 经过全网验证通过后, 区块72正式上链, 其余区块生成过程同理.图 10为实验模拟生成的连续3个区块具体数据:

Fig. 10 Original data of block 71~73 图 10 原始71~73区块数据

3.3 区块数据的修改

本节对上链交易数据的修改操作进行模拟.如图 10所示, 区块72上有一条交易:

$ “\left( \text{payment, C012AE53, }\left( \text{950D6388, 91, 6073925CD72FCF79208A}\ldots \right), \left( \text{D}8353289, 330 \right) \right)”. $

假设后续有节点发现, 曾经由于恶意节点发起双花攻击, 区块71~73等所在的当前主链被另一条侧链颠覆, 使系统在认可该笔交易后, 又认可与该交易输入账户相同、输出账户不同的另一笔等额交易, 使输入账户实现双花.为弥补该攻击造成的后果, 可认为原本流入公钥为D8353289的受益方的金额又再次流向了另一个账户, 也即该笔交易中受益方的实际收益并非330, 而是0, 该条上链交易数据需要修改.节点于2019年3月13日向全网广播一条交易修改请求:

$ \begin{array}{l} {\mathop{\rm Re}\nolimits} viseTx{\rm{ = 72, double spending, }}\left( {{\rm{payment, C012AE53, }}\left( {{\rm{950D6388, 91, 6073925CD72FCF79208A \ldots }}} \right){\rm{, }}\left( {{\rm{D8353289, }}} \right.} \right.\\ \left. {\left. {\left. {\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;{\rm{330}}} \right)} \right){\rm{, }}\left( {{\rm{payment, C012AE53, }}\left( {{\rm{950D6388, 91, 6073925CD72FCF79208A \ldots }}} \right){\rm{, }}\left( {{\rm{D8353289, 0}}} \right)} \right)} \right\}{\rm{.}} \end{array} $

对应的矿工10, 9, 8, 5, 7, 4, 3, 2收到该请求后, 将对其合法性进行认证.发现合法, 便根据ReviseTx和原始交易子块τ72生成新交易子块${\tau '_{72}}$.

进一步, 根据$Hash({\tau _{72}}) \oplus {G_{72}}(x_{72}^1, x_{72}^2, ..., x_{72}^8) = Hash({\tau '_{72}}) \oplus {G_{72}}(x\prime_{72}^1, x\prime_{72}^2, ..., x\prime_{72}^8)$求得${G_{72}}(x\prime_{72}^1, x\prime_{72}^2, ..., x\prime_{72}^8)$.然后, 8名矿工使用各自私钥, 做ECC-200解密计算:

$x\prime_{72}^j = D_{P_{72}^j}^{ECC}({g'_{P_{72}^j}})(j = 1, 2, ..., 8)$ .

从而得到新的专属随机数:$x\prime_{72}^1, x\prime_{72}^2, ..., x\prime_{72}^8$.

其中,

$ {\tau '_{P_{72}^1}} = {\rm{DC93EB15EBE13BBBDA05FFD86464ED11A126FA3286615B6052}}. $

矿工10利用私钥:973DBCD86EDE25F932599C1B79BC0953, 对其进行ECC-200解密, 求得:

$ x\prime_{72}^1 = {\rm{5E0A3313E4FB185A377A6A00AE95C4EB4DD27CD498D9DE7F4A}}. $

编程运行如图 11所示.

Fig. 11 Parameters calculation 图 11 参数获取

$ x\prime_{72}^2, ..., x\prime_{72}^8 $求解同理, 矿工随后在全网更新随机数.由陷门单向函数性质可知, 同时拥有8名矿工的私钥才可完成.最后, 8名矿工将区块72的交易子块由τ72变更为${\tau '_{72}}$, 并生成相应的修改记录, 作为一条溯源交易信息放入交易池, 以供后续矿工打包上链, 该交易消息为

$ \begin{array}{l} ctx = \left( {{\rm{revise, 531694D0, 20190313, 72, double spending, }}\left( {{\rm{15347EFD0B \ldots , 204D562128 \ldots , 19A87E1029 \ldots , }}} \right.} \right.\\ \;\;\;\;\;\;\;\;\;\;\left. {{\rm{3959191C54 \ldots , 2F75D24A42 \ldots , 411BE1FE2D \ldots , 3651CB06D6 \ldots , 2515C96F5 \ldots }}} \right), \left( {{\rm{5E0A3313E4 \ldots , }}} \right.\\ \;\;\;\;\;\;\;\;\;\;{\rm{CE441CDD19 \ldots , C9E73B440E \ldots , 1F8B5086DF \ldots , 971E915B1A \ldots , B3C28D3E58 \ldots , F2648076ED \ldots , }}\\ \left. {\;\;\;\;\;\;\;\;\;\;{\rm{D569C22260 \ldots }}} \right), \left( {{\rm{payment, C012AE53, }}\left( {{\rm{950D6388, 91, 6073925CD72FCF79208A \ldots }}} \right){\rm{, }}\left( {{\rm{D8353289, 330}}} \right)} \right), \\ \left. {\;\;\;\;\;\;\;\;\;\;\left( {{\rm{payment, C012AE53, }}\left( {{\rm{950D6388, 91, 6073925CD72FCF79208A \ldots }}} \right){\rm{, }}\left( {{\rm{D8353289, 0}}} \right)} \right)} \right). \end{array} $

至此, 整个交易数据修改过程全部完成, 修改后区块数据如图 12, 黑体部分为改变后的交易数据.验证可知:各区块间链接关系及区块结构不变的同时, 交易数据已按照要求修改, 合法的数据修改操作完成.

Fig. 12 Data of block 71~73 after revision 图 12 数据修改后的71~73区块数据

最后, 我们对方案效率进行分析.如第2.2节所述, 阈值比例的设置需权衡方案安全性及效率, 阈值比例越高, 修改权由更多节点掌控, 安全性越高; 但修改参与节点越多, 耗时越久, 方案效率越低.我们对不同阈值比例下的区块生成及修改耗时进行测试, 结果如表 3所示.其中, 为使修改权由系统大多数节点控制, 阈值比例应大于50%, 因此, 合法阈值集合为:{60%, 70%, 80%, 90%, 100%}.

Table 3 Time comparison of block generation and modification under different threshold ratio 表 3 不同阈值比例下区块生成和修改耗时对比

表 3可知:

●  不同阈值比例下, 生成区块耗时两两大约相差0.1s, 占比小于3%;

●  但修改区块耗时上, 阈值比例在60%~80%时, 两两相差小于0.1s, 修改与生成区块的耗时占比较为接近, 在30%左右;

●  而阈值比例在80%~100%时, 两两耗时差大幅增加, 约在0.4s左右, 且修改与生成区块耗时占比超过40%, 对方案效率影响显著.

因此, 当阈值超过80%时, 修改区块耗时明显增加, 耗时占比超过40%, 方案效率不高; 而阈值比例为60%, 70%时, 方案效率与80%相差不大, 但安全性不及后者.

因此, 权衡方案安全性与执行效率, 最佳阈值比例设为80%.

表 4中, 我们给出了阈值比例为80%时, 区块生成及修改的具体耗时.由表 4可知, 区块生成和修改的平均耗时分别为3.8404s和1.1984s, 区块修改耗时不超过区块生成耗时的1/3, 具有可操作性.

Table 4 Time of block generation and modification under the threshold of 80% 表 4 阈值比例为80%时区块生成和修改耗时

4 结论

本文在POSpace共识机制下, 基于陷门单向函数, 提出了可修改的区块链方案.通过引入机动因子, 重构区块的签名子块, 在区块数据需要修改时, 只要特定阈值数的节点同意, 便可实现区块数据的合法修改, 且不破坏区块的链接结构, 全网仍可按原始验证方式对数据合法性进行验证.仿真实验表明:区块修改不超过区块生成耗时的1/3, 具有可操作性.同时, 阈值的设定使得恶意的非法修改无法完成, 保证了数据修改的安全性.因此, 可修改的区块链可兼顾数据修改的安全性与执行效率, 使区块链系统更加完善, 适用性更强.

参考文献
[1]
Nakamoto S. Bitcoin: A peer-to-peer electronic cash system. 2009. https://bitcoin.org/bitcoin.pdf
[2]
Li XQ, Jiang P, Chen T, Luo XP, Wen QY. A survey on the security of blockchain systems. Future Generation Computer Systems, 2017. [doi:10.1016/j.future.2017.08.0200167-739X]
[3]
Yuan Y, Wang FY. Blockchain:The state of the art and future trends. Acta Automatica Sinica, 2016, 42(4): 481-494(in Chinese with English abstract). http://www.cnki.com.cn/Article/CJFDTotal-MOTO201604001.htm
[4]
Garay J, Kiayias A, Leonardos N, et al. The Bitcoin backbone protocol:Analysis and applications. In:Proc. of the 34th Annual Int'l Conf. on the Theory and Applications of Cryptographic Techniques. Springer, 2015, 281-310.
[5]
King S, Nadal S. Ppcoin:Peer-to-Peer Crypto-Currency with Proof-of-Stake. Self-Published Paper, 2012, 19.
[6]
[7]
Aggelos K, Alexander R, Bernardo D, et al. Ouroboros: A provably secure proof-of-stake blockchain protocol. In: Proc. of the 37th Annual Int'l Cryptology Conf. Springer-Verlag, 2017. 357-388.
[8]
[9]
Fabian S, Daniel L. Bitshares 2.0: Financial smart contract platform. 2015. https://www.weusecoins.com/assets/pdf/library/Bitshares%20Financial%20Platform.pdf
[10]
Park S, Kwon A, Fuchsbauer G. SpaceMint: A cryptocurrency based on proofs of space. In: Proc. of the 22nd Int'l Conf. Springer, 2017.
[11]
Krawczyk H, Rabin T. Chameleon hashing and signatures. US Patent 6108783, 2000-08-22.
[12]
Li PL, Xu HX, Ma TJ. Research on fault-correcting blockchain technology. Journal of Cryptologic Research, 2018, 5(5): 501-509(in Chinese with English abstract). http://www.cnki.com.cn/Article/CJFDTotal-MMXB201805005.htm
[13]
Ren YL, Xu DT, Zhang XP, et al. Delegable blockchain based on an threshold ring signature scheme. Journal on Communications, 2019, 40(4): 71-82(in Chinese with English abstract). http://www.cnki.com.cn/Article/CJFDTotal-TXXB201904008.htm
[14]
Jacques P, Louis G. Trapdoor one-way permutations and multivariate polynomials. In: Proc. of the First Int'l Conf. on Information and Communications Security, Vol.1334. Springer-Verlag, 1997. 356-368.
[15]
Diffie W, Hellman M. New direction in cryptography. IEEE Trans. on Information Theory, 1976, 22(6): 644-654. [doi:10.1109/TIT.1976.1055638]
[16]
Eyal I, Sirer EG. Majority is not enough:Bitcoin mining is vulnerable. Communications of the ACM. ACM, 2018, 61(7): 95-102. [doi:10.1145/3212998]
[17]
Koblitz N. Elliptic curve cryptosystems. Mathematics of Computation, 1987, 48: 203-209. [doi:10.1090/S0025-5718-1987-0866109-5]
[18]
Gu ZL, Zheng SH, Yang YX. Modern Cryptography. 2nd ed. Beijing: Beijing University of Posts and Telecommunications Press, 2015: 190-207.
[3]
袁勇, 王飞跃. 区块链技术发展现状与展望. 自动化学报, 2016, 42(4): 481-494. http://www.cnki.com.cn/Article/CJFDTotal-MOTO201604001.htm
[12]
李佩丽, 徐海霞, 马添军. 可更改区块链技术研究. 密码学报, 2018, 5(5): 501-509. http://www.cnki.com.cn/Article/CJFDTotal-MMXB201805005.htm
[13]
任艳丽, 徐丹婷, 张新鹏, 等. 基于门限环签名的可删除区块链. 通信学报, 2019, 40(4): 71-82. http://www.cnki.com.cn/Article/CJFDTotal-TXXB201904008.htm
[18]
谷利泽, 郑世慧, 杨义先. 现代密码学教程. 第2版. 北京: 北京邮电大学出版社, 2015: 190-207.