一种基于联盟链的抗量子计算IKE系统和协商通信方法与流程

文档序号:20779216发布日期:2020-05-19 21:05阅读:599来源:国知局
一种基于联盟链的抗量子计算IKE系统和协商通信方法与流程

本发明涉及联盟链领域,尤其涉及一种基于联盟链的抗量子计算ike系统和协商通信方法。



背景技术:

internet密钥交换协议即ike协议,由internet安全关联和密钥管理协议(isakmp)和两种密钥交换协议组成。ike协议是用于交换和管理在vpn中使用的加密密钥的。它解决了在不安全的网络环境中安全地建立或者更新共享密钥的问题。ike是非常通用的协议,不仅可为ipsec协商安全关联,而且可以为snmpv3、ripv2、ospfv2等任何要求保密的协议协商安全参数。但到目前为止,它依然存在安全缺陷。

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

现有技术存在的问题:

1.当前ike协商密钥的过程在量子计算机的计算下有可能被破解,会导致协商密钥被泄露的问题。

2.当前基于非对称密钥池的dh协商方法,需要事先共享协商双方的公钥给对方,共享过程较为麻烦,需要人工操作。

3.当前将ike的密钥协商流程替换为量子密钥颁发的流程,需要较为昂贵的量子密钥颁发设备,且量子密钥颁发过程需要密钥管理服务器的统一调度,该过程容易受到拒绝服务攻击导致瘫痪。



技术实现要素:

发明目的:本发明的目的在于提供一种无法被量子计算机攻击和破解的基于联盟链的抗量子计算ike系统和协商通信方法。

技术方案:为了实现上述目的,本发明的基于联盟链的抗量子计算ike系统,联盟链由区块链服务端和区块链客户端组成,服务端和客户端配备独立的密钥卡,密钥卡内存储私钥和公钥池,服务端公钥池内存储所有联盟链服务端和客户端的身份信息,客户端公钥池内存储自身的身份信息和所有服务端的身份信息,在密钥卡内还存储系统管理公钥。私钥通过公钥和私钥生成服务器的私钥计算得到,密钥卡统一颁发,每个客户端持有独立的密钥卡,密钥卡内的私钥永不公开。

基于上述联盟链的抗量子计算ike系统的协商通信方法,包括以下步骤:

步骤1:客户端a和客户端b之间进行ikesa协商;

客户端a将带有相关协商策略算法的sa载荷、加密后的信息cookiea和客户端a的第二身份标识发送到客户端b;

客户端b接收到客户端a的信息后,选择己方同意的相关协商策略算法组成sa载荷,并将客户端b的第二身份标识、己方的sa载荷、加密后的信息cookieb和cookiea一同发送到客户端a,完成第一阶段的协商任务;

步骤2:客户端a和客户端b获取会话密钥;

(1)客户端a用己方私钥ska对由第二身份信息pida、cookiea、链码chaincodeid、函数的参数和时间戳组成的proposal进行签名,得到签名clientsig,将包含clientsig在内的交易tx发送到endorser;

(2)endorser收到交易tx,endorser在密钥卡中寻找客户端a的身份信息ida并确认,通过ida计算得到公钥pka从而验证签名clientsig,并判断客户端a是否具有生成会话密钥的权限;判断通过后,endorser选取随机数ki作为会话密钥的秘密共享分量,随机数xi为参数,组成(xi,ki),并对(xi,ki)进行加密和偏移计算得到偏移密文,将偏移密文和其他信息赋值给readset和writeset;

endorser运算得到己方的的第二身份标识,同时采用己方的私钥ske对包含该第二身份标识、readset和writeset在内的tran-proposal进行签名得到epsig,将签名epsig和tran-proposal组合起来作为交易应答rtx,并将交易应答rtx发送到a;

(3)a接收到交易应答rtx后,取出rtx的各个部分,在密钥卡中寻找endorser身份信息ide并确认,并根据ide对签名epsig进行验证,验证成功,则接受该rtx;当接受的rtx达到秘密共享的要求后,将恢复偏移后的密文保存在本地;

同时将所有接受的rtx组成背书etx,然后用orderer的公钥pko对etx加密得到密文ac,并将ac发送到orderer;

(4)orderer接收到ac后,取出私钥sko,并计算解密得到背书etx,累计一定数量的etx后,orderer对etx进行排序,并将所有的etx组合,连同orderer序列号和和上一个联盟链区块的哈希值组合起来得到etx集合;将etx集合用committer的公钥pkc分别进行加密,得到密文oc并发送到所有的committer;

(5)每个committer接收到oc后,取出oc各个部分,通过私钥skc计算解密得到每个etx集合,并对取出的etx中的rtx进行验证,验证通过的rtx值达到秘密共享的要求后,将验证结果通过私钥skc签名,将得到的签名和验证结果共同组成ntx发送到客户端a和客户端b;

(6)客户端a接收到ntx,确认验证通过后,将(3)中保存在本地的恢复偏移后的密文进行解密,得到多组(xi,ki),通过秘密共享分量ki和参数xi的计算恢复会话密钥k;

(7)客户端b接收到ntx,确认验证通过后,客户端b采用(1)中的方式发出交易请求到endorser;endorser接收到交易请求后进行验证,验证通过后,读取本地世界状态,获得本地对应于客户端b的秘密共享分量密文,进行签名并组成交易应答发送到客户端b;

(8)客户端b接收到交易应答后,验证签名,验证通过多组交易应答后,根据多组(xi,ki),通过秘密共享分量ki和参数xi的计算恢复会话密钥k;

步骤3:客户端a和客户端b进行身份认证;

客户端b通过会话密钥k对自己的身份信息idb进行加密,并发送到客户端a,客户端a接收到信息后通过会话密钥k解密并认证客户端b的身份信息;

验证通过后,客户端a通过会话密钥k对自己的身份信息ida进行加密,并发送到客户端b,客户端b接收到信息后通过会话密钥k解密并认证客户端a的身份信息;

验证通过后,客户端a和客户端b之间通过会话密钥k进行通信。

进一步的,步骤1中,cookiea为采用md5算法对客户端a的ip、客户端b的ip、随机数、当前日期和当前时间进行计算所得结果;cookieb为采用用md5算法对客户端b的ip、客户端a的ip、随机数、当前日期和当前时间进行计算所得结果。

进一步的,步骤1中,客户端a的第二身份标识为对客户端a的id和cookiea进行哈希运算的结果;客户端b的第二身份标识为对客户端b的id和cookieb进行哈希运算的结果。

进一步的,步骤2中的(1)中,交易tx由proposal和clientsig组成,其中proposal包括客户端a的第二身份标识、cookiea、链码chaincodeid、函数参数txpayload和时间戳timestamp,所述函数参数txpayload由客户端b的第二身份标识和cookieb计算得到,客户端a通过私钥ska计算proposal的基于id密码学的签名为clientsig。

优选的,为了提高抗量子计算能力,步骤2中的(3)中,对(xi,ki)进行加密偏移计算的方法如下;

通过客户端的公钥对xi和ki进行加密,加密后,将哈希函数作用于客户端和endorser的id、交易id得到偏移量,并使用偏移量对密文进行偏移运算,得到偏移后的密文。

步骤2中的(2)中,endorser在密钥卡中寻找客户端a的身份信息时,endorser遍历密钥卡中的id列表,并对id和cookiea进行哈希运算,将得到的结果与客户端a的第二身份标识进行对比,结果相等的id即为客户端a的身份信息ida;

为了恢复服务端和客户端的身份信息,步骤2中的(3)中在密钥卡中寻找endorser身份信息ide时,客户端a遍历密钥卡中的id列表,并对id、交易id进行哈希运算,将得到的结果与endorser的第二身份标识对比,结果相等的id即为endorser身份信息ide。

有益效果:

1、本专利使用密钥卡存储id和私钥,密钥卡是独立的硬件隔离设备,被恶意软件或恶意操作窃取密钥的可能性大大降低。且量子计算机无法得到用户公钥,于是也无法得到对应的私钥。私钥的安全性得到极大的提高。

2、本专利中将基于id密码学中的id改为隐藏的形式,并对签名参数也做了相应的改进使得签名参数无法被敌方计算得到,使得数字签名具有很高的抗量子安全性。

3、本专利在流程中的不同场合用到了偏移量,这些偏移量都需要密钥卡中的公钥池的参与才能计算得到,没有密钥卡的其他方将无法破解这些被偏移量保护的数据。偏移量的使用对数据进行了加密,使得传输过程更加安全,具有抗量子计算的特性;并且该加密方式比普通加密方式的计算量更小,因此避免了使用普通加密方式来抵抗量子计算机的攻击,降低了各方的设备负担。

4、本发明使用联盟链为ike通信双方颁发一对绝密的对称密钥作为双方的会话密钥。该会话密钥k是通过秘密共享进行分布式存储并生成的,敌方通过各种手段获取少于秘密共享阈值t个秘密,均无法得到最终的会话密钥,因此提升了会话密钥网络分发的安全性。

5、本发明在进行密钥交换前,无需告知己方公钥给对方,避免了现有非对称密钥池技术中,需要人工操作共享双方公钥的问题。

6、本发明ike的密钥协商流程,无需较为昂贵的量子密钥颁发设备即可抵抗量子计算,且量子密钥颁发过程由联盟链而非中心化密钥管理服务器进行统一调度,该过程不容易受到拒绝服务攻击导致瘫痪。

附图说明

图1为本发明实施例提供的系统结构图;

图2为本发明中服务端密钥卡的内部结构图;

图3为本发明中客户端密钥卡的内部结构图;

图4为本发明的ike流程图。

具体实施方式

本发明系统结构如图1所示,联盟链由区块链服务端和区块链客户端组成,每一个成员都配备有密钥卡,其中区块链客户端即需要使用ike进行通信的双方。

本发明中,通信双方的的会话密钥k是通过秘密共享进行分布式存储并生成的,由其中的n个endorser组成基于id密码学的分布式密钥生成服务,生成原理如下所示:

从素数阶q的有限域gf(q)中随机选取n个不同的非零元素x1,x2,…,xn,分配给参与者pi(i=1,2,…,n)。把会话密钥k作为共享的秘密信息,从gf(q)中选取t-1个元素a1,a2,…,a(t-1),构造多项式则有ki=f(xi)(1≤i≤n)。(xi,ki)作为参与者pi的影子秘密。

从n个endorser中获取任意t个影子秘密可以得到k,具体步骤如下。根据公式可以求得t个拉格朗日参数λi,因而可以根据公式k=f(0)=∑λi*ki求得k。

联盟链成员还包括相应的区块链服务,每个服务有1个或多个id。区块链服务包括peer服务,order服务等。其中peer服务分为committer和endorser;order服务由多个orderer组成。联盟链所有成员均带有committer功能,保存有区块链数据,endorser还存有智能合约,智能合约运行于密钥卡内。

下文中userclient,endorser,orderer,committer的标记如下:

1)id分别为idu,ide,ido,idc。

2)公钥分别为pku,pke,pko,pkc。

3)私钥分别为sku,ske,sko,skc。

如图2和图3所示,本实施例中联盟链服务端和客户端的密钥卡中包含各自的私钥和公钥池,服务端公钥池中有所有联盟链服务端和客户端对应的身份id,客户端公钥池中有客户端自己的id和所有联盟链服务端对应的id。对于所有的密钥卡,可以根据id求出对应的公钥:pk=h(id)。所有密钥卡均为固定组织颁发,各个用户的密钥卡保留各自的私钥并且永不公开,密钥系统采用基于id密码学的理论生成。假设g是一个群,从g中取生成元p,再选一个随机数作为私钥生成服务器的私钥s,有私钥生成服务器的系统管理公钥ppub=sp。所有的密钥卡中都还存储有系统管理公钥ppub。

本实施例中,endorser、orderer和committer等区块链服务端拥有图2所示的服务端密钥卡,userclient拥有图3所示的客户端密钥卡。

对于本发明中的所有公钥和私钥计算方式均为pk=h(id),sk=s*pk。s为私钥生成服务器的私钥。设通信双方分别为a和b,现在a和b开始进行通信,通过ike方式建立安全连接并发送消息。如图4所示,整个过程分为三个阶段,接下来将详细描述整个过程。

第一阶段:a和b之间进行ikesa协商:

其中sa为安全关联的意思。a用md5算法对己方的ip、b的ip、己方所取随机数、当前日期和当前时间进行计算,将所得结果作为cookiea,并生成第二身份标识pida=hash(ida||cookiea)。将pida、包括相关协商策略算法在内的sa载荷sa-a与cookiea一起发送给b。

b接收到a的协商请求信息后,用md5算法对己方的ip、a的ip、己方所取随机数、当前日期和当前时间进行计算,将所得结果作为cookieb。b生成第二身份标识pidb=hash(idb||cookieb),并对接收到的sa-a进行处理,选出己方同意的相关协商策略算法,组成己方的sa载荷sa-b并将其与pidb、cookieb、cookiea一起发送给a。双方完成了第一阶段的协商任务。

第二阶段:a得到会话密钥:

ike原技术是ab双方协商得到会话密钥,现在改成了双方通过联盟链流程得到会话密钥,从而代替之前的协商过程。首先a向联盟链服务端请求并且得到会话密钥的过程。

步骤1:a提出交易:

a提出交易tx,tx由proposal和clientsig组成,即tx={proposal,clientsig},其中proposal包括pida、cookiea、链码chaincodeid(即使用智能合约函数的编号)、txpayload(即函数的参数)和时间戳timestamp,此处txpayload的值为pidb||cookieb,即proposal={pida,cookiea,chaincodeid,txpayload=pidb||cookieb,timestamp}。

a用私钥ska计算proposal的基于id密码学的签名,得到签名sign(proposal,ska),过程如下:a用哈希函数作用于proposal得到hm,用hm作为密钥指针随机数,在密钥卡中找到一个公钥单元并从该单元取出idm。求得idm和proposal的mac值mac(proposal,idm),又取随机数参数r,求得r和公钥pka的乘积r*pka,再用函数h1作用于mac(proposal,idm)和r*pka,可得到签名参数h=h1(mac(proposal,idm),r*pka),则proposal的签名clientsig=sign(proposal,ska)=(r*pka,(r+h)*ska)。

由于本专利的ida不公开,敌方无法得到pka;因此敌方无法通过r*pka和pka得到随机数r。由于签名的对象为消息认证码,因此无法被敌方所知,因此敌方无法通过签名的对象得到h。由于敌方无法得到r和h,因此敌方无法通过(r+h)*ska得到ska。综上所述,公开的数字签名能抵抗敌方量子计算机对基于身份的公钥密码学的攻击。

userclient将a向endorser提出的交易tx发送给endorser。其中,交易tx为{{pida,cookiea,chaincodeid,txpayload=pidb||cookieb,timestamp},(r*pka,(r+h)*ska)}。

步骤2:endorser执行交易:

endorser收到交易tx后,取出{{pida,cookiea,chaincodeid,txpayload=pidb||cookieb,timestamp},(r*pka,(r+h)*ska)}中各个部分。endorser遍历密钥卡中的id列表,计算hash(id||cookiea),再将结果与pida进行对比,如果相等则说明找到的id是ida。endorser根据找到的ida和公式pka=h(ida)可以计算得到公钥pka,然后可以用pka来验证得到的签名。同理,endorser可以根据pidb和cookieb在密钥卡中找到idb,然后根据idb求得公钥pkb。

要验证该签名,根据《anidentity-basedsignaturefromgapdiffie-hellmangroups》的数字签名验证理论,只需要验证(p,ppub,r*pka+h*pka,(r+h)*ska))是一个有效的diffie-hellman元组。

验证签名成功之后,endorser判断a是否具有生成会话密钥的权限,判断时间戳timestamp与本地时间的差异是否位于合理范围内。如果所有判断都通过,则endorser认可该交易tx,否则endorser不认可该交易。

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

endorser对proposal作哈希运算得到tid即交易id,又根据公式pide=hash(ide||tid)计算得到endorser的第二身份标识pide,其中,

endorser取随机数ki作为会话密钥的秘密共享分量,取随机数xi为参数,其中每个endorser有各不相同的xi的取值范围,保证任意两个endorser获取的xi不相等。

用公钥pka对ki||xi进行加密,根据公式ga=e(pka,ppub)可以计算得到ga。取随机数r1,计算eui=r1*p,evi=(ki||xi)⊕h2((ga)r1),进而可以得到加密密文eki=<eui,evi>。然后再用公钥pkb对ki||xi进行加密,得到加密密文eki2=<eui2,evi2>。

在计算出结果后,endorser用哈希函数作用于ide||tid||ida得到pkea=h(ide||tid||ida);用哈希函数作用于ide||tid||idb得到pkeb=h(ide||tid||idb)。对eki和eki2做偏移得到eki’=<eui-pkea,evi>,eki2’=<eui2-pkeb,evi2>。

在endorser认可该交易tx的后,将pidb赋值给readset,将pida||pidb||timestamp||tid||pide||eki’||eki2’赋值给writeset,如果endorser不认可该交易tx的话,则readset和writeset的值为无效值。

readset的获取方式为:根据pidb,用前文所述方法在公钥池中读取各个id进行比对,如有比对成功,则readset=pidb,否则readset=无效值。

其中,tran-proposal包含{pide,tid,chaincodeid,txpayload,readset,writeset},将tran-proposal作为原文,用步骤1中的签名方法用私钥ske对其进行签名得到epsig,endorser得到交易应答rtx={tran-propasal,epsig},并将rtx发送给a。

步骤4:a发送加密后的背书到orderer。

a收到交易应答后,取出rtx即{tran-propasal,epsig}中各个部分后,遍历密钥卡中的id列表,计算hash(id||tid),再将结果与pide进行对比,如果相等则说明找到的id是ide。根据ide计算得到pke。

首先按照步骤2中的方法用pke对签名epsig进行验证,验证成功,则取出readset和writeset的值,如果readset与pidb相等,且writeset不是无效值的话,则说明该交易是被endorser认可的交易。验证失败,则将该rtx就会被丢弃。

a判断收到的被认可的交易不少于t个,则达到了秘密共享的要求。a用哈希函数作用于ide||tid||ida得到h(ide||tid||ida),即pkea。对eki’做偏移恢复得到eki=<eui-pkea+pkea,evi>=<eui,evi>。a对多个收到的认可的交易进行上述处理,并将得到的多组eki在本地保留。

a将认可的交易的rtx组成背书,即背书etx=∑rtx。用orderer的id值ido和公式pko=h(ido)计算得到公钥pko。按照步骤3中的方法使用pko对背书etx进行加密得到密文ac=<au-h(ida||tid||ido),av>,并将密文ac发送给orderer。如etx长度太大,则使用一个随机数密钥对称加密etx,并对该随机数密钥非对称加密得到ac;后续解密时,可先非对称解密ac得到随机数密钥,然后使用随机数密钥对称解密etx。本文其他涉及长消息的加密均可按照此方法。

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

orderer收到各个客户端发送的ac后,得到ac中的各个部分,并用前文所述恢复偏移量的方法得到<au,av>。取出自己的私钥sko,根据公式etx=av⊕h2(e(sko,au))计算得到解密后的背书etx。在积累到一定数量的etx后,orderer对etx进行排序。在达到block的最大大小或者达到超时时间后,orderer将序列号seqno、上个联盟链区块的哈希值prevhash、∑etx组合起来,可以得到etx集合={seqno,prevhash,∑etx}。

接着orderer用committer的id值idc和公式pkc=h(idc)计算得到公钥pkc。按照步骤3中的方法使用pkc对etx集合进行加密得到密文oc=<ou-h(ido||tid||idc),ov>,并将密文oc发送给该committer。按照这种方法将etx集合用所有committer的公钥分别加密并分别发送给所有的committer。

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

每个committer收到oc后,取出oc中的各个部分,并用前文所述恢复偏移量的方法得到<ou,ov>。取出自己的私钥skc,根据公式etx集合=ov⊕h2(e(skc,ou))计算得到解密后的etx集合。再取出{seqno,prevhash,∑etx}中的各个部分。分别取出每个etx,查看其中的rtx,即{tran-propasal,epsig}。首先按照步骤2中的方法对签名epsig进行验证,如果验证成功了则进行后面的步骤,如果验证失败了该rtx就会被丢弃。取出readset和writeset的值,如果readset与pidb相等,且writeset不是无效值的话,则说明该交易是被认可的。

committer查看通过验证的rtx是否达到秘密共享的要求,例如是否达到了t个有效的背书。如果认可该etx为有效交易就做出标记以示有效;否则committer将不认可etx为有效交易,并做出标记以示无效。接下来,committer将区块写入区块链,并且根据区块链中的有效交易,更新本地的世界状态。即取出每个etx中所有rtx所包含的writeset的值pida||pidb||timestamp||tid||pide||eki’||eki2’,将所有的pide||eki’||eki2’组成集合pida||pidb||timestamp||tid||∑{pide||eki’||eki2’}并存储在本地。

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

committer发送交易通知给a。如果tx有效,将success作为result的值;将result、tid、committersig组合来起到得到ntx={pidc,tid,result,committersig}。pidc=hash(idc||tid)。其中committersig是committer按照步骤1中的方法对result的签名,即可以得到committersig=sign(result,skc)。如果tx无效则将failure作为result的值。

committer将组合ntx发送给userclient,包括客户端a和b。

userclient收到ntx后,得到{pidc,tid,result,committersig}中的各个部分。客户端根据pidc和tid在密钥卡中找到idc。按照步骤2中的方法来验证签名committersig。验证签名成功之后:

(1)客户端a

取出result查看其值,如果result的值是success,则进行以下计算:对步骤4中保留在本地的eki进行解密。对密文eki即<eui,evi>进行解密,根据公式(ki||xi)=evi⊕h2(e(ska,eui))计算得到解密后的原文ki||xi。解密多个eki得到多组ki||xi,即多组(xi,ki),作为(t,n)秘密共享的秘密,由秘密共享的理论可以计算拉格朗日参数然后可以得到k=∑λi*ki,至此生成了会话密钥。如果result的值是failure,则说明生成会话密钥失败。

(2)客户端b

取出result查看其值,如果result的值是success,则进入第三阶段。如果result的值是failure,则说明生成会话密钥失败,b不进行处理。

第三阶段:b得到会话密钥:

联盟链客户端userclient通知b已生成会话密钥,b请求并且获得会话密钥。

步骤1:b提出交易。

b提出交易tx,tx由proposal和clientsig组成,即tx={proposal,clientsig},其中proposal包括pidb、cookieb、链码chaincodeid(即使用智能合约函数的编号)、函数参数txpayload和时间戳timestamp,函数参数txpayload的值为pida,即proposal={pidb,cookieb,chaincodeid,txpayload=pida,timestamp}。

计算proposal的基于id密码学的签名,得到签名sign(proposal,skb),过程如下:b用哈希函数作用于proposal得到hm,用hm作为密钥指针随机数,在密钥卡中找到一个公钥单元并从该单元取出idm。求得idm和proposal的mac值mac(proposal,idm),又取随机数参数r,求得r和b公钥pkb的乘积r*pkb,再用函数h1作用于mac(proposal,idm)和r*pkb,可得到签名参数h=h1(mac(proposal,idm),r*pkb)。则可以得到proposal的签名clientsig=sign(proposal,skb)=(r*pkb,(r+h)*skb)。

由于本专利的idb不公开,敌方无法得到pkb;因此敌方无法通过r*pkb和pkb得到随机数r。由于签名的对象为消息认证码,因此无法被敌方所知,因此敌方无法通过签名的对象得到h。由于敌方无法得到r和h,因此敌方无法通过(r+h)*skb得到skb。综上所述,公开的数字签名能抵抗敌方量子计算机对基于身份的公钥密码学的攻击。

b将tx即{{pidb,cookieb,chaincodeid,txpayload=pida,timestamp},(r*pkb,(r+h)*skb)}发送给endorser。

步骤2:endorser执行交易。

endorser收到交易tx后,取出{{pidb,cookieb,chaincodeid,txpayload=pida,timestamp},(r*pka,(r+h)*skb)}中各个部分后,endorser遍历密钥卡中的id列表,计算hash(id||cookieb),再将结果与pidb进行对比,如果相等则说明找到的id是idb。endorser根据idb和公式pkb=h(idb)可以计算得到公钥pkb,然后用pkb来验证得到的签名。

要验证该签名,只需要验证(p,ppub,r*pkb+h*pkb,(r+h)*skb))是一个有效的diffie-hellman元组。

验证签名成功之后,endorser判断b是否具有获取会话密钥的权限,读取本地世界状态判断b和a之间是否存在会话密钥,判断b的proposal中的timestamp与本地时间的差异是否位于合理范围内。如果所有判断都通过,则endorser认可该交易tx,否则endorser不认可该交易。

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

endorser对proposal作哈希运算得到tidb,又根据公式pide=hash(ide||tidb)计算得到pide,并计算得到tran-proposal。

其中tran-proposal包含{pide,tidb,chaincodeid,txpayload,readset,writeset}。如果endorser认可该交易tx的话,endorser根据pida||pidb读取本地世界状态,根据时间戳读取最近的记录,即获取最近的tid||∑{pide||eki2’},并将其赋值给readset,将null赋值给writeset;如果endorser不认可该交易tx的话,则readset和writeset的值为无效值。

将tran-proposal作为原文,用步骤1中的签名方法用私钥ske对其进行签名得到epsig,endorser得到交易应答rtx={tran-propasal,epsig},并将rtx发送给b。

步骤4:b收到结果

b收到交易应答后,取出rtx即{tran-propasal,epsig}中各个部分。b根据pide和tidb在密钥卡中找到ide。根据ide得到pke。

首先按照步骤2中的方法用pke对签名epsig进行验证,验证成功,保留该rtx,验证失败,则该rtx就会被丢弃。

对验证成功的多个rtx后,分别取出其中的readset并比较它们的tid值是否相等,相等的话则对其值即tid||∑{pide||eki2’}进行解密。取出当中的eki2’,并恢复偏移:用哈希函数作用于ide||tid||idb得到h(ide||tid||idb),即pkeb。对eki2’做偏移恢复得到eki2=<eui2-pkeb+pkeb,evi2>=<eui2,evi2>。然后对<eui2,evi2>进行解密,根据公式(ki||xi)=evi2⊕h2(e(skb,eui2))计算得到解密后的原文ki||xi。照此解密多个eki2’可得到多组ki||xi。

组成多组(xi,ki),作为(t,n)秘密共享的秘密。根据公式k=∑λi*ki,同时又有可以求得会话密钥k。至此,获取会话密钥完成。

第四阶段:a和b进行身份认证:

b用会话密钥k对己方身份信息idb进行加密得到{idb||hashb}k,将{idb}k、cookieb和cookiea一起发送给a。其中hashb=mac(cookieb||cookiea||sa-a||idb,k),mac(m,k)是以m为消息、以k为密钥的消息认证码。原技术中第三阶段首先是a向b发起身份认证,这里我们改成了b首先向a发起身份认证,原因是在第二阶段b是较后才得到会话密钥的。

a接收到b的消息后,用k解密其中的加密信息得到b的身份信息并验证hashb,然后用k对己方身份信息ida进行加密得到{ida}k,将{ida||hasha}k、cookiea和cookieb一起发送给b。其中hasha=mac(cookiea||cookieb||sa-a||ida,k)。b收到a的消息后,用k对其中的加密信息进行解密,得到a的身份信息并验证hasha。至此ike协商过程结束。a和b可以使用会话密钥k进行安全且有身份保障的通信了。

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