APP下载

面向电子证照共享的区块链技术方案研究与实现

2020-08-19王浩亮廉玉忠王丽莉

计算机工程 2020年8期
关键词:以太证照合约

王浩亮,廉玉忠,王丽莉

(东莞理工学院城市学院 计算机与信息学院,广东 东莞 523000)

0 概述

电子证照库系统以信息技术作为中介取代持证方的中介作用,解放持证方的保管与携带证照负担,为用证方提供及时、准确、全面的信息,是智慧城市建设的重要组成部分,已成为公民活动办事的电子凭证,可助力电子证照资源跨地区、跨部门、跨层级共享。然而,传统智慧城市建设以各自城市为中心,缺少顶层设计与统筹协调,制约了电子证照库信息手段效能发挥,其存在的主要问题如下:电子证照数据来源各地区或部门组织,信息采集和应用过程中权责不分,一旦数据信息有误,对数据追溯困难;电子证照存储在各管理部门的数据库中,信息存储分散,独立性强,产生大量“数据孤岛”,由于采用各区域中心化架构,信息泄露安全隐患大,存在数据存储不完整和人为篡改的可能性,信息的真实性和完整性不易分辨,使得各参与主体间的信任度大幅降低;电子证照库的数字证书和电子签章来自于各部门业务应用系统,没有统一标准且不互通互认,难以统一,而且跨层级、跨部门、跨业务的数据共享和开发力度不够,电子证照信息难以全面归集与快速检索。

区块链[1]被认为是第5个最有潜力引发颠覆性革命的核心技术之一,逐渐被世界各国认可[2],区块链对链上信息分区块存储,将前后区块运用加密验证方式进行链接[3],从而形成不可篡改的链式数据存储方式,然后将链式数据分散在组网内所有节点上[4],有效防止单个节点数据遭到篡改或遗失,实现去中心化的分布式数据管理和不完全可信环境中的可信数据管理[5],具有防篡改、不可抵赖、强一致和完整性等特性[6]。2018年11月,国家市场监督管理总局、国家标准化管理委员会、国家电子文件管理部际联席会议办公室(国家密码管理局)、国务院办公厅电子政务办公室联合发布电子证照系列国家标准,为国家电子证照库和基础平台建设,实现跨层级、跨部门电子证照互认共享、资源整合等提供了标准支撑,也是新型智慧城市建设由从单点布局向全局规划的拓展,但同时电子证照的应用还处于起步阶段。

针对上述传统电子证照研究存在的不足,本文运用区块链技术实现电子证照数据的链上、链下存储和查询,依靠智能合约进行链上证照交易,为电子政务提供便利。

1 相关技术

1.1 区块链技术

区块链来自于中本聪提出的比特币(Bitcoin),成为以数字货币为代表的区块链1.0[7]。以太坊(Ethereum)平台以去中心化的特性解决了比特币扩展性不足问题,成为以智能合约功能为代表的区块链2.0[8]。目前,应用于金融、科学、政务、医疗、教育等领域区块链3.0时代已经到来。

区块链是一种分布式的、不断增长的、共享的区块分类账[9],整个区块链由多个区块(Block)组成,各区块包括区块头(BlockHead)和区块体(BlockBody)。区块头记录着识别区块的唯一标志,多个区块组成完整的区块链,结构如图1所示。

图1 区块链结构Fig.1 Blockchain structure

各区块通过哈希函数生成的数字指纹以加密方式密封。每个块通过引用其散列值[10]“链接”到前一个块,综合运用点对点传输、加密算法、共识机制、分布式数据存储等技术,形成不可篡改的区块链数据存储方式,将链式数据及时共享到所有节点服务器中,有效防止单个节点数据遭到篡改或遗失。因此,通过区块链多中心提供存储和服务的技术,实现电子证照信息真实不可篡改的可行性,充分利用区块链的可追溯、共享账本、不对称加密的特征来建设电子证照库,具有更好的真实性、安全性和可行性。综合上述特点可有效应对电子证照应用面临的问题。

1.2 以太坊

以太坊是一个具有智能合约的开源公共区块链平台[11]。智能合约相当于以太坊中的法律,是区块链上的去中心化、可复制可信共享程序代码[12-13]。在以太坊中,所有的交易都按照合约定义的操作执行。

基于以太坊的建链过程,根据开发程度[14]可分为公有链、联盟链和私有链。国家机关针对全民开发共享的证照可以采用公有链,地方政府或各企业部门之间对特定的群体开放的电子证照可以采用联盟链,各组织内部对各部门之间共享的电子证照可以采用私有链[15]。

1.3 以太坊应用

自以太坊诞生以来,学者对区块链应用进行了大量的研究与探讨,文献[16-17]将以太坊应用在电子拍卖系统,通过精心设计的智能合约防止操纵拍卖和用户出价隐私,实现了在没有可信第三方的情况下安全交易。文献[18]提出基于区块链和以太坊的物联网安全和隐私问题的一些可能解决方案。文献[19]设计了基于区块链的分布式账本,以防篡改的方式存储从物联网智能计量设备收集的能源消耗信息,用于智能电网层面的能源需求与生产匹配,并在以太坊平台上实现了原型验证。文献[20]实现了去中心化众筹平台,提供多个基于以太坊平台的智能合约模板,方便用户创建符合自身的众筹项目。随着人工智能和深度学习技术的兴起,假数字内容大量出现,人们采用一种基于Ethereum智能合约的解决方案和总体框架,即使数字内容被多次复制,也能追踪和跟踪数字内容的来源和历史[21]。

区块链技术在金融、物联网、能源等领域得到众多学者关注,并通过以太坊平台验证了其原型系统的数据加密、防篡改和可追溯等特性。但是,区块链在电子证照相关领域的学术文献较少且主要为理论研究[22],缺少可行的技术方案研究。因此,本文通过搭建基于以太坊的区块链环境研究电子证照库原型系统的实现方案。

本文的主要贡献如下:

1)基于区块链技术,通过以太坊平台建立分布式多账本,对电子证照信息分区块存储,对前后区块链接通过加密验证,保证了信息真实不可篡改,实现了电子证照数据的可信、可追溯。

2)采用区块链技术的不对称加密方式,发证方将每条电子证件信息通过公钥加密上链共享,每条信息对应有单独的解密私钥并由持证方保管,可有效防止信息泄露,保证隐私安全。

3)基于区块链技术的平权、共建的特点,构建归属各部门的目录体系,以共建共享的原则对各参与主体的上链信息全面归集、共享,同时在建立电子证照信息链的基础上增加索引信息,从而实现快速检索功能。

2 电子证照库系统构建

系统基于以太坊智能合约平台构建私有链,将电子证照库与区块链技术相结合,主要功能为证照数据链上链下存储,电子证照信息溯源检索采用交易功能。

2.1 系统流程

基于区块链的电子证照库参与主体分为颁证方、持证方和用证方,不同主体对应界面不同。系统流程如图2所示。

图2 系统流程Fig.2 System procedure

颁证方登录平台可以颁发证照,在填入证照名称、编号、所属人、期效等信息后,通过智能合约将证照信息加密上传到信息链上,其中信息链、证照名称和编号组成检索信息上传到检索链,本地数据库保存一份所属人和检索信息的数据便于检索持有人所有证照。

持证方登录平台通过数据库查找自己所属的证照检索信息,并且可以快捷定位到信息链上找到对应的证照区块,用于查看和出示电子证照。出示电子证照时持证方会得到一个经过自己公钥加密后的二维码用于出示。用证方扫码后需经过持证方授权确认,通过持证方的私钥解密并且返回证照信息到用证方。

用证方登录平台根据需要可以扫取二维码,经过持证方授权后查询证照信息,从链上验证数据的真实性,并获得数据信息保存在部门系统。

2.2 系统架构

在区块链以太坊平台上建立电子证照目录索引信息和证照信息链,各行业部门可以建立自己的电子证照子链,通过上传证书请求,申请加入电子证照主链。电子证照数据加密后写入区块链,并生成密钥。

电子证照库系统的体系结构如图3所示,主要包含区块链模块、智能合约模块、数据库模块和客户端模块4个模块。

3 电子证照库系统功能模块

3.1 区块链模块

区块链模块的主要功能是将用户提交的上链数据打包进区块,由网络中参与的节点通过共识机制确认后将区块链接到链末端区块,用来实现数据存储以及数据溯源查询,确保数据的安全性和完整性。

3.1.1 身份验证

首先确保各参与方身份的真实性。系统采用了RSA非对称加密算法,为保证安全使用2 048位的密钥,公钥用于标识系统内用户的身份,私钥用于数字签名,确保用户身份的真实性。数据完整性利用 Keccak 256哈希算法解决,与区块链采用的SHA-256算法相比安全性高,效率明显提升。

在颁证方进行上链操作前,核实和验证证照信息的真实性,用户将已认证的证照信息进行公钥加密,使用证照时需要通过私钥解密,Hash函数通过使用的Keccak 256算法形成摘要,将上一个区块的Hash、随机数、timeStamp传入数据进行加密得到一个长度为256位的字符作为Hash地址。

密钥通过密钥派生树来生成、管理。各个子链的数据密钥由根密钥派生出,子链间的数据互不可见,根密钥拥有者可以查看各个子链的数据。管理部门只需保管根密钥,即可根据派生路径实时派生出各个节点具体的加密密钥。再通过对证照数据进行归类,一类数据的密钥由具体的一个派生路径派生出,并通过分享派生路径上的密钥实现对密钥加密范围内数据的共享。

3.1.2 验证机制

当数据发生变化(新增、被恶意修改)时,会触发验证机制。如果是数据新增会验证计算提交的Hash是否正确、上一个区块Hash是否正确、自身是否为最后一个区块。如果是数据被恶意修改,会重新计算Hash是否正确、验证上一个区块Hash是否正确、下一个区块的前一个区块Hash是否与当前Hash一致。

3.2 智能合约模块

以太坊作为区块链应用上最早提出智能合约的平台,提供支持了图灵完备的脚本语言,允许开发者在平台上开发去中心化应用,创建和执行智能合约。

电子证照库系统在以太坊平台上建立私有链,提供给相关部门访问节点,通过许可对各部门保持中心化。系统提供对应交互接口给不同身份用户,用户提交的数据经过智能合约进行上链存储,通过非对称加密方式保证数据的合法性。在智能合约模式设计方面编写交互接口,将各参与主体所产生的数据进行上链存储、查询和用证交易。

3.2.1 电子证照上链存储查询

颁证方认证电子证照的真实性后对审核通过的数据进行提交,智能合约执行电子证照信息加密并写入链上区块生成密钥,完成电子证照数据上链。系统根据生成区块的哈希索引、私钥以及证照提交方的信息存储在关系型数据库中。数据上链存储查询部分由结构体和存储查询函数组成,结构体中的属性包括电子证照唯一标识 ID 和各参与主体需提交数据的属性。数据上链存储智能合约的部分solidity代码如下:

contract ElectronicLicenseChain {//智能合约

struct ElectronicLicense{

uint license_id;//电子证照唯一标识ID

//颁证用户需提交的数据

uint certificate_institution_id;

bytes32 certificate_institution_name;

//用证用户需提交的数据

uint certification_body_id;

bytes32 certification_body_name;

//持证用户需提交的数据

uint certificate_account_id;

bytes32 certificate_account_name;

//其他数据

}

//从电子证照id到结构体数据的映射

mapping(uint => ElectronicLicense)electroniclicense;

//存储电子证照相关数据

function setElectronicLicense(uint license_id,bytes32 certificate_institution_name,…){

ElectronicLicense storage license_real = electroniclicense[license_id];

license_real.license_id = license_id;

license_real.certificate_institution_name = certificate_institution_name;

}

function setCertificateInstitution(…){…}//存储颁证用

//户的相关数据

function setCertificationBody(…){…}//存储用证用户

//的相关数据

//查询电子证照相关数据

function getElectronicLicense(uint license_id,uint certification_body_id)constant returns(uint,bytes32,…){

ElectronicLicense storage license_real = electroniclicense[license_id];

return (electroniclicense[license_id].license_id

certificate_institution_name,

…);

}

3.2.2 电子证照使用

将传统电子证照使用认证的过程转移到通过以太坊区块链网络中部署的智能合约来进行,持证用户通过用户交互接口获取持有证照的信息提交给用证方。为了提高证照信息的检索交易效率,增加索引信息,将电子证照的信息使用外部数据库进行存储,并使用倒排索引对用户持有的电子证照进行索引。

倒排索引将电子证照名称与电子证照编号集合进行映射,通过名称能够快速定位到电子证照编号,从而进一步查询证照的详细信息。索引结构如图4所示。

图4 电子证照查询倒排索引结构Fig.4 Inverted index structure of electronic certificate inquiry

通过用证机构中的各参与主体来共同制定智能合约,用证方提交信息并调用执行智能合约。根据索引值,在区块链上检索区块并使用持证方的私钥验证电子证照信息的真实性。用证方在区块链上进行证照验证操作,同时作为一个交易被智能合约执行并记录在区块上。部分代码如下:

contract LicensesTransaction {

//持证用户使用电子证照

function useLicense(uint license_id,uint certificate_account_id,uint certification_body_id,uint price){

balances[msg.sender]-=price;

balances[receiver]+=price;

certificationRecord[license_id]= msg.sender;

} }

3.3 数据库模块

系统采用由区块链系统构建的分布式数据存储环境和Web应用需要的关系型数据存储环境。基于区块链系统以太坊技术可视为一个数据库,数据的变更由交易催化。一笔或多笔交易组成一个数据块提交到数据库中,使以太坊客户端为一个去中心化的网络。众多节点对交易的验证共同维护数据的真实性,保证数据的不可篡改。但是分布式数据在区块链上的持久化仍存在交易开销高、数据存储量不足等缺点,为降低成本和提高效率,需要结合关系型数据库系统进行交互。

系统将网络应用交互接口基于关系型数据来维持和运行,用于存储各身份用户账号用户名、哈希加密后的密码和额外的相关信息,如持证用户电子证照的密钥、描述等信息,通过账户信息的关系映射可得到对应区块链的加密信息,提高查询检索用户持有证照的信息效率。图5为存储于MySQL云数据库中的数据结构,主要包括用户表、电子证照表和用户证照索引表。

图5 数据库结构Fig.5 Database structure

3.4 客户端模块

本文系统使用Java语言对客户端模块进行开发,利用Web3J进行智能合约的开发与部署和区块链数据上链的操作,使用HTML+CSS+JS制作客户端,为用户提供可视化操作接口,使用户能够与智能合约进行交互。功能包括颁证方对证照的录入、持证方对证照的查询和用证方对证照的验证。

颁证用户证照录入以及进行合约交易在Web交互接口实现的部分代码如下:

//simpleStorage智能合约

SimpleStorage simpleStorage = SimpleStorage.load

(address,web3j,credentials,BigInteger.valueOf(200000),BigInteger.valueOf(20000000));

byte[] byteValueLen32 = new byte[32];

//cipherData加密的证照字节流

System.arraycopy(cipherData,0,byteValueLen32,0,cipherData.length);

//transactionReceipt上链信息

TransactionReceipt transactionReceipt = simpleStorage.set(byteValueLen32).send();

用证用户证照认证以及进行合约交易在Web交互接口的实现部分代码如下:

//simpleStorage智能合约

SimpleStorage simpleStorage = SimpleStorage.load(address,web3j,credentials,BigInteger.valueOf(200000),BigInteger.valueOf(20000000));

//index索引

BigInteger bigInteger = new BigInteger(index);

//byte经合约查询的加密证照字节流

byte[] bytes = simpleStorage.get(bigInteger).send();

//plainData已解密的证照

byte[] plainData = RSAUtil.decrypt(bytes,keyPair.getPrivate());

4 实验结果与分析

4.1 实验环境搭建

本文系统基于以太坊开发环境搭建,操作系统采用Ubuntu的64位系统。建立私有链,提供给相关部门访问节点,通过许可对各部门保持中心化,部门中用户都可以加入其中成为参与节点读取数据、发送交易、竞争记账。智能合约的开发、编译、测试和部署采用Truffle框架,区块数据的分布式存储采用Leveldb数据库。实验运用以太坊开发者测试网络来配置模拟真实的以太坊网络环境。前端应用基于Java进行开发与合约进行交互,实现对电子证照数据的存储和查询。

4.2 实验过程与结果分析

本文基于Solidity语言编写实现智能合约[23],通过客户端将Solidity源码文件上传,在区块链上进行合约的部署如图6所示。合约编译生成后,通过调用智能合约中的相应函数完成数据的存储。颁证用户在操作界面进行上链数据提交如图7所示,因为电子证照的繁杂和信息不统一,系统输入证照信息时根据数据不同,用户可自行添加输入数据项。

图6 智能合约部署Fig.6 Smart contracts deploy

图7 颁发证照的交互界面Fig.7 Certificate-issuing interactive interface

通过测试网络进行模拟颁证和用证流程,在颁发证照流程中,系统调用智能合约并将证照信息数据记录到区块链,证照信息成功上链后,得到摘要0x3443c68ac52b7eb3085ab76754d6d752fe6a97f82df0 a1379e655a7fb7613882,如图8所示。通过Geth客户端得到区块上链过程数据如图9所示。用证用户用证查询和提交的交互界面如图10所示。用证单位通过持证用户提交的数据信息,根据摘要信息查询校验证照数据信息的证照真实性。

图8 证照提交返回摘要过程Fig.8 Process of certificate submission return summary

图9 证照上链过程Fig.9 Process of certificate up chain

图10 用证查询的交互界面Fig.10 Interactive interface of certificate query

为对比用户数据信息是否被篡改,系统后台通过证照摘要调用合约执行和溯源证照数据,对比用户提交的信息可以验证数据信息是否被篡改,查询过程如图11所示。通过图7和图11的实验对比显示,溯源数据的数据信息与摘要查询的数据信息哈希值一致,可证明数据未被篡改,说明本文提出方法的正确性。

图11 证照查询过程Fig.11 Process of certificate query

考虑数据有被篡改的可能,将图7数据稍作修改并重新提交上传。篡改的数据摘要为0d5ca27eb 3085ab76785acd5ca76fe6a97f82d2ea1e7665c62b5a71a 9082a,验证从区块链上查询的证照信息为空,如图12所示,可以看出输入证照的数据不是有效的。

图12 被篡改证照信息查询Fig.12 Query of tampered certificate information

上述实验在测试网络上完成,说明了电子证照在基于以太坊区块链上的数据安全和防止篡改具有可行性。对比传统的证照系统,使用基于以太坊区块链的电子证照系统只通过Solidity智能合约部署和执行支付少量的虚拟货币,而不需要较大的人力进行维护,简化了操作流程,节省了成本,提高了效率。

5 结束语

本文提出一种面向电子证照共享的区块链技术方案,该方案为基于以太坊的一个去中心化数据共享交易服务系统。将电子证照交易数据上链后打包入区块中以保证数据可追溯性,链下数据存储到数据库降低交易成本。将颁证、用证各个环节的重要数据信息上传存储到区块链中确保其不可篡改、真实可靠,通过智能合约的使用减少持证、用证过程中的人力损耗。实验结果表明,本文电子证照的防篡改和溯源方案具有可行性,链上数据具有可溯源、防篡改等特性。正确运用区块链技术可增强信任体系,有助于电子证照资源跨地区、跨层级共享及强化管理。下一步将继续完善智能合约功能及以实现大规模证照交易数据的区块链管理。

猜你喜欢

以太证照合约
新建核电站项目前期的证照申请与核安全监管浅析
交通运输部海事局公布第二批可在线办理的电子证照清单
以太万物理论概述
电子证照系列基础标准
车易链:做汽车业的“以太坊”
福州电子证照全流程应用开先河
A Study on the Contract Research Organization
以太互联 高效便捷 经济、可靠、易用的小型可编程控制器
合约必守,谁能例外!——对“情势变更”制度不可寄于过高期望