基于联盟链的汽车维修数据存储方法与流程

文档序号:20770279发布日期:2020-05-15 19:36阅读:177来源:国知局
基于联盟链的汽车维修数据存储方法与流程

本发明涉及到数据安全可信存储技术领域,具体涉及一种基于联盟链的汽车维修数据存储方法。



背景技术:

汽车维修数据,是用户在发生交通事故或者其他未知事故后向保险公司申请赔付的重要凭证。然后,到目前为止,还没有一个真正意义上的安全可信的维修数据存储平台,绝大多数的维修数据以纸质材料的形式保存在用户手上,部分维修数据存储在汽车维修网点的本地数据库中。这样的数据保存方式,会存在以下两种问题:第一,纸质材料的丢失会给用户申请赔付带来不利的影响。第二,出于利益的考虑,保险公司工作人员或者其他怀有恶意的第三方可能直接要求数据库管理员修改或者删除相关的数据。这两种情况极大的威胁到了维修数据的可用性和真实性。同时,现阶段的保险赔付形式是用户必须前往保险公司所指定的维修网点进行汽车的维修,由于指定维修网点和保险公司存在合作关系,很有可能出现维修价格高于普通维修网点的维修价格的情况。作为用户,必然是希望自己能够选择合适的维修网点修理汽车,但是保险公司又无法确认维修数据的可靠性。

区块链是基于hash等技术形成的公共数据库(或者称为公共账本),其中区块链技术是指多个参与方之间基于现代密码学、分布式一致协议、点对点网络通信技术和智能合约编程语言等形成的数据交换、处理和存储的技术组合。区块链具有去中心化特征,各个节点之间通过共识算法实现互通互信。区块链可分为公有链、私有链、联盟链三种部署模式。其中联盟链仅限联盟参与,区块链上的读写、参与记账权限按联盟规则来制定。区块链记录信息的产生需要所有网络节点达成共识并进行确认,一旦节点并入区块链,将永久记录,连续可溯,无法篡改。因此记录于区块链的信用是自动化和全网共识的,公平的,客观的以及透明的。相对于传统的信用体系,这是一种更高层次的信用体系。

目前,用户,保险公司,汽车维修网点三方还没有一个统一的沟通和信息共享渠道,相关的维修数据分散存储,无法共享,有丢失甚至被恶意删除的可能性,因此市面上急需一个将三方整合在一起、并保证信息不可篡改、可回溯的、透明的、基于区块链的汽车维修数据存储系统。



技术实现要素:

本发明提出了一种基于联盟链的汽车维修数据存储方法,来保证维修数据的可靠性和真实性,并且实现维修数据中的部分信息共享。本发明同时采用了云存储技术来存储较大的数据信息,以实现逻辑上区块链存储,物理上云存储的系统模型。本发明没有选择联盟链中最常用的pbft算法,而是采用了改进型dpos共识机制来解决分布式一致性问题。并且,本发明采用sok协议,代理重加密等密码学方法来保证用户隐私。

基于联盟链的汽车维修数据存储方法,包括如下步骤:

步骤1,初始化系统,整个系统由身份认证节点ca,客户端节点,代理重加密节点,以及参与用户组成,联盟链中仅保存相关数据索引信息,对于真实数据内容,则保存在联盟链的云存储服务器上;

步骤2,身份认证节点ca根据参与用户在整个系统中的角色赋予不同的权限,并为参与用户颁发数字证书,同时生成必要的公共信息;

步骤3,当汽车发生事故后,用户综合整理各信息;

步骤4,用户x整理完成的信息msgx经客户端节点提交至身份认证节点;

步骤5,用户信息msgx被送至各身份认证节点以及代理重加密节点,经身份认证节点验证后,执行p-dpos算法,将相关数据写入联盟链中;

步骤6,新的用户x’在提交数据msgx之前,可通过客户端节点根据关键字key查询联盟链中所存储的数据;关键字key包含以下不涉及个人身份隐私的可公开信息:维修地点la、维修部件comp、维修价格pr和维修时间time,表示成key→[la,comp,pr,time];根据查询结果,用户x’可以选择合适的地点以合适的价格完成汽车的维修;

步骤7,用户x在提交完数据后,可在适当时间通过merkleroot验证法进行数据完整性和保密性的确认;

步骤8,用户x向保险公司索赔时需要单独向保险公司公开其加密数据。

进一步地,步骤2具体实现步骤为:

步骤2-1,选择拥有政府信用背书的完全可信节点身份认证节点ca,作为联盟链中的身份服务节点,负责发放和管理用户及组织的身份;

步骤2-2,参与共识的节点由身份认证节点ca授予权限,可以参与p-dpos算法的执行,称之为身份认证节点;

步骤2-3,客户端节点分为全量级客户端与轻量级客户端,用户可通过轻量级客户端节点上传维修数据,并送至身份认证节点验证处理,用户亦可通过全量级客户端节点查询部分可公开信息;客户端节点无参与共识的权限;

步骤2-4,代理重加密节点负责代理重加密算法的执行,具体由部署在该类节点上的智能合约自动执行;

步骤2-5,各个参与用户可通过客户端节点使用openssl工具集生成密钥对,对于任一用户x而言,密钥对为(skx,vkx),其中skx为私钥,vkx为公钥。用户x执行csr指令,得到证书certx,此外,定义参与用户x的索引indx=vkxmod2k,其中k=bit(vkx)div4;

步骤2-6,身份认证节点ca为每个身份认证节点生成一个共识积分cs(i)为每个indx生成一个安全指数indx_sr

进一步地,步骤3具体实现步骤为:

步骤3-1,用户x在事故发生后,整理以下基本信息:保险购买凭证,车辆行驶证,统计为相关凭证信息prx,个人身份信息idx

步骤3-2,整理以下证明信息:附有交警数字签名的事故鉴定书,附有保险公司工作人员数字签名的查勘报告,统计为rpx

步骤3-3,整理以下多媒体信息:行车记录仪的视频信息,事故现场照片信息,统计为mdx

步骤3-4,整理以下维修信息:维修网点,维修时间,维修部件,维修费用凭证,统计为rex,附有网点数字签名;同时生成关键字key,指示部分可公开维修数据,可供其他用户检索。

进一步地,步骤4具体实现步骤为:

步骤4-1,计算用户个人基本信息cf=esk(ksym,(prx,idx,indx_sr)),其中ksym为由sok协议生成的加密密钥;再计算双重加密后的个人基本信息cf=epk(vkx,cf);

步骤4-2,计算加密后的申赔信息ct=epk(vkx,(rpx,mdx,rex));

步骤4-3,计算用户信息msgx=combine(cf,ct,key,indx,vkx),其中key包含维修信息关键字,但不含任何个人隐私,其他用户无法通过key得知indx的任何现实信息;

在上述步骤中,epk为轻量级的公钥加密算法,esk为对称加密算法。

进一步地,步骤5具体实现步骤为:

步骤5-1,各身份认证节点接收到msgx后,将自己的公钥vki传至代理重加密节点,由该节点上的智能合约执行代理重加密算法,具体如下:

步骤5-1-1,代理重加密节点将接收到的vki反馈至indxindx客户端节点上的智能合约生成密钥rkskx→vki,并将密钥送至代理重加密节点;

步骤5-1-2,proxy用x生成的密钥rkskx→vki将密文ct转化为indi的私钥能够解密的密文cti,其中proxy只提供转化服务,无法获取明文;

步骤5-1-3,proxy将转换的密文送至indiindi调用智能合约上的gettrans()函数解密验证;并在验证完成后调用uptrans()函数改变msg状态,使其成为合法msg

步骤5-2,p-dpos共识算法选举产生授权代表,p-dpos共识算法执行如下:

步骤5-2-1,每个拥有共识积分cs(i)的身份认证节点都需要把票投给信任的身份认证节点,也可投给自身;经过一轮投票后,拥有票数的最高的101个节点轮流记账。除去这101个授权代表外,还需选举出一定数量的备选代表,得票数按公式计算;

步骤5-2-2,如果101个记账节点中的某个节点错过签署新的区块,则更新其共识积分cs(i),更新后的是延迟时间的线性函数;

步骤5-2-3,对于cs(i)过低的代表可能被投票出席;

步骤5-2-4,若有授权代表被投票出席,则从备选代表队列中选择队首节点加入到授权代表队列的末尾;

步骤5-3,授权代表以键值对(key-value)的形式将数据写入联盟链的区块中,一旦记录成功写入,更新记录提交方的用户xindx_sr。每一条记录的头部都会引用授权代表的vk;区块中merkle树存储了每条密文的hash值,即为数据信息的索引,数据信息本身的实际存储地址为云平台,每条数据信息带有特定时间戳;其中,存入云端的数据密文将被切分成若干个子密文。

进一步地,步骤7及其merkleroot验证法具体实现步骤为:

步骤7-1,用户将加密后的密文e(msgx)切分成若干个等长的子密文,数量为n,记为e(e0,e1,....,en-1);

步骤7-2,用户用随机数生成器生成n个随机数,记为r(r0,r1,....rn-1);

步骤7-3,将每个eiri合并,得到hashi=h(ei+ri);

步骤7-4,nhashi作为merkle树的叶子节点,最终得到merkleroot值;

步骤7-5,密文被分成n个子密文存入云存储服务器时还需要将每个hashi送至云端;

步骤7-6,如果用户想要证明其是某个数据的所有者,只需上传一个ri,如果ri与其中某个子密文合并后得到hash值能在上传的hashi表中检索到,则可以证明该用户是数据所有者;

步骤7-7,用户也可以将所有的ri上传,与每个ei计算hash值,得到root值,如果该root值和merkleroot值相同的话,则证明数据具有完整性。

进一步地,步骤8具体实现方法为:

步骤8-1,用户x通过代理重加密节点将存储在云端的密文转换成保险公司私钥能解密的密文;

步骤8-2,保险公司将相关维修数据核实后获取用户x的真实身份信息;

步骤8-3,真实身份的获取通过基于身份的密钥共享体制即sok协议完成;

步骤8-4,核实无误后,完成赔付;

步骤8-5,用户x如果需要再次向某保险公司购买保险,保险公司仅需查询其安全指数indx_sr,根据indx_sr划定合理的保险费用。

本发明的有益效果是:

(1)使用以联盟链为主的区块链技术,解决了相关的维修数据分散存储,可能丢失甚至被恶意删除的问题。提供了一个统一的三方沟通与信息共享渠道。

(2)将区块链技术与云存储技术相结合,实现了逻辑上区块链存储,物理上云存储,避免了区块过大的问题,同时实现了部分数据的公开与共享。

(3)采用了merkle树根验证方法,确保了云端数据的完整性与保密性。

(4)采用了改进型dpos算法,减少了系统开销,提高了共识效率,同时相较于pos能更好的做到去中心化。

(5)采用代理重加密,sok协议,轻量级加密算法等密码学方法保护个人身份隐私与数据隐私。

附图说明

图1为本发明实施例中的系统模型图。

图2为本发明实施例中联盟链的区块结构示意图。

图3为本发明实施例中代理重加密示意图。

图4为发明具体流程图。

具体实施方式

下面结合说明书附图对本发明的技术方案做进一步的详细说明。

本发明涉及一些重要术语及约束,做出如下说明:

aes加密算法与ecc加密算法:aes加密算法是众多对称加密算法中的一种,相对于传统的des、3des加密算法,具有更高的安全性。ecc加密算法全称叫做椭圆曲线加密算法,是一种区块链中常用的非对称加密算法,与传统非对称加密算法相比具有更高的安全性和更好的性能。aes加密算法与ecc加密算法的具体设计及实现并非本发明专利所要保护的内容,它仅是作为本方案实现的一种技术手段。

gettrans()函数与uptrans()函数:gettrans()函数与uptrans()函数是部署在分布式节点上能够自动执行的程序代码,是一种智能合约的具体实现。其中gettrans()函数会自动解密接收到密文,并做相应的验证工作;uptrans()函数在gettrans()函数执行结束后,将验证通过的密文的状态改变为合法状态。gettrans()函数与uptrans()函数的具体实现并非本发明专利所要保护的内容,它仅是作为本方案实现的一种技术手段。

merkle树:merkle树是区块链中的一种重要的数据结构,它是一种哈希二叉树,merkle树的叶子节点保存了交易哈希,如果任意叶子节点的数据发生变化,都会逐级向上传至根节点,引起根节点哈希值的变化。merkle树的设计和具体实现并非本发明专利所要保护的内容,它仅是作为本方案实现的一种技术手段。

sok协议:sok协议是众多密钥交换算法的一种,是一种基于身份的密钥共享体制,满足特定身份属性的密钥共享双方生成共享密钥,具体机制类似diffie-hellman密钥协商协议。sok协议的设计和具体实现并非本发明专利所要保护的内容,它仅是作为本方案实现的一种技术手段。

基于联盟链的汽车维修数据存储方法,包括如下步骤:

步骤1,初始化系统,整个系统由身份认证节点ca,客户端节点,代理重加密节点,以及参与用户组成,联盟链中仅保存相关数据索引信息,对于真实数据内容,则保存在联盟链的云存储服务器上。

步骤2,身份认证节点ca根据参与用户在整个系统中的角色赋予不同的权限,并为参与用户颁发数字证书,同时生成必要的公共信息。

步骤2具体实现步骤为:

步骤2-1,选择拥有政府信用背书的完全可信节点身份认证节点ca,作为联盟链中的身份服务节点,负责发放和管理用户及组织的身份。

步骤2-2,参与共识的节点由身份认证节点ca授予权限,可以参与p-dpos算法的执行,称之为身份认证节点。

步骤2-3,客户端节点分为全量级客户端与轻量级客户端,用户可通过轻量级客户端节点上传维修数据,并送至身份认证节点验证处理,用户亦可通过全量级客户端节点查询部分可公开信息;客户端节点无参与共识的权限。

步骤2-4,代理重加密节点负责代理重加密算法的执行,具体由部署在该类节点上的智能合约自动执行。

步骤2-5,各个参与用户可通过客户端节点使用openssl工具集生成密钥对,对于任一用户x而言,密钥对为(skx,vkx),其中skx为私钥,vkx为公钥。用户x执行csr指令,得到证书certx,此外,定义参与用户x的索引indx=vkxmod2k,其中k=bit(vkx)div4。

步骤2-6,有别于传统的dpos机制需要引入比特股这一密码货币,身份认证节点ca为每个身份认证节点生成一个共识积分cs(i)为每个indx生成一个安全指数indx_sr

步骤3,当汽车发生事故后,用户综合整理各信息。

步骤3具体实现步骤为:

步骤3-1,用户x在事故发生后,整理以下基本信息:保险购买凭证,车辆行驶证等相关凭证信息prx,个人身份信息idx

步骤3-2,整理以下证明信息:附有交警数字签名的事故鉴定书,附有保险公司工作人员数字签名的查勘报告,统计为rpx

步骤3-3,整理以下多媒体信息:行车记录仪的视频信息,事故现场照片信息等,统计为mdx

步骤3-4,整理以下维修信息:维修网点,维修时间,维修部件,维修费用凭证等rex,附有网点数字签名;同时生成关键字key,指示部分可公开维修数据,可供其他用户检索。

步骤4,用户x整理完成的信息msgx经客户端节点提交至身份认证节点。

步骤4具体实现步骤为:

步骤4-1,计算用户个人基本信息cf=esk(ksym,(prx,idx,indx_sr)),其中ksym为由sok协议生成的加密密钥;再计算双重加密后的个人基本信息cf=epk(vkx,cf)。

步骤4-2,计算加密后的申赔信息ct=epk(vkx,(rpx,mdx,rex))。

步骤4-3,计算用户信息msgx=combine(cf,ct,key,indx,vkx),其中key包含维修信息关键字,但不含任何个人隐私,其他用户无法通过key得知indx的任何现实信息。

在上述步骤中,epk为轻量级的公钥加密算法,esk为对称加密算法。

步骤5,用户信息msg被送至各身份认证节点以及代理重加密节点,经身份认证节点验证后,执行p-dpos算法,将相关数据写入联盟链中。

步骤5具体实现步骤为:

步骤5-1,各身份认证节点接收到msgx后,将自己的公钥vki传至代理重加密节点,由该节点上的智能合约执行代理重加密算法,具体如下:

步骤5-1-1,代理重加密节点将接收到的vki反馈至indxindx客户端节点上的智能合约生成密钥rkskx→vki,并将密钥送至代理重加密节点。

步骤5-1-2,proxy用x生成的密钥rkskx→vki将密文ct转化为indi的私钥能够解密的密文cti,其中proxy只提供转化服务,无法获取明文。

步骤5-1-3,proxy将转换的密文送至indiindi调用智能合约上的gettrans()函数解密验证;并在验证完成后调用uptrans()函数改变msg状态,使其成为合法msg

步骤5-2,p-dpos共识算法选举产生授权代表,p-dpos共识算法执行如下:

步骤5-2-1,每个拥有共识积分cs(i)的身份认证节点都需要把票投给信任的身份认证节点,也可投给自身;经过一轮投票后,拥有票数的最高的101个节点轮流记账。除去这101个授权代表外,还需选举出一定数量的备选代表,得票数按公式计算。

步骤5-2-2,如果101个记账节点中的某个节点错过签署新的区块,则更新其共识积分cs(i),更新后的是延迟时间的线性函数。

步骤5-2-3,对于cs(i)过低的代表可能被投票出席。

步骤5-2-4,若有授权代表被投票出席,则从备选代表队列中选择队首节点加入到授权代表队列的末尾。

步骤5-3,授权代表以键值对(key-value)的形式将数据写入联盟链的区块中,一旦记录成功写入,更新记录提交方的用户xindx_sr。每一条记录的头部都会引用授权代表的vk;区块中merkle树存储了每条密文的hash值,即为数据信息的索引,数据信息本身的实际存储地址为云平台,每条数据信息带有特定时间戳;其中,存入云端的数据密文将被切分成若干个子密文。

步骤6,新的用户x’在提交数据msgx之前,可通过客户端节点根据关键字key查询联盟链中所存储的数据;关键字key包含以下信息:维修地点la、维修部件comp、维修价格pr和维修时间time等不涉及个人身份隐私的可公开信息,表示成key→[la,comp,pr,time];根据查询结果,用户x’可以选择合适的地点以合适的价格完成汽车的维修。

步骤7,用户x在提交完数据后,可在适当时间通过merkleroot验证法进行数据完整性和保密性的确认。

步骤7及其merkleroot验证法具体实现步骤为:

步骤7-1,用户将加密后的密文e(msgx)切分成若干个等长的子密文,数量为n,记为e(e0,e1,....,en-1)。

步骤7-2,用户用随机数生成器生成n个随机数,记为r(r0,r1,....rn-1)。

步骤7-3,将每个eiri合并,得到hashi=h(ei+ri)。

步骤7-4,nhashi作为merkle树的叶子节点,最终得到merkleroot值。

步骤7-5,密文被分成n个子密文存入云存储服务器时还需要将每个hashi送至云端。

步骤7-6,如果用户想要证明其是某个数据的所有者,只需上传一个ri,如果ri与其中某个子密文合并后得到hash值能在上传的hashi表中检索到,则可以证明该用户是数据所有者。

步骤7-7,用户也可以将所有的ri上传,与每个ei计算hash值,得到root值,如果该root值和merkleroot值相同的话,则证明数据具有完整性。

步骤8,用户x向保险公司索赔时需要单独向保险公司公开其加密数据。

步骤8具体实现方法为:

步骤8-1,用户x通过代理重加密节点将存储在云端的密文转换成保险公司私钥能解密的密文。

步骤8-2,保险公司将相关维修数据核实后获取用户x的真实身份信息。

步骤8-3,真实身份的获取通过基于身份的密钥共享体制即sok协议完成。

步骤8-4,核实无误后,完成赔付。

步骤8-5,用户x如果需要再次向某保险公司购买保险,保险公司仅需查询其安全指数indx_sr,根据indx_sr划定合理的保险费用。

以上所述仅为本发明的较佳实施方式,本发明的保护范围并不以上述实施方式为限,但凡本领域普通技术人员根据本发明所揭示内容所作的等效修饰或变化,皆应纳入权利要求书中记载的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1