基于秘密共享的抗量子计算联盟链系统及通信方法与流程

文档序号:20061064发布日期:2020-03-06 07:58阅读:147来源:国知局
基于秘密共享的抗量子计算联盟链系统及通信方法与流程

本发明涉及秘密共享领域,尤其涉及一种基于秘密共享的抗量子计算联盟链系统及通信方法。



背景技术:

区块链是一种全新的分布式基础架构与计算范式,利用有序的链式数据结构存储数据,利用共识算法更新数据,利用密码学技术保障数据安全。在基于区块链的交易中,确保交易的数据安全和客户的隐私是区块链能够进一步发展的必要条件。为此,密码学技术尤其是公钥密钥学在区块链中得到了广泛的应用。而联盟链是区块链的一个分支,所以它本身也是一个分布式的,去中心化的公共数据库,跟其他链的区别就是它是针对特定群体的成员和有限的第三方,其内部指定多个预选节点为记账人,其共识过程受到预选节点控制的区块链。

当今主流的非对称(公钥)加密算法,如rsa加密算法,大多数都是基于大整数的因式分解或者有限域上的离散对数的计算这两个数学难题。其破解难度主要依赖于解决这些问题的效率。传统计算机上,要求解这两个数学难题,花费时间为指数时间(即破解时间随着公钥长度的增长以指数级增长),这在实际应用中是无法接受的。而为量子计算机量身定做的秀尔算法可以在多项式时间内(即破解时间随着公钥长度的增长以k次方的速度增长,其中k为与公钥长度无关的常数)进行整数因式分解或者离散对数计算,从而为rsa、离散对数加密算法的破解提供可能。

现有技术存在的问题总结如下:1.相同身份多次出现在联盟链中,敌方可以追踪。2.在现有技术中,加密签名={ms}r||{r}sk,这种形式的对数字签名的保护,计算量是原有签名的2倍(rsa签名1次+rsa加密1次);同样地,解密并验证签名的计算量也是原有验证签名的2倍。现有抗量子计算联盟链系统中,签名数量众多,因此签名及验证的计算量较大。3.假设密钥卡硬件被破解,则身份会暴露。



技术实现要素:

发明目的:针对现有技术中的缺陷,本发明公开了一种基于秘密共享的抗量子计算联盟链系统及通信方法,其采用基于公私钥的抗量子计算签名,保证了身份及签名私钥的安全性,能够将敌方无法获取的信息加入到数字签名的签名对象中,在保证抵抗量子计算的前提下,避免了数字签名非对称加密以及验签过程中非对称解密的计算量。

技术方案:为实现上述技术目的,本发明采用了如下技术方案:

一种基于秘密共享的抗量子计算联盟链系统,其特征在于:包括认证机构、若干用户和联盟链成员,所述用户作为客户端,提供服务的联盟链作为服务端,客户端和服务端均设有唯一的id,所述客户端和服务端均配备密钥卡,密钥卡由认证机构颁发;

所述服务端密钥卡包括公有部分和私有部分,公有部分存有公共信息池和区块链服务公钥池,私有部分存有自身私钥;所述服务端对用户id进行秘密共享,分成若干组不同的秘密分量,分别存储在公共信息池和用户密钥卡中;所述公共信息池内每组公共信息包括用户的公钥;

所述客户端计算假身份id,记为pid,客户端将pid、秘密分量以及用户的私钥存入用户密钥卡,用户密钥卡中还存有区块链服务公钥池,区块链服务公钥池包含交易所需区块链服务端的公钥。

优选地,所述用户假身份pid通过对用户id、各个用户id分量进行哈希运算获得。

优选地,所述服务端密钥卡设有历史记录功能,记录各客户端密钥卡的实际id、该实际id的pid变化的历史记录,历史记录加密存储于区块链服务端密钥卡公有部分,或由服务端密钥卡加密存储于区块链服务端密钥卡外部,所述服务端密钥卡的私有部分中存有用于加密的根密钥。

优选地,所述私有部分位于可信计算芯片内。

优选地,所述用户有1个或1个以上的区块链账户,每个账户对应1个公钥/私钥的组合。

优选地,所述服务端对用户id以秘密共享方式分成秘密分量的方法为:服务端根据匹配的密钥卡生成两个秘密分量随机数,各秘密分量随机数不相等,如相等则进行更换,根据用户id、两个秘密分量随机数、另外产生的随机数计算得到2个不同的用户id分量;每个秘密分量由不同的秘密分量随机数和对应的用户id分量组成;所述服务端获取用户端身份的方法为:凑齐2个秘密分量用于求得用户id。

本发明提供了一种基于秘密共享的抗量子计算联盟链系统的通信方法,用户记为user,提供服务的联盟链成员作为endorser,orderer或committer,两个用户id分量分别记为id1、id2,两个秘密分量随机数分别记为x1、x2,两个秘密分量分别记为秘密分量一、秘密分量二,其特征在于,包括如下用户pid更新步骤:

步骤1):user验证是否满足更换pid的条件:user获取当前时间戳、由匹配的密钥卡中读取x1,根据x1和当前时间戳计算得到两个哈希值随机数x1'、x2'作为新的秘密分量随机数,比较x1和x1'、x2',如果任意二者相等,则当前时间戳不满足更换pid的条件,重新获取时间戳和计算两个哈希值,直到满足更换pid的条件,验证通过;

验证通过后,user向多个endorser发送采用用户私钥签名的交易信息,交易信息中包含当前用户假身份pid、id1、时间戳、签名;

步骤2):endorser收到交易信息后,根据用户假身份pid对交易进行验证,对通过验证的交易进行继续处理;endorser根据秘密分量一和本地公共信息池存储的秘密分量二,恢复真实身份的用户id,并生成读操作集和写操作集,然后采用自身私钥签名,并将包含读操作集和写操作集的交易应答返回给user;

所述读操作集为公共信息池中存储的用户假身份pid、x1和秘密分量二的哈希值,所述写操作集为id1;

步骤3):user收到交易应答后,筛选出被endorser认可的交易,从区块链服务公钥池中取出endorser公钥对交易进行验证;将通过验证的交易应答集合组成背书发送给orderer;

步骤4):orderer积累预设数量的交易应答,在达到block最大值或者达到超时时间后,orderer将交易应答排序好并打包成区块,即背书集合,将区块发送给committer;

步骤5):每个committer收到排序后的背书合保后,验证交易并根据背书策略对交易应答集合进行验证,验证完成后,committer将区块写入区块链,更新本地公共信息池,更新的内容包括pid'、x1'、x2'、id2',committer执行完毕后,将交易结果通知发送至user;

步骤6):user收到交易通知后,从区块链服务公钥池中取出committer的公钥验证交易通知中的签名;根据用户端密钥卡中存储的秘密分量一和交易通知中携带的更新后的秘密分量二,恢复用户id,根据交易通知中的x1'得到id1',然后通过对用户id、id1'、id2'进行哈希运算获得更新后的pid',将本地存储的pid替换为更新后的用户假身份pid';秘密分量一更新为(x1',id1');更换pid的交易完成。

优选地,所述步骤2)中的验证和判断交易的方法为:根据pid找到本地公共信息池中对应的用户公钥,使用用户公钥对用户签名进行验证;验证通过后,判断用户id是否具有更换pid的权限,并查看交易信息中的时间戳与本地时间的差异是否位于合理范围内;若所有判断通过,则认可该交易;若有判断不通过,则不认可该交易。

优选地,所述步骤5)中验证方法包括:committer根据交易应答中的用户id的秘密分量一和本地存储的用户id的秘密分量二,恢复用户id和随机数,根据用户假身份pid读取公共信息池单元,对用户假身份pid、服务端在匹配的密钥卡中存储的公共密钥池中提取的秘密分量随机数x1和秘密分量二进行哈希运算,判断获得的值是否与读操作集中相等。

有益效果:由于采用了上述技术方案,本发明具有如下技术效果:

(1)、本发明使用密钥卡存储公钥和私钥,其中公钥存储在密钥卡的公钥池中,密钥卡是独立的硬件隔离设备,被恶意软件或恶意操作窃取密钥的可能性大大降低;由于量子计算机无法得到用户公钥,于是也无法得到对应的私钥;另外,本发明中,基于公私钥的抗量子计算签名也保证了所传输消息的安全性,即使在量子计算机存在的情况下,也难以被推导出私钥,因此该方案不容易被量子计算机破解;

(2)、本发明使用区块链服务公钥池和公共信息池的方式储存联盟链服务的公钥以及用户端的公钥,并且将敌方无法获取的信息加入到数字签名的签名对象中,在保证抵抗量子计算的前提下,避免了数字签名非对称加密以及验签过程中非对称解密的计算量;

(3)、本发明将用户真实id进行隐藏,采用假id的方式,实现不公开id却可以完成用户端和服务器之间身份认证的目的;本发明id没有明文存储于区块链服务端或客户端密钥卡,因此单独对其进行断电拆解无法获取id;总之,本发明中敌方无法通过通信与存储数据得到用户的真实id,则敌方无法实现id追踪,隐藏id的方法大大提高了安全性。

附图说明

图1为本发明的基于秘密共享的抗量子计算联盟链系统的结构示意图。

具体实施方式

下面结合附图对本方案做进一步的说明。

如附图1所示为本发明的一个实施例的结构示意图,在一个基于非对称密钥池体系中,对任意1个用户端与联盟链成员之间进行通信。下文中联盟链服务简称为服务端。本发明的密钥池体系中每个对象都具有密钥卡,可存储大数据量的密钥,也具备处理信息的能力。本发明中,用户端和服务端的本地系统中都存在相应需求的算法。

密钥卡的描述可见申请号为“201610843210.6”的专利。当为移动终端时,密钥卡优选为密钥sd卡;当为固定终端时,密钥卡优选为密钥usbkey或主机密钥板卡。

密钥卡从智能卡技术上发展而来,是结合了密码学技术、硬件安全隔离技术、量子物理学技术(搭载量子随机数发生器的情况下)的身份认证和加解密产品。密钥卡的内嵌芯片和操作系统可以提供密钥的安全存储和密码算法等功能。由于其具有独立的数据处理能力和良好的安全性,密钥卡成为私钥和密钥池的安全载体。每一个密钥卡都有硬件pin码保护,pin码和硬件构成了用户使用密钥卡的两个必要因素。即所谓“双因子认证”,用户只有同时取得保存了相关认证信息的密钥卡和用户pin码,才可以登录系统。即使用户的pin码被泄露,只要用户持有的密钥卡不被盗取,合法用户的身份就不会被仿冒;如果用户的密钥卡遗失,拾到者由于不知道用户pin码,也无法仿冒合法用户的身份。总之,密钥卡使得密钥等绝密信息不以明文形式出现在主机的磁盘及内存中,从而能有效保证绝密信息的安全。

本实施例的系统结构如图1所示,用户、联盟链成员都配备有密钥卡。本实施例中,密钥卡分为服务端密钥卡和客户端密钥卡。

服务端对id进行(2,2)的秘密共享。在对信息m进行(t,n)的秘密共享时,n为m拆分共享秘密的碎片数,t为恢复m的最小碎片数,2≤t≤n。

构造函数f(x)=id+rand*x。rand为随机数,不同的id,rand也不同。

服务端根据匹配的密钥卡生成随机数x1和x2。其中,x1与x2不能相等,如相等则进行更换。

计算得到id1=f(x1)=id+rand*x1,id2=f(x2)=id+rand*x2.

计算得到两个秘密即秘密分量为(x1,id1),(x2,id2)。凑齐2组秘密即可恢复id,具体步骤如下:

对2组秘密求得拉格朗日参数,

其中,λ1=(-x2)/(x1-x2),λ2=(-x1)/(x2-x1)。

进一步求得id=λ1*id1+λ2*id2=(x1*id2-x2*id1)/(x1-x2)。

rand=(id2-id1)/(x2-x1)。

客户端计算假身份id即pid=hash(id||id1||id2),将pid、秘密分量(x1,id1)以及用户的私钥sk存入用户密钥卡中,同时存入的还有区块链服务公钥池,包含交易所需区块链服务端(即部分endorser和committer)的公钥。

区块链服务端密钥卡分为公有部分和私有部分。公有部分存有公共信息池,每组公共信息包括pid||x1||(x2,id2)||pk。公共部分还存有区块链服务公钥池。私有部分位于可信计算芯片内,安全性得到更高的保证,存有自身私钥以及本地存储加密所用的根密钥。

区块链服务端密钥卡还包括一个附加功能,即记录各区块链客户端密钥卡的实际id,以及该实际id的pid变化的历史记录,包括记录pid变化的区块号及交易号,方便区块链监管机构进行追溯。历史记录加密存储于区块链服务端密钥卡公有部分,或由区块链服务端密钥卡加密存储于区块链服务端密钥卡外部,所用加密密钥为私有部分中本地存储加密所用的根密钥。

联盟链成员搭载有相应的区块链服务,每个服务有1个id。区块链客户端有1个id。区块链服务包括peer服务,order服务等。其中peer服务分为committer和endorser;order服务由多个orderer组成。所有区块链服务端均带有committer功能;保存有区块链以及智能合约,智能合约运行于密钥卡内;密钥卡中的世界状态worldstate即本地公共信息池。

下文设user,endorser,orderer,committer的标记如下:

(0)各自的简称分别为u,e,o,c;

(1)各自的id分别为idu,ide,ido,idc;

(2)各自的公钥分别为pku,pke,pko,pkc;

(3)各自的私钥分别为sku,ske,sko,skc。

根据交易流程,其中一用户可称为user,有1个或多个区块链账户,每个账户对应1个公钥/私钥的组合。提供相应服务的联盟链成员可作为endorser,orderer或committer。

本实施例所用非对称算法为rsa算法。设rsa算法的非对称密钥对为e/d,其中两者都可以作为公钥,剩下一方为私钥。即可以令公钥/私钥为e/d,也可以令公钥/私钥为d/e。

本发明提供了一种基于秘密共享的抗量子计算联盟链系统的通信方法,包括如下用户pid更新步骤:

步骤1:user提出交易。

user向多个endorser发送交易,交易tx可表示为{proposal,usersig}。

user获取当前时间戳timestamp,令x0=timestamp。

由匹配的密钥卡中读取x1,计算x1'=hash(x1||x0),x2'=hash(x0||x1)。

将x1、x1'以及x2'进行比较,如果任意二者相等,则当前timestamp不满足更换pid的条件,此时需要重新获得timestamp并进行更换,查看是否满足更换pid的条件。

proposal可表示为{pid,chaincodeid,txpayload,timestamp}。链码chaincodeid即使用智能合约函数的编号;txpayload即函数的参数,可表示为txpayload=id1。

usersig即user对proposal以及x1'和x2'的签名,可表示为sign(proposal||x1'||x2',sku)。sign(m,k)表示以m为消息、以k为密钥的rsa签名。其中,由于签名的对象(proposal||x1'||x2')无法被敌方所知,因此敌方无法通过签名破解签名私钥。

步骤2:endorser执行交易。

endorser根据pid搜索本地公共信息列表中的pid项,如找不到pid,则交易验证失败。

找到pid后,根据(x1,id1)和(x2,id2),恢复f(x)=id+rand*x,即恢复id和rand。

取x0=timestamp,计算x1'=hash(x1||x0),x2'=hash(x0||x1)。

根据pid找到本地公共信息列表中对应的pku,使用pku对usersig进行验证。验证通过后,判断idu是否具有更换pid的权限,并查看proposal中的timestamp与本地时间的差异是否位于合理范围内。若所有判断通过,则认可该交易;若有判断不通过,则不认可该交易。由于id没有存储于区块链服务端密钥卡,因此单独对其进行断电拆解无法获取id。

步骤3:endorser发送交易应答。

验证通过后,对该交易进行处理,即根据chaincodeid执行chaincode,生成读写操作集readset和writeset并将包含读写操作集的交易应答rtx返回给user。交易应答rtx可表示为{tran-proposal,epsig}。

tran-proposal即申请应答可表示为{ide,tid,chaincodeid,txpayload,readset,writeset}。包括交易的序号tid(可表示为tid=hash(proposal)),chaincodeid和txpayload,以及读写操作集readset=hash(pid||x1||(x2,id2))和writeset=id1。写入的内容为pid更新为pid',x1更新为x1',(x2,id2)更新为(x2',id2'),但是不可以公开这些内容,因此writeset仍然是id1。

如不认可该交易,readset/writeset为无效值。

epsig即使用endorser的私钥ske对tran-proposal以及x1'和x2'签名,可表示为sign(tran-proposal||x1'||x2',ske)。由于签名的对象(tran-proposal||x1'||x2')无法被敌方所知,因此敌方无法通过签名破解签名私钥。

步骤4:user发送背书(endorsement)etx到orderer。

user收到交易应答后,筛选出被endorser认可的交易。根据ide找到pke,使用pke对epsig进行验证。验证通过后,若确定达到背书策略要求,则将选择得到的rtx集合组成背书etx,可表示为etx=∑rtx。将etx发送至orderer。

步骤5:orderer发送排序后的etx集合到committer。

orderer在积累到一定数量的etx后,orderer对各个user递交过来的etx进行排序。在达到block的最大大小或者达到超时时间后,orderer将多个etx排序好并打包成区块即etxs,etxs还包括序列号seqno以及上个联盟链区块的哈希值prevhash。背书集合etxs可表示为{seqno,prevhash,∑etx}。orderer将etxs发送给committer。

步骤6:每个committer验证交易,并更新世界状态。

每个committer收到排序后的背书集合后,committer根据背书策略对etx集合进行验证,验证方式如下:

对于每个rtx,根据(x1,id1)和(x2,id2),恢复f(x)=id+rand*x,即恢复id和rand。令x0=timestamp,计算x1'=hash(x1||x0),x2'=hash(x0||x1)。

查看每个rtx,根据ide找到pke,使用pke验证其数字签名epsig。

验证readset:根据pid读取公共信息池单元,计算hash(pid||x1||(x2,id2)),检验是否与readset相等。

查看通过验证的rtx是否达到背书策略要求。

验证通过后committer认可该etx为有效背书,并作出标记以示有效,否则committer不认可该etx为有效背书,并作出标记以示无效。

验证完成后,committer将区块写入区块链。committer根据区块链中的有效背书,更新本地的世界状态,即本地密钥池。根据x1'计算id1',根据x2'计算id2'。计算pid'=hash(id||id1'||id2'),将pid更新为pid',x1更新为x1',(x2,id2)更新为(x2',id2')。同时,committer新增一条该id的pid变化的历史记录,包括记录pid变化的区块号及交易号,方便区块链监管机构进行追溯。

步骤7:committer发送交易通知。

多个committer执行完毕后,将交易结果(成功或失败)的通知ntx发送至user。交易通知ntx可表示为{tid,result,id2',committersig}

result即成功或失败。签名committersig即committer使用私钥skc对(result||id2'||x1'||x2')的签名,可表示为sign(result||id2'||x1'||x2',skc)。由于签名的对象(result||id2'||x1'||x2')无法被敌方所知,因此敌方无法通过签名破解签名私钥。

user收到交易通知后,根据idc找到pkc,用pkc验证committersig。

若交易通知中result=成功,根据(x1,id1)和(x2',id2')恢复f(x)=id+rand*x,即恢复id和rand。

根据x1'计算id1',计算pid'=hash(id||id1'||id2')。将pid更新为pid',(x1,id1)更新为(x1',id1')。至此更换pid的交易完成。

id没有存储于区块链客户端密钥卡,因此单独对其进行断电拆解无法获取id。其他类型的交易,也可以将上述更换pid的交易合并在内,即同时执行其他类型的交易以及更换pid,即可实现其他类型的交易的签名也可以抵抗量子计算。

以上所述仅是本发明的优选实施方式,应当指出:对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

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