徐单恒, 龚建新
(1.浙江工商大学 人文与传播学院, 浙江 杭州 310000;2.南京农业大学 信息科技学院, 江苏 南京 210000)
第三方电子数据存证应具备易储存、传输效率高、低成本和易建立等特性,属于具备较高的可信任性及证明性的电子数据证据[1-2]。然而当前的第三方电子数据存证依然存在较多的问题,一方面是当下所具备的存证方法大多需具备第三方平台,而在处理关于法律事务时第三方平台会具有较多的重复数据,令查询数据时的效率过低;另一方面是第三方平台所存储数据容易遭受篡改和遗失,可信任性和安全性均较低[3]。区块链是一个共享数据库,存储于其中的数据或信息,具有“不可伪造”“全程留痕”“可以追溯”“公开透明”“集体维护”等特征。基于这些特征,区块链技术奠定了坚实的“信任”基础,创造了可靠的“合作”机制,能够提升第三方电子数据存证时数据的可信任性与完整性。
区块链属于一个去中心化的数据库,能够自中心化机构向全部加入运算的个体上转移可信关系,通过区块链内的网络节点采用共识机制检验远端的各交易,且其交易记录具有不可篡改的特点[4]。在当前持续变化的区块链应用环境中,以太坊的应用逐渐增多,可设计集合各种功能模块[5-6]。基于此,本文提出基于区块链技术的第三方电子数据存证方法,提高第三方电子数据的存证效率与存储安全性。
以太坊(Ethereum)是建立在账户基础上的模型,可针对状态数据对繁琐的业务逻辑予以处理。以太坊的智能合约使得网络的作用与计算平台相近,存证时通过以太坊构建对等网络,当共识节点履行合约后,以太坊内的节点均能够遵守对应的标准,达到分布式存证第三方电子数据的目的,并实现可信任存证[7-9]。第三方电子数据分布式存证的过程为:建立以太坊账户、智能合约部署及调用智能合约。
1.1.1 建立以太坊账户
本文采用Geth(Go Ethereum)作为以太坊集成开发环境(Integrated Development Environment,IDE),其由以太坊基金会所提供的作为实现以太坊节点运行的Go语言客户端程序开发,并通过能够同智能合约以交互的方式实现去中心化应用程序(Decentralized App,DApp)协同开发,对区块链作用进行拓展。以太坊由内部账户与外部账户组成,通过部署智能合约建立内部账户,并面向以太坊客户端创建外部账户[10-11]。通过设定以太坊参数Nonce(任意数)、GasLimit(Gas限制额)及Difficulty(难度目标)等实现在Geth中建立创世区块。第三方电子数据的存储地址建立在线下节点中,并采用密钥存储库(KeyStore)和ChainData分别存储线下节点中全部账户文件与区块信息。对以太坊节点的开启可通过设定网络监控端口和用来划分各个网络的独有标识ID实现,以太坊外部账户可采用individual.new accounts命令建立。
1.1.2 智能合约部署
智能合约部署即以太坊交易,需通过外部账户实现部署,完成部署后将回到合约账户和合约地址建立合约账户[12-13]。在此将智能合约部署划分成4个过程,具体如下。
(1) 可信任存证合约代码编写。可信任存证合约代码通过Firmness实现编写。采用某个大小不特定字符串类别的状态变量在智能合约内对已完成集中式统一处理的存证数据予以声明,以字符串变量作为存证函数的输入,通过声明存证函数实现变量值的存储,完成交易执行之后回到交易哈希。将存证函数的输入作为取证函数的输出,通过对取证函数予以声明得到变量值,回到区块内最新存储的数据[14-16]。任何人在合约中存储大小不特定的字符串时此合约均予以准许,且任何人均能够访问该数据,对于用户的发布无有效的预防办法。同时任何人都能够对存证函数进行重新调用,存储不同数据实现对原先字符串的遮盖,由于原始数据依然在区块链的以往区块内储存,不能去掉和修改,所以若想增添访问权限,可通过设定合约函数保证仅准许固定用户能够访问存证函数。
(2) 智能合约编译。通过在线编译器Remix编译智能合约为以太坊虚拟机(Ethereum Virtual Machine,EVM)字节码得到应用程序二进制接口(Application Binary Interface,ABI)与合约二进制码。合约函数的返回值与调用签名通过ABI描述,并且智能合约的基本交互方式也为ABI,其中的交互是指以太坊所具备合约间的交互及区块链外部同合约间的交互。
(3) 以太坊节点开启。
(4) 智能合约部署。合约账户的建立通过建立合约对象,并对EVM字节码和交易分别予以声明与部署实现。此交易由智能合约内容、外部账户地址和合约账户地址组成,采用Kecca-256加密算法以发送的交易数与部署者外部账户为任意数输入生成合约账户[17-18]。通过设定矿工账户、账户解锁、交易发送、开启挖矿和查验账户五步实现外部账户交易,其中在完成交易发送之后,即将被打包的交易次数将呈现在交易池内,矿工通过耗费一些Gas完成挖矿并产生新的区块,在新区块内存储交易信息,采用Geth远程过程调用(Remote Procedure Call Protocol,RPC)向以太坊网络发送字节码,通过全网验证之后可向由Geth管控的区块链内输入。
1.1.3 智能合约调用
智能合约可通过SettingData()、SettingData. shout和SettingData. sendingTransaction 3种方式实现调用。三者之间存在的差异为:SettingData()方式中,当合约函数的代码不存在Constant标识时,执行的操作为SendingTransaction,当合约函数的代码具有Constant标识时,执行的操作为Shout本地调用;SettingData. shout方式属于本地调用,其返回值由合约内函数的详细代码决定,不存在耗费Gas的问题,所有信息不会传播到区块链网络;SettingData.sendingTransaction方式可建立新的交易,打包交易之后回到某个交易哈希值向网络内传播,将导致耗费Gas。在此智能合约调用采用SettingData()方式,并且合约函数代码不存在Constant标识,其整体调用和部署过程如图1所示。在合约状况值产生变化的情况下进行智能合约调用时,此调用为交易,挖矿打包交易时需矿工耗费Gas。合约实例可通过对智能合约ABI于以太坊平台上予以声明得到,这时为回到代码内所设定的合约标准可通过输入合约名称实现,采用SettingData()方式,参数增添经过统一处理的存证数据,实现交易之后回到交易哈希值,方便以后对区块进行定位与查找访问存证数据。
图1 智能合约存证过程图
门限环签名可确保一个成员集合内最少具备数个成员加入到签名当中,并且对签名成员的身份予以保密,其满足避免仿造与无约束匿名等安全性需要[19]。其中不可仿造即为外来攻击者,若想仿造合法的门限环签名,应具备n个签名成员的私钥方可实现仿造[20];无约束匿名即为即使攻击者得到全部有可能加入签名成员的私钥,并拥有超强的运算能力,对于哪个成员加入门限环签名其所能确准的概率仍然不会高出n/m,其中n和m分别表示门限值与有可能加入签名成员的数量。在基于区块链的第三方电子数据存证中运用门限环签名过程,提升第三方电子存证数据的安全性。
在此列出所需要的符号与各符号对应的意义,便于之后的阐述,分别为T、Qpub、g表示主密钥、公钥及局部签名私钥;R1生成元、门限环成员、应用限期依次用Q、JBj、S表示;A和M表示具有m个成员的集合与具有n个成员的集合;φ和t表示门限环签名和等待被签名的报文。
1.3.1 密钥生成
门限环签名算法过程分为密钥生成、签名过程和检验过程3个步骤,具体如下。
(2) 各门限环成员JBj运算式为Gji=ej(i)tlbp,i=1,2,…,m;
(3) 各门限环成员JBj向JBi发送Gji,同时将GjQ,cj,1Q,…,cj,n-1Q公开;
1.3.2 签名过程
设置A={JB1,JB2,…,JBm}表示m个门限环成员所组成的集合,用M={JB1,JB2,…,JBn}表示现实中签名人的集合。具体签名过程如下。
1.3.3 检验过程
为检验本文方法的可行性及扩展性,通过仿真实验模拟本文方法于局域网内的第三方电子数据存证和门限环签名过程,实验所处检测环境是:通过 Web3j 实现 Java 外部调用部署在 Ethereum 上的智能合约设置3台服务器在局域网中,将各服务端程序共同运作,同用户端交互数据,如图2所示。
图2 智能合约的调用
实验选择12条大小不等的第三方电子数据文件检验本文方法的性能,文件大小为300 kB—3 600 kB,分别检验本文方法的存证过程与门限环签名过程,再综合分析两方面的检验结果,验证本文方法总体性能。
当用户成功进入到系统界面后,用户可以将个人信息和账号地址信息输入后进行系统电子数据上传、下载、查询、比对和授权功能的测试样例及结果测试。用户可以成功地获取到查询的文件信息与文件对比结果信息,可以得出原文件未被修改,成功存证。主要原因在于本文方法引入了区块链技术,防止第三方电子数据存储遭受篡改和遗失,为提升数据存证速率与安全性提供保障。
检验本文方法进行实验第三方电子数据存证过程中的数据验证率,分析本文方法的实际应用性能,各条数据文件的数据验证率如表1所示。
通过表1能够看出,本文方法存证的第三方电子数据的数据验证准确率均为100%,说明本文方法存证性能好。
表1 数据验证率
记录本文方法每次进行分布式存证各条大小不同数据文件所消耗的时间,依据检测记录结果绘制本文方法存证过程的消耗时间柱形图,如图3所示。
图3 不同文件大小存证消耗时间
通过图3能够看出,本文方法在对大小不同的第三方电子数据文件进行存证时,随数据文件增大消耗时间大致呈现上升趋势,且12条大小不同数据文件的平均大小是1 950 kB,平均消耗时间为62.9 ms,可以得出本文方法的存证消耗时间较短,存证效率较高。
对采用本文方法对实验中各条存证数据文件进行门限环签名密钥保护,记录每次所用时间,并以此为依据运算出本文方法中门限环签名的平均消耗时间,对其效率予以分析。各次消耗时间的具体记录如表2所示。
表2 各次消耗时间记录
通过分析表2能够得出,本文方法进行门限环签名时,12次密钥生成所消耗的平均时间为4.9 ms,签名过程所消耗的平均时间为5.0 ms,检验过程所消耗的平均时间为5.3 ms,总体过程的平均消耗时间为15.3 ms,说明本文方法中针对第三方电子数据存证保护的门限环签名过程耗时短效率高,且不受数据文件大小影响。
为综合分析存证效率与门限环签名效率,对本文方法的整体效率予以分析,现结合2.2小节和2.3小节中的实验结果,绘制本文方法的整体消耗时长曲线图,如图4所示。
图4 本文方法整体消耗时间
通过图4可看出,本文方法的整体消耗时间在56.2 ms—102.0 ms之间,整体平均消耗时间为78.4 ms,整体平均耗时不足0.1 s,由此说明本文方法的整体效率较高,实际应用中更省时。
综上所述,本文方法的整体效率较高,数据验证准确性极为优越,实际应用中不仅能够快速存证,并且能够快速对存证数据予以门限环签名安全保护,提升存证数据的安全性。
本文针对基于区块链技术的第三方电子数据存证方法展开研究,通过构建以太坊账户并以此部署及调用智能合约,完成分布式存证第三方电子数据的目的,并且通过门限环签名算法保障存证数据的安全性。实验验证本文方法具有较高的效率与精准的数据验证率。下一步工作可以考虑对不同类型的用户原数据,采用分片哈希、细粒度完整性校验或更安全高效的技术方法,在保障数据真实完整的同时,实现对原数据的安全存证。