SM2算法协同签名及解密方法、装置及系统与流程

文档序号:17488451发布日期:2019-04-23 20:11阅读:726来源:国知局
SM2算法协同签名及解密方法、装置及系统与流程

本发明涉及数字签名技术领域,尤其是涉及sm2算法协同签名及解密方法、装置及系统。



背景技术:

2010年12月17日,为满足电子认证服务系统等应用需求,国家密码管理局发布了sm2椭圆曲线公钥密码算法,包括sm2-1椭圆曲线数字签名算法、sm2-2椭圆曲线密钥协商协议、sm2-3椭圆曲线加密算法。其中,sm2签名算法见《gm/t0003.2-2012sm2椭圆曲线公钥密码算法》的第2部分:数字签名算法。

如今更多的电子商务与交易正在向移动互联网过渡和发展,在移动终端中使用数字证书做电子签名的需求与日俱增。为了提高云计算环境中的私钥的安全性,现有技术中的解决方案主要包括:

1)使用蓝牙、音码和nfc等智能密码钥匙、智能ic卡设备;

2)使用本地加密存储的私钥;

3)使用共同公钥生成方法,一部分私钥在本地加密存储,一部分私钥在服务端加密存储,由本地和服务端合作完成签名或解密。

但是,在对现有技术的研究和实践过程中,本发明的发明人发现:

对于解决方案1),硬件设备需要适配和兼容各种型号智能手机,存在兼容性差及使用复杂的问题,且成本较高;

对于解决方案2),在签名或解密计算过程中,需要将私钥解密后使用,这就导致完整的私钥出现在内存中,攻击者可能从手机内存中将其导出;

对于解决方案3),现有方案存在共同公钥生成方法不符合实际应用环境,共同签名方法缺乏输入验证,协同解密算法隐私性较差的问题。



技术实现要素:

本发明实施例提供的sm2算法协同签名及解密方法、装置及系统,更加契合实际应用环境,更好地保护用户隐私并抵抗恶意攻击。

为了解决上述技术问题,本发明实施例提供了一种sm2算法协同签名方法,包括:

基于服务端公钥分量以及选取的第一随机数,计算第一椭圆曲线群元素组并发送给服务端;

接收所述服务端基于客户端公钥分量以及选取的第二随机数反馈的第二椭圆曲线群元素组;

基于所述第一椭圆曲线群元素组和所述第二椭圆曲线群元素组,计算第三椭圆曲线群元素;

根据用户信息杂凑值、待签名消息以及所述第三椭圆曲线群元素的横坐标,计算第一数值;并根据所述第一数值、所述第一随机数以及客户端私钥分量,生成第二数值并发送给所述服务端;

接收所述服务端反馈的第三数值;所述第三数值为所述服务端根据所述第二数值、所述第二随机数以及服务端私钥分量计算所得;

根据所述第一数值和所述第三数值合成sm2数字签名。

进一步地,所述的sm2算法协同签名方法,在所述根据所述第一数值、所述第一随机数以及客户端私钥分量,生成第二数值并发送给所述服务端之后,还包括:

使用客户端私钥分量计算关于所述第一椭圆曲线群元素组、所述第二椭圆曲线群元素组以及所述第二数值的第一数字签名并发送给所述服务端,以使所述服务端使用客户端公钥分量对所述第一数字签名进行验证。

进一步地,所述第一椭圆曲线群元素组为r'a=[ka]g和r”aa=[ka]pkba;其中,pkba为服务端公钥分量,ka∈[1,n-1]为第一随机数,g为椭圆曲线基点;

所述的sm2算法协同签名方法,在所述基于服务端公钥分量以及选取的第一随机数,计算第一椭圆曲线群元素组并发送给服务端之后,还包括:

使所述服务端使用服务端私钥分量dba验证若不成立则退出协议;其中,dba∈[1,n-1]。

进一步地,所述第二椭圆曲线群元素组为rb=[kb]pka和r'b=[kb]g,其中,pka为客户端公钥分量,kb∈[1,n-1]为第二随机数;

所述的sm2算法协同签名方法,在所述接收服务端基于客户端公钥分量以及选取的第二随机数反馈的第二椭圆曲线群元素组之后,还包括:

使用客户端私钥分量da验证若不成立则退出协议;其中,da∈[1,n-1]。

进一步地,所述第一数字签名为关于(r'a,r”a,rb,r'b,s')的普通sm2数字签名δa;

所述第三椭圆曲线群元素基于以下公式生成:ra=r'a+rb,且ra=(xa,ya),其中,xa、ya分别为ra的x轴坐标和y轴坐标;

所述第一数值的计算公式为:r=h(za||m)+xamodn;

所述第二数值的计算公式为:其中,h表示预先定义的密码杂凑算法,za表示用户的可辨识标识、部分椭圆曲线系统参数和公钥的用户信息杂凑值,m为待签名消息,定义与gm/t0003.2-2012保持一致,modn表示模n运算;

所述第三数值的计算公式为

所述sm2数字签名为(r,t-r)。

进一步地,所述的sm2算法协同签名方法,还包括:

选择客户端私钥分量da∈[1,n-1],计算客户端公钥分量pka=[da]g,并将所述客户端公钥分量发送给服务端;

接收所述服务端发送的服务端公钥分量pkba和随机群元素rb;其中,所述服务端公钥分量为pkba=[dba]g,服务端私钥分量为dba∈[1,n-1],所述随机群元素为rb=[kb]pka,选取的随机数为kb∈[1,n-1];

选取随机数ka∈[1,n-1],计算随机群元素ra=[ka]g+rb,ra=(xa,ya);其中,xa、ya分别为ra的x轴坐标和y轴坐标;

计算共同公钥pk=[da]pkba-g,并获取用户身份信息以在客户端生成证书签名请求csr的内容,设为mcsr;

计算数值r=h(za||mcsr)+xamodn和数值并把s'提交给所述服务端,以使所述服务端验证证书签名请求csr的内容mcsr,核对用户身份信息,并在校验成功后计算数值返回给所述客户端;

计算sm2数字签名(r,t-r),合成完整的csr,提交给所述服务端,使所述服务端验证完整的csr与接收到的mcsr是否相符,是则向证书颁发机构ca提交,以使证书颁发机构ca在验证csr后,颁发共同公钥证书,并存储到证书库中。

本发明实施例还提供了一种sm2算法协同签名方法,包括:

接收客户端发送的第一椭圆曲线群元素组;所述第一椭圆曲线群元素组为所述客户端基于服务端公钥分量以及选取的第一随机数计算所得;

基于所述客户端公钥分量以及选取的第二随机数,计算第二椭圆曲线群元素组,并将所述第二椭圆曲线群元素组发送给所述客户端;

接收所述客户端发送的第二数值;所述第二数值为所述客户端根据第一数值、所述第一随机数以及客户端私钥分量生成;所述第一数值为所述客户端根据用户信息杂凑值、待签名消息以及所述第三椭圆曲线群元素的横坐标计算所得;所述第三椭圆曲线群元素为所述客户端基于所述第一椭圆曲线群元素组和所述第二椭圆曲线群元素组计算所得;

根据所述第二数值、所述第二随机数以及服务端私钥分量计算第三数值并反馈给所述客户端,以使所述客户端根据所述第一数值和所述第三数值合成sm2数字签名。

进一步地,所述的sm2算法协同签名方法,在接收所述客户端发送的第二数值之后,还包括:

接收所述客户端发送的第一数字签名;所述第一数字签名为所述客户端基于所述第一椭圆曲线群元素组、所述第二椭圆曲线群元素组以及所述第二数值,使用客户端私钥分量计算所得;

使用客户端公钥分量对所述第一数字签名进行验证。

进一步地,所述的sm2算法协同签名方法,所述第一椭圆曲线群元素组为r'a=[ka]g和r”a=[ka]pkba;其中,pkba为服务端公钥分量,ka∈[1,n-1]为第一随机数,g为椭圆曲线基点;

所述的sm2算法协同签名方法,在接收客户端发送的第一椭圆曲线群元素组之后,还包括:

使用服务端私钥分量dba验证若不成立则退出协议;其中,dba∈[1,n-1]。

进一步地,所述的sm2算法协同签名方法,所述第二椭圆曲线群元素组为rb=[kb]pka和r'b=[kb]g,其中,pka为客户端公钥分量,kb∈[1,n-1]为第二随机数;

所述的sm2算法协同签名方法,还包括:在将所述第二椭圆曲线群元素组发送给所述客户端之后,使所述客户端使用客户端私钥分量da验证若不成立则退出协议;其中,da∈[1,n-1]。

进一步地,所述的sm2算法协同签名方法,

所述第一数字签名为关于(r'a,r”a,rb,r'b,s')的普通sm2数字签名δa;

所述第三椭圆曲线群元素基于以下公式生成:ra=r'a+rb,且ra=(xa,ya),其中,xa、ya分别为ra的x轴坐标和y轴坐标;

所述第一数值的计算公式为:r=h(za||m)+xamodn;

所述第二数值的计算公式为:其中,h表示预先定义的密码杂凑算法,za表示用户的可辨识标识、部分椭圆曲线系统参数和公钥的用户信息杂凑值,m为待签名消息,定义与gm/t0003.2-2012保持一致,modn表示模n运算;

所述第三数值的计算公式为

所述sm2数字签名为(r,t-r)。

进一步地,所述的sm2算法协同签名方法,还包括:

接收客户端基于选择的客户端私钥分量da∈[1,n-1]反馈的客户端公钥分量pka=[da]g;

基于服务端私钥分量dba∈[1,n-1],计算服务端公钥分量pkba=[dba]g,并选取随机数kb∈[1,n-1]计算随机群元素rb=[kb]pka,且将pkba和rb返回给所述客户端,以使所述客户端选取随机数ka∈[1,n-1],计算随机群元素ra=[ka]g+rb,ra=(xa,ya);其中,xa、ya分别为ra的x轴坐标和y轴坐标;

接收所述客户端提交的数值s';其中,数值数值r=h(za||mcsr)+xamodn,mcsr为所述客户端计算共同公钥pk=[da]pkba-g,并获取用户身份信息以在客户端所生成证书签名请求csr的内容;

验证证书签名请求csr的内容mcsr,核对用户身份信息,并在校验成功后计算数值返回给所述客户端;

接收客户端提交的在计算sm2数字签名(r,t-r)后合成完整的csr;

验证完整的csr与接收到的mcsr是否相符,是则向证书颁发机构ca提交,以使证书颁发机构ca在验证csr后,颁发共同公钥证书,并存储到证书库中。

本发明实施例还提供了一种sm2算法协同解密方法,包括:

基于sm2密文第一分量、客户端私钥分量,以及选取的第三随机数和第四随机数,计算第三椭圆曲线群元素和第四椭圆曲线群元素并发送给服务端;

接收服务端发送的第五椭圆曲线群元素和第六椭圆曲线群元素;所述第五椭圆曲线群元素和所述第六椭圆曲线群元素为所述服务端基于选取的第五随机数、服务端私钥分量,以及所述第三椭圆曲线群元素和所述第四椭圆曲线群元素计算所得;

根据所述sm2密文第一分量、所述第三随机数和所述第四随机数,以及所述第五椭圆曲线群元素和所述第六椭圆曲线群元素,计算第七椭圆曲线群元素;

基于预先定义的密钥派生函数和所述第七椭圆曲线群元素,计算对称密钥;

将所述sm2密文第二分量与所述对称密钥按位异或运算,得到明文;

基于预先定义的密码杂凑算法,根据所述明文和所述第七椭圆曲线群元素,计算第四数值;

在所述第四数值不等于所述sm2密文第三分量时,报错并退出;

在所述第四数值等于所述sm2密文第三分量时,输出所述明文。

进一步地,所述的sm2算法协同解密方法,客户端私钥分量为da∈[1,n-1],服务端私钥分量为dba∈[1,n-1];

所述sm2密文为(c1,c2,c3),其中c1为sm2密文第一分量,c2为sm2密文第二分量,c3为sm2密文第三分量;

所述第三随机数和所述第四随机数分别为

所述第三椭圆曲线群元素和所述第四椭圆曲线群元素分别为

所述第五随机数为所述第五椭圆曲线群元素和所述第六椭圆曲线群元素分别为

所述第七椭圆曲线群元素为

所述对称密钥t=kdf(x2||y2,klen);其中,kdf为预先定义的密钥派生函数,定义与gm/t0003.4-2012保持一致,klen为输出比特长度,若t为全0比特串,则报错并退出;

所述明文为其中,表示按位异或运算;

所述第四数值为u=hash(x2||m'||y2),其中,hash表示预先定义的密码杂凑算法。

进一步地,所述的sm2算法协同解密方法,还包括:

计算消息m=t1||t2的第二数字签名δ,并把所述第二数字签名δ发送给服务端,以使所述服务端使用客户端公钥分量pka=[da]g验证所述第二数字签名δ。

本发明实施例还提供了一种sm2算法协同解密方法,包括:

接收客户端发送的第三椭圆曲线群元素和第四椭圆曲线群元素;所述第三椭圆曲线群元素和所述第四椭圆曲线群元素为所述客户端基于sm2密文第一分量、客户端私钥分量,以及选取的第三随机数和第四随机数计算所得;

基于选取的第五随机数、服务端私钥分量,以及所述第三椭圆曲线群元素和所述第四椭圆曲线群元素,计算第五椭圆曲线群元素和第六椭圆曲线群元素并发送给客户端,以使所述客户端执行如下步骤:

根据所述sm2密文第一分量、所述第三随机数和所述第四随机数,以及所述第五椭圆曲线群元素和所述第六椭圆曲线群元素,计算第七椭圆曲线群元素;

基于预先定义的密钥派生函数和所述第七椭圆曲线群元素,计算对称密钥;

将所述sm2密文第二分量与所述对称密钥按位异或运算,得到明文;

基于预先定义的密码杂凑算法,根据所述明文和所述第七椭圆曲线群元素,计算第四数值;

在所述第四数值不等于所述sm2密文第三分量时,报错并退出;

在所述第四数值等于所述sm2密文第三分量时,输出所述明文。

进一步地,所述的sm2算法协同解密方法,客户端私钥分量为da∈[1,n-1],服务端私钥分量为dba∈[1,n-1];

所述sm2密文为(c1,c2,c3),其中c1为sm2密文第一分量,c2为sm2密文第二分量,c3为sm2密文第三分量;

所述第三随机数和所述第四随机数分别为

所述第三椭圆曲线群元素和所述第四椭圆曲线群元素分别为

所述第五随机数为所述第五椭圆曲线群元素和所述第六椭圆曲线群元素分别为

所述第七椭圆曲线群元素为

所述对称密钥t=kdf(x2||y2,klen);其中,kdf为预先定义的密钥派生函数,定义与gm/t0003.4-2012保持一致,klen为输出比特长度,若t为全0比特串,则报错并退出;

所述明文为其中,表示按位异或运算;

所述第四数值为u=hash(x2||m'||y2),其中,hash表示预先定义的密码杂凑算法。

进一步地,所述的sm2算法协同解密方法,还包括:

接收所述客户端所计算的消息m=t1||t2的第二数字签名δ;

使用客户端公钥分量pka=[da]g验证所述第二数字签名δ。

本发明实施例还提供了一种sm2算法协同签名装置,包括:

计算单元,用于基于服务端公钥分量以及选取的第一随机数,计算第一椭圆曲线群元素组;

通信单元,用于将所述第一椭圆曲线群元素组发送给服务端,以及接收所述服务端基于客户端公钥分量以及选取的第二随机数反馈的第二椭圆曲线群元素组;

所述计算单元,还用于基于所述第一椭圆曲线群元素组和所述第二椭圆曲线群元素组,计算第三椭圆曲线群元素;

所述计算单元,还用于根据用户信息杂凑值、待签名消息以及所述第三椭圆曲线群元素对应的横坐标,计算第一数值;

所述计算单元,还用于根据所述第一数值、所述第一随机数以及客户端私钥分量,生成第二数值;

所述通信单元,还用于把所述第二数值发送给所述服务端,并接收所述服务端反馈的第三数值;所述第三数值为所述服务端根据所述第二数值、所述第二随机数以及服务端私钥分量计算所得;

sm2数字签名单元,用于根据所述第一数值和所述第三数值合成sm2数字签名。

进一步地,所述的sm2算法协同签名装置,还包括:

所述计算单元,还用于在所述根据所述第一数值、所述第一随机数以及客户端私钥分量,生成第二数值并发送给所述服务端之后,使用客户端私钥分量计算关于所述第一椭圆曲线群元素组、所述第二椭圆曲线群元素组以及所述第二数值的第一数字签名;

所述通信单元,还用于将所述第一签名发送给所述服务端,以使所述服务端使用客户端公钥分量对所述第一数字签名进行验证。

本发明实施例还提供了一种sm2算法协同签名装置,包括:

通信单元,用于接收客户端发送的第一椭圆曲线群元素组;所述第一椭圆曲线群元素组为所述客户端基于服务端公钥分量以及选取的第一随机数计算所得;

计算单元,用于基于所述客户端公钥分量以及选取的第二随机数,计算第二椭圆曲线群元素组;

所述通信单元,还用于接收所述客户端发送的第二数值;所述第二数值为所述客户端根据第一数值、所述第一随机数以及客户端私钥分量生成;所述第一数值为所述客户端根据用户信息杂凑值、待签名消息以及所述第三椭圆曲线群元素的横坐标计算所得;所述第三椭圆曲线群元素为所述客户端基于所述第一椭圆曲线群元素组和所述第二椭圆曲线群元素组计算所得;

所述计算单元,还用于根据所述第二数值、所述第二随机数以及服务端私钥分量计算第三数值;

所述通信单元,还用于将所述第三数值反馈给所述客户端,以使所述客户端根据所述第一数值和所述第三数值合成sm2数字签名。

进一步地,所述的sm2算法协同签名装置,还包括:

所述通信单元,还用于在接收所述客户端发送的第二数值之后,接收所述客户端发送的第一数字签名;所述第一数字签名为所述客户端基于所述第一椭圆曲线群元素组、所述第二椭圆曲线群元素组以及所述第二数值,使用客户端私钥分量计算所得;

验证单元,用于使用客户端公钥分量对所述第一数字签名进行验证。

本发明实施例还提供了一种sm2算法协同解密装置,包括:

计算单元,用于基于sm2密文第一分量、客户端私钥分量,以及选取的第三随机数和第四随机数,计算第三椭圆曲线群元素和第四椭圆曲线群元素;

通信单元,用于将所述第三椭圆曲线群元素和所述第四椭圆曲线群元素发送给服务端,以及接收服务端发送的第五椭圆曲线群元素和第六椭圆曲线群元素;所述第五椭圆曲线群元素和所述第六椭圆曲线群元素为所述服务端基于选取的第五随机数、服务端私钥分量,以及所述第三椭圆曲线群元素和所述第四椭圆曲线群元素计算所得;

所述计算单元,还用于根据所述sm2密文第一分量、所述第三随机数和所述第四随机数,以及所述第五椭圆曲线群元素和所述第六椭圆曲线群元素,计算第七椭圆曲线群元素;

所述计算单元,还用于基于预先定义的密钥派生函数和所述第七椭圆曲线群元素,计算对称密钥;

所述计算单元,还用于将所述sm2密文第二分量与所述对称密钥按位异或运算,得到明文;

所述计算单元,还用于基于预先定义的密码杂凑算法,根据所述明文和所述第七椭圆曲线群元素,计算第四数值;

判断单元,用于在所述第四数值不等于所述sm2密文第三分量时,报错并退出;在所述第四数值等于所述sm2密文第三分量时,输出所述明文。

进一步地,所述的sm2算法协同解密装置,还包括:

所述计算单元,还用于计算消息的第二数字签名;

所述通信单元,还用于把所述第二数字签名发送给服务端,以使所述服务端使用客户端公钥分量验证所述第二数字签名。

本发明实施例还提供了一种sm2算法协同解密装置,包括:

通信单元,用于接收客户端发送的第三椭圆曲线群元素和第四椭圆曲线群元素;所述第三椭圆曲线群元素和所述第四椭圆曲线群元素为所述客户端基于sm2密文第一分量、客户端私钥分量,以及选取的第三随机数和第四随机数计算所得;

计算单元,用于基于选取的第五随机数、服务端私钥分量,以及所述第三椭圆曲线群元素和所述第四椭圆曲线群元素,计算第五椭圆曲线群元素和第六椭圆曲线群元素;

所述通信单元,还用于将所述第五椭圆曲线群元素和所述第六椭圆曲线群元素发送给客户端,以使所述客户端执行如下步骤:

根据所述sm2密文第一分量、所述第三随机数和所述第四随机数,以及所述第五椭圆曲线群元素和所述第六椭圆曲线群元素,计算第七椭圆曲线群元素;

基于预先定义的密钥派生函数和所述第七椭圆曲线群元素,计算对称密钥;

将所述sm2密文第二分量与所述对称密钥按位异或运算,得到明文;

基于预先定义的密码杂凑算法,根据所述明文和所述第七椭圆曲线群元素,计算第四数值;

在所述第四数值不等于所述sm2密文第三分量时,报错并退出;

在所述第四数值等于所述sm2密文第三分量时,输出所述明文。

进一步地,所述的sm2算法协同解密装置,还包括:

所述通信单元,还用于接收所述客户端所计算并发送的消息的第二数字签名;

验证单元,用于使用客户端公钥分量验证所述第二数字签名。

本发明实施例还提供了一种sm2算法协同签名系统,包括客户端和服务端,协同签名由客户端发起;

所述客户端,用于基于服务端公钥分量以及选取的第一随机数,计算第一椭圆曲线群元素组并发送给服务端;

所述服务端,用于基于客户端公钥分量以及选取的第二随机数反馈的第二椭圆曲线群元素组给所述客户端;

所述客户端,还用于基于所述第一椭圆曲线群元素组和所述第二椭圆曲线群元素组,计算第三椭圆曲线群元素;

所述客户端,还用于根据用户信息杂凑值、待签名消息以及所述第三椭圆曲线群元素对应的横坐标,计算第一数值;并根据所述第一数值、所述第一随机数以及客户端私钥分量,生成第二数值并发送给所述服务端;

所述服务端,还用于根据所述第二数值、所述第二随机数以及服务端私钥分量计算第三数值并反馈给所述客户端;

所述客户端,还用于根据所述第一数值和所述第三数值合成sm2数字签名。

进一步地,所述的sm2算法协同签名系统,还包括:

所述客户端,还用于在所述根据所述第一数值、所述第一随机数以及客户端私钥分量,生成第二数值之后,使用客户端私钥分量计算关于所述第一椭圆曲线群元素组、所述第二椭圆曲线群元素组以及所述第二数值的第一数字签名,并将所述第一签名发送给所述服务端;

所述服务端,还用于使用客户端公钥分量对所述第一数字签名进行验证。

进一步地,所述第一椭圆曲线群元素组为r'a=[ka]g和r”aa=[ka]pkba;其中,pkba为服务端公钥分量,ka∈[1,n-1]为第一随机数,g为椭圆曲线基点;

所述服务端,还用于在接收所述客户端发送的第一椭圆曲线群元素组之后,使用服务端私钥分量dba验证若不成立则退出协议;其中,dba∈[1,n-1]。

进一步地,所述第二椭圆曲线群元素组为rb=[kb]pka和r'b=[kb]g,其中,pka为客户端公钥分量,kb∈[1,n-1]为第二随机数;

所述客户端,还用于使用客户端私钥分量da验证若不成立则退出协议;其中,da∈[1,n-1]。

进一步地,所述第一数字签名为关于(r'a,r”a,rb,r'b,s')的普通sm2数字签名δa;

所述第三椭圆曲线群元素基于以下公式生成:ra=r'a+rb,且ra=(xa,ya),其中,xa、ya分别为ra的x轴坐标和y轴坐标;

所述第一数值的计算公式为:r=h(za||m)+xamodn;

所述第二数值的计算公式为:其中,h表示预先定义的密码杂凑算法,za表示用户的可辨识标识、部分椭圆曲线系统参数和公钥的用户信息杂凑值,m为待签名消息,定义与gm/t0003.2-2012保持一致,modn表示模n运算;

所述第三数值的计算公式为

所述sm2数字签名为(r,t-r)。

进一步地,所述的sm2算法协同签名系统,还包括证书颁发机构ca;

所述客户端,还用于选择客户端私钥分量da∈[1,n-1],计算客户端公钥分量pka=[da]g,并将所述客户端公钥分量发送给服务端;

所述服务端,还用于发送服务端公钥分量pkba和随机群元素rb给所述客户端;其中,所述服务端公钥分量为pkba=[dba]g,服务端私钥分量为dba∈[1,n-1],所述随机群元素为rb=[kb]pka,选取的随机数为kb∈[1,n-1];

所述客户端,还用于选取随机数ka∈[1,n-1],计算随机群元素ra=[ka]g+rb,ra=(xa,ya);其中,xa、ya分别为ra的x轴坐标和y轴坐标;

所述客户端,还用于计算共同公钥pk=[da]pkba-g,并获取用户身份信息以在客户端生成证书签名请求csr的内容,设为mcsr;

所述客户端,还用于计算数值r=h(za||mcsr)+xamodn和数值并把s'提交给所述服务端;

所述服务端,还用于验证证书签名请求csr的内容mcsr,核对用户身份信息,并在校验成功后计算数值返回给所述客户端;

所述客户端,还用于计算sm2数字签名(r,t-r),合成完整的csr,提交给所述服务端;

所述服务端,还用于验证完整的csr与接收到的mcsr是否相符,是则向所述证书颁发机构ca提交;

所述证书颁发机构ca,用于在验证csr后,颁发共同公钥证书,并存储到证书库中。

本发明实施例还提供了一种sm2算法协同解密系统,包括客户端和服务端;

所述客户端,用于基于sm2密文第一分量、客户端私钥分量,以及选取的第三随机数和第四随机数,计算第三椭圆曲线群元素和第四椭圆曲线群元素并发送给服务端;

所述服务端,用于基于选取的第五随机数、服务端私钥分量,以及所述第三椭圆曲线群元素和所述第四椭圆曲线群元素,计算第五椭圆曲线群元素和第六椭圆曲线群元素并发送给客户端;

所述客户端,还用于根据所述sm2密文第一分量、所述第三随机数和所述第四随机数,以及所述第五椭圆曲线群元素和所述第六椭圆曲线群元素,计算第七椭圆曲线群元素;

所述客户端,还用于基于预先定义的密钥派生函数和所述第七椭圆曲线群元素,计算对称密钥;

所述客户端,还用于将所述sm2密文第二分量与所述对称密钥按位异或运算,得到明文;

所述客户端,还用于基于预先定义的密码杂凑算法,根据所述明文和所述第七椭圆曲线群元素,计算第四数值;

所述客户端,还用于在所述第四数值不等于所述sm2密文第三分量时,报错并退出;在所述第四数值等于所述sm2密文第三分量时,输出所述明文。

进一步地,客户端私钥分量为da∈[1,n-1],服务端私钥分量为dba∈[1,n-1];

所述sm2密文为(c1,c2,c3),其中c1为sm2密文第一分量,c2为sm2密文第二分量,c3为sm2密文第三分量;

所述第三随机数和所述第四随机数分别为

所述第三椭圆曲线群元素和所述第四椭圆曲线群元素分别为

所述第五随机数为所述第五椭圆曲线群元素和所述第六椭圆曲线群元素分别为

所述第七椭圆曲线群元素为

所述对称密钥t=kdf(x2||y2,klen);其中,kdf为预先定义的密钥派生函数,定义与gm/t0003.4-2012保持一致,klen为输出比特长度,若t为全0比特串,则报错并退出;

所述明文为其中,表示按位异或运算;

所述第四数值为u=hash(x2||m'||y2),其中,hash表示预先定义的密码杂凑算法。

进一步地,所述的sm2算法协同解密系统,还包括:

所述客户端,用于计算消息m=t1||t2的第二数字签名δ,并把所述第二数字签名δ发送给服务端;

所述服务端,还用于使用客户端公钥分量pka=[da]g验证所述第二数字签名δ。

实施本发明实施例,具有如下有益效果:

本发明提供的sm2算法协同签名及解密方法、装置及系统,其协同签名方法:通过计算第一椭圆曲线群元素组并发送给服务端校验后,对服务端反馈的第二椭圆曲线群元素组进行校验,并基于所述第一椭圆曲线群元素组和所述第二椭圆曲线群元素组,计算第三椭圆曲线群元素;根据用户信息杂凑值、待签名消息以及第三椭圆曲线群元素的横坐标,计算第一数值,并根据第一数值、第一随机数以及客户端私钥分量,生成第二数值并发送给服务端;接收服务端根据所述第二数值、所述第二随机数以及服务端私钥分量计算第三数值;根据第一数值和所述第三数值合成sm2数字签名。该方法具有输入验证和可证明安全特性,更加契合实际应用环境,能够更好地保护用户隐私。

附图说明

图1是本发明实施例提供的sm2算法协同签名方法的流程示意图;

图2是本发明实施例提供的sm2算法协同签名方法的另一流程示意图;

图3是本发明实施例提供的sm2算法协同签名解密的流程示意图;

图4是本发明实施例提供的sm2算法协同签名解密的另一流程示意图;

图5是本发明实施例提供的sm2算法协同签名系统的示意图;

图6是本发明实施例提供的sm2算法协同解密系统的示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

为满足电子认证服务系统等应用需求,国家密码管理局发布了sm2椭圆曲线公钥密码算法,包括sm2-1椭圆曲线数字签名算法、sm2-2椭圆曲线密钥协商协议、sm2-3椭圆曲线加密算法。

sm2签名算法见《gm/t0003.2-2012sm2椭圆曲线公钥密码算法第2部分:数字签名算法》,设待签名的消息为m,作为签名者的用户a具有长度为entlena比特的可辨别标识ida,具有密钥对包括私钥da和公钥pa=[da]g=(xa,ya),为了获取m的数字签名(r,s),用户a应该实现以下运算步骤:

1)置其中za=h256(entla||ida||a||b||xg||yg||xa||ya);

2)计算

3)用随机数发生器产生随机数k∈[1,n-1];

4)计算椭圆曲线点(x1,y1)=[k]g;

5)计算r=(e+x1)modn,若r=0或r+k=n则返回3);

6)计算s=((1+da)-1·(k-r·da))modn,若s=0则返回3);

7)得到消息m的签名(r,s)。

sm2解密算法见《gm/t0003.4-2012sm2椭圆曲线公钥密码算法第4部分:公钥加密算法》,作为解密者的b具有密钥对包括私钥db和公钥pb=[db]g=(xb,yb),为了对密文c=c1||c2||c3进行解密,b应实现以下运算步骤:

从c中取出比特串c1,验证c1是否满足椭圆曲线方程,若不满足则报错并退出;

计算椭圆曲线点s=[h]c1,若s是无穷远点,则报错并退出;

计算[db]c1=(x2,y2);

计算t=kdf(x2||y2,klen),若t为全0比特串,则报错并退出;

从c中取出比特串c2,计算

计算u=hash(x2||m'||y2),从c中取出比特串c3,若u≠c3,则报错并退出;

输出明文m'。

针对当前共同公钥生成方法不符合实际应用环境,共同签名方法缺乏输入验证,协同解密算法隐私性较差的问题,本发明实施例给出共同公钥证书的具体生成过程,给出具有输入验证和可证明安全特性的协同签名方法,以及更好的保护用户隐私的协同解密方法,使得共同公钥密码体制可以切实的应用在生产实践中,更好的保护用户隐私,提供更好的安全性。

第一方面。

请参阅图1,图1是本发明实施例提供的sm2算法协同签名方法的流程示意图。所述sm2算法协同签名方法,由客户端执行,包括如下步骤s101-s106。

s101、基于服务端公钥分量以及选取的第一随机数,计算第一椭圆曲线群元素组并发送给服务端。

其中,所述第一椭圆曲线群元素组为r'a=[ka]g和r”a=[ka]pkba;其中,pkba为服务端公钥分量,ka∈[1,n-1]为第一随机数,g为椭圆曲线基点。

在一优选实施例中,所述的sm2算法协同签名方法,在所述基于服务端公钥分量以及选取的第一随机数,计算第一椭圆曲线群元素组并发送给服务端之后,还包括:

使所述服务端使用服务端私钥分量dba验证若不成立则退出协议;其中,dba∈[1,n-1]。

在具体的实施例当中,r”a=[ka]pkba的计算和验证不影响正常的签名流程,即使删除也能够完成签名流程,此处是为了增强签名方案的安全性。

s102、接收所述服务端基于客户端公钥分量以及选取的第二随机数反馈的第二椭圆曲线群元素组。

其中,所述第二椭圆曲线群元素组为rb=[kb]pka和r'b=[kb]g,其中,pka为客户端公钥分量,kb∈[1,n-1]为第二随机数。

在一优选实施例中,所述的sm2算法协同签名方法,在所述接收服务端基于客户端公钥分量以及选取的第二随机数反馈的第二椭圆曲线群元素组之后,还包括:

使用客户端私钥分量da验证若不成立则退出协议;其中,da∈[1,n-1]。

在具体的实施例当中,r'b=[kb]g的计算和验证不影响正常的签名流程,即使删除也能够完成签名流程,此处是为了增强签名方案的安全性。

s103、基于所述第一椭圆曲线群元素组和所述第二椭圆曲线群元素组,计算第三椭圆曲线群元素。

其中,所述第三椭圆曲线群元素基于以下公式生成:ra=r'a+rb,且ra=(xa,ya),其中,xa、ya分别为ra的x轴坐标和y轴坐标。

s104、根据用户信息杂凑值、待签名消息以及所述第三椭圆曲线群元素的横坐标,计算第一数值;并根据所述第一数值、所述第一随机数以及客户端私钥分量,生成第二数值并发送给所述服务端。

其中,所述第一数值的计算公式为:r=h(za||m)+xamodn。

所述第二数值的计算公式为:其中,h表示预先定义的密码杂凑算法,za表示用户的可辨识标识、部分椭圆曲线系统参数和公钥的用户信息杂凑值,m为待签名消息,定义与gm/t0003.2-2012保持一致,modn表示模n运算。

s105、接收所述服务端反馈的第三数值;所述第三数值为所述服务端根据所述第二数值、所述第二随机数以及服务端私钥分量计算所得。

其中,所述第三数值的计算公式为

s106、根据所述第一数值和所述第三数值合成sm2数字签名。

其中,所述sm2数字签名为(r,t-r)。

在具体的实施例当中,客户端合成sm2数字签名(r,t-r)后,验证数字签名的正确性,验证无效退出协议,否则获得签名。

客户端和服务端分别持有部分私钥分量,攻击者在劫持其中一方的条件下无法获得完整的私钥,也无法实现私钥脱机使用,提升了私钥存储的安全性。签名需要客户端和服务端共同完成,任意一方都无法单独完成签名,保证了签名的安全性。

在一优选的实施例中,所述的sm2算法协同签名方法,在所述根据所述第一数值、所述第一随机数以及客户端私钥分量,生成第二数值并发送给所述服务端之后,还包括:

使用客户端私钥分量计算关于所述第一椭圆曲线群元素组、所述第二椭圆曲线群元素组以及所述第二数值的第一数字签名并发送给所述服务端,以使所述服务端使用客户端公钥分量对所述第一数字签名进行验证。

其中,所述第一数字签名为关于(r'a,r”a,rb,r'b,s')的普通sm2数字签名δa。

在具体的实施例当中,δa的计算和验证不影响正常的签名流程,即使删除也能够完成签名流程,此处是为了验证客户端的身份(服务端对客户端的身份鉴别),防止任意客户端都能使用服务端的私钥分量,即避免了服务端私钥的非授权使用。

在一优选的实施例中,所述的sm2算法协同签名方法,还包括:

选择客户端私钥分量da∈[1,n-1],计算客户端公钥分量pka=[da]g,并将所述客户端公钥分量发送给服务端。

接收所述服务端发送的服务端公钥分量pkba和随机群元素rb;其中,所述服务端公钥分量为pkba=[dba]g,服务端私钥分量为dba∈[1,n-1],所述随机群元素为rb=[kb]pka,选取的随机数为kb∈[1,n-1]。

选取随机数ka∈[1,n-1],计算随机群元素ra=[ka]g+rb,ra=(xa,ya);其中,xa、ya分别为ra的x轴坐标和y轴坐标。

计算共同公钥pk=[da]pkba-g,并获取用户身份信息以在客户端生成证书签名请求csr的内容,设为mcsr。

在具体的实施例当中,计算共同公钥pk分别需要客户端和服务端各自的私钥分量参与计算才能获得。其中,本实施例已绑定证书签发过程,由客户端计算共同公钥pk。。

计算数值r=h(za||mcsr)+xamodn和数值并把s'提交给所述服务端,以使所述服务端验证证书签名请求csr的内容mcsr,核对用户身份信息,并在校验成功后计算数值返回给所述客户端。

计算sm2数字签名(r,t-r),合成完整的csr,提交给所述服务端,使所述服务端验证完整的csr与接收到的mcsr是否相符,是则向证书颁发机构ca提交,以使证书颁发机构ca在验证csr后,颁发共同公钥证书,并存储到证书库中。

在具体的实施例当中,在产生公钥之后,按gm/t0003.1-2012标准6.2给出的方法验证公钥是否有效。

本实施例中,共同公钥证书申请兼容当前的ca证书颁发流程,过程中包含服务端对客户端的身份认证,并且身份与完整的csr绑定,有效的防止客户端提供虚假信息。

需要说明的是,客户端或者服务端都可以获取证书库中的共同公钥证书,客户端在本地存储该共同公钥证书和服务端的公钥分量,服务端在本地存储该共同公钥证书和客户端的公钥分量。

请参阅图2,图2是本发明实施例提供的sm2算法协同签名方法的另一流程示意图。所述sm2算法协同签名方法,由服务端执行,包括如下步骤s201-s204。

s201、接收客户端发送的第一椭圆曲线群元素组;所述第一椭圆曲线群元素组为所述客户端基于服务端公钥分量以及选取的第一随机数计算所得。

其中,所述第一椭圆曲线群元素组为r'a=[ka]g和r”a=[ka]pkba;其中,pkba为服务端公钥分量,ka∈[1,n-1]为第一随机数,g为椭圆曲线基点。

在一优选实施例中,所述的sm2算法协同签名方法,在接收客户端发送的第一椭圆曲线群元素组之后,还包括:

使用服务端私钥分量dba验证若不成立则退出协议;其中,dba∈[1,n-1]。

在具体的实施例当中,r”a=[ka]pkba的计算和验证不影响正常的签名流程,即使删除也能够完成签名流程,此处是为了增强签名方案的安全性。

s202、基于所述客户端公钥分量以及选取的第二随机数,计算第二椭圆曲线群元素组,并将所述第二椭圆曲线群元素组发送给所述客户端。

其中,所述的sm2算法协同签名方法,所述第二椭圆曲线群元素组为rb=[kb]pka和r'b=[kb]g,其中,pka为客户端公钥分量,kb∈[1,n-1]为第二随机数。

在一优选实施例中,所述的sm2算法协同签名方法,还包括:在将所述第二椭圆曲线群元素组发送给所述客户端之后,使所述客户端使用客户端私钥分量da验证若不成立则退出协议;其中,da∈[1,n-1]。

在具体的实施例当中,r'b=[kb]g的计算和验证不影响正常的签名流程,即使删除也能够完成签名流程,此处是为了增强签名方案的安全性。

s203、接收所述客户端发送的第二数值;所述第二数值为所述客户端根据第一数值、所述第一随机数以及客户端私钥分量生成;所述第一数值为所述客户端根据用户信息杂凑值、待签名消息以及所述第三椭圆曲线群元素的横坐标计算所得;所述第三椭圆曲线群元素为所述客户端基于所述第一椭圆曲线群元素组和所述第二椭圆曲线群元素组计算所得。

其中,所述第三椭圆曲线群元素基于以下公式生成:ra=r'a+rb,且ra=(xa,ya),其中,xa、ya分别为ra的x轴坐标和y轴坐标。

所述第一数值的计算公式为:r=h(za||m)+xamodn。

所述第二数值的计算公式为:其中,h表示预先定义的密码杂凑算法,za表示用户的可辨识标识、部分椭圆曲线系统参数和公钥的用户信息杂凑值,m为待签名消息,定义与gm/t0003.2-2012保持一致,modn表示模n运算。

s204、根据所述第二数值、所述第二随机数以及服务端私钥分量计算第三数值并反馈给所述客户端,以使所述客户端根据所述第一数值和所述第三数值合成sm2数字签名。

其中,所述第三数值的计算公式为所述sm2数字签名为(r,t-r)。

在具体的实施例当中,客户端合成sm2数字签名(r,t-r)后,验证数字签名的正确性,验证无效退出协议,否则获得签名。

客户端和服务端分别持有部分私钥分量,攻击者在劫持其中一方的条件下无法获得完整的私钥,也无法实现私钥脱机使用,提升了私钥存储的安全性。签名需要客户端和服务端共同完成,任意一方都无法单独完成签名,保证了签名的安全性。

在一优选的实施例中,所述的sm2算法协同签名方法,在接收所述客户端发送的第二数值之后,还包括:

接收所述客户端发送的第一数字签名;所述第一数字签名为所述客户端基于所述第一椭圆曲线群元素组、所述第二椭圆曲线群元素组以及所述第二数值,使用客户端私钥分量计算所得;

使用客户端公钥分量对所述第一数字签名进行验证。

其中,所述第一数字签名为关于(r'a,r”a,rb,r'b,s')的普通sm2数字签名δa。

在具体的实施例当中,δa的计算和验证不影响正常的签名流程,即使删除也能够完成签名流程,此处是为了验证客户端的身份(服务端对客户端的身份鉴别),防止任意客户端都能使用服务端的私钥分量,即避免了服务端私钥的非授权使用。

在一优选的实施例中,所述的sm2算法协同签名方法,还包括:

接收客户端基于选择的客户端私钥分量da∈[1,n-1]反馈的客户端公钥分量pka=[da]g。

基于服务端私钥分量dba∈[1,n-1],计算服务端公钥分量pkba=[dba]g,并选取随机数kb∈[1,n-1]计算随机群元素rb=[kb]pka,且将pkba和rb返回给所述客户端,以使所述客户端选取随机数ka∈[1,n-1],计算随机群元素ra=[ka]g+rb,ra=(xa,ya);其中,xa、ya分别为ra的x轴坐标和y轴坐标。

接收所述客户端提交的数值s';其中,数值数值r=h(za||mcsr)+xamodn,mcsr为所述客户端计算共同公钥pk=[da]pkba-g,并获取用户身份信息以在客户端所生成证书签名请求csr的内容。

在具体的实施例当中,计算共同公钥pk分别需要客户端和服务端各自的私钥分量参与计算才能获得。其中,本实施例已绑定证书签发过程,由客户端计算共同公钥pk。

验证证书签名请求csr的内容mcsr,核对用户身份信息,并在校验成功后计算数值返回给所述客户端。

接收客户端提交的在计算sm2数字签名(r,t-r)后合成完整的csr。

验证完整的csr与接收到的mcsr是否相符,是则向证书颁发机构ca提交,以使证书颁发机构ca在验证csr后,颁发共同公钥证书,并存储到证书库中。

在具体的实施例当中,在产生公钥之后,按gm/t0003.1-2012标准6.2给出的方法验证公钥是否有效。

本实施例中,共同公钥证书申请兼容当前的ca证书颁发流程,过程中包含服务端对客户端的身份认证,并且身份与完整的csr绑定,有效的防止客户端提供虚假信息。

需要说明的是,客户端或者服务端都可以获取证书库中的共同公钥证书,客户端在本地存储该共同公钥证书和服务端的公钥分量,服务端在本地存储该共同公钥证书和客户端的公钥分量。

第二方面。

请参阅图3,图3是本发明实施例提供的sm2算法协同解密方法的流程示意图。所述sm2算法协同解密方法,由客户端执行,包括如下步骤s301-s307。

s301、基于sm2密文第一分量、客户端私钥分量,以及选取的第三随机数和第四随机数,计算第三椭圆曲线群元素和第四椭圆曲线群元素并发送给服务端。

s302、接收服务端发送的第五椭圆曲线群元素和第六椭圆曲线群元素;所述第五椭圆曲线群元素和所述第六椭圆曲线群元素为所述服务端基于选取的第五随机数、服务端私钥分量,以及所述第三椭圆曲线群元素和所述第四椭圆曲线群元素计算所得。

s303、根据所述sm2密文第一分量、所述第三随机数和所述第四随机数,以及所述第五椭圆曲线群元素和所述第六椭圆曲线群元素,计算第七椭圆曲线群元素。

s304、基于预先定义的密钥派生函数和所述第七椭圆曲线群元素,计算对称密钥。

s305、将所述sm2密文第二分量与所述对称密钥按位异或运算,得到明文。

s306、基于预先定义的密码杂凑算法,根据所述明文和所述第七椭圆曲线群元素,计算第四数值。

s307、在所述第四数值不等于所述sm2密文第三分量时,报错并退出;在所述第四数值等于所述sm2密文第三分量时,输出所述明文。

其中,客户端私钥分量为da∈[1,n-1],服务端私钥分量为dba∈[1,n-1]。所述sm2密文为(c1,c2,c3),其中c1为sm2密文第一分量,c2为sm2密文第二分量,c3为sm2密文第三分量。所述第三随机数和所述第四随机数分别为所述第三椭圆曲线群元素和所述第四椭圆曲线群元素分别为所述第五随机数为所述第五椭圆曲线群元素和所述第六椭圆曲线群元素分别为所述第七椭圆曲线群元素为所述对称密钥t=kdf(x2||y2,klen);其中,kdf为预先定义的密钥派生函数,定义与gm/t0003.4-2012保持一致,klen为输出比特长度,若t为全0比特串,则报错并退出;所述明文为其中,表示按位异或运算。所述第四数值为u=hash(x2||m'||y2),其中,hash表示预先定义的密码杂凑算法。

在具体的实施例当中,客户端接收到共同公钥pk加密的密文(c1,c2,c3)之后,需要与服务端通信完成解密,流程如下:

客户端选择随机数计算椭圆曲线群元素使用客户端私钥分量计算消息m=t1||t2的普通sm2数字签名δ,然后把(t1,t2,δ)发送给服务端;

服务端使用客户端公钥分量pka验证数字签名δ,验证不通过则退出,否则选择随机数计算椭圆曲线群元素然后把(t3,t4)发送给客户端;

客户端计算椭圆曲线群元素

客户端计算对称密钥t=kdf(x2||y2,klen),其中,kdf为预先定义的密钥派生函数,定义与gm/t0003.4-2012保持一致,klen为输出比特长度,若t为全0比特串,则报错并退出;

客户端计算明文其中,表示按位异或运算;

客户端计算验证数据u=hash(x2||m'||y2),其中,hash表示预先定义的密码杂凑算法,若u≠c3,则报错并退出;

客户端输出明文m'。

本实施例中,解密过程引入混淆因子,避免攻击者监听密文和过程数据后解密出密文,更好的保护用户隐私。解密需要客户端和服务端共同完成,任意一方都无法单独完成解密,保证了解密的安全性。

在一优选实施例中,所述的sm2算法协同解密方法,还包括:

计算消息m=t1||t2的第二数字签名δ,并把所述第二数字签名δ发送给服务端,以使所述服务端使用客户端公钥分量pka=[da]g验证所述第二数字签名δ。

需要说明的是,所述第二数字签名δ为非必需的,在具体的实施例当中,δ的计算和验证不影响正常的解密流程,即使删除也能够完成解密流程,此处是为了验证客户端的身份(服务端对客户端的身份鉴别),防止任意客户端都能使用服务端的私钥分量,即避免了服务端私钥的非授权使用。

请参阅图4,图4是本发明实施例提供的sm2算法协同解密方法的另一流程示意图。所述sm2算法协同解密方法,由服务端执行,包括如下步骤s401-s402。

s401、接收客户端发送的第三椭圆曲线群元素和第四椭圆曲线群元素;所述第三椭圆曲线群元素和所述第四椭圆曲线群元素为所述客户端基于sm2密文第一分量、客户端私钥分量,以及选取的第三随机数和第四随机数计算所得。

s402、基于选取的第五随机数、服务端私钥分量,以及所述第三椭圆曲线群元素和所述第四椭圆曲线群元素,计算第五椭圆曲线群元素和第六椭圆曲线群元素并发送给客户端,以使所述客户端执行如下步骤:

根据所述sm2密文第一分量、所述第三随机数和所述第四随机数,以及所述第五椭圆曲线群元素和所述第六椭圆曲线群元素,计算第七椭圆曲线群元素;

基于预先定义的密钥派生函数和所述第七椭圆曲线群元素,计算对称密钥;

将所述sm2密文第二分量与所述对称密钥按位异或运算,得到明文;

基于预先定义的密码杂凑算法,根据所述明文和所述第七椭圆曲线群元素,计算第四数值;

在所述第四数值不等于所述sm2密文第三分量时,报错并退出;

在所述第四数值等于所述sm2密文第三分量时,输出所述明文。

其中,客户端私钥分量为da∈[1,n-1],服务端私钥分量为dba∈[1,n-1]。所述sm2密文为(c1,c2,c3),其中c1为sm2密文第一分量,c2为sm2密文第二分量,c3为sm2密文第三分量。所述第三随机数和所述第四随机数分别为所述第三椭圆曲线群元素和所述第四椭圆曲线群元素分别为所述第五随机数为所述第五椭圆曲线群元素和所述第六椭圆曲线群元素分别为所述第七椭圆曲线群元素为所述对称密钥t=kdf(x2||y2,klen);其中,kdf为预先定义的密钥派生函数,定义与gm/t0003.4-2012保持一致,klen为输出比特长度,若t为全0比特串,则报错并退出;所述明文为其中,表示按位异或运算。所述第四数值为u=hash(x2||m'||y2),其中,hash表示预先定义的密码杂凑算法。

在具体的实施例当中,客户端接收到共同公钥pk加密的密文(c1,c2,c3)之后,需要与服务端通信完成解密,流程如下:

客户端选择随机数计算椭圆曲线群元素使用客户端私钥分量计算消息m=t1||t2的普通sm2数字签名δ,然后把(t1,t2,δ)发送给服务端;

服务端使用客户端公钥分量pka验证数字签名δ,验证不通过则退出,否则选择随机数计算椭圆曲线群元素然后把(t3,t4)发送给客户端;

客户端计算椭圆曲线群元素

客户端计算对称密钥t=kdf(x2||y2,klen),其中,kdf为预先定义的密钥派生函数,定义与gm/t0003.4-2012保持一致,klen为输出比特长度,若t为全0比特串,则报错并退出;

客户端计算明文其中,表示按位异或运算;

客户端计算验证数据u=hash(x2||m'||y2),其中,hash表示预先定义的密码杂凑算法,若u≠c3,则报错并退出;

客户端输出明文m'。

本实施例中,解密过程引入混淆因子,避免攻击者监听密文和过程数据后解密出密文,更好的保护用户隐私。解密需要客户端和服务端共同完成,任意一方都无法单独完成解密,保证了解密的安全性。

在一优选实施例中,所述的sm2算法协同解密方法,还包括:

接收所述客户端所计算的消息m=t1||t2的第二数字签名δ;

使用客户端公钥分量pka=[da]g验证所述第二数字签名δ。

需要说明的是,所述第二数字签名δ为非必需的,在具体的实施例当中,δ的计算和验证不影响正常的解密流程,即使删除也能够完成解密流程,此处是为了验证客户端的身份(服务端对客户端的身份鉴别),防止任意客户端都能使用服务端的私钥分量,即避免了服务端私钥的非授权使用。

第三方面。

本发明实施例还提供了一种sm2算法协同签名装置,包括:

计算单元,用于基于服务端公钥分量以及选取的第一随机数,计算第一椭圆曲线群元素组。

其中,所述第一椭圆曲线群元素组为r'a=[ka]g和r”a=[ka]pkba;其中,pkba为服务端公钥分量,ka∈[1,n-1]为第一随机数,g为椭圆曲线基点。

在一优选实施例中,所述的sm2算法协同签名方法,在所述基于服务端公钥分量以及选取的第一随机数,计算第一椭圆曲线群元素组并发送给服务端之后,还包括:

使所述服务端使用服务端私钥分量dba验证若不成立则退出协议;其中,dba∈[1,n-1]。

在具体的实施例当中,r”a=[ka]pkba的计算和验证不影响正常的签名流程,即使删除也能够完成签名流程,此处是为了增强签名方案的安全性。

通信单元,用于将所述第一椭圆曲线群元素组发送给服务端,以及接收所述服务端基于客户端公钥分量以及选取的第二随机数反馈的第二椭圆曲线群元素组。

其中,所述第二椭圆曲线群元素组为rb=[kb]pka和r'b=[kb]g,其中,pka为客户端公钥分量,kb∈[1,n-1]为第二随机数。

在一优选实施例中,所述的sm2算法协同签名方法,在所述接收服务端基于客户端公钥分量以及选取的第二随机数反馈的第二椭圆曲线群元素组之后,还包括:

使用客户端私钥分量da验证若不成立则退出协议;其中,da∈[1,n-1]。

在具体的实施例当中,r'b=[kb]g的计算和验证不影响正常的签名流程,即使删除也能够完成签名流程,此处是为了增强签名方案的安全性。

所述计算单元,还用于基于所述第一椭圆曲线群元素组和所述第二椭圆曲线群元素组,计算第三椭圆曲线群元素。

其中,所述第三椭圆曲线群元素基于以下公式生成:ra=r'a+rb,且ra=(xa,ya),其中,xa、ya分别为ra的x轴坐标和y轴坐标。

所述计算单元,还用于根据用户信息杂凑值、待签名消息以及所述第三椭圆曲线群元素对应的横坐标,计算第一数值。

所述计算单元,还用于根据所述第一数值、所述第一随机数以及客户端私钥分量,生成第二数值。

其中,所述第一数值的计算公式为:r=h(za||m)+xamodn。

所述第二数值的计算公式为:其中,h表示预先定义的密码杂凑算法,za表示用户的可辨识标识、部分椭圆曲线系统参数和公钥的用户信息杂凑值,m为待签名消息,定义与gm/t0003.2-2012保持一致,modn表示模n运算。

所述通信单元,还用于把所述第二数值发送给所述服务端,并接收所述服务端反馈的第三数值;所述第三数值为所述服务端根据所述第二数值、所述第二随机数以及服务端私钥分量计算所得。

其中,所述第三数值的计算公式为

sm2数字签名单元,用于根据所述第一数值和所述第三数值合成sm2数字签名。

其中,所述sm2数字签名为(r,t-r)。

在具体的实施例当中,客户端合成sm2数字签名(r,t-r)后,验证数字签名的正确性,验证无效退出协议,否则获得签名。

客户端和服务端分别持有部分私钥分量,攻击者在劫持其中一方的条件下无法获得完整的私钥,也无法实现私钥脱机使用,提升了私钥存储的安全性。签名需要客户端和服务端共同完成,任意一方都无法单独完成签名,保证了签名的安全性。

在一优选的实施例中,所述的sm2算法协同签名装置,还包括:

所述计算单元,还用于在所述根据所述第一数值、所述第一随机数以及客户端私钥分量,生成第二数值并发送给所述服务端之后,使用客户端私钥分量计算关于所述第一椭圆曲线群元素组、所述第二椭圆曲线群元素组以及所述第二数值的第一数字签名;

所述通信单元,还用于将所述第一签名发送给所述服务端,以使所述服务端使用客户端公钥分量对所述第一数字签名进行验证。

其中,所述第一数字签名为关于(r'a,r”a,rb,r'b,s')的普通sm2数字签名δa。

在具体的实施例当中,δa的计算和验证不影响正常的签名流程,即使删除也能够完成签名流程,此处是为了验证客户端的身份(服务端对客户端的身份鉴别),防止任意客户端都能使用服务端的私钥分量,即避免了服务端私钥的非授权使用。

在一优选的实施例中,所述的sm2算法协同签名装置,还用于:

选择客户端私钥分量da∈[1,n-1],计算客户端公钥分量pka=[da]g,并将所述客户端公钥分量发送给服务端。

接收所述服务端发送的服务端公钥分量pkba和随机群元素rb;其中,所述服务端公钥分量为pkba=[dba]g,服务端私钥分量为dba∈[1,n-1],所述随机群元素为rb=[kb]pka,选取的随机数为kb∈[1,n-1]。

选取随机数ka∈[1,n-1],计算随机群元素ra=[ka]g+rb,ra=(xa,ya);其中,xa、ya分别为ra的x轴坐标和y轴坐标。

计算共同公钥pk=[da]pkba-g,并获取用户身份信息以在客户端生成证书签名请求csr的内容,设为mcsr。

在具体的实施例当中,计算共同公钥pk分别需要客户端和服务端各自的私钥分量参与计算才能获得。其中,本实施例已绑定证书签发过程,由客户端计算共同公钥pk。

计算数值r=h(za||mcsr)+xamodn和数值并把s'提交给所述服务端,以使所述服务端验证证书签名请求csr的内容mcsr,核对用户身份信息,并在校验成功后计算数值返回给所述客户端。

计算sm2数字签名(r,t-r),合成完整的csr,提交给所述服务端,使所述服务端验证完整的csr与接收到的mcsr是否相符,是则向证书颁发机构ca提交,以使证书颁发机构ca在验证csr后,颁发共同公钥证书,并存储到证书库中。

在具体的实施例当中,在产生公钥之后,按gm/t0003.1-2012标准6.2给出的方法验证公钥是否有效。

本实施例中,共同公钥证书申请兼容当前的ca证书颁发流程,过程中包含服务端对客户端的身份认证,并且身份与完整的csr绑定,有效的防止客户端提供虚假信息。

需要说明的是,客户端或者服务端都可以获取证书库中的共同公钥证书,客户端在本地存储该共同公钥证书和服务端的公钥分量,服务端在本地存储该共同公钥证书和客户端的公钥分量。

本发明实施例还提供了一种sm2算法协同签名装置,包括:

通信单元,用于接收客户端发送的第一椭圆曲线群元素组;所述第一椭圆曲线群元素组为所述客户端基于服务端公钥分量以及选取的第一随机数计算所得。

其中,所述第一椭圆曲线群元素组为r'a=[ka]g和r”a=[ka]pkba;其中,pkba为服务端公钥分量,ka∈[1,n-1]为第一随机数,g为椭圆曲线基点。

在一优选实施例中,所述的sm2算法协同签名方法,在接收客户端发送的第一椭圆曲线群元素组之后,还包括:

使用服务端私钥分量dba验证若不成立则退出协议;其中,dba∈[1,n-1]。

在具体的实施例当中,r”a=[ka]pkba的计算和验证不影响正常的签名流程,即使删除也能够完成签名流程,此处是为了增强签名方案的安全性。

计算单元,用于基于所述客户端公钥分量以及选取的第二随机数,计算第二椭圆曲线群元素组。

其中,所述的sm2算法协同签名方法,所述第二椭圆曲线群元素组为rb=[kb]pka和r'b=[kb]g,其中,pka为客户端公钥分量,kb∈[1,n-1]为第二随机数。

在一优选实施例中,所述的sm2算法协同签名方法,还包括:在将所述第二椭圆曲线群元素组发送给所述客户端之后,使所述客户端使用客户端私钥分量da验证若不成立则退出协议;其中,da∈[1,n-1]。

在具体的实施例当中,r'b=[kb]g的计算和验证不影响正常的签名流程,即使删除也能够完成签名流程,此处是为了增强签名方案的安全性。

所述通信单元,还用于接收所述客户端发送的第二数值;所述第二数值为所述客户端根据第一数值、所述第一随机数以及客户端私钥分量生成;所述第一数值为所述客户端根据用户信息杂凑值、待签名消息以及所述第三椭圆曲线群元素的横坐标计算所得;所述第三椭圆曲线群元素为所述客户端基于所述第一椭圆曲线群元素组和所述第二椭圆曲线群元素组计算所得。

其中,所述第三椭圆曲线群元素基于以下公式生成:ra=r'a+rb,且ra=(xa,ya),其中,xa、ya分别为ra的x轴坐标和y轴坐标。

所述第一数值的计算公式为:r=h(za||m)+xamodn。

所述第二数值的计算公式为:其中,h表示预先定义的密码杂凑算法,za表示用户的可辨识标识、部分椭圆曲线系统参数和公钥的用户信息杂凑值,m为待签名消息,定义与gm/t0003.2-2012保持一致,modn表示模n运算。

所述计算单元,还用于根据所述第二数值、所述第二随机数以及服务端私钥分量计算第三数值。

所述通信单元,还用于将所述第三数值反馈给所述客户端,以使所述客户端根据所述第一数值和所述第三数值合成sm2数字签名。

其中,所述第三数值的计算公式为所述sm2数字签名为(r,t-r)。

在具体的实施例当中,客户端合成sm2数字签名(r,t-r)后,验证数字签名的正确性,验证无效退出协议,否则获得签名。

客户端和服务端分别持有部分私钥分量,攻击者在劫持其中一方的条件下无法获得完整的私钥,也无法实现私钥脱机使用,提升了私钥存储的安全性。签名需要客户端和服务端共同完成,任意一方都无法单独完成签名,保证了签名的安全性。

在一优选的实施例中,所述的sm2算法协同签名装置,还包括:

所述通信单元,还用于在接收所述客户端发送的第二数值之后,接收所述客户端发送的第一数字签名;所述第一数字签名为所述客户端基于所述第一椭圆曲线群元素组、所述第二椭圆曲线群元素组以及所述第二数值,使用客户端私钥分量计算所得;

验证单元,用于使用客户端公钥分量对所述第一数字签名进行验证。

其中,所述第一数字签名为关于(r'a,r”a,rb,r'b,s')的普通sm2数字签名δa。

在具体的实施例当中,δa的计算和验证不影响正常的签名流程,即使删除也能够完成签名流程,此处是为了验证客户端的身份(服务端对客户端的身份鉴别),防止任意客户端都能使用服务端的私钥分量,即避免了服务端私钥的非授权使用。

在一优选的实施例中,所述的sm2算法协同签名装置,还用于:

接收客户端基于选择的客户端私钥分量da∈[1,n-1]反馈的客户端公钥分量pka=[da]g。

基于服务端私钥分量dba∈[1,n-1],计算服务端公钥分量pkba=[dba]g,并选取随机数kb∈[1,n-1]计算随机群元素rb=[kb]pka,且将pkba和rb返回给所述客户端,以使所述客户端选取随机数ka∈[1,n-1],计算随机群元素ra=[ka]g+rb,ra=(xa,ya);其中,xa、ya分别为ra的x轴坐标和y轴坐标。

接收所述客户端提交的数值s';其中,数值数值r=h(za||mcsr)+xamodn,mcsr为所述客户端计算共同公钥pk=[da]pkba-g,并获取用户身份信息以在客户端所生成证书签名请求csr的内容。

在具体的实施例当中,计算共同公钥pk分别需要客户端和服务端各自的私钥分量参与计算才能获得。其中,本实施例已绑定证书签发过程,由客户端计算共同公钥pk。

验证证书签名请求csr的内容mcsr,核对用户身份信息,并在校验成功后计算数值返回给所述客户端。

接收客户端提交的在计算sm2数字签名(r,t-r)后合成完整的csr。

验证完整的csr与接收到的mcsr是否相符,是则向证书颁发机构ca提交,以使证书颁发机构ca在验证csr后,颁发共同公钥证书,并存储到证书库中。

在具体的实施例当中,在产生公钥之后,按gm/t0003.1-2012标准6.2给出的方法验证公钥是否有效。

本实施例中,共同公钥证书申请兼容当前的ca证书颁发流程,过程中包含服务端对客户端的身份认证,并且身份与完整的csr绑定,有效的防止客户端提供虚假信息。

需要说明的是,客户端或者服务端都可以获取证书库中的共同公钥证书,客户端在本地存储该共同公钥证书和服务端的公钥分量,服务端在本地存储该共同公钥证书和客户端的公钥分量。

第四方面。

本发明实施例还提供了一种sm2算法协同解密装置,包括:

计算单元,用于基于sm2密文第一分量、客户端私钥分量,以及选取的第三随机数和第四随机数,计算第三椭圆曲线群元素和第四椭圆曲线群元素。

通信单元,用于将所述第三椭圆曲线群元素和所述第四椭圆曲线群元素发送给服务端,以及接收服务端发送的第五椭圆曲线群元素和第六椭圆曲线群元素;所述第五椭圆曲线群元素和所述第六椭圆曲线群元素为所述服务端基于选取的第五随机数、服务端私钥分量,以及所述第三椭圆曲线群元素和所述第四椭圆曲线群元素计算所得。

所述计算单元,还用于根据所述sm2密文第一分量、所述第三随机数和所述第四随机数,以及所述第五椭圆曲线群元素和所述第六椭圆曲线群元素,计算第七椭圆曲线群元素。

所述计算单元,还用于基于预先定义的密钥派生函数和所述第七椭圆曲线群元素,计算对称密钥。

所述计算单元,还用于将所述sm2密文第二分量与所述对称密钥按位异或运算,得到明文。

所述计算单元,还用于基于预先定义的密码杂凑算法,根据所述明文和所述第七椭圆曲线群元素,计算第四数值。

判断单元,用于在所述第四数值不等于所述sm2密文第三分量时,报错并退出;在所述第四数值等于所述sm2密文第三分量时,输出所述明文。

其中,客户端私钥分量为da∈[1,n-1],服务端私钥分量为dba∈[1,n-1]。所述sm2密文为(c1,c2,c3),其中c1为sm2密文第一分量,c2为sm2密文第二分量,c3为sm2密文第三分量。所述第三随机数和所述第四随机数分别为所述第三椭圆曲线群元素和所述第四椭圆曲线群元素分别为所述第五随机数为所述第五椭圆曲线群元素和所述第六椭圆曲线群元素分别为所述第七椭圆曲线群元素为所述对称密钥t=kdf(x2||y2,klen);其中,kdf为预先定义的密钥派生函数,定义与gm/t0003.4-2012保持一致,klen为输出比特长度,若t为全0比特串,则报错并退出;所述明文为其中,表示按位异或运算。所述第四数值为u=hash(x2||m'||y2),其中,hash表示预先定义的密码杂凑算法。

在具体的实施例当中,客户端接收到共同公钥pk加密的密文(c1,c2,c3)之后,需要与服务端通信完成解密,流程如下:

客户端选择随机数计算椭圆曲线群元素使用客户端私钥分量计算消息m=t1||t2的普通sm2数字签名δ,然后把(t1,t2,δ)发送给服务端;

服务端使用客户端公钥分量pka验证数字签名δ,验证不通过则退出,否则选择随机数计算椭圆曲线群元素然后把(t3,t4)发送给客户端;

客户端计算椭圆曲线群元素

客户端计算对称密钥t=kdf(x2||y2,klen),其中,kdf为预先定义的密钥派生函数,定义与gm/t0003.4-2012保持一致,klen为输出比特长度,若t为全0比特串,则报错并退出;

客户端计算明文其中,表示按位异或运算;

客户端计算验证数据u=hash(x2||m'||y2),其中,hash表示预先定义的密码杂凑算法,若u≠c3,则报错并退出;

客户端输出明文m'。

本实施例中,解密过程引入混淆因子,避免攻击者监听密文和过程数据后解密出密文,更好的保护用户隐私。解密需要客户端和服务端共同完成,任意一方都无法单独完成解密,保证了解密的安全性。

在一优选实施例中,所述的sm2算法协同解密装置,还包括:

所述计算单元,还用于计算消息的第二数字签名;

所述通信单元,还用于把所述第二数字签名发送给服务端,以使所述服务端使用客户端公钥分量验证所述第二数字签名。

需要说明的是,所述第二数字签名δ为非必需的,在具体的实施例当中,δ的计算和验证不影响正常的解密流程,即使删除也能够完成解密流程,此处是为了验证客户端的身份(服务端对客户端的身份鉴别),防止任意客户端都能使用服务端的私钥分量,即避免了服务端私钥的非授权使用。

本发明实施例还提供了一种sm2算法协同解密装置,包括:

通信单元,用于接收客户端发送的第三椭圆曲线群元素和第四椭圆曲线群元素;所述第三椭圆曲线群元素和所述第四椭圆曲线群元素为所述客户端基于sm2密文第一分量、客户端私钥分量,以及选取的第三随机数和第四随机数计算所得。

计算单元,用于基于选取的第五随机数、服务端私钥分量,以及所述第三椭圆曲线群元素和所述第四椭圆曲线群元素,计算第五椭圆曲线群元素和第六椭圆曲线群元素。

所述通信单元,还用于将所述第五椭圆曲线群元素和所述第六椭圆曲线群元素发送给客户端,以使所述客户端执行如下步骤。

根据所述sm2密文第一分量、所述第三随机数和所述第四随机数,以及所述第五椭圆曲线群元素和所述第六椭圆曲线群元素,计算第七椭圆曲线群元素。

基于预先定义的密钥派生函数和所述第七椭圆曲线群元素,计算对称密钥。

将所述sm2密文第二分量与所述对称密钥按位异或运算,得到明文。

基于预先定义的密码杂凑算法,根据所述明文和所述第七椭圆曲线群元素,计算第四数值。

在所述第四数值不等于所述sm2密文第三分量时,报错并退出。

在所述第四数值等于所述sm2密文第三分量时,输出所述明文。

其中,客户端私钥分量为da∈[1,n-1],服务端私钥分量为dba∈[1,n-1]。所述sm2密文为(c1,c2,c3),其中c1为sm2密文第一分量,c2为sm2密文第二分量,c3为sm2密文第三分量。所述第三随机数和所述第四随机数分别为所述第三椭圆曲线群元素和所述第四椭圆曲线群元素分别为所述第五随机数为所述第五椭圆曲线群元素和所述第六椭圆曲线群元素分别为所述第七椭圆曲线群元素为所述对称密钥t=kdf(x2||y2,klen);其中,kdf为预先定义的密钥派生函数,定义与gm/t0003.4-2012保持一致,klen为输出比特长度,若t为全0比特串,则报错并退出;所述明文为其中,表示按位异或运算。所述第四数值为u=hash(x2||m'||y2),其中,hash表示预先定义的密码杂凑算法。

在具体的实施例当中,客户端接收到共同公钥pk加密的密文(c1,c2,c3)之后,需要与服务端通信完成解密,流程如下:

客户端选择随机数计算椭圆曲线群元素使用客户端私钥分量计算消息m=t1||t2的普通sm2数字签名δ,然后把(t1,t2,δ)发送给服务端;

服务端使用客户端公钥分量pka验证数字签名δ,验证不通过则退出,否则选择随机数计算椭圆曲线群元素然后把(t3,t4)发送给客户端;

客户端计算椭圆曲线群元素

客户端计算对称密钥t=kdf(x2||y2,klen),其中,kdf为预先定义的密钥派生函数,定义与gm/t0003.4-2012保持一致,klen为输出比特长度,若t为全0比特串,则报错并退出;

客户端计算明文其中,表示按位异或运算;

客户端计算验证数据u=hash(x2||m'||y2),其中,hash表示预先定义的密码杂凑算法,若u≠c3,则报错并退出;

客户端输出明文m'。

本实施例中,解密过程引入混淆因子,避免攻击者监听密文和过程数据后解密出密文,更好的保护用户隐私。解密需要客户端和服务端共同完成,任意一方都无法单独完成解密,保证了解密的安全性。

在一优选实施例中,所述的sm2算法协同解密装置,还包括:

所述通信单元,还用于接收所述客户端所计算并发送的消息的第二数字签名;

验证单元,用于使用客户端公钥分量验证所述第二数字签名。

需要说明的是,所述第二数字签名δ为非必需的,在具体的实施例当中,δ的计算和验证不影响正常的解密流程,即使删除也能够完成解密流程,此处是为了验证客户端的身份(服务端对客户端的身份鉴别),防止任意客户端都能使用服务端的私钥分量,即避免了服务端私钥的非授权使用。

第五方面。

请参阅图5,图5是本发明实施例提供的sm2算法协同签名系统的示意图。

所述sm2算法协同签名系统,包括客户端和服务端,协同签名由客户端发起。

所述客户端,用于基于服务端公钥分量以及选取的第一随机数,计算第一椭圆曲线群元素组并发送给服务端。

其中,所述第一椭圆曲线群元素组为r'a=[ka]g和r”a=[ka]pkba;其中,pkba为服务端公钥分量,ka∈[1,n-1]为第一随机数,g为椭圆曲线基点。

在一优选实施例中,所述服务端,还用于在接收所述客户端发送的第一椭圆曲线群元素组之后,使用服务端私钥分量dba验证若不成立则退出协议;其中,dba∈[1,n-1]。

在具体的实施例当中,r”a=[ka]pkba的计算和验证不影响正常的签名流程,即使删除也能够完成签名流程,此处是为了增强签名方案的安全性。

所述服务端,用于基于客户端公钥分量以及选取的第二随机数反馈的第二椭圆曲线群元素组给所述客户端。

其中,所述第二椭圆曲线群元素组为rb=[kb]pka和r'b=[kb]g,其中,pka为客户端公钥分量,kb∈[1,n-1]为第二随机数;

在一优选实施例中,所述客户端端,还用于使用客户端私钥分量da验证[da-1]rb=r'b,若不成立则退出协议;其中,da∈[1,n-1]。

在具体的实施例当中,r'b=[kb]g的计算和验证不影响正常的签名流程,即使删除也能够完成签名流程,此处是为了增强签名方案的安全性。

所述客户端,还用于基于所述第一椭圆曲线群元素组和所述第二椭圆曲线群元素组,计算第三椭圆曲线群元素。

其中,所述第三椭圆曲线群元素基于以下公式生成:ra=r'a+rb,且ra=(xa,ya),其中,xa、ya分别为ra的x轴坐标和y轴坐标。

所述客户端,还用于根据用户信息杂凑值、待签名消息以及所述第三椭圆曲线群元素对应的横坐标,计算第一数值;并根据所述第一数值、所述第一随机数以及客户端私钥分量,生成第二数值并发送给所述服务端。

其中,所述第一数值的计算公式为:r=h(za||m)+xamodn。

所述第二数值的计算公式为:其中,h表示预先定义的密码杂凑算法,za表示用户的可辨识标识、部分椭圆曲线系统参数和公钥的用户信息杂凑值,m为待签名消息,定义与gm/t0003.2-2012保持一致,modn表示模n运算。

所述服务端,还用于根据所述第二数值、所述第二随机数以及服务端私钥分量计算第三数值并反馈给所述客户端。

其中,所述第三数值的计算公式为

所述客户端,还用于根据所述第一数值和所述第三数值合成sm2数字签名。

其中,所述sm2数字签名为(r,t-r)。

在具体的实施例当中,客户端合成sm2数字签名(r,t-r)后,验证数字签名的正确性,验证无效退出协议,否则获得签名。

客户端和服务端分别持有部分私钥分量,攻击者在劫持其中一方的条件下无法获得完整的私钥,也无法实现私钥脱机使用,提升了私钥存储的安全性。签名需要客户端和服务端共同完成,任意一方都无法单独完成签名,保证了签名的安全性。

在一优选的实施例中,所述的sm2算法协同签名系统,还包括:

所述客户端,还用于在所述根据所述第一数值、所述第一随机数以及客户端私钥分量,生成第二数值之后,使用客户端私钥分量计算关于所述第一椭圆曲线群元素组、所述第二椭圆曲线群元素组以及所述第二数值的第一数字签名,并将所述第一签名发送给所述服务端;

所述服务端,还用于使用客户端公钥分量对所述第一数字签名进行验证。

其中,所述第一数字签名为关于(r'a,r”a,rb,r'b,s')的普通sm2数字签名δa。

在具体的实施例当中,δa的计算和验证不影响正常的签名流程,即使删除也能够完成签名流程,此处是为了验证客户端的身份(服务端对客户端的身份鉴别),防止任意客户端都能使用服务端的私钥分量,即避免了服务端私钥的非授权使用。

在一优选的实施例中,所述的sm2算法协同签名系统,还包括证书颁发机构ca。

所述客户端,还用于选择客户端私钥分量da∈[1,n-1],计算客户端公钥分量pka=[da]g,并将所述客户端公钥分量发送给服务端。

所述服务端,还用于发送服务端公钥分量pkba和随机群元素rb给所述客户端;其中,所述服务端公钥分量为pkba=[dba]g,服务端私钥分量为dba∈[1,n-1],所述随机群元素为rb=[kb]pka,选取的随机数为kb∈[1,n-1]。

所述客户端,还用于选取随机数ka∈[1,n-1],计算随机群元素ra=[ka]g+rb,ra=(xa,ya);其中,xa、ya分别为ra的x轴坐标和y轴坐标。

所述客户端,还用于计算共同公钥pk=[da]pkba-g,并获取用户身份信息以在客户端生成证书签名请求csr的内容,设为mcsr。

在具体的实施例当中,计算共同公钥pk分别需要客户端和服务端各自的私钥分量参与计算才能获得。其中,本实施例已绑定证书签发过程,由客户端计算共同公钥pk。

所述客户端,还用于计算数值r=h(za||mcsr)+xamodn和数值并把s’提交给所述服务端。

所述服务端,还用于验证证书签名请求csr的内容mcsr,核对用户身份信息,并在校验成功后计算数值返回给所述客户端。

所述客户端,还用于计算sm2数字签名(r,t-r),合成完整的csr,提交给所述服务端。

所述服务端,还用于验证完整的csr与接收到的mcsr是否相符,是则向所述证书颁发机构ca提交。

所述证书颁发机构ca,用于在验证csr后,颁发共同公钥证书,并存储到证书库中。

在具体的实施例当中,在产生公钥之后,按gm/t0003.1-2012标准6.2给出的方法验证公钥是否有效。

本实施例中,共同公钥证书申请兼容当前的ca证书颁发流程,过程中包含服务端对客户端的身份认证,并且身份与完整的csr绑定,有效的防止客户端提供虚假信息。

需要说明的是,客户端或者服务端都可以获取证书库中的共同公钥证书,客户端在本地存储该共同公钥证书和服务端的公钥分量,服务端在本地存储该共同公钥证书和客户端的公钥分量。

第六方面。

请参阅图6,图6是本发明实施例提供的。

所述sm2算法协同解密系统,包括客户端和服务端。

所述客户端,用于基于sm2密文第一分量、客户端私钥分量,以及选取的第三随机数和第四随机数,计算第三椭圆曲线群元素和第四椭圆曲线群元素并发送给服务端。

所述服务端,用于基于选取的第五随机数、服务端私钥分量,以及所述第三椭圆曲线群元素和所述第四椭圆曲线群元素,计算第五椭圆曲线群元素和第六椭圆曲线群元素并发送给客户端。

所述客户端,还用于根据所述sm2密文第一分量、所述第三随机数和所述第四随机数,以及所述第五椭圆曲线群元素和所述第六椭圆曲线群元素,计算第七椭圆曲线群元素。

所述客户端,还用于基于预先定义的密钥派生函数和所述第七椭圆曲线群元素,计算对称密钥。

所述客户端,还用于将所述sm2密文第二分量与所述对称密钥按位异或运算,得到明文。

所述客户端,还用于基于预先定义的密码杂凑算法,根据所述明文和所述第七椭圆曲线群元素,计算第四数值。

所述客户端,还用于在所述第四数值不等于所述sm2密文第三分量时,报错并退出;在所述第四数值等于所述sm2密文第三分量时,输出所述明文。

其中,客户端私钥分量为da∈[1,n-1],服务端私钥分量为dba∈[1,n-1]。所述sm2密文为(c1,c2,c3),其中c1为sm2密文第一分量,c2为sm2密文第二分量,c3为sm2密文第三分量。所述第三随机数和所述第四随机数分别为所述第三椭圆曲线群元素和所述第四椭圆曲线群元素分别为所述第五随机数为所述第五椭圆曲线群元素和所述第六椭圆曲线群元素分别为所述第七椭圆曲线群元素为所述对称密钥t=kdf(x2||y2,klen);其中,kdf为预先定义的密钥派生函数,定义与gm/t0003.4-2012保持一致,klen为输出比特长度,若t为全0比特串,则报错并退出;所述明文为其中,表示按位异或运算。所述第四数值为u=hash(x2||m'||y2),其中,hash表示预先定义的密码杂凑算法。

在具体的实施例当中,客户端接收到共同公钥pk加密的密文(c1,c2,c3)之后,需要与服务端通信完成解密,流程如下:

客户端选择随机数计算椭圆曲线群元素使用客户端私钥分量计算消息m=t1||t2的普通sm2数字签名δ,然后把(t1,t2,δ)发送给服务端;

服务端使用客户端公钥分量pka验证数字签名δ,验证不通过则退出,否则选择随机数计算椭圆曲线群元素然后把(t3,t4)发送给客户端;

客户端计算椭圆曲线群元素

客户端计算对称密钥t=kdf(x2||y2,klen),其中,kdf为预先定义的密钥派生函数,定义与gm/t0003.4-2012保持一致,klen为输出比特长度,若t为全0比特串,则报错并退出;

客户端计算明文其中,表示按位异或运算;

客户端计算验证数据u=hash(x2||m'||y2),其中,hash表示预先定义的密码杂凑算法,若u≠c3,则报错并退出;

客户端输出明文m'。

本实施例中,解密过程引入混淆因子,避免攻击者监听密文和过程数据后解密出密文,更好的保护用户隐私。解密需要客户端和服务端共同完成,任意一方都无法单独完成解密,保证了解密的安全性。

在一优选实施例中,所述的sm2算法协同解密系统,还包括:

所述客户端,用于计算消息m=t1||t2的第二数字签名δ,并把所述第二数字签名δ发送给服务端;

所述服务端,还用于使用客户端公钥分量pka=[da]g验证所述第二数字签名δ。

需要说明的是,所述第二数字签名δ为非必需的,在具体的实施例当中,δ的计算和验证不影响正常的解密流程,即使删除也能够完成解密流程,此处是为了验证客户端的身份(服务端对客户端的身份鉴别),防止任意客户端都能使用服务端的私钥分量,即避免了服务端私钥的非授权使用。

第七方面。

本发明实施例还提供一种终端设备,包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述存储器与所述处理器耦接,且所述处理器执行所述计算机程序时实现上述任一实施例中的sm2算法协同签名方法。

本发明实施例还提供一种终端设备,包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述存储器与所述处理器耦接,且所述处理器执行所述计算机程序时实现上述任一实施例中的sm2算法协同解密方法。

第八方面。

本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质包括存储的计算机程序,其中,在所述计算机程序运行时控制所述计算机可读存储介质所在设备执行上述任一实施例中的sm2算法协同签名方法。

本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质包括存储的计算机程序,其中,在所述计算机程序运行时控制所述计算机可读存储介质所在设备执行上述任一实施例中的的sm2算法协同解密方法。

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

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