具有区块链结构的数据库

来源 :软件 | 被引量 : 0次 | 上传用户:a372092
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘  要: 区块链是一种链式存储数据结构,它的特点是对于数据修改有固有抵抗力,但在检索方面有着较大的弊端。传统SQL数据库中由于开放数据访问和复杂的网络安全破坏机制所提供的易变环境,数据极易被篡改且无法被直接检测到。本文通过借鉴区块链技术思想,设计10区块链结构数据表为传统关系型数据库赋予区块链的防篡改、防伪特性,在保证数据可信的同时拥有较高的检索速度。
  关键词: 区块链;数据库;防篡改;数据可信
  中图分类号: TP311    文献标识码: A    DOI:10.3969/j.issn.1003-6970.2020.06.013
  本文著录格式:任晋宏,肖攸安,黄文禹,等. 具有区块链结构的数据库[J]. 软件,2020,41(06)6367
  【Abstract】: Block chain is a kind of chained storage data structure, which has inherent resistance to data modification, but it has great disadvantages in retrieving information. Due to the volatile environment provided by open data access and complex network security failure mechanism in traditional SQL database, data is easily tampered and cannot be directly detected. In this essay, by referring to the block chain technology, the data table with blockchain structure is designed to give the block chain 25tamper-proof and anti-counterfeiting features to the traditional relational database, so as to ensure the data credibility and at the same time have a high retrieval speed.
  【Key words】: Blockchain; Database; Tamper proof storage; Reliable data
  0  引言
  随着Bitcoin、Ethereum、Ripple等加密货币的兴起,其底层的区块链技术不断发展并受到各领域的密切关注[1]。区块链技术规定了区块链的数据定义,以比特币为例,每个区块由区块头和区块体两部分组成,区块体中存放了自前一区块之后发生的多笔交易;区块头中存放了前块哈希(PreBlockHash)、随机数(Nonce)、Merkle根(MerkleRoot)等[2]。区块链是用于数据存储并保证数据可信的链式数据结构。
  区块链的特点和它的缺点一样突出,由于其较差的数据格式,它在搜索查询方面不尽如人意。例如,比特币中一个事物的发布、验证和最终的确认可能需要1个小时甚至更久的时间[3]。传统SQL数据库不但有数据结构化的特点,还有快速查询处理的优势,但它不能抵抗数据修改。
  为了实现同时具备区块链对数据的固有抵抗力和高效的查询速度,本文借鉴区块链技术设计了区块链结构的数据库,通过对数据库表增设hash、prehash等字段并结合数字签名技术、哈希算法使其符合区块链数据结构。数据库中每条记录可视作一个区块,每个区块的哈希值都包含前一区块的哈希值,每个区块的哈希不仅是为区块数据提供篡改阻力的元数据,也是指向前一区块的哈希指针;每个区块中的数字签名为数据提供了防伪证明。关系型数据库中的数据库表可视为一条区块链,多张表可视为多条区块链,可针对单张表进行数据校验,验证数据完整性。
  1  区块链结构数据库
  1.1  区块链数据结构
  区块链中的每个区块都通过散列值连接到前一个区块,每个区块主要由区块头和包含交易数据的区块体组成[2]。区块链的数据结构如表1所示。
  区块链中的前后区块通过哈希值进行连接,哈希值是对交易数据和前一区块的哈希值进行Hash运算得到的结果。为了生成区块X,区块X-1必须先于区块X生成,所以区块链可以在时间上向前遍历检测数据是否被篡改[4]。若要对区块链上的数据进行篡改,则必须从初始写入数据的区块到当前时刻的所有区块进行篡改。
  1.2  面向关系型数据库的区块链数据结构
  区块链中的信息在逻辑上可分为两部分,一部分为是要存储的数据,另一部分是为存储数据提供篡改阻力的元数据[4]。本文对Sql数据库表的字段进行了设计,如表1.2所示,数据库表的字段分为区块头(Blockhead)和数据(Data)两部分:区块头中的字段有包含区块编号id,前一区块哈希(prev_ hash)、时间戳(timestamp)、本次交易哈希(hash)和交易簽名(signature);数据中的字段根据需存储数据设计。数据库中的每一张表可以视为一条区块链,多张表可视为多条链,一张表中的每条数据可视为一个区块。每个区块中的Hash是由对本区块的所有数据和前一区块的Hash经过哈希运算得到,所以每个区块的Hash都指向前一区块。由此数据库表中每条记录构成一条区块链,这样每个新的区块就会包含前一区块的信息。
  1.3  数据存储流程
  本文设计了区块链处理器完成数据的写入、读取、修改、删除和校验功能。数据存储过程如图1所示,在接收到交易数据Data后,后台连接数据库获取当前最新记录的哈希值并赋值给Prehash字段,对Data、Prehash和当前系统时间Timestamp一起进行哈希运算生成Data的摘要值Hash,然后使用发送者的私钥对Hash签名,最后将Data、Prehash、Timestamp、Hash和Signature一起写入数据库中。   为保证区块链完整性,不允许直接在数据库中修改或删除数据。为了符合多应用场景,有修改需求的需重新向后台提交,在数据库中生成一条有相同Id的新记录。用户查询数据时,后台会根据时间戳将最新记录返回给用户。若想要删除数据,将各个字段赋值null,提交给后台即可。
  1.4  数据校验流程
  图2为数据的校验过程,首先在数据库中检索最新记录的数据,然后对数据进行哈希运算,将运算结果与数据中的哈希值对比,若不匹配,则说明区块X中的哈希值被篡改;然后根据数据中的preHash字段在数据库中检索上条记录,若返回空值,则说明上条记录被删除或数据中的preHash被篡改;当检测到preHash为空或检测到数据被篡改时,结束循坏,将结果返回给用户。
  2  区块链处理器
  区块链处理器对存储数据进行编码,以区块的形式存入数据库中,并对数据库中区块链结构数据进行校验,验证数据是否被篡改。
  2.1  数据存储算法
  根据区块链数据结构定义,数据库表结构定义如下:
  CREATE TABLE Blockchain
  (
  Field0 varchar(32),
  Field1 varchar(32),
  Field2 varchar(32),
  …
  prev_hash varchar(256),              //前一区块哈希
  hash varchar(256),                 //该区块哈希
  timestamp timestamp,              //时间戳
  signature varchar(256)           //交易签名
  );
  接收到交易数据data后,区块链处理器首先判断数据库表最新区块是否为空,若为空,则对prehash赋值为null;否则获取当前最新区块的哈希值赋值给prehash,然后对data、时间戳timestamp和prehash一起进行哈希运算,生成新区块的哈希值,最后将新区块写入数据库中。
  算法1.数据插入算法
  输入:交易数据data
  //客户端加密
  1. String preHash = 当前数据库中最新記录的摘要值hash;
  2. String hash = hashEncrypt(data,timestamp, preHash);
  3. signature = RSAEncrypt(hash,privateKey);
  4. sendMessage(data,hash,preHash,timestamp, signature);
  //服务器端解密,存入数据库
  //hash1为对signature解密后的结果,hash为客户端发送的哈希值
  5. data,hash,preHash,timestamp,signature = receive(data,hash,preHash,timestamp,signature);
  6. hash1 = RSADecrypt(signature,publicKey);
  7. if(compareHash(hash,hash1)){
  8.    //将数据写入数据库中
  9. }else{
  10.    //返回错误信息
  11. }
   算法1的第1行~第4行是有客户端对数据使用哈希算法生成哈希值,使用用户私钥对数据的哈希值进行数字签名,并发送给服务器端。
   第5行是服务器端接收客户端发送的数据。
   第6行是使用用户公钥对签名signature解密。
   第7行~第11行是判断解密哈希与发送的哈希值是否匹配。
  2.2  数据校验算法
  数据校验算法用于保证数据完整性,数据完整性遭到破坏的可能情况有两种:部分区块被删除和区块内数据被篡改。针对这两种情况我们提出以下算法判别数据完整性。
  算法2  校验算法
  输入:无
  输出:数据未被篡改,返回null;检测异常返回检测出的第一条异常数据。
  1. Data data = 当前最新区块数据;
  2. String preHash = data.getPrehash();
  3. while (preHash != null){
  4.     try{
  5.         dataPre = 前一区块哈希值;
  6.         } catch (Exception e){
  7.         return JsonData.buildError(-2,"前一区块数据被删除",data.getId());
  8.         }   9.     String checkHash=HashUtils.genHash(data);      //计算当前区块的哈希值
  10.    String hash=data.getHash();
  11.    if(checkHash!=hash){
  12.        return Jsondata.buildError(-3,"数据被篡改");
  13.    }
  14.    preHash = dataPre.hash();
  15.    if(preHash = null){
  16.        return Jsondata.buildSucess();
  17.    }
  18. }
   算法2是在时间顺序上向前遍历,第3行代码用于判别当前区块是否为初始区块。
   第4行~第8行代码通过当前区块存储的prehash检索前一区块数据,若检索失败,说明前一区块数据被删除。
   第9行~第13行代码通过对当前区块存储信息重新进行哈希运算来判别当前区块的数据是否被篡改。
   第15行~第17行代码通过判断prehash是否为null来确认该链是否校验完成。
  3  实验
  3.1  试验1 篡改数据测试
  将数据库中订单号为201910204291的区块信息进行修改,使用校验算法对发生篡改的区块链进行校验,查验数据完整性,查验结果如图3所示。
  删除数据库中订单号为201910019023的区块的前一区块,使用校验算法对这条区块链进行校验,查验数据完整性,查验结果如图4所示。
  3.2  试验2 数据校验性能测试
  本文使用被动检测机制保证数据可信,交易数据按照时间顺序写入数据库中,交易信息校验过程中要获取当前交易数据和上一条数据的哈希值,使用算法重新当前交易的哈希值并与数据库中存储的哈希值相比较。我们测试在每条数据大小为322B,10000-50000条数据量情况下的校验速度,如图5所示,在10000-50000条数据范围内,数据校验速度与数据量大小成线性关系,在可接受的时间内保证数据可信。
  3.3  试验3 数据版本对查询速率的影响
  为保证数据以区块链的链式结构存储,不允许直接对数据库中的数据进行修改或删除,为满足对修改和删除的需求,我们通过在数据库写入有着相同主键的新记录完成修改和删除功能,在查询数据时仅显示时间戳最新的数据。我们设计了实验测试数据版本数对查询速率的影响,在10000条数据环境下,查询大小为297b大小的数据。实验结果如图6所示,在修改24次数据后,单次查询速度与修改4次数据后的单次查询速度并未有明显差距,说明版本数对数据查询速率影响极低。
  4  结论
  本文借鉴区块链思想提出了在关系型数据库中以区块链的链式结构存储数据的方法和被动检测机制,以此保证数据可信和数据检索速率。通过实验测试,实验数据表明在保证数据可信的基础上同时具有较高的数据检索速率;在一定数据量范围内,数据量与校验速度呈线性关系,可只对关键字段进行加密处理,减少算法运行时间,提高校验速度,之后会在此基础上进一步研究提高校验速率的方法。
  参考文献
  [1] 焦通, 申德荣, 聂铁铮, 寇月, 李晓华, 于戈. 区块链数据库: 一种可查询且防篡改的数据库[J]. 软件学报, 2019, 30(9): 2671-2685.
  [2] 邵奇峰, 金澈清, 张召, 钱卫宁, 周傲英, 区块链技术: 架构及进展[OL]. (2017-11-15)[2019-12-03]. http://kns. cnki. net/kcms/detail/11. 1826. TP. 20171115. 2302. 006. html.
  [3] Muhammad Muzammal, Qiang Qu, Bulat Nasrulin. Renovating blockchain with distributed databases: An open source system[J]. Future Generation Computer Systems, 2019, 90: 105-117.
  [4] MANIFOLD TECHNOLOGY, INC, MENLO PARK, CA (US). BLOCKCHAIN-ENHANCED DATABASE[P]. US 2017/0228371, A1. Aug. 10, 201.
  [5] Conaghy T, Marques R, Müller A, Jonghe DD, McConaghy TT, McMullen G, Henderson R, Bellemare S, Granzotto A.  BigchainDB: A scable blockchain database[OL]. (2016-06-08) [2019-12-03]. https://www.bigchaindb.com/whitepaper.
  [6] 騰讯FiT, 腾讯研究院. 腾讯区块链方案白皮书[Z]. WhitePaper, 2017.
  [7] 蒋东东. 宝武集团区块链可信电子仓单系统的研发[D]. 西安: 西安工程大学, 2018.
  [8] 葛利洁. 基于区块链技术的交易信息存储与查询系统的设计与实现[D]. 北京: 北京邮电大学, 2018.
  [9] 北京众享比特科技有限公司. 基于区块链的数据库应用平台技术白皮书[Z]. WhitePaper, 2017.
  [10] 张偲. 区块链技术原理、应用及建议[J]. 软件, 2016, 37(11): 51-54.
  [11] 尚永强. 计算机网络信息安全中数据加密技术的探讨[J]. 软件, 2018, 39(12): 198-201.
其他文献
摘 要: 《计算机应用基础》是职业院校学生必修的一门课程,学好这门课程有助于学生拓展知识视野,同时对其未来的求职就业也有一定的促进作用。近些年来,随着科技的发展和进步,信息技术得以在教育教学工作中广泛的应用,各院校教师以信息技术为基础录制了大量的精品资源共享课程,该课程在教学中的应用,有效的减轻了教师的教学负担,提高了学生的学习积极性。为此,文章尝试对精品资源共享课教学在《计算机应用基础》中的应用
期刊
摘 要: 针对天地图·云南平台数据更新的需求,提出了基于地理信息系统(GIS)的海量DOM影像数据重采样系统的设计方案,论述了系统的结构以及实现方法。重点对系统的整体框架、功能设计和系统实现进行了详细介绍。有效解决了将1:2000DOM影像批量化重采样为1:5000DOM影像的问题,完成了天地图·云南平台数据更新工作。  关键词: GIS;DOM;重采样;ArcObjects  中图分类号: TP
期刊
摘 要: 借助Solidworks软件,来设计模拟试卷袋施胶装置的结构,对部件进行三维建模和模型装配,并利用Solidworks Simulation插件对取胶辊进行受力分析,以及Motion插件对整个试卷袋施胶机构进行运动仿真,得出数据以及仿真结果有助于我们分析试卷袋施胶机构的可行性,其中有限元分析计算,使我们对所设计方案能够更好地进行综合评价。  关键词: 施胶装置;Solidworks;建模
期刊
摘 要: 为了降低智能家居系统的配置成本,并通过集成式的解决方案,尝试缓解智能家居市场的碎片化问题,提高用户的购买和使用体验。设计了一套基于Raspberry Pi平台,利用低功耗蓝牙?红外等无线数据传输技术进行辅助控制的智能家居系统。本平台可以通过手机微信小程序、PC智能语音助手“Cortana”对家用电器进行控制,实现了通过个人智能设备控制家用电器的目的。本套智能家居系统使用方便,购置成本低廉
期刊
摘 要: 探讨基于MIMICS图像处理软件的脊柱三维重建算法。采集真实患者脊柱部位的CT影像数据,应用比利时医学交互式影像控制系统软件(Materialise’s Interative Medical Image Control System, MIMICS)对影像数据进行图像处理、三维重建。采用基于灰度值的阈值分割、蒙版编辑、区域增长等算法编辑图像,最后计算三维蒙版获得脊柱的三维模型。结果:获得
期刊
摘 要: 隨着技术的不断进步,互联网+时代的到来,致使数据和信息量快速增长,与此同时人们可以以快捷低价的方式获取和存储数据,因此对数据的应用和支配变得愈加重要。对现代企业来说,数据是反映企业运作状况的主要依据,数据资产管理效果的高低影响企业的发展和目标,因此是企业管理中的一项重要课题之一。通过分析电力企业数据资产管理的关键流程,建立数据资产管理体系,梳理企业数据管理业务,为大数据应用与战略发展提供
期刊
摘 要: 为了进一步深化“产教融合”教学改革,提升高职实践类课程创新实践教学效果,课程资源建设是首要问题,教学内容是否优质、实用,是提高高职实践课程教学质量的关键,为此提出了“课产融合”课程资源建设思路,对“课产融合”项目库资源、立体化教材建设方法,“产学并行”训练流程、“课产融合”实践创新平台、教学思政教育等路径方法,进行了探讨和论述,创新了高职实践类课程资源“课产融合”建设方法与路径,为现代学
期刊
摘 要: 党的十八大三中全会提出逐步简政放权,要求做到便捷、规范、宽进严管,这引起市场监管主体职责发生变化,监管对象呈现井喷式增长。传统的监管方法和手段已不能适应改革后的监管需要,监管方法和手段必须由传统向信息化、智能化等方式转变。本文根据广东省广州市有关企业的真实数据对其展开运行风险研究,首先运用随机森林算法对原始数据进行变量选择以便形成一个简化、高效的数据集,然后分别应用决策树、集成法、人工神
期刊
摘 要: 流量计量是工农业生产过程自动检测和控制的重要环节,流量计使用前需要进行标定实验。以实验室流量标定实验装置作为参照和依托,运用Visual Basic6.0为开发平台,设计一套流量标定虚拟仿真实验项目。操作人员通过对话窗口,可以操作流量计的标定过程,获得实验结果。结果表明,虚拟仿真实验开发有利于学生的课前预习和教师的课堂辅助教学,丰富了教学资源,提高了学生的学习兴趣,学生普遍反映良好。  
期刊
摘 要: 为了减少业务人员工作量,更好的与电视台衔接,烟台市气象局开发人员根据业务需要和提高工作效率的要求及时研发了气象影视业务平台,该平台采用经典的 Delphi 7开发,可以一键式提供天气实况、天气预警、未来三天天气预报和24小时分区县天气预报,周一提供周天气预报,并自动通过邮箱发送,目前平台已投入业务运行。  关键词: 气象影视;一键式;邮件发送  中图分类号: TP391. 41 文献标
期刊