一种基于SM2可信标识的协同签名方法及系统与流程
未命名
07-14
阅读:142
评论:0
一种基于sm2可信标识的协同签名方法及系统
技术领域
1.本发明涉及信息安全领域,尤其涉及一种基于sm2可信标识的协同签名方法及系统。
背景技术:
2.椭圆曲线密码学(elliptic curve cryptography,ecc)是一种公钥密码,签名算法有sm2(该算法提供了加密模块)和ecdsa等。sm2的私钥是核心安全因素。现在流行的客户端,例如智能手机,通常以软件形式存储和使用私钥,安全防护能力差。为保护私钥,提出了双方拥有部分私钥,且均无法获取对方的部分私钥,这种方案只有双方协同计算才能对消息实现签名运算。典型方案有:cn104243456a-适用于云计算的基于sm2算法的签名及解密方法和系统;cn111817848a-一种ecc私钥分段存储的ecdsa签名方法及系统。
3.但是,在目前的实现方案中,都必须依赖第三方ca认证系统对公钥证书进行认证。pki体系的数字证书的申请、签发、验证、废止和更新等环节需要多层次的认证中心以及巨大的计算能力和管理资源的支持,再加上协同签名的是网络上双方的动作,因此基于pki证书的协同签名不适合大规模的签名和验签名场景。
4.标识密码系统ibc(identity-based cryptograph)是ca认证体系基础上的新发展,主要思想是以用户标识作为公钥,用户私钥由密钥生产中心根据用户标识产生。该算法利用双线性对设计,算法复杂、计算效率低;用户私钥由签发中心产生,导致用户签名不具备私有性;用户标识是公钥,导致用户公钥无法被撤销。基于单椭圆曲线的可信标识,现有技术也存在一些方案,比如cn110445621a-一种可信标识的应用方法及系统。
技术实现要素:
5.为了克服上述技术缺陷,本发明的目的在于提供一种利用sm2算法和椭圆曲线特性生成可信标识并完成协同签名的基于sm2可信标识的协同签名方法。
6.本发明公开了一种基于sm2可信标识的协同签名方法,包括:签发中心基于椭圆曲线密码算法生成第一私钥和第一公钥,保密所述第一私钥、公布所述第一公钥;签发中心基于签发中心的基础标识、所述第一私钥、所述第一公钥生成签发中心的可信标识;服务器端基于椭圆曲线密码算法生成第二私钥和第二公钥,保密所述第二私钥,并将所述第二公钥加密后发送至签发中心;签发中心基于服务器端的基础标识、所述第一私钥、所述第二公钥生成服务器端的可信标识;第一客户端生成第三公钥的子公钥p1;第一客户端分别验证所述签发中心的可信标识和所述服务器端的可信标识,若都通过,则将所述第三公钥的子公钥p1加密后发送至服务器端;服务器端根据所述第三公钥的子公钥p1计算第一客户端的第三公钥p;服务器端验证所述签发中心的可信标识,若通过,则将所述第三公钥p加密后发送至签发中心;签发中心基于第一客户端的基础标识、所述第一私钥、所述第三公钥p生成第一客户端的可信标识;第一客户端生成部分签名q1,并将所述部分签名q1和消息摘要e进行加密后发送至服务器端;服务器端根据所述部分签名q1和所述消息摘要e生成第一签名r,
并将所述第一签名r加密后发送至第一客户端;第一客户端根据所述第一签名r生成第二签名s,并将所述第一签名r、第二签名s作为完整签名输出;第二客户端采用第一公钥和对应的基础标识分别验证签发中心的可信标识、第一客户端的可信标识,最后采用第三公钥p验证第一客户端的所述完整签名。
7.优选的,所述服务器端将所述第二公钥加密后发送至签发中心包括:所述第二公钥及所述服务器端的基础标识进行数据拼接后得到第一明文;服务器端采用所述第一公钥对所述第一明文进行加密得到第一密文;签发中心采用所述第一私钥对所述第一密文进行解密得到所述第一明文。
8.优选的,所述第一客户端生成第三公钥的子公钥p1包括:第一客户端随机生成整数r1∈[1,n-1];第一客户端获取用户的口令pd;将随机数r1、口令pd、第一客户端的基础标识进行数据拼接后得到数组m1,并计算m1的杂凑值h(m1),接着计算得到d1=r1
⊕
h(m1),则第三公钥的子公钥p1为d1-1
·
g;其中,
⊕
表示按比特异或,g表示椭圆曲线的n阶基点;所述第一客户端将所述第三公钥的子公钥p1加密后发送至服务器端包括:所述第三公钥的子公钥p1及所述第一客户端的基础标识进行数据拼接后得到第二明文;第一客户端采用所述第二公钥对所述第二明文进行加密得到第二密文;服务器端采用所述第二私钥对所述第二密文进行解密得到所述第二明文。
[0009]
优选的,所述服务器端根据所述第三公钥的子公钥p1计算第三公钥p包括:服务器端生成保密计算信息d,服务器端将保密计算信息d、第一客户端基本信息、第一客户端的基础标识进行数据拼接后得到数组m2,并计算m2的杂凑值h(m2),接着计算得到(x1,y1)=(h(m2)*d)
·
g,接着计算d2=h(x1||y1),则第三公钥p为d2-1
·
p1-g;所述服务器端将所述第三公钥p加密后发送至签发中心包括:所述第三公钥p及所述第一客户端的基础标识进行数据拼接后得到第三明文;服务器端采用所述第一公钥对所述第三明文进行加密得到第三密文;签发中心采用所述第一私钥对所述第三密文进行解密得到所述第三明文。
[0010]
优选的,所述第一客户端生成部分签名q1,并将所述部分签名q1和消息摘要e进行加密后发送至服务器端包括:第一客户端随机生成整数k1∈[1,n-1],所述部分签名q1=k1
·
g;e=h(m)、所述部分签名q1、所述第三公钥的子公钥p1进行数据拼接后得到所述第四明文;第一客户端采用所述第二公钥对第四明文进行加密得到第四密文,并发送至服务器端;服务器端采用所述第二私钥对所述第四密文进行解密得到所述第四明文。
[0011]
优选的,所述服务器端根据所述部分签名q1和所述消息摘要e生成第一签名r,并将所述第一签名r加密后发送至第一客户端包括:服务器端随机生成整数k2∈[1,n-1]、k3∈[1,n-1],计算(x2,y2)=k3
·
q1+k2
·
g,接着计算第一签名r=(x2+e)modn,若r=0,则重新选择k2或k3、重新计算(x2,y2),直至r不为0;服务器端计算s1=k3*d2mod n,s2=d2*(r+k2)mod n;将r、s1、s2进行数据拼接后得到所述第五明文;服务器端采用所述第三公钥的子公钥p1对第五明文进行加密得到第五密文,并发送至第一客户端;客户端采用d1-1
对所述第五密文进行解密得到所述第五明文。
[0012]
优选的,所述第一客户端根据所述第一签名r生成第二签名s,并将所述第一签名r、第二签名s作为完整签名输出包括:第一客户端计算第二签名s=(d1*k1*s1+d1*s2-r)mod n,若s=0或s=n-r,则服务器端重新选择k2或k3、重新计算(x2,y2),直至s不为0且s不为n-r;将(m,r,s)作为完整签名输出。
[0013]
优选的,所述验证所述可信标识时,采用所述第一公钥和待验方的基础标识为验签公钥。
[0014]
优选的,所述第一客户端基本信息包括任意数据生效日期和所述任意数据的失效日期;所述第一客户端基本信息保存于服务器端,或第一客户端实时将所述第一客户端基本信息加密传输至服务器端。
[0015]
本发明还公开了一种基于sm2可信标识的协同签名系统,包括可信标识签发子系统、第一客户端签名密钥生成子系统、第一客户端协同签名子系统和第二客户端验签子系统。
[0016]
在所述可信标识签发子系统中,签发中心基于椭圆曲线密码算法生成第一私钥和第一公钥,保密所述第一私钥、公布所述第一公钥;签发中心基于签发中心的基础标识、所述第一私钥、所述第一公钥生成签发中心的可信标识;服务器端基于椭圆曲线密码算法生成第二私钥和第二公钥,保密所述第二私钥,并将所述第二公钥加密后发送至签发中心;签发中心基于服务器端的基础标识、所述第一私钥、所述第二公钥生成服务器端的可信标识;
[0017]
在所述第一客户端签名密钥生成子系统中,第一客户端生成第三公钥的子公钥p1;第一客户端分别验证所述签发中心的可信标识和所述服务器端的可信标识,若都通过,则将所述第三公钥的子公钥p1加密后发送至服务器端;服务器端根据所述第三公钥的子公钥p1计算第三公钥p;接着,服务器端验证所述签发中心的可信标识,若通过,则将所述第三公钥p加密后发送至签发中心;签发中心基于第一客户端的基础标识、所述第一私钥、所述第三公钥p生成第一客户端的可信标识;
[0018]
在所述第一客户端协同签名子系统中,第一客户端生成部分签名q1,并将所述部分签名q1和消息摘要e进行加密后发送至服务器端;服务器端根据所述部分签名q1和所述消息摘要e生成第一签名r,并将所述第一签名r加密后发送至第一客户端;第一客户端根据所述第一签名r生成第二签名s,并将所述第一签名r、第二签名s作为完整签名输出;
[0019]
在所述第二客户端验签子系统中,第二客户端采用第一公钥和对应的基础标识分别验证签发中心的可信标识、第一客户端的可信标识,最后采用第三公钥p验证第一客户端的所述完整签名。
[0020]
采用了上述技术方案后,与现有技术相比,具有以下有益效果:
[0021]
1.本发明通过将第一客户端的公钥分成两个部分分别从第一客户端和服务器端来获取,可以实现协同签名,提高安全性;
[0022]
2.由于可信标识要利用标识、签名公钥、签名值,而签名值要利用签名私钥和待签名信息,而签名私钥为签发中心的第一私钥,故可信标识的既需要用到通信方的标识,也需要用到签发中心的保密的第一私钥,以此保护了签名私钥,利用标识的可信性,支持了应用去中心化;
[0023]
3.利用椭圆曲线特性生成密钥对,从而在数据传输过程中可对传输数据进行加密,保证其安全性;
[0024]
4.第一客户端在生成相当于部分私钥的d1时,需要用到随机部分r1、用户口令、第一客户端标识,增强了客户端私钥的安全性;服务器端在生成相当于部分私钥的d2时,需要用到第一客户端基本信息,通过该第一客户端基本信息来计算相当于部分私钥的d2,而无需在服务器端保存第一客户端的私钥,提高了安全性;并且,该第一客户端基本信息也可以
由第一客户端提供,每次计算时实时拉取即可,减轻了服务器端负担,从而本发明简化了用户身份的认证、提高了运算效率、支持了应用管理的扁平化。
附图说明
[0025]
图1为本发明提供的基于sm2可信标识的协同签名方法的流程示意图;
[0026]
图2为本发明提供的基于sm2可信标识的协同签名系统的可信标识签发子系统的功能流程图;
[0027]
图3为本发明提供的基于sm2可信标识的协同签名系统的第一客户端签名密钥生成子系统的功能流程图;
[0028]
图4为本发明提供的基于sm2可信标识的协同签名系统的第一客户端协同签名子系统的功能流程图;
[0029]
图5为本发明提供的基于sm2可信标识的协同签名系统的第二客户端验签子系统的功能流程图。
具体实施方式
[0030]
以下结合附图与具体实施例进一步阐述本发明的优点。
[0031]
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的原理和方法的例子。
[0032]
在本公开使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本公开。在本公开和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
[0033]
应当理解,尽管在本公开可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本公开范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。
[0034]
首先解释在本发明中出现的代号。
·
表示整数乘以曲线上的点,计算的结果仍为椭圆曲线上一点。*表示两个整数相乘。||表示数据拼接。n椭圆曲线e的基点g的阶。modn表示一个整数被n除以后得到的非负余数。
⊕
表示按比特异或运算。hash()(简记为h)为杂凑函数,采用公开算法(如国密sm3)。signature(sm2,s,m1)表示用sm2签名,s为签名私钥,m1为待签名信息。validate(sm2,p,m2)表示用sm2验签,p为验签公钥,m2为已签名数据。encrypty(sm2,p,m)表示用sm2加密,p为加密公钥,m为明文。decrypt(sm2,s,c)表示用sm2解密,s为解密私钥,c为密文。ti(truested identity,可信标识),ti=认证信息||签名值,其中“认证信息=标识||签名公钥”。
[0035]
本发明主要利用sm2算法和椭圆曲线特性来生成可信标识、并完成协同签名。其中利用椭圆曲线特性来生成密钥对,椭圆曲线密钥对生成原理为:选择随机整数s∈[1,n-1],
s是私钥,对应公钥则为p=s
·
g。
[0036]
参见附图1,本发明公开了一种基于sm2可信标识的协同签名方法,包括以下几个主要步骤:
[0037]
s100、签发中心合法发布签发中心和服务器端的可信标识;
[0038]
s200、第一客户端和服务器端联合生成第一客户端的公钥(之后签发中心合法发布第一客户端的可信标识);
[0039]
s300、第一客户端和服务器端完成协同签名;
[0040]
s400、第二客户端验证签名。
[0041]
需要说明的是,这里的第一客户端可即为客户端a,客户端a为与服务器等第三方协同签名的客户端;第二客户端可即为客户端b,客户端b为验签的客户端。
[0042]
在s100中,签发中心首先签发中心签发自签名可信标识。具体的,基于椭圆曲线密码算法生成第一私钥和第一公钥,保密第一私钥、公布第一公钥;接着签发中心基于签发中心的基础标识、第一私钥、第一公钥生成签发中心的可信标识。
[0043]
一种优选实例,签发中心的标识记为idc,则包括如下步骤:
[0044]
s111:签发中心随机生成私钥csk∈[1,n-1],csk由签发中心秘密保存;
[0045]
s112:签发中心计算对应的公钥cpk:cpk=csk
·
g;
[0046]
s113:签发中心合法发布签发中心的可信标识tic,tic=idc||cpk||signature(sm2,h(idc)*csk,idc||cpk)。
[0047]
接着签发中心签发协同签名的服务器端的可信标识。具体的,服务器端基于椭圆曲线密码算法生成第二私钥和第二公钥,保密第二私钥;第二公钥及服务器端的基础标识进行数据拼接后得到第一明文,服务器端采用第一公钥对第一明文进行加密得到第一密文;签发中心采用第一私钥对第一密文进行解密得到包含第二公钥及服务器端的基础标识的第一明文,签发中心则基于服务器端的基础标识、第一私钥、第二公钥生成服务器端的可信标识。
[0048]
一种优选实例,服务器端的标识记为ids,则包括如下步骤:
[0049]
s121:服务器端随机生成私钥ssk∈[1,n-1],ssk由服务器端秘密保存;
[0050]
s122:服务器端计算对应的公钥spk:spk=ssk
·
g;
[0051]
s123:服务器端将加密数据c1=encrypty(sm2,cpk,ids||spk)发给签发中心;
[0052]
s124:签发中心解密,decrypt(sm2,csk,c1),获得ids||spk;
[0053]
s125:签发中心合法发布服务器端的可信标识tis,tis=ids||spk||signature(sm2,h(ids)*csk,ids||spk)。
[0054]
在s200中,首先客户端a生成部分私钥d1,接着利用部分私钥生成部分公钥(又称第三公钥的子公钥)p1,然后将生成的部分公钥p1密发至服务器端,其中,第一客户端分别验证签发中心的可信标识和服务器端的可信标识,若都通过,才将第三公钥的子公钥p1加密后发送至服务器端;再由服务器端根据第三公钥的子公钥p1计算生成客户端a的部分私钥d2,接着利用该部分私钥d2生成客户端a的公钥(又称第三公钥)pa。接着,签发中心通过解密得到客户端a的基础标识ida和第三公钥p,并基于基于第一客户端的基础标识、第一私钥、第三公钥p生成第一客户端的可信标识。其中,服务器端还需要验证签发中心的可信标识,若通过,则将第三公钥p加密后发送至签发中心。
[0055]
上述生成的客户端a的可信标识tia,tia=ida||pa||signature(sm2,h(ida)*csk,ida||pa)、服务器端的可信标识tis,tis=ids||spk||signature(sm2,h(ids)*csk,ids||spk)、签发中心的可信标识tic,tic=idc||cpk||signature(sm2,h(idc)*csk,idc||cpk)。签名私钥都为标识(例如客户端a的标识ida;服务器端的标识ids;签发中心的标识idc)和签发中心的第一私钥csk,其中第一私钥csk由签发中心秘密保存,而各个标识(例如客户端a的标识ida;服务器端的标识ids;签发中心的标识idc)都是发布的,故本发明的可信标识的发布都十分便利且安全。
[0056]
一种优选实例,客户端a的标识记为ida。
[0057]
1)客户端a生成部分私钥d1和部分公钥p1
[0058]
s211:客户端a随机生成r1∈[1,n-1],客户端a有效保密存储r1;
[0059]
s212:拥有客户端a的真实用户的口令记为pda;
[0060]
s213:客户端a计算d1=r1
⊕
h(r1||pda||ida);
[0061]
s214:客户端a计算部分公钥p1=d1-1
·
g;
[0062]
s215:客户端a验证validate(sm2,h(idc)*cpk,tic);
[0063]
s216:客户端a验证validate(sm2,h(ids)*cpk,tis);
[0064]
s217:客户端a将加密数据c2=encrypty(sm2,spk,ida||p1)发给服务器端。
[0065]
2)服务器端生成客户端a的部分私钥d2和公钥pa
[0066]
s221:服务器端解密,decrypt(sm2,ssk,c2),获得ida||p1;
[0067]
s222:服务器端计算(x1,y1)=(h(ida||生效日期||失效日期||d)*d)
·
g;
[0068]
s223:服务器端计算d2=h(x1||y1);
[0069]
s224:服务器端计算客户端a的公钥pa=d2-1
·
p1-g;
[0070]
s225:服务器端验证validate(sm2,h(idc)*cpk,tic);
[0071]
s226:服务器端将加密数据c3=encrypty(sm2,cpk,ida||pa)发给签发中心。
[0072]
这里的d为服务器端随机生成的保密计算信息,d∈[1,n-1],并由服务器端秘密保存。
[0073]
3)签发中心签发客户端a的可信标识
[0074]
s231:签发中心解密,decrypt(sm2,csk,c3),获得ida||pa;
[0075]
s232:签发中心合法发布客户端a的可信标识tia,tia=ida||pa||signature(sm2,h(ida)*csk,ida||pa)。
[0076]
这里客户端a的部分私钥d1=r1
⊕
h(r1||pda||ida),包含了随机部分r1、用户口令、还包含了标识ida。其中,用户口令可以是智能手机的开机口令,ida可以是智能手机的imei号,增强了客户端私钥的安全性。
[0077]
在服务器端计算的(x1,y1)=(h(ida||生效日期||失效日期||d)*d)
·
g,而服务器端生成的部分私钥d2=h(x1||y1)。由此d2为服务器端计算生成,从而服务器端不需要保存为客户端a生成的部分私钥d2,只需保存基本信息“ida||生效日期||失效日期”,增加了安全性。并且,为了减轻服务器端负担,这个基本信息还可以每次由客户端a加密传输到服务器端,从而密钥的计算更快且更安全。
[0078]
在s300中,第一客户端和服务器端协同签名,首先第一客户端生成部分签名q1,并将部分签名q1和消息摘要e进行加密后发送至服务器端。服务器端再根据第一客户端生成
的部分签名q1和消息摘要e生成第一签名r,并将第一签名r加密后再回发至第一客户端。第一客户端最后根据第一签名r生成第二签名s,并将第一签名r、第二签名s作为完整签名输出。
[0079]
一种优选实例如下。
[0080]
1)客户端a对消息m部分签名
[0081]
s311:客户端a随机生成整数k1∈[1,n-1];
[0082]
s312:客户端a部分签名计算q1=k1
·
g;
[0083]
s313:客户端a计算e=h(m);
[0084]
s314:客户端a验证validate(sm2,h(idc)*cpk,tic);
[0085]
s315:客户端a验证validate(sm2,h(ids)*cpk,tis);
[0086]
s316:客户端a将c4=encrypty(sm2,spk,e||q1||p1)发送给服务器端。
[0087]
2)服务器端对消息m部分签名
[0088]
s321:服务器端解密,decrypt(sm2,ssk,c4),获得e||q1||p1;
[0089]
s322:服务器端随机生成整数k2∈[1,n-1];
[0090]
s323:服务器端随机生成整数k3∈[1,n-1];
[0091]
s324:服务器端计算(x2,y2)=k3
·
q1+k2
·
g;
[0092]
s325:服务器端计算r=(x2+e)modn,其中如果r=0,则返回步骤s323;
[0093]
s326:服务器端计算s1=k3*d2 modn;
[0094]
s327:服务器端计算s2=d2*(r+k2)mod n;
[0095]
s328:服务器端将加密数据c5=encrypty(sm2,p1,r||s1||s2)发送给客户端a。
[0096]
3)客户端a完成对消息m签名
[0097]
s331:客户端a解密,decrypt(sm2,d1-1
,c5),获得r||s1||s2;
[0098]
s332:客户端a计算s=(d1*k1*s1+d1*s2-r)modn,其中如果s=0或s=n-r,则返回步骤s323;
[0099]
s333:(r,s)为消息m的sm2数字签名,三元数组(m,r,s)为已签名数据。
[0100]
在s400中,第二客户端采用(签发中心的)第一公钥和对应的基础标识分别验证签发中心的可信标识、第一客户端的可信标识,最后采用(第一客户端的)第三公钥p验证第一客户端的完整签名。
[0101]
一种优选实例,客户端b验证签名。
[0102]
s401:客户端b验证validate(sm2,h(idc)*cpk,tic);
[0103]
s402:客户端b验证validate(sm2,h(ida)*cpk,tia);
[0104]
s403:客户端b验证validate(sm2,pa,(m,r,s))。
[0105]
在离线验证过程中,例如验证客户端a的可信标识tia时,虽然tia的签名私钥为h(ida)*csk,但由于与其对应的公钥是(h(ida)*csk)
·
g=h(ida)
·
cpk,cpk和ida都是发布的,故在验证时可以避免较多的密钥传输,而验证时既使用了签发中心的第一公钥又使用了客户端a的标识,也保证了验证的准确性。对签名中心的离线验证也是如此。
[0106]
本发明还公开了一种基于sm2可信标识的协同签名系统,包括可信标识签发子系统(参见附图2)、第一客户端签名密钥生成子系统(参见附图3)、第一客户端协同签名子系统(参见附图4)和第二客户端验签子系统(参见附图5)。
[0107]
在可信标识签发子系统中,签发中心随机生成私钥并计算出对应公钥(该公私钥对负责对所有可信标识签名和验签,同时作为加密通信使用),签发中心发布自签名的可信标识,具体的,签发中心基于椭圆曲线密码算法生成第一私钥和第一公钥,保密第一私钥、公布第一公钥;签发中心基于签发中心的基础标识、第一私钥、第一公钥生成签发中心的可信标识。
[0108]
服务器端随机生成私钥并计算出对应公钥(该公私钥对负责加密通信),将“标识||公钥”加密上传给签发中心,签发中心发布服务器端的可信标识。具体的,服务器端基于椭圆曲线密码算法生成第二私钥和第二公钥,保密第二私钥,并将第二公钥加密后发送至签发中心;签发中心基于服务器端的基础标识、第一私钥、第二公钥生成服务器端的可信标识。
[0109]
另外,本发明的客户端a的公钥由服务器端合成,接着服务器端将客户端a的“标识||公钥”加密上传给签发中心,签发中心发布客户端a的可信标识。
[0110]
进一步的,签发中心也可以作为第三方认证中心来签发任何客户端、服务器端和机构的可信标识,签发方法和上述签发服务器端、第一客户端的签发方法相同。
[0111]
在第一客户端签名密钥生成子系统中,主要是客户端a生成部分私钥和部分公钥,并将客户端a的“标识||部分公钥”加密上传给服务器端;服务器端生成客户端a的部分私钥并合成公钥。具体的,第一客户端生成第三公钥的子公钥p1;第一客户端分别验证签发中心的可信标识和服务器端的可信标识,若都通过,则将第三公钥的子公钥p1加密后发送至服务器端;服务器端根据第三公钥的子公钥p1计算第三公钥p。
[0112]
接着,服务器端验证签发中心的可信标识,若通过,则将第三公钥p加密后发送至签发中心;签发中心基于第一客户端的基础标识、第一私钥、第三公钥p生成第一客户端的可信标识。
[0113]
进一步的,在某些应用系统中,可以把签发中心和服务器端合并,由一个模块(可以是服务器)同时承担签发功能和密钥计算等本发明所公开的“服务器端”和“签发中心”的功能。
[0114]
在第一客户端协同签名子系统中,客户端a对消息m进行部分签名,并将签名数据加密发送给服务器端;服务器端再对消息m进行部分签名,并将签名数据加密发回给客户端a;由客户端a完成对消息m完整签名。具体的,第一客户端生成部分签名q1,并将部分签名q1和消息摘要e进行加密后发送至服务器端;服务器端根据部分签名q1和消息摘要e生成第一签名r,并将第一签名r加密后发送至第一客户端;第一客户端根据第一签名r生成第二签名s,并将第一签名r、第二签名s作为完整签名输出。
[0115]
在第二客户端验签子系统中,第二客户端采用第一公钥和对应的基础标识分别验证签发中心的可信标识、第一客户端的可信标识,最后采用第三公钥p验证第一客户端的完整签名。
[0116]
具体的,客户端b离线验证签发中心的可信标识,获取签发中心的签名公钥;客户端b离线验证客户端a的可信标识,获取客户端a的签名公钥;客户端b使用客户端a的签名公钥验证三元数据组(m,r,s)。
[0117]
本发明基于sm2可信标识的协同签名方法及系统的整体架构完整、安全、扁平,适合大规模应用,且安全性强、效率高。
[0118]
应当注意的是,本发明的实施例有较佳的实施性,且并非对本发明作任何形式的限制,任何熟悉该领域的技术人员可能利用上述揭示的技术内容变更或修饰为等同的有效实施例,但凡未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何修改或等同变化及修饰,均仍属于本发明技术方案的范围内。
技术特征:
1.一种基于sm2可信标识的协同签名方法,其特征在于,包括:签发中心基于椭圆曲线密码算法生成第一私钥和第一公钥,保密所述第一私钥、公布所述第一公钥;签发中心基于签发中心的基础标识、所述第一私钥、所述第一公钥生成签发中心的可信标识;服务器端基于椭圆曲线密码算法生成第二私钥和第二公钥,保密所述第二私钥,并将所述第二公钥加密后发送至签发中心;签发中心基于服务器端的基础标识、所述第一私钥、所述第二公钥生成服务器端的可信标识;第一客户端生成第三公钥的子公钥p1;第一客户端分别验证所述签发中心的可信标识和所述服务器端的可信标识,若都通过,则将所述第三公钥的子公钥p1加密后发送至服务器端;服务器端根据所述第三公钥的子公钥p1计算第一客户端的第三公钥p;服务器端验证所述签发中心的可信标识,若通过,则将所述第三公钥p加密后发送至签发中心;签发中心基于第一客户端的基础标识、所述第一私钥、所述第三公钥p生成第一客户端的可信标识;第一客户端生成部分签名q1,并将所述部分签名q1和消息摘要e进行加密后发送至服务器端;服务器端根据所述部分签名q1和所述消息摘要e生成第一签名r,并将所述第一签名r加密后发送至第一客户端;第一客户端根据所述第一签名r生成第二签名s,并将所述第一签名r、第二签名s作为完整签名输出;第二客户端采用第一公钥分别验证签发中心的可信标识、第一客户端的可信标识,最后采用第三公钥p验证第一客户端的所述完整签名。2.根据权利要求1所述的基于sm2可信标识的协同签名方法,其特征在于,所述服务器端将所述第二公钥加密后发送至签发中心包括:所述第二公钥及所述服务器端的基础标识进行数据拼接后得到第一明文;服务器端采用所述第一公钥对所述第一明文进行加密得到第一密文;签发中心采用所述第一私钥对所述第一密文进行解密得到所述第一明文。3.根据权利要求1所述的基于sm2可信标识的协同签名方法,其特征在于,所述第一客户端生成第三公钥的子公钥p1包括:第一客户端随机生成整数r1∈[1,n-1];第一客户端获取用户的口令pd;将随机数r1、口令pd、第一客户端的基础标识进行数据拼接后得到数组m1,并计算m1的杂凑值h(m1),接着计算得到d1=r1
⊕
h(m1),则第三公钥的子公钥p1为d1-1
·
g;其中,
⊕
表示按比特异或,g表示椭圆曲线的n阶基点;所述第一客户端将所述第三公钥的子公钥p1加密后发送至服务器端包括:所述第三公钥的子公钥p1及所述第一客户端的基础标识进行数据拼接后得到第二明文;第一客户端采用所述第二公钥对所述第二明文进行加密得到第二密文;服务器端采用所述第二私钥对所述第二密文进行解密得到所述第二明文。4.根据权利要求3所述的基于sm2可信标识的协同签名方法,其特征在于,所述服务器端根据所述第三公钥的子公钥p1计算第三公钥p包括:服务器端生成保密计算信息d,服务器端将保密计算信息d、第一客户端基本信息、第一客户端的基础标识进行数据拼接后得到数组m2,并计算m2的杂凑值h(m2),接着计算得到
(x1,y1)=(h(m2)*d)
·
g,接着计算d2=h(x1||y1),则第三公钥p为d2-1
·
p1-g;所述服务器端将所述第三公钥p加密后发送至签发中心包括:所述第三公钥p及所述第一客户端的基础标识进行数据拼接后得到第三明文;服务器端采用所述第一公钥对所述第三明文进行加密得到第三密文;签发中心采用所述第一私钥对所述第三密文进行解密得到所述第三明文。5.根据权利要求4所述的基于sm2可信标识的协同签名方法,其特征在于,所述第一客户端生成部分签名q1,并将所述部分签名q1和消息摘要e进行加密后发送至服务器端包括:第一客户端随机生成整数k1∈[1,n-1],所述部分签名q1=k1
·
g;e=h(m)、所述部分签名q1、所述第三公钥的子公钥p1进行数据拼接后得到所述第四明文;第一客户端采用所述第二公钥对第四明文进行加密得到第四密文,并发送至服务器端;服务器端采用所述第二私钥对所述第四密文进行解密得到所述第四明文。6.根据权利要求5所述的基于sm2可信标识的协同签名方法,其特征在于,所述服务器端根据所述部分签名q1和所述消息摘要e生成第一签名r,并将所述第一签名r加密后发送至第一客户端包括:服务器端随机生成整数k2∈[1,n-1]、k3∈[1,n-1],计算(x2,y2)=k3
·
q1+k2
·
g,接着计算第一签名r=(x2+e)modn,若r=0,则重新选择k2或k3、重新计算(x2,y2),直至r不为0;服务器端计算s1=k3*d2modn,s2=d2*(r+k2)modn;将r、s1、s2进行数据拼接后得到所述第五明文;服务器端采用所述第三公钥的子公钥p1对第五明文进行加密得到第五密文,并发送至第一客户端;客户端采用d1-1
对所述第五密文进行解密得到所述第五明文。7.根据权利要求6所述的基于sm2可信标识的协同签名方法,其特征在于,所述第一客户端根据所述第一签名r生成第二签名s,并将所述第一签名r、第二签名s作为完整签名输出包括:第一客户端计算第二签名s=(d1*k1*s1+d1*s2-r)modn,若s=0或s=n-r,则服务器端重新选择k2或k3、重新计算(x2,y2),直至s不为0且s不为n-r;将(m,r,s)作为完整签名输出。8.根据权利要求1所述的基于sm2可信标识的协同签名方法,其特征在于,所述验证所述可信标识时,采用所述第一公钥和待验方的基础标识合成验签公钥。9.根据权利要求1所述的基于sm2可信标识的协同签名方法,其特征在于,所述第一客户端基本信息包括任意数据生效日期和所述任意数据的失效日期;所述第一客户端基本信息保存于服务器端,或第一客户端实时将所述第一客户端基本信息加密传输至服务器端。10.一种基于sm2可信标识的协同签名系统,其特征在于,包括可信标识签发子系统、第一客户端签名密钥生成子系统、第一客户端协同签名子系统和第二客户端验签子系统;在所述可信标识签发子系统中,签发中心基于椭圆曲线密码算法生成第一私钥和第一公钥,保密所述第一私钥、公布所述第一公钥;签发中心基于签发中心的基础标识、所述第一私钥、所述第一公钥生成签发中心的可信标识;服务器端基于椭圆曲线密码算法生成第二私钥和第二公钥,保密所述第二私钥,并将所述第二公钥加密后发送至签发中心;签发中
心基于服务器端的基础标识、所述第一私钥、所述第二公钥生成服务器端的可信标识;在所述第一客户端签名密钥生成子系统中,第一客户端生成第三公钥的子公钥p1;第一客户端分别验证所述签发中心的可信标识和所述服务器端的可信标识,若都通过,则将所述第三公钥的子公钥p1加密后发送至服务器端;服务器端根据所述第三公钥的子公钥p1计算第三公钥p;接着,服务器端验证所述签发中心的可信标识,若通过,则将所述第三公钥p加密后发送至签发中心;签发中心基于第一客户端的基础标识、所述第一私钥、所述第三公钥p生成第一客户端的可信标识;在所述第一客户端协同签名子系统中,第一客户端生成部分签名q1,并将所述部分签名q1和消息摘要e进行加密后发送至服务器端;服务器端根据所述部分签名q1和所述消息摘要e生成第一签名r,并将所述第一签名r加密后发送至第一客户端;第一客户端根据所述第一签名r生成第二签名s,并将所述第一签名r、第二签名s作为完整签名输出;在所述第二客户端验签子系统中,第二客户端采用第一公钥和对应的基础标识分别验证签发中心的可信标识、第一客户端的可信标识,最后采用第三公钥p验证第一客户端的所述完整签名。
技术总结
本发明提供了一种基于SM2可信标识的协同签名方法及系统,签发中心基于椭圆曲线密码算法生成第一私钥和第一公钥,并生成签发中心的可信标识。服务器端基于椭圆曲线密码算法生成第二私钥和第二公钥,签发中心生成服务器端的可信标识。第一客户端与服务器端共同生成第一客户端的第三公钥P,并发送至签发中心,签发中心生成第一客户端的可信标识。第一客户端与服务器端协同签名。第二客户端采用第一公钥分别验证签发中心的可信标识、第一客户端的可信标识,最后采用第三公钥P验证第一客户端的所述完整签名。完整签名。完整签名。
技术研发人员:戴清平 傅兆伟 冯国柱
受保护的技术使用者:标势科技(上海)有限公司
技术研发日:2023.03.31
技术公布日:2023/7/13
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
上一篇:提钩装置的制作方法 下一篇:一种机电深度融合动力的立式颗粒机的制作方法
