孙昌霞, 马於帅, FERNANDO Bação, 王少参, 张 蕾, 司海平
(1. 河南农业大信息与管理科学学院,河南 郑州 450018; 2. 新里斯本大学信息管理学院,里斯本 1070-312,葡萄牙;3. 中国船舶重工集团公司第七一三研究所,河南 郑州 450015)
区块链是若干个数据块的集合,块与块之间通过哈希值相互关联组成链。它是互联网时代分布式存储、点对点数据传输、共识机制、加密机制等一系列网络技术的创新组合应用模式。互联网的交易需要依赖可信的第三方交易机构,而区块链技术基于密码学的属性使得任何得到共识的双方都可以直接交易,不需要可信第三方的介入,并将所有交易记录在链上,具有公开透明、不可篡改、可追溯等优点,有效地提高了交易的安全性,广泛应用在数字金融、身份验证、产品溯源、信息存储和数据共享等场景[1]。2014 年以太坊将智能合约引入区块链,区块链在金融业开始发展,区块链2.0 时代开启。之后,将区块链应用到其他领域并提供去中心化的解决方案,被定义为区块链3.0 技术。
农作物种质资源作为国家发展的战略性资源,承载着粮食安全和保障民生的重要职责,我国针对农作物种质资源的研究工作经过多年的发展,形成了系统性的种质资源管理工作流程。近年来,农业领域对区块链技术的研究也逐步发展。刘海洋等[2]针对农作物种质资源的数据管理工作提出了一种基于区块链的解决方案,研究了基于区块链的种质资源数据管理方案、存储方案、共识方案和加密方案。刘海洋等[3]提出了种业大数据中应用区块链技术4 层层级架构,分析在种业大数据中应用区块链技术的激励机制、智能合约和密钥机制。秦焕荣[4]依据区块链技术的基本特征,讨论在农作物种业研发生产过程中,运用区块链技术保证种子来源真实性,实现种子研发生产环节的可追溯能力,解决种业市场中的监管难、品种伪劣等问题。由此可见,随着区块链技术的快速发展,其公开透明、安全可靠、可追溯和去中心化的特点为种质资源数据共享及管理工作提供新的研究方向[4]。
本文结合区块链在信息共享、数据安全应用方面的优势,利用区块链中的以太坊架构结合IPFS(分布式文件系统)设计双链存储数据的种质资源安全共享系统,提出基于链上链下协同存储模型及数据信息安全共享加密模型以供读者参考。
哈希函数是使任意长的输入字符串变化成固定长的哈希值的一种函数[5]。哈希函数具备以下特性[6]。①抗碰撞性。已知x,找不到y使得H(x)=H(y),即没有办法篡改内容而又不被检测到。②不可逆性。哈希函数的运算具有单向性,即可以通过x得到H(x),但由H(x)得不到x,即由哈希值无法推得原数据。
Merkle 树是一种哈希二叉树,该算法不直接计算所有哈希值,而是通过每个交易分别计算出哈希值,然后哈希值两两连接再计算出Hash,一直到Merkle 树根部,其结构类似于二叉树。
非对称加密技术是密码学中常用的一种算法,在数据交易过程中起到安全保障作用。在非对称加密体制中,信息需求者和信息发送者采用不同的密钥,加解密过程中需要一对公私钥对,若公钥加密,则需私钥解密,若私钥加密,则需公钥解密。常用的非对称加密算法包括ECC(椭圆曲线算法)、DSA 算法(Digital Signature Algorithm)、RSA 加密算法等。优缺点比较如表1 所示。
表1 不同非对称加密算法比较Tab. 1 Comparison of different asymmetric encryption algorithms
为方便调用,采用基于大数分解的RSA 算法,其具体描述如下[7]。
(1)选定两个不同的大素数p和q,求得两数的乘积n=pq,n公 开,p和q保密。
(2)计算n的欧拉函数 ∅(n)=(p−1)(q−1), ∅ (n)保密。
(3)任意选取一个随机数e,1 (4)根据de=1(mod,∅(n)) ,计算得d,d是保密的解密密钥。 RSA 加密算法所依据的原理:根据数论,将两个大素数的乘积进行因式分解十分困难,因此可以将乘积公开作为加密密钥。e、n是 公开的密钥。将 ∅ (n)作为密钥严加保密。如果 ∅ (n)泄露,则RSA 非对称加密算法的安全性将受到威胁。此外,RSA 加密算法的安全程度与p、q的长度呈正相关,长度越长信息交易的安全性越高。 以太坊(Ethereum)是一个去中心化应用的平台,它与比特币区块链的不同在于以太坊支持智能合约,可以发行自己的代币,通过合约创建各种服务,然后部署到以太坊上,以此来为人们提供便利的服务。创立者Vitalik Buterin 于2013 年底发表了以太坊白皮书,把以太坊定义为下一代加密货币与去中心化应用平台。以太坊提供许多模块方便用户使用,其中提供的IPFS文件系统、Ganache 客户端、web3.js 库等极大方便了本系统的构建。依托以太坊,用户可以更加方便地进行去中心化应用的开发。 以太坊总体架构主要由去中心化应用、智能合约、以太坊虚拟机(EVM)、区块链、P2P 网络等构成[8]。EVM 编译运行智能合约,RPC 提供外部应用调用合约的接口,web3.js 封装了以太坊的JSON-RPC API,方便系统前端与合约交互。 尼克·萨博(Nick Szabo)于1994 年提出了智能合约的概念:执行合约条款的计算机化交易协议。他是一段依赖事件触发的计算机程序。在以太坊上部署的智能合约是执行在EVM 中的一段代码,可以根据预先约定的规则自动执行操作。其规则对外部公开,任何人都可获取合约内部规则及数据[9]。在合约中没有任何隐藏交易或虚假交易信息,所有交易内容公开可见。区块链技术具有公开透明、不可篡改的特点本质上都取决于智能合约。 IPFS(Inter Planetary File System),中文名称为分布式文件系统[10]。本质上是一种内容可寻址、点对点的分布式存储、传输协议。在IPFS 中数据文件会被分割为固定大小的块,分散地存储到分布式节点中,同时文件产生一个唯一Hash 值作为寻址地址,并且有容灾备份机制[11]。存储进IPFS 的数据,可以通过IPFS 返回的Hash 值来查看。它不使用基于位置的寻址,而是基于内容的寻址,在分布式系统中有冗余备份,一定程度上能够抵抗外界安全攻击。IPFS 去中心化和防篡改的特点对数据存储提供了一定的保证。 基于区块链的种质资源数据共享模型重点解决数据的存储和安全性问题。由于种质资源数据相对繁杂、体量较大,而区块链链上存储能力较弱,过量冗余数据很容易影响区块链的共享效率,对此,首先探讨基于区块链的种质资源数据存储模型。 将数据信息按照区块链的数据结构存储到区块链上是利用区块链技术构建作物种质资源数据安全共享系统的基础。基于区块链技术构建的农作物种质资源数据安全共享系统中要存储的数据总体上分为种质信息数据存储和用户信息数据存储两大类型。 农作物种质资源数据庞大并且复杂,基于区块链的种质资源数据共享系统首先要考虑按照国家种质资源数据标准规范全面且合理地提供种质资源数据信息,其次要结合区块链数据存储结构的具体特征进行存储。另外,本系统面向农业工作者、科研人员、政府部门提供种质资源数据信息,为保证数据共享过程的安全性,防止一些重要数据信息被篡改或泄露为他人所用,要对使用该系统的用户进行信息登记并严格保护用户隐私数据信息,由此产生另一部分数据信息。由于区块链所有数据均由每个节点备份,链上过多的冗余数据量会降低共识效率、额外增加各节点存储、计算成本,这也是区块链架构的基本弊端。因此引入分布式文件系统记录数据描述等非关键信息及通过权限验证后的数据访问方式。本文设计的协同存储模型如图1 所示,将种质资源数据概要、用户信息概要及两种数据详情的Hash 值存储于链上,在链下(IPFS)存储种质资源的详细数据(如属性、名称、来源等关系型数据文本)和种质资源数据访问用户的关键隐私数据(如具体单位、联系方式、地址、电话等)。根据Hash 值可以快速地索引找到链下存储的具体信息。 图1 基于区块链网络和分布式文件系统的存储模型Fig. 1 Storage scheme based on blockchain network and distributed file system 此模型采用区块链与IPFS 系统结合,在IPFS 中存储用户信息,在区块链中存储IPFS 返回的Hash 值。区块链的后一个区块的块头中存储了前一个区块的Hash 值,由于哈希函数计算过程是单向的,所以区块链上的数据很难被篡改,保证了链上数据的安全。各种质数据数据源由各数据提供方负责管理与维护,只需要将详细描述和共享协议以文件形式放入分布式文件系统网络,并在区块链上发布数据概要,绑定数据所有权。其余用户需要数据时,从链上根据类型或概要关键字检索到数据,通过分布式文件系统定位数据描述,在链上进行数据交互。链上链下采用加密后的访问方式进行访问。加密后的文本存入IPFS 文件系统,代码如图2 所示。 图2 加密存储部分代码Fig. 2 Some codes of encrypted storage 基于区块链的农作物种质资源数据安全共享模型中,在用户上传种质资源数据和用户隐私保护过程中需要用到信息加密技术。种质资源数据共享是一个多方参与的共享数据管理模型,通过非对称加密技术,可以保证种质资源数据信息提供者在种质资源数据的上传共享过程中数据的来源准确可靠性,可以实现在种质资源数据共享链上的数据加密、防篡改、可控,使种质资源共享数据更好地传播在区块链的各个网络节点中,确保种质资源数据在共享的同时保证各网络节点的隐私信息。 本文研究的区块链中采用RSA 算法来完成数据的加密,RSA 公开密钥密码体制原理是根据数论,寻求两个大素数比较简单,而将它们的乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。参与种质资源数据共享的用户节点通过区块链非对称加密技术生成的公私钥进行交互,公钥作为公开的地址,私钥由各方保存。用户在共享数据时采用私钥对信息进行加密,确定该信息的真实性,如发布数据过程中采用私钥对数据描述、访问方式等信息进行加密,以交易的形式保证数据版权[12]。当需要双方进行授权交互时,对私密信息可进行公私钥加密,使用RSA 算法数据加密存储及解密流程如图3 所示。①需要上传的种质数据或用户身份数据经过RSA 加密算法用公钥进行加密,得到密文。②将密文转化为Buffer 字符流,调用IPFS 的api 接口存储进IPFS 中,得到IPFS 返回的Hash 值。③数据上链,调用web3.js 接口将其存入智能合约。④前端下达需求命令,调入web3.js 接口,从智能合约Hash 字段里获取Hash。⑤调用IPFS 的api 得到密文。⑥私钥解密得到原始的用户身份信息和种质资源数据。 图3 加密解密流程Fig. 3 Encryption and decryption process 基于以太坊整体架构主要分为数据层、区块链层、智能合约层、业务层和表现层,如图4 所示,通过智能合约实现功能逻辑,其中区块链节点和IPFS 节点需要下载配置环境来使用[13-14]。区块链层中,共识机制作用是由于区块链是由若干个节点组成的分布式系统,在系统数据上链的过程中最终是以其中某一节点的结果为准,并会为该节点提供激励机制,所以要使用共识机制保证数据可靠性,得到所有节点的共同认可。P2P组网用来保证区块链每个节点拥有相同的权限,每一个用户节点都会承担网络路由、数据记录、数据传播和数据提交的功能。系统的开发主要集中于智能合约层、业务层和应用层。智能合约层作为整个系统的核心大脑,提供系统主要的逻辑功能,以此完成系统的功能实现。 图4 系统架构Fig. 4 System architecture 系统采用Solidity 语言编写智能合约,通过智能合约来进行数据信息存储,完成系统的信息存储、信息修改等功能。业务层提供系统的后端逻辑,利用node.js、web3.js、ipfs-api 接口与智能合约、区块链网络和IPFS 节点进行通信。前端利用html+css+JavaScript 的前端框架编写模块化的页面应用。 智能合约作为业务逻辑层,处理前端发送的操作,而前端与智能合约交互需要使用web3.js 提供的接口。系统中图片、文档等数据类型的存储则需要前端与IPFS 交互,需要ipfs-api 接口。调用非对称加密算法RSA 为数据加密则需要crypto-js 加密算法库。系统与智能合约、IPFS 节点交互模式如图5 所示。 图5 交互模式Fig. 5 Interaction mode 系统在前端通过web3.js 提供的接口创建智能合约的实例,通过实例调用智能合约的函数。当有数据存储进IPFS 时,则需要调用ipfs-api 提供的接口,把需要存储的数据传到IPFS 节点上,并把IPFS 返回的哈希值存储到智能合约上。通过执行“ipfs cat”命令,可以验证参与种质资源数据共享的用户身份信息数据已成功存入IPFS 节点,成功存入一条数据便可查看得到返回的哈希值,如QmWFLcVbaNRFiG8pJGa3BCC8BZ4FsW ssM9qpTaJGacaWG3。 系统的业务逻辑层与前端界面交互需要使用node.js 进行模块引用。然后利用Ganache 在构建初始分配的10 个有虚拟以太币的账户,方便系统开发时的调试运行。Ganache 是一个运行在个人桌面上的以太坊开发者的个人区块链,方便区块链的开发。用命令行进入项目后,即可开始部署项目。执行编译合约、部署合约命令。在执行编译命令后,开始编译系统中未编译的合约,把智能合约编译为EVM 能够执行的字节码文件,编译后生成.json 文件,这个文件在JavaScript 中可以调用合约实例。编译后进行部署合约,执行部署合约命令,即可把编译好的合约部署链上。 参与种质资源数据共享的用户数据属性包括用户名、身份证号码,具体地址、工作单位、联系电话等信息。表2 给出3 位用户信息加密后的密文结果和存入IPFS后返回的Hash 值结果。 表2 身份信息存储结果Tab. 2 Identity information storage results 基于区块链的种质资源共享系统中,用户体系模块由用户注册登录和身份信息认证组成,提供用户准入和安全交互功能,具体采用基于区块链的账户密钥技术保证账户安全,使用IPFS 存储用户的详细信息。用户注册区块链账户,获得公私钥;根据具体规范,将个人信息以文件形式存储于IPFS 并获得该文件Hash 地址。此模块要实现验证用户身份并登录功能,因此需要用户输入自己的账户及密码来验证。其中账户可以是用户的账户地址也可以是用户名,因智能合约中同时保存了用户名和账户地址,并存在用户名到账户地址的映射及所对应的查找函数,所以用户可以根据用户名登录,系统在登陆时判断用户输入的是地址还是用户名,若是用户名,则先利用智能合约中的用户名到地址的映射,找到用户的地址,然后在区块链中查找到用户对应的信息,跳转到用户信息模块,至此验证身份完成。 以上内容主要运用区块链中的以太坊技术结合IPFS,研究基于区块链的种质资源数据共享模型,提出基于链上链下协同存储的数据存储模型及数据信息安全共享加密模型,在IPFS 节点上存储数据详细信息,在区块链上存储数据加密后的Hash 值。基于以太坊框架框架设计智能合约交互方式,给出种质资源数据共享用户隐私信息存储结果。结果显示,对于种质资源数据共享的用户信息管理环节,用户身份可以得到有效验证,隐私数据信息可以安全存储。 大数据时代农业数据已经成为推动现代化农业发展的重要资产和价值源泉,区块链技术自身尚处于快速发展的初级阶段,作为搭建去中心化数据管理方案的核心技术,已经融入到众多行业的数据管理工作中。目前区块链技术的应用研究开始发展到“区块链3.0”时代,将区块链技术应用到大数据资源领域进行数据的共享利用是目前区块链技术应用研究的主要领域之一。对于现代化农业研究领域的大数据资源,基于区块链的种质资源数据安全共享模型,能充分利用区块链技术具备的天然可信性、安全性,基于以太坊架构,引入非对称加密技术保证数据安全,提高共享效率,进而使种质资源数据可以得到更好的利用。1.3 以太坊
1.4 智能合约
1.5 IPFS
2 基于区块链的数据共享系统模型设计
2.1 “链上链下协同存储”模型设计
2.2 区块链安全设计
2.3 系统整体架构
2.4 智能合约交互结果
2.5 数据加密存储实现
3 结论