本发明涉及区块链领域,特别涉及一种区块链的实现方法。
背景技术:
区块链具备以下特点:分布式储存,系统健壮性高;记录无法篡改,安全性高;记录公开,可追溯根源。基于这些特点,区块链最先被应用于虚拟货币的交易的记账,也导致了矿机市场蓬勃发展。然而区块链不等于虚拟货币,它可以应用于很多方面。
目前追求极致的“去中心化”的区块链技术存在以下的一些问题会限制对其的应用。区块链的规则导致其储存的数据必须是明文储存的;因为只有明文储存,其它人才可以证明区块链的储存的数据的内容;如果是加密储存,那么就无法证明其内容是什么;区块链公布在公网上会导致某些敏感的数据泄露;多人同时发布信息时会存在竞争,导致一些信息公布失败;区块链数据更新实时性差。
技术实现要素:
本发明要解决的技术问题在于,针对现有技术的上述缺陷,提供一种数据更加安全,中心统一上链,不会出现分叉的情况,且可以控制区块链增长速度,有利于提高并发上链的速度的区块链的实现方法。
本发明解决其技术问题所采用的技术方案是:构造一种区块链的实现方法,包括客户端数据上链流程,所述客户端数据上链流程包括如下步骤:
a1)客户端把需要储存的文件上传到ipfs系统,获取所述文件的hash值fh;
a2)所述客户端计算所述文件的hash值fh,并对所述文件的hash值fh、当前时间time和用户hash值uh进行签名得到文件签名us;
a3)所述客户端将所述文件的hash值fh、所述文件签名us、所述当前时间time、所述用户hash值uh和区块链id信息发送到中心,请求建立区块节点;
a4)所述客户端监听添加区块链是否成功,如是,执行步骤a5);否则,执行步骤a6);
a5)所述客户端将新增的区块节点下载下来,执行步骤a7);
a6)所述客户端进行异常处理,返回步骤a3);
a7)结束。
在本发明所述的区块链的实现方法中,还包括中心将数据上链流程,所述中心将数据上链流程包括如下步骤:
b1)所述中心接收到添加区块节点的请求;
b2)所述中心从所述ipfs系统同步需要上区块链的文件到本地;
b3)所述中心查找用户信息,使用用户信息校验所述文件签名us;
b4)判断所述文件签名us是否合法,如是,执行步骤b6);否则,执行步骤b5);
b5)返回出错信息给用户,告知用户进行异常处理,执行步骤b10);
b6)所述中心将所述文件签名us和上一块区块hash值ph进行合并,使用自己的私钥计算签名得到私钥签名bs,执行步骤b7);
b7)所述中心将区块节点文件写到所述ipfs系统,得到区块节点的hash值;
b8)所述中心把添加成功的所述区块节点的hash值返回给用户;
b9)所述中心广播区块链的变更消息,订阅者根据收到的消息从所述ipfs系统中更新区块链;
b10)结束。
在本发明所述的区块链的实现方法中,还包括秘钥变更流程,所述秘钥变更流程包括如下步骤:
c1)定时产生一对新的秘钥对;
c2)把新旧公钥写到所述ipfs系统中,得到相应的hash值;
c3)使用旧的私钥对所述ipfs系统中的文件进行签名;
c4)发送上链请求到所述中心,所述中心将签名后的文件上链到公钥链;
c5)记录下新的私钥,后续的签名采用所述新的私钥来进行。
在本发明所述的区块链的实现方法中,还包括添加用户流程,所述添加用户流程包括如下步骤:
d1)添加用户前首先要获取被添加用户的信息,所述被添加用户的信息包括被添加人的公钥;
d2)将所述被添加用户的信息保存到所述ipfs系统,获得新文件的hash值;所述被添加用户的信息包括用户的hash;
d3)使用被添加用户的私钥对所述新文件进行签名;
d4)请求把数据上链到用户链;
d5)数据上所述用户链成功后,通知所述被添加用户,所述被添加用户上链自己的数据。
在本发明所述的区块链的实现方法中,还包括删除用户流程,所述删除用户流程包括如下步骤:
e1)删除用户前获取被删除用户的信息;
e2)将所述被删除用户的信息保存到所述ipfs系统,获得新文件的hash值;所述被删除用户的信息包括用户的hash;
e3)使用自己的私钥对所述新文件进行签名;
e4)请求把数据上链到失效链;
e5)所述中心判断是否有权删除,如是,执行步骤e6);否则,执行步骤e7);
e6)所述数据上所述失效链成功后,通知所述被删除用户,所述被删除用户无法再请求数据上链;
e7)结束。
在本发明所述的区块链的实现方法中,用户自己或者用户的创建人或者创建人的上级创建人能删除用户。
实施本发明的区块链的实现方法,具有以下有益效果:由于设有客户端把需要储存的文件上传到ipfs系统,获取文件的hash值fh;客户端计算文件的hash值fh,并对所述文件的hash值fh、当前时间time和用户hash值uh进行签名得到文件签名us;客户端将文件的hash值fh、文件签名us、当前时间time、用户hash值uh和区块链id信息发送到中心,请求建立区块节点;当添加区块链成功时,客户端将新增的区块节点下载下来;分布式储存,数据更加安全;中心统一上链,不会出现分叉的情况,且可以控制区块链增长速度;需要上链的数据单独储存到ipfs的一个文件中,区块节点文件仅仅保存这个ipfs文件的hash值和签名,有利于提高并发上链的速度,本发明数据更加安全,中心统一上链,不会出现分叉的情况,且可以控制区块链增长速度,有利于提高并发上链的速度。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明区块链的实现方法中一个实施例中客户端数据上链流程的流程图;
图2为所述实施例中中心将数据上链流程的流程图;
图3为所述实施例中秘钥变更流程的流程图;
图4为所述实施例中添加用户流程的流程图;
图5为所述实施例中删除用户流程的流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本发明区块链的实现方法实施例中,该区块链的实现方法包括客户端数据上链流程,该客户端数据上链流程的流程图如图1所示。图1中,该客户端数据上链流程包括如下步骤:
步骤s11客户端把需要储存的文件上传到ipfs系统,获取文件的hash值fh:本步骤中,客户端首先把需要储存的文件上传到ipfs系统,获取该文件的hash值fh。
步骤s12客户端计算文件的hash值fh,并对文件的hash值fh、当前时间time和用户hash值uh进行签名得到文件签名us:本步骤中,客户端计算文件的hash值fh,并对文件的hash值fh、当前时间time和用户hash值uh进行签名得到文件签名us。
步骤s13客户端将文件的hash值fh、文件签名us、当前时间time、用户hash值uh和区块链id信息发送到中心,请求建立区块节点:本步骤中,客户端将文件的hash值fh、文件签名us、当前时间time、用户hash值uh和区块链id等信息发送到中心,请求建立区块节点。
步骤s14客户端监听添加区块链是否成功:本步骤中,客户端监听添加区块链是否成功,如果监听的结果为是,则执行步骤s15;否则,执行步骤s16。
步骤s15客户端将新增的区块节点下载下来:如果上述步骤s14的判断结果为是,则执行本步骤。本步骤中,区块链添加成功,客户端把新增的区块节点下载下来。执行完本步骤,执行步骤s17。
步骤s16客户端进行异常处理:如果上述步骤s14的判断结果为否,则执行本步骤。本步骤中,区块添加异常,客户端进行异常处理,执行完本步骤,返回步骤s13。执行完本步骤,执行步骤s17。
步骤s17结束:本步骤中,结束。
本发明采用分布式储存,数据更加安全;中心统一上链,不会出现分叉的情况,且可以控制区块链增长速度;需要上链的数据单独储存到ipfs的一个文件中,区块节点文件仅仅保存这个ipfs文件的hash值和签名,有利于提高并发上链的速度。
本实施例中,该区块链的实现方法还包括中心将数据上链流程,中心将数据上链流程包括如下步骤:
步骤s201中心接收到添加区块节点的请求:本步骤中,中心接收到添加区块节点的请求。
步骤s202中心从ipfs系统同步需要上区块链的文件到本地:本步骤中,中心从ipfs系统同步需要上区块链的文件到本地。
步骤s203中心查找用户信息,使用用户信息校验文件签名us:本步骤中,中心查找用户信息,使用用户信息校验文件签名us。
步骤s204判断文件签名us是否合法:本步骤中,判断文件签名us是否合法,如果判断的结果为是,则执行步骤s206;否则,执行步骤s205。
步骤s205返回出错信息给用户,告知用户进行异常处理:如果上述步骤s204的判断结果为否,即签名us不合法,则执行本步骤。本步骤中,返回出错信息给用户,告知用户进行异常处理。执行完本步骤,执行步骤s210。
步骤s206中心将文件签名us和上一块区块hash值ph进行合并,使用自己的私钥计算签名得到私钥签名bs:本步骤中,中心将文件签名us和上一块区块hash值ph进行合并,使用自己的私钥计算签名得到私钥签名bs。执行完本步骤,执行步骤s207。
步骤s207中心将区块节点文件写到ipfs系统,得到区块节点的hash值:本步骤中,中心将区块节点文件写到ipfs系统,得到区块节点的hash值。
步骤s208中心把添加成功的区块节点的hash值返回给用户:本步骤中,中心把添加成功的区块节点的hash值返回给用户。
步骤s209中心广播区块链的变更消息,订阅者根据收到的消息从ipfs系统中更新区块链:本步骤中,中心广播区块链的变更消息,订阅者根据收到的消息从ipfs系统中更新区块链。执行完本步骤,执行步骤s210。
步骤s210结束:本步骤中,结束。
本实施例中,该区块链的实现方法还包括秘钥变更流程,该秘钥变更流程的流程图如图3所示。图3中,该秘钥变更流程包括如下步骤:
步骤s31定时产生一对新的秘钥对:本步骤中,为了抵抗暴击破解,参与者定时产生一对新的秘钥对。
步骤s32把新旧公钥写到ipfs系统中,得到相应的hash值:本步骤中,参与者把新旧公钥写到ipfs系统中,得到相应的hash值。
步骤s33使用旧的私钥对ipfs系统中的文件进行签名:本步骤中,参与者使用旧的私钥对ipfs系统中的文件进行签名。
步骤s34发送上链请求到中心,中心将签名后的文件上链到公钥链:本步骤中,参与者发送上链请求到中心,中心将ipfs系统中签名后的文件上链到公钥链。
步骤s35记录下新的私钥,后续的签名采用新的私钥来进行:本步骤中,参与者记录下新的私钥,后续的签名采用新的私钥来进行。
本实施例中,该区块链的实现方法还包括添加用户流程,该添加用户流程的流程图如图4所示。图4中,该添加用户流程包括如下步骤:
步骤s41添加用户前首先要获取被添加用户的信息,被添加用户的信息包括被添加人的公钥:本步骤中,添加用户前首先要获取被添加用户的信息,被添加用户的信息包括被添加人的公钥。
步骤s42将被添加用户的信息保存到ipfs系统,获得新文件的hash值:本步骤中,将被添加用户的信息保存到ipfs系统,获得新文件的hash值,该被添加用户的信息包括用户的hash。
步骤s43使用被添加用户的私钥对新文件进行签名:本步骤中,使用被添加用户的私钥对新文件进行签名。
步骤s44请求把数据上链到用户链:本步骤中,请求把数据上链到用户链。
步骤s45数据上用户链成功后,通知被添加用户,被添加用户上链自己的数据:本步骤中,数据上用户链成功后,通知被添加用户,此时,被添加用户就可以上链自己的数据了。
本实施例中,该区块链的实现方法还包括删除用户流程,该删除用户流程的流程图如图5所示。图5中,该删除用户流程包括如下步骤:
步骤s51删除用户前获取被删除用户的信息:本步骤中,删除用户前首先获取被删除用户的信息。
步骤s52将被删除用户的信息保存到ipfs系统,获得新文件的hash值:本步骤中,将被删除用户的信息保存到ipfs系统,获得新文件的hash值,被删除用户的信息包括用户的hash。
步骤s53使用自己的私钥对新文件进行签名:本步骤中,使用被删除用户自己的私钥对新文件进行签名。
步骤s54请求把数据上链到失效链:本步骤中,请求把数据上链到失效链。
步骤s55中心判断是否有权删除:本步骤中,中心判断是否有权删除,如果判断的结果为是,则执行步骤s56;否则,执行步骤s57。值得一提的是,本实施例中,只有用户自己或者用户的创建人或者创建人的上级(可以跳过多级)创建人可以删除用户。
步骤s56数据上失效链成功后,通知被删除用户,被删除用户无法再请求数据上链:如果上述步骤s55的判断结果为是,则执行本步骤。本步骤中,数据上失效链成功后,通知被删除用户,此时,被删除用户无法再请求数据上链。执行完本步骤,执行步骤s57。
步骤s57结束:本步骤中,结束。
本发明增加消息推送系统,订阅者更新区块信息更加及时;增加用户链和失效链,可以有效地管理用户;增加公钥链,可以定时变更秘钥,有效抵抗暴力破解;只需要搭建http/mqtt服务和ipfs系统,实现及其简单,便于建立企业/行业内部区块链,有利于区块链推广。
传统的区块链技术追求极致的“去中心化”,导致应用起来十分困难;本发明采用一种比较中庸的方法,通过“中心化”和“去中心化”相结合,可以更加有效地利用区块链技术来实现一些应用。
本发明仍然使用ipfs来实现数据的分布式储存;数据由中心统一上链,即可以防止区块链分叉,又可以控制区块链增长速度;用户数据单独存储在一个ipfs文件,区块节点上仅仅储存这个文件的hash值和签名,即仅仅把用户文件的hash值挂在区块节点上,而不是全部内容;增加一个消息推送mqtt平台,广播区块链的变更消息,提高系统的实时性;增加用户链和失效链,用来记录增加了哪些用户和减少了哪些用户,实现用户可管理;增加一个公钥链,用来记录公钥的变更情况,使得参与者(用户和中心)可以经常更换自己的秘钥,可以有效抵抗暴力破解。
a、区块链说明
本发明除了记录交易的数据链外增加了用户链、失效链和公钥链。用户链用来记录整个系统中存在哪些用户,以及用户的信息。失效链记录哪些用户已经失效。失效的用户无法添加数据到链上去(可以写数据到ipfs系统,但是无法上链,无法得到公认;已经上链的失效开始时间前的数据仍然被认为有效)。公钥链记录用户的公私钥变更情况。如果任意参与者校验某个用户的数据签名失败,那么可以使用变更后的公钥来进行校验。
a1、对于用户链说明,使用用户链储存用户数据至少包含以下几点内容:
a11、用户id
a12、创建人hash
a13、用户姓名
a14、用户公钥
其中,a11是指这个用户的id,如身份证号码或者其他证件号码;a12用来在ipfs中定位创建人的信息;a13用来记录用户姓名;a14用来记录用户的初始公钥,用来验证这个用户发布的数据。如果在公钥链上无法找到用户的公钥,那么应该使用这个公钥来对数据进行签名。
a2、对于失效链说明,使用失效链储存失效用户至少包含以下几点内容:
a21、用户hash
a22、执行者hash
a23、失效开始时间
a24、失效原因
其中,a21用来在ipfs中定位这个用户的数据;a22用来在ipfs中定位这个使这个用户失效的人的信息,执行者可以是用户本身,也可以是创建人或者创建人的祖先(创建人的创建人);a23用来记录失效开始时间(包含这个时间点);a24用来记录失效原因。
a3、对于公钥链链说明,使用公钥链储存用户公钥变更记录至少包含以下几点内容:
a31、用户hash
a32、用户原来公钥
a33、用户现在公钥
a34、公钥变更时间
其中,a31用来在ipfs中定位这个用户的数据;a32表示原来的公钥;a33表示变更后的公钥;a34表示公钥变更时间。
b、区块节点说明
区块链由区块节点构成,每个区块节点就是一个文件,用来储存这个这个节点在链上与前后节点的信息,储存与之关联的用户数据文件的定位信息,储存用户数据生成的时间戳,储存用户的定位信息,储存这个节点的签名。总之,如果找到这个节点,那么就可以找到挂着这个节点上的用户数据。
一个区块节点包含以下内容:
b1、上一个区块节点hash值ph
b2、下一个区块节点的文件名nh
b3、挂在当前节点的文件的hash值fh
b4、用户数据的时间戳time
b5、用户hash值uh
b6、节点签名bs
其中,b1用来在ipfs中定位前一个区块,空值表示为链中的第一个区块,用ph表示;b2指向下一个节点的文件名,用来定位下一个节点,用nh来表示;b3用来在ipfs中定位挂在这个节点上的用户文件,用fh来表示;b4是用户储存数据的时间time;b5用来在ipfs中定位用户的数据;b6是节点数据的签名,用bs来表示,防止储存数据被篡改。
下一个节点名称计算方法:
nh=bs
使用节点的签名bs作为下一个节点的文件名即可以减少每个节点的储存空间,有减少计算量。
节点签名bs计算方法为:
us=rsa_enc(private_key2,fh+time+uh),
bs=rsa_enc(private_key1,us+ph),
其中,us表示用户生成的签名数据,bs表示中心生成签名数据,rsa_enc表示rsa的加密算法,private_key1表示中心的私钥,private_key2表示用户的私钥,fh表示储存内容的hash值,time表示储存时间戳。
bs的计算方法描述为,先使用用户的秘钥对储存内容的hash和时间戳等数据进行加密得到us,然后再使用中心的秘钥对us和前一个节点的hash值进行加密得到bs。
签名bs校验方法为:
us=rsa_dec(public_key1,bs)-ph,
fh+time+uh=rsa_dec(public_key2,us),
其中,us表示用户生成的签名数据,bs表示中心生成签名数据,rsa_dec表示rsa的解密算法,public_key1表示中心的公钥,public_key2表示用户的公钥,fh表示储存内容的hash值,time表示储存时间戳。如果计算出来的fh等参数正确,那么签名有效。
c、上链说明
本发明中,用户可以把自己的信息以文件的形式储存在ipfs系统上,但是如果要把用户文件的hash值保存到区块链上,那么就要请求中心来实现,即由中心统一上链,以此来避免区块链分叉的可能性,同时可以有效地控制区块链的增长速度。例如:如果发现某个用户在短时间内频繁请求上链数据,那么就返回出错信息给这个用户,要求这个用户必须等待一段时间才进行上链请求。
数据上链是通过发送上链请求到中心来实现的,上链的请求数据包含如下内容:
c1:用户hash
c2:区块链id
c3:区块链末节点hash
c4:挂在当前节点的文件的hash
c5:用户数据的时间戳time
c6:用户文件内容签名us
其中,c1用来在ipfs中定位这个用户的数据;c2用来指定上链的区块链;c3是用户本地当前区块链的末节点;c4用来在ipfs中定位所挂数据的内容,用fh来表示;c5是用户生成数据的时间;c6是用户文件内容的签名,用us来表示,用来给中心验证数据的合法性。
中心收到请求数据后,就检查fh和签名us的合法性,如果合法,那么建立区块节点到指定的链上,然后返回添加确认。如果中心认为参数有误,那么则返回拒绝;请求者收到拒绝后,应该更正错误,重新发起请求。
在实际应用中,在要求不高的情况下,也可以采用如下替代方案:1)上链数据不是分开储存,而是直接储存在区块节点文件上;2)本发明使用了不同的计算签名的方法;3)使用非http/mqtt技术实现中心统一上链功能;4)使用非ipfs文件系统来实现分布式储存。
总之,本实施例中,由中心统一上链,技术上避免区块链分叉问题;采用mqtt等技术进行区块链变更信息的实时广播,提供系统的实时性;采用了专门的签名计算方法;使用用户链和失效链来对用户进行管理;使用公钥链实现秘钥对变更。本发明可以轻松搭建企业内部或者行业内部的区块链,降低敏感数据公布到外网带来的风险,以便于区块链的推广。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。