APP下载

基于国产公钥密码算法的门限签名及解密方案

2021-06-21廖会敏玄佳兴李丽丽

计算机应用与软件 2021年6期
关键词:私钥服务端公钥

廖会敏 王 栋 玄佳兴 杨 珂 李丽丽

(国网电子商务有限公司(国网雄安金融科技集团有限公司) 北京 100053)(国家电网有限公司电力金融与电子商务实验室 北京 100053)

0 引 言

公钥密码算法也称为非对称密码算法,其密钥对由公钥和私钥组成。已知私钥可以推导出公钥,但已知公钥不能推导出私钥,公钥对外公开,私钥由用户自己秘密保存[1]。我国的公钥密码算法包括SM2椭圆曲线公钥密码算法[2](Elliptic Curve Cryptography,ECC)和SM9标识密码算法(Identity-Based Cryptography,IBC)[3-4]。2018年11月,SM2/SM9算法正式成为ISO/IEC国际标准,纳入国际标准算法并发布,标志着我国密码算法国际标准体系已初步成形,为有效保障网络空间安全贡献了中国智慧,提供了中国方案。

基于公钥密码学的数字签名和加解密技术已在移动支付、身份认证、电子签名等场景中得到了广泛的应用,成为保证网络信息安全的重要手段。门限密码学的基础是秘密共享,一个门限秘密共享方案可以将一段秘密信息共享于几个参与方之间,每一次秘密计算都需要多个参与方同意,从而提高算法安全性和健壮性[7]。随着移动通信、物联网、云计算的兴起,门限密码学的思想与智能终端对密钥的安全存储、安全计算的需求不谋而合,为了提高私钥的安全性,现有方案中基于门限密码学的思想提出了将用户私钥分割为几份并分布存储,以避免全部私钥直接存储在智能终端内存中极易被攻击者破解的风险。文献[11]概述性地描述了SM2门限密码算法;文献[12]给出了SM2算法门限签名及解密的方法;文献[13-14]给出了SM9算法的门限签名及解密的方法。但以上方案若在攻击者同时攻击两方的情况下,其私钥仍存在被窃取的可能性。

本文在前人研究基础上,提出一种以密码机为辅助设备的基于国产公钥密码算法的门限签名及解密方案,该方案具有以下优点:(1) 提出了一种SM2/SM9算法门限签名及解密的私钥分量的生成方法,以密码机为辅助设备,在密码机内部生成私钥分量或分割私钥,其中一份私钥分量直接存储在服务端密码机内,外部获得完整私钥的可能性趋近于零;(2) 针对实际的应用场景,密码机内存储的私钥分量可以是固定的,也可以一个应用对应一个固定的私钥分量,以应对密码机不能存储海量私钥分量的问题。

1 预备知识

1.1 基本定义

定义1素域Fp具有如下性质:(1) 加法单位元是0,乘法单位元是1;(2) 域元素的加法是整数模p加法,即若a,b∈Fp,则a+b=(a+b)modp;(3) 域元素的乘法是整数模p乘法,即若a,b∈Fp,则a·b=(a·b)modp。

定义3设G和GT是阶为素数N的循环群,g是G的生成元,e:G×G→GT是双线性映射,满足以下性质[15-16]:(1) 双线性:对任意的P1,P2,Q1,Q2∈G,有e(P1+P2,Q1)=e(P1,Q1)·e(P2,Q1),e(P1,Q1+Q2)=e(P1,Q1)·e(P1,Q2);(2) 可计算性:存在有效的算法,对于任意的P,Q∈G,均可计算e(P,Q)。

1.2 SM2密码算法描述

SM2算法的公开参数包括(q,n,E,G),其中:q是大素数,E是定义在有限域Fq上的椭圆曲线,G=(xG,yG)是E上n阶的基点。本文主要介绍SM2算法的密钥生成、签名算法和解密算法,有关SM2算法的详细信息可参考文献[17]。

1) 密钥生成。SM2算法的密钥生成过程如下:(1) 随机选取密钥d,且d∈[1,n-2];(2) 计算P=[d]G,并将P作为公钥公开,d作为私钥保存。

2) SM2签名算法。设待签名的消息为M,为了获取消息M的数字签名(r,s),签名者应实现以下运算步骤:

(1) 对待签名消息M进行签名预处理,得到消息摘要e;

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

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

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

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

(6) 消息M的签名数据为(r,s)。

3) SM2解密算法。设密文为C=C1‖C2‖C3,klen为密文C2的位长,为了对C进行解密,解密者应实现以下运算步骤:

(1) 将C1的数据类型转换为椭圆曲线上的点,验证C1是否满足椭圆曲线方程,若满足则进行下一步;

(2) 计算[d]C1=(x2,y2),将坐标(x2,y2)的数据类型转换为比特串;

(3) 计算t=KDF(x2‖y2,klen),若t为0,则报错退出;

(4) 计算M′=C2⊕t;

(5) 计算u=Hash(x2‖M′‖y2),若u≠C3,则报错退出;

(6) 输出明文M′。

1.3 SM9密码算法描述

SM9算法的公开参数包括(cid,N,k,P1,P2,eid),其中:cid是曲线识别符,N是循环群G1、G2和GT的阶,k是曲线E(Fq)相对于N的嵌入次数,P1是G1的生成元,P2是G2的生成元,eid是双线性对e的识别符。本文主要介绍SM9算法的密钥生成、签名算法和解密算法,有关SM9算法的详细信息可参考文献[18]。

1) 密钥生成。SM9标识算法的密钥包含用户的ID和私钥,该私钥由密钥生成中心(Key generation center,KGC)通过主私钥和用户的标识结合产生。

KGC产生随机数ks∈[1,N-1]作为主私钥,计算G1中的元素Ppub=[ks]P1作为加密主公钥,则主密钥对为(ks,Ppub),KGC保存ks,公开Ppub。

KGC选择并公开用一个字节表示的私钥生成函数识别符hid,然后KGC在有限域FN上计算t1=H1(ID‖hid,N)+ks,计算t2=ks·t1-1,计算d=[t2]P2,即用户ID的私钥为d。

2) SM9签名算法。设待签名的消息为比特串M,为了获取消息M的数字签名(h,s),签名者应实现以下运算步骤:

(1) 计算群GT中的元素g=e(P1,Ppub);

(2) 产生随机数r∈[1,N-1];

(3) 计算群GT中的元素w=gr,将w的数据类型转换为比特串;

(4) 计算整数h=H2(M‖w,N);

(5) 计算整数l=(r-h)modN,若l=0则返回(2);

(6) 计算群GT中的元素s=[l]d;

(7) 将h和s的数据类型转换为字节串,消息的签名为(h,s)。

3) SM9解密算法。设密文为C=C1‖C2‖C3,mlen为密文C的位长,K1_len为对称密码算法中K1的比特长度,K2_len为函数MAC(K2,Z)中密钥K2的比特长度。为了对C进行解密,解密者应实现以下运算步骤:

(1) 将C1的数据类型转换为椭圆曲线上的点,验证C1∈G1是否成立,若不成立则报错并退出;

(2) 计算群GT中的元素w′=e(C1,dB),将w′的数据类型转换为比特串;

(6) 输出明文M′。

2 SM2算法门限方案

SM2算法的门限方案包括SM2门限签名和门限解密。

2.1 SM2门限签名

2) 门限签名。设待签名的消息为M,门限签名的过程如下:

(1) 客户端对待签名消息M进行签名预处理,得到消息摘要e,产生随机数k1∈[1,n-1],计算w1=[k1]G;

(2) 客户端把e、w1发送给服务端;

(3) 服务端密码机产生随机数k2∈[1,n-1],计算w2=[k2]G;

(4) 服务端密码机产生随机数k3∈[1,n-1],计算(a1,b1)=[k3]w1+w2,计算r′=a1+emodn;

(5) 服务端判断若r′不等于0,则计算s2=d2·k3,计算s22=d2·(r′+k2);

(6) 服务端将r′、s2和s22发送给客户端;

(7) 客户端计算s′=((d1·k1)·s2+d1·s22-r′)modn;

(8) 若s′不等于0且不等于n-r′,客户端将(r′,s′)作为完整的签名结果输出。

2.2 SM2门限解密

1) 密钥生成。客户端和服务端密码机分别生成随机数d1和d2,且有d1,d2∈[1,n-1],客户端计算P1=[d1]G,将P1发送给服务端。服务端密码机接收服务端传送的P1,并计算计算P=P1+[d2]G,将P作为公钥公开。

2) 门限解密。设待签名的消息为M,门限解密的过程如下(这里只对1.2节中SM2算法解密过程的步骤(1)-步骤(2)进行扩展,其他步骤未用到门限解密的操作):

(1) 客户端计算v1=[d1]C1;

(2) 服务端密码机计算v2=[d2]C1,并将v2的值发送给客户端;

3 SM9算法门限方案

SM9算法的门限方案包括SM9算法的门限签名和门限解密。

3.1 SM9门限签名

1) 密钥生成。服务端密钥生成中心KGC(本文方案中KGC指服务端密码机)生成随机数a,计算私钥分量d1=[a·t2]P1并发送给客户端,计算私钥分量d2=a-1modN并直接存储在密码机内作为服务端私钥分量,销毁d1。

2) 门限签名。设待签名的消息为M,门限签名的过程如下:

(1) 服务端密码机计算群GT中的元素g=e(P1,Ppub);

(2) 密码机产生随机数r∈[1,N-1];

(3) 密码机计算群GT中的元素w=gr;

(4) 密码机计算整数h′=H2(M‖w,N);

(5) 密码机计算整数L=(r-h′)modN,若L=0则返回(2);

(6) 密码机计算群GT中的元素s2=[L]d2,并通过服务端将h′和s2发送给客户端;

(7) 客户端计算s=d1·s2;

(8) 客户端得到消息的签名为(h′,s′)。

3.2 SM9门限解密

1) 密钥生成。服务端密钥生成中心KGC根据用户的标识ID、主私钥产生用户的私钥d,密码机随机生成d1∈[1,d-1],计算d2=d-d1,密码机通过服务端将d1发送给客户端作为客户端私钥分量,同时密码机直接保存d2作为服务端的私钥分量,然后销毁d1。

2) 门限解密。为了对密文C进行解密,客户端和服务端需实现以下运算步骤(这里只对1.3节中SM9算法解密过程的步骤(1)-步骤(2)进行扩展,其他步骤未用到门限解密的操作):

(1) 客户端将C1的数据类型转换为椭圆曲线上的点,验证C1∈G1是否成立,若不成立则报错并退出;

4 方案安全性分析及应用

4.1 私钥安全性分析

本文方案中一份私钥分量存储在客户端,一份私钥分量存储在服务端密码机中。存储在客户端的私钥分量由于采用软件的存储方式,存在被攻击者窃取的可能。由于密码机的特性,密码机中的服务端私钥分量被攻击者窃取的可能性趋近于零,这样即使客户端的私钥分量被窃取,攻击者也无法获得完整的私钥,私钥的安全性有保障。

4.2 抗随机数攻击

随机数的生成和使用对SM2/SM9的签名算法和解密算法的安全性起着关键性的作用,比如在标准SM2签名算法中,在已知随机数k和签名(r,s)的情况下,则可通过如下操作推导(破解)私钥d:

由s=((1+d)-1·(k-r·d))modn,得(1+d)·s=(k-r·d)modn,进而(k+s)·d=(k-s)modn,因此d=(k+s)-1·(k-s)modn,私钥d被破解。

本文方案中客户端和服务端分别产生随机数k1、k2、k3,即便攻击者在已知k1和签名(r,s)的情况下(k2和k3由密码机产生,攻击者不可能破解),攻击者也不能推导出(破解)私钥d。

4.3 方案的应用

本文方案中公钥密码算法的私钥分割成两份后,分别存储在智能终端客户端和服务端密码机中,由于密码机的特性,服务端的私钥分量不可能被破解,攻击者不能获得完整的私钥,保证了私钥的安全性。通过本方案开发的产品可以将软件密码模块的形态应用于智能终端,用于各种应用场景的身份认证、数字签名、数据加解密等。

结合实际的应用场景,为了保证客户端私钥分量和门限签名或门限解密过程的安全,采用下列方式对其进行安全加固:

(1) 客户端私钥分量采用PIN码、手势验证码等保护;

(2) 客户端私钥分量可以和智能终端硬件信息、ID等绑定;

(3) 服务端存储客户端私钥分量的Hash值,在签名或解密请求前,客户端需先向服务端提交私钥分量Hash值一致性验证,服务端对比客户端私钥分量的Hash值,待Hash值一致后再执行签名操作,这样可以防止客户端的私钥分量被破坏仿冒;

(4) 门限签名或门限解密的请求由服务端发起,防止客户端攻击。

在本文方案中,服务端私钥分量存储在服务端密码机中,在实际应用场景中服务端密码机可能需要存储大量用户的服务端私钥分量,由于密码机的存储空间有限,在本方案的基础上,可以进一步将密码机中的服务端私钥分量固定,解决密码机存储限制和用户海量私钥分量的存储。

5 结 语

公钥密码算法是现代密码学的重要组成部分,SM2算法和SM9算法是我国自主知识产权的公钥密码算法。本文在门限密码学的基础上,以密码机为辅助设备,提出了一种国产公钥密码算法的门限签名及解密方案。该方案中,密码算法私钥的安全系数更高,更贴合实际的应用场景。依据该方案开发的密码模块可以软件的形态在移动终端、物联网智能终端中得到广泛的应用,用于解决网络安全中的身份认证、数字签名、数据传输安全、隐私保护等问题。

猜你喜欢

私钥服务端公钥
比特币的安全性到底有多高
Spatially defined single-cell transcriptional profiling characterizes diverse chondrocyte subtypes and nucleus pulposus progenitors in human intervertebral discs
程序员把7500枚比特币扔掉损失巨大
神奇的公钥密码
多人联机对战游戏的设计与实现
基于三层结构下机房管理系统的实现分析
基于三层结构下机房管理系统的实现分析
国密SM2密码算法的C语言实现
基于身份的聚合签名体制研究
一种公开密钥RSA算法的实现