SM9数字签名生成方法、装置、计算机设备和存储介质与流程

专利2022-06-29  134


本申请涉及信息安全技术领域,特别是涉及一种sm9数字签名生成方法、装置、计算机设备和存储介质。



背景技术:

数字签名技术是非对称密码技术和数字摘要技术的结合应用,发送方即签名方,对音视频文件、邮件、公函、合同以及网络数据包等待签名的数据信息进行数字签名,生成数字签名后,将已签名的数据信息连同数字签名一起发送至接收方。

sm9标识密码算法是一种基于椭圆曲线对(双线性对)的标识密码体制,是我国商用密码行业公钥密码算法的一种标准算法,包括数字签名算法等。在当前的sm9数字签名生成方法中,用户终端向密钥生成中心(kgc,keygenerationcenter)提供用户的公钥,用户的公钥由用户标识唯一确定,密钥生成中心kgc响应用户终端,下发用户的私钥至用户终端,用户终端利用用户的私钥对待需签名的数据信息进行签名。但是,由于现有的sm9数字签名生成方法需要直接使用用户的私钥,在某些不安全的应用场景中,用户的私钥可能被暴露或者窃取,因此存在安全性低的问题。



技术实现要素:

基于此,有必要针对上述技术问题,提供一种能够提高数字签名的安全性的sm9数字签名生成方法、装置、计算机设备和存储介质。

一种sm9数字签名生成方法,所述方法包括:

当触发数字签名获取时,向密钥生成中心发送用户标识和签名口令以申请签名身份凭据;所述密钥生成中心根据所述用户标识和所述签名口令计算所述签名身份凭据;

接收所述密钥生成中心返回的所述签名身份凭据;

获取乘法循环群的第一元素;

确定数字签名的第一部分;

根据所述签名身份凭据和所述签名口令得到数字签名的第二部分;

根据所述数字签名的第一部分和所述数字签名的第二部分,输出数字签名。

在其中一个实施例中,所述获取乘法循环群的第一元素之前,还包括:预先根据第一加法循环群的生成元和签名主公钥,基于双线性对运算,得到乘法循环群的第一元素;存储所述乘法循环群的第一元素。

在其中一个实施例中,所述当触发数字签名获取时,向密钥生成中心发送用户标识和签名口令以申请签名身份凭据,包括:所述当触发数字签名获取时,随机生成签名口令;将所述签名口令的数据类型由整数类型转换为字节串类型;将用户标识和转换后的签名口令发送至密钥生成中心,密钥生成中心根据所述用户标识和转换后的签名口令确定签名身份凭据;所述签名口令的取值范围为小于乘法循环群的阶数的正整数。

在其中一个实施例中,所述密钥生成中心根据所述用户标识和所述签名口令计算所述签名身份凭据,包括:基于第一密码杂凑函数,根据所述用户标识、私钥生成函数识别符和所述乘法循环群的阶数,得到第一临时变量;根据所述第一临时变量和签名主私钥,得到第二临时变量;根据所述第二临时变量、所述签名口令以及第一加法循环群的生成元,得到签名身份凭据。

在其中一个实施例中,所述确定数字签名的第一部分,包括:根据乘法循环群的阶数产生随机数;根据所述乘法循环群的第一元素、所述随机数得到乘法循环群的第二元素;基于第二密码杂凑函数,根据待签名的消息串、所述乘法循环群的第二元素和所述乘法循环群的阶数,得到所述数字签名的第一部分。

在其中一个实施例中,所述根据所述签名身份凭据和所述签名口令得到数字签名的第二部分,包括:计算中间变量;当所述中间变量为0时,跳转至根据乘法循环群的阶数产生随机数的步骤;当所述中间变量不为0时,根据所述中间变量、所述签名身份凭据、所述签名口令以及第一加法循环群的生成元,计算得到数字签名的第二部分。

在其中一个实施例中,所述乘法循环群的第一元素,在向密钥生成中心发送用户标识和签名口令以申请签名身份凭据的之前或者之后任一时刻得到。

一种sm9数字签名生成装置,所述装置包括:

申请签名模块,当触发数字签名获取时,向密钥生成中心发送用户标识和签名口令以申请签名身份凭据;所述密钥生成中心根据所述用户标识和所述签名口令计算所述签名身份凭据;接收所述密钥生成中心返回的所述签名身份凭据;

获取元素模块,用于获取乘法循环群的第一元素;

确定签名模块,用于确定数字签名的第一部分;根据所述签名身份凭据和所述签名口令得到数字签名的第二部分;

输出签名模块,用于根据所述数字签名的第一部分和数字签名的第二部分,输出数字签名。

一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:

当触发数字签名获取时,向密钥生成中心发送用户标识和签名口令以申请签名身份凭据;所述密钥生成中心根据所述用户标识和所述签名口令计算所述签名身份凭据;

接收所述密钥生成中心返回的所述签名身份凭据;

获取乘法循环群的第一元素;

确定数字签名的第一部分;

根据所述签名身份凭据和所述签名口令得到数字签名的第二部分;

根据所述数字签名的第一部分和所述数字签名的第二部分,输出数字签名。

一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:

当触发数字签名获取时,向密钥生成中心发送用户标识和签名口令以申请签名身份凭据;所述密钥生成中心根据所述用户标识和所述签名口令计算所述签名身份凭据;

接收所述密钥生成中心返回的所述签名身份凭据;

获取乘法循环群的第一元素;

确定数字签名的第一部分;

根据所述签名身份凭据和所述签名口令得到数字签名的第二部分;

根据所述数字签名的第一部分和所述数字签名的第二部分,输出数字签名。

上述sm9数字签名生成方法、装置、计算机设备和存储介质,通过向密钥生成中心发送用户标识和签名口令以申请签名身份凭据,接收密钥生成中心返回的签名身份凭据,根据接收到的签名身份凭据和签名口令得到数字签名。因此,密钥生成中心不再是下发用户私钥,而是下发根据签名口令得到的签名身份凭据,由用户终端根据签名身份凭据和配对的该签名口令执行签名,一方面,避免了用户私钥在网络上的传输,避免在传输过程中暴露或者窃取的风险,另一方面,签名身份凭据和签名口令配对使用,二者缺少一个都无法生成数字签名,提高了数字签名的安全性。

附图说明

图1为一个实施例中sm9数字签名生成方法的应用场景图;

图2为一个实施例中sm9数字签名生成方法的流程示意图;

图3为一个实施例中密钥生成中心根据用户标识和签名口令计算签名身份凭据的步骤的流程示意图;

图4为一个实施例中预计算乘法循环群的第一元素的步骤的流程示意图;

图5为一个实施例中确定数字签名的第一部分的步骤的流程示意图;

图6为一个实施例中根据签名身份凭据和签名口令得到数字签名的第二部分的步骤的流程示意图;

图7为一个实施例中sm9数字签名生成装置的结构框图;

图8为一个实施例中计算机设备的内部结构图。

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

如图1所示,在一个实施例中,提供了一种sm9数字签名系统,包括终端110和密钥生成中心kgc120,终端110通过网络与密钥生成中心kgc120进行通信。其中,终端110具有接入互联网的功能以及对消息进行签名的功能,可以是个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备等。密钥生成中心kgc负责选择系统参数,是生成主密钥的可信机构,利用用户公钥和签名口令给用户颁发签名身份凭据。终端110可用于执行一种sm9数字签名生成方法。

在一个实施例中,如图2所示,提供了一种sm9数字签名生成方法,以该方法应用于图1中的终端为例进行说明,包括以下步骤s202至步骤s212:

步骤s202,当触发数字签名获取时,向密钥生成中心发送用户标识和签名口令以申请签名身份凭据;密钥生成中心根据用户标识和签名口令计算签名身份凭据。

其中,用户标识(identity,id),可唯一确定一个实体身份的信息,如签名方a的用户标识为ida,由实体无法否认的信息组成,可以是任意长度的字符,如实体的可识别名称、电子邮箱、身份证号、电话号码、街道地址等。签名口令x为签名方a的签名身份凭据(ta)的配对使用的签名口令,可以由用户所对应的终端随机生成。签名身份凭据ta与签名口令x配对使用,是椭圆曲线e在有限域fq上的点,由密钥生成中心kgc根据用户标识ida和对应的签名口令x计算生成。

具体地,当用户需要对待发送的数据信息进行签名时,此用户为签名方a,签名方a所对应的终端向密钥生成中心kgc发送用户标识ida、签名方a所对应的终端随机生成的签名口令,向密钥生成中心kgc申请签名方a的签名身份凭据ta。

在一个实施例中,如图3所示,密钥生成中心根据用户标识和签名口令计算签名身份凭据,包括以下步骤s302至步骤s306:

步骤s302,基于第一密码杂凑函数,根据用户标识、私钥生成函数识别符和乘法循环群的阶数,得到第一临时变量。

其中,第一密码杂凑函数为密码函数h1,密码函数h1(z,n)的输入为比特串z和整数n,此处的比特串z为签名方a的用户标识ida和私钥生成函数识别符hid的拼接比特串,整数n为乘法循环群的阶数n,输出为一个整数h1,输出的整数h1的范围是[1,n-1]。私钥生成函数识别符hid,为一个字节表示的签名私钥生成函数识别符,由密钥生成中心kgc选择并公开。

第一临时变量为t1,t1的计算公式如下:

t1=h1(ida‖hid,n) smodn

式中,ida为签名方a的用户标识,hid为私钥生成函数识别符,将ida和hid进行拼接,n为乘法循环群gt的阶数,s为签名主私钥,长度为l,如256比特,一般由密钥生成中心kgc通过随机数发生器产生,签名主私钥s的取值范围属于[1,n-1],mod为取模运算,即对计算出的第一临时变量t1模n运算,取模运算后的第一临时变量t1的值不大于阶数n。例如,23mod7=2。

具体地,密钥生成中心kgc根据用户所对应的终端输入的签名方a的用户标识ida和私钥生成函数识别符hid的拼接比特串或字符串,以及乘法循环群gt的阶数n,基于第一密码杂凑函数,输出整数h1,将整数h1和签名主私钥s的和取模,得到第一临时变量t1。

步骤s304,根据第一临时变量和签名主私钥,得到第二临时变量。

其中,第二临时变量为t2。计算公式如下:

具体地,密钥生成中心kgc根据第一临时变量t1的负1次方和签名主私钥s的乘积,取模n,得到第二临时变量t2的值不大于阶数n。

步骤s306,根据第二临时变量、签名口令以及第一加法循环群的生成元,得到签名身份凭据。

其中,第一加法循环群g1的生成元为p1。计算公式如下:

ta=[t2-x]p1

具体地,密钥生成中心kgc计算第一加法循环群g1的生成元p1的(t2-x)倍的结果,将计算后得到的结果作为签名方a的签名身份凭据。

本实施例中,通过签名方的用户标识和配对使用的签名口令获取签名方的签名身份凭据,即计算签名的令牌,替代用户私钥,有效防止用户私钥被窃取或者暴露的情形的发生。

在步骤s202之后还包括步骤s204,接收所述密钥生成中心返回的所述签名身份凭据。

在密钥生成中心kgc计算出签名方a的签名身份凭据ta时,签名方a所对应的终端接收到密钥生成中心kgc返回的签名身份凭据ta,利用该签名身份凭据ta和对应的签名口令x配对使用执行签名。

步骤s206,获取乘法循环群的第一元素。

乘法循环群(gt)是阶为素数n的乘法循环群,乘法循环群gt的第一元素指的是元素g,元素g通过定义在有限域上的椭圆曲线的第一加法循环群g1、第二加法循环群g2到乘法循环群gt的双线性对e(从g1×g2到gt的双线性对)计算求得。其中,第一加法循环群g1、第二加法循环群g2和乘法循环群gt的阶均为素数n,双线性对定义在椭圆曲线群上,主要有weil对、tate对、ate对、r-ate对等。

在一个实施例中,为了提高计算效率,可以在向密钥生成中心发送用户标识和签名口令以申请签名身份凭据的之前或者之后任一时刻预计算乘法循环群的第一元素并存储,当需要进行数字签名时,可直接获取预计算所得到的乘法循环群的第一元素,达到一个节约时间的效果。

在一个实施例中,如图4所示,预计算乘法循环群的第一元素的步骤,包括以下步骤s402至步骤s404:

步骤s402,预先根据第一加法循环群的生成元和签名主公钥,基于双线性对运算,得到乘法循环群的第一元素。

签名主公钥ppub由签名主私钥s结合系统参数p2产生,即ppub=[s]p2,p2为第二加法循环群的生成元,即签名主公钥ppub为第二加法循环群的生成元p2的s倍。乘法循环群的第一元素g的计算公式如下:

g=e(p1,ppub)

具体地,签名方a所对应的终端预先根据第一加法循环群的生成元p1和签名主公钥ppub,进行从第一加法循环群g1、第二加法循环群g2到乘法循环群gt的双线性对e(从g1×g2到gt的双线性对)计算,此过程为预计算过程,得到乘法循环群的第一元素g,双线性对e是g1×g2到gt的映射,满足双线性性、非退化性和可计算性。

步骤s404,存储乘法循环群的第一元素。

在签名方a所对应的终端通过预计算得出乘法循环群的第一元素g之后,存储乘法循环群的第一元素g的值,供签名方a所对应的终端后续执行签名时使用。

本实施例中,通过预计算过程事先计算g元素,提升了算法的计算效率,去掉了执行签名过程中耗时的双线性配对运算,不需要每次执行签名时都计算g元素,加快了执行签名的速度。

在步骤s206之后还包括步骤s208,确定数字签名的第一部分。

在一个实施例中,如图5所示,确定数字签名的第一部分,包括以下步骤s502至步骤s506:

步骤s502,根据乘法循环群的阶数产生随机数。

具体地,签名方a所对应的终端根据乘法循环群的阶数n产生随机数r,其中,随机数r的取值范围属于[1,n-1],即随机数r的取值为小于n的正整数。

步骤s504,根据乘法循环群的第一元素、随机数得到乘法循环群的第二元素。

其中,乘法循环群的第二元素为w元素,长度为12×256比特,w元素的计算公式如下:

w=gr

具体地,签名方a所对应的终端根据乘法循环群的第一元素g、随机数r,进行幂运算,得到乘法循环群的第二元素w。其中,将第二元素w的数据类型从域元素类型转换为字节串类型,再将字节串类型转换为比特串类型,以便后续进行计算数字签名的第一部分的步骤。

步骤s506,基于第二密码杂凑函数,根据待签名的消息串、乘法循环群的第二元素和乘法循环群的阶数,得到数字签名的第一部分。

其中,第二密码杂凑函数为密码函数h2,待签名的消息串为比特串m,得到数字签名的第一部分h的公式为:

h=h2(m‖w,n)

具体地,签名方a所对应的终端根据第二密码杂凑函数h2,密码函数h2(z,n)的输入为比特串z和整数n,此处的比特串z为待签名的消息串m和乘法循环群的第二元素w的拼接比特串,整数n为乘法循环群的阶数n,输出为一个整数h,输出的整数h的范围是[1,n-1],该整数h即数字签名的第一部分。

在步骤s208之后还包括步骤s210,根据签名身份凭据和签名口令得到数字签名的第二部分。

在一个实施例中,如图6所示,根据签名身份凭据和签名口令得到数字签名的第二部分,包括以下步骤s602至s604:

步骤s602,计算中间变量;当中间变量为0时,跳转至根据乘法循环群的阶数产生随机数的步骤,即重新计算数字签名的第一部分。

中间变量为l,l的计算公式为:

l=(r-h)modn

具体地,签名方a所对应的终端将随机数r与数字签名的第一部分h的差值取模n,得到的结果即中间变量l。当中间变量l为0时,则出现异常,出于安全性和健壮性考虑,跳转至根据乘法循环群的阶数产生随机数的步骤,即重新执行签名,获得数字签名的第一部分h。

步骤s604,当中间变量不为0时,根据中间变量、签名身份凭据、签名口令以及第一加法循环群的生成元,计算得到数字签名的第二部分。

数字签名的第二部分为s,s的计算公式如下:

s=[l](ta xp1)

具体地,签名方a所对应的终端将第一加法循环群的生成元p1与签名口令x相乘,将第一次点乘得到的结果与签名方a的签名身份凭据ta相加,将相加后的结果与中间变量l相乘,第二次点乘得到的结果即为数字签名的第二部分s。

本实施例中,通过采用签名身份凭据ta加输入签名口令x的方式临时计算回复用户私钥,避免直接使用用户私钥进行签名,增加了计算过程中用户私钥的安全性。

步骤s210之后,还包括步骤s212,根据数字签名的第一部分和数字签名的第二部分,输出数字签名。

具体地,签名方a所对应的终端将数字签名的第一部分h的数据类型由整数类型转换成字节串类型,将数字签名的第二部分s的数据类型由椭圆曲线点类型转换成字节串类型,输出数字签名(h,s)。其中,数字签名的第一部分h为32个字节的字节串,数字签名的第二部分s也是32个字节的字节串,数字签名(h,s)是64个字节的字节串。

上述sm9数字签名生成方法,通过向密钥生成中心发送用户标识和签名口令以申请签名身份凭据,接收密钥生成中心返回的签名身份凭据,根据接收到的签名身份凭据和签名口令得到数字签名。因此,密钥生成中心不再是下发用户私钥,而是下发根据签名口令得到的签名身份凭据,由用户终端根据签名身份凭据和配对的该签名口令执行签名,一方面,避免了用户私钥在网络上的传输,避免在传输过程中暴露或者窃取的风险,另一方面,签名身份凭据和签名口令配对使用,二者缺少一个都无法生成数字签名,提高了数字签名的安全性。

在一个实施例中,当触发数字签名获取时,向密钥生成中心发送用户标识和签名口令以申请签名身份凭据,包括:当触发数字签名获取时,随机生成签名口令;将签名口令的数据类型由整数类型转换为字节串类型;将用户标识和转换后的签名口令发送至密钥生成中心,密钥生成中心根据用户标识和转换后的签名口令确定签名身份凭据;签名口令的取值范围为小于乘法循环群的阶数的正整数。

具体地,签名方a所对应的终端随机生成一个大整数,即签名口令x,为了便于数据在网络上传输,签名方a所对应的终端将随机生成的整数类型的签名口令x转换成字节串类型的签名口令x,此时的签名口令x为计算机可识别的字节串,将签名方a的用户标识ida和转换后的签名口令x发送至密钥生成中心kgc,密钥生成中心kgc根据签名方a的用户标识ida和转换后的签名口令x确定签名身份凭据。更具体地,密钥生成中心kgc在接收到转换后的签名口令x后,将接收到的转换后的签名口令x的数据类型再次转换成整数类型,计算签名身份凭据。其中,整数类型的签名口令x的数值范围是[1,n-1],若超出了这个范围,则报错,n为乘法循环群的阶数。

本实施例中,通过将签名口令的数据类型进行转换,便于数据在网络上的传输和后续签名身份凭据的计算,超出则报错,可以避免超出椭圆曲线点的范围而失效。

在一个实施例中,乘法循环群的第一元素,在向密钥生成中心发送用户标识和签名口令以申请签名身份凭据的之前或者之后任一时刻得到。

具体地,第一元素g与用户私钥获取与否无关,所以可在执行签名前的任意时刻获取,即事先计算第一元素g的过程,也就是预计算,可以在签名者a获取签名身份凭据之前进行,也可以在获取签名身份凭据之后进行,预计算的结果第一元素g存储供后续签名时使用,只需要计算一次,在实际签名时不再需要临时计算第一元素g的值,直接读取事先计算并存储的第一元素g的值。

本实施例中,由于参与乘法循环群的第一元素g的运算的两个参数都是固定的,因此采取事先计算第一元素g并存储的方式,在实际执行签名时不再需要临时计算第一元素g,提高了生成数字签名的效率。

应该理解的是,虽然图2-6的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2-6中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。

在一个实施例中,如图7所示,提供了一种sm9数字签名生成装置,包括:申请签名模块702、获取元素模块704、确定签名模块706以及输出签名模块708,其中:

申请签名模块702,用于当触发数字签名获取时,向密钥生成中心发送用户标识和签名口令以申请签名身份凭据;密钥生成中心根据用户标识和签名口令计算签名身份凭据;接收密钥生成中心返回的签名身份凭据。

获取元素模块704,用于获取乘法循环群的第一元素。

确定签名模块706,用于确定数字签名的第一部分;根据签名身份凭据和签名口令得到数字签名的第二部分。

输出签名模块708,用于根据数字签名的第一部分和数字签名的第二部分,输出数字签名。

在一个实施例中,获取元素模块704还包括:预先根据第一加法循环群的生成元和签名主公钥,基于双线性对运算,得到乘法循环群的第一元素;存储乘法循环群的第一元素。

在一个实施例中,申请签名模块702还包括:当触发数字签名获取时,随机生成签名口令;将所述签名口令的数据类型由整数类型转换为字节串类型;将用户标识和转换后的签名口令发送至密钥生成中心,密钥生成中心根据用户标识和转换后的签名口令确定签名身份凭据;签名口令的取值范围为小于乘法循环群的阶数的正整数。

在一个实施例中,申请签名模块702还包括:基于第一密码杂凑函数,根据用户标识、私钥生成函数识别符和乘法循环群的阶数,得到第一临时变量;根据第一临时变量和签名主私钥,得到第二临时变量;根据第二临时变量、签名口令以及第一加法循环群的生成元,得到签名身份凭据。

在一个实施例中,确定签名模块706包括:根据乘法循环群的阶数产生随机数;根据乘法循环群的第一元素、随机数得到乘法循环群的第二元素;基于第二密码杂凑函数,根据待签名的消息串、乘法循环群的第二元素和乘法循环群的阶数,得到数字签名的第一部分。

在一个实施例中,确定签名模块706包括:计算中间变量;当中间变量为0时,跳转至根据乘法循环群的阶数产生随机数的步骤;当中间变量不为0时,根据中间变量、签名身份凭据、签名口令以及第一加法循环群的生成元,计算得到数字签名的第二部分。

在一个实施例中,获取元素模块704还包括:乘法循环群的第一元素,在向密钥生成中心发送用户标识和签名口令以申请签名身份凭据的之前或者之后任一时刻得到。

关于sm9数字签名生成装置的具体限定可以参见上文中对于sm9数字签名生成方法的限定,在此不再赘述。上述sm9数字签名生成装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图8所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种sm9数字签名生成方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。

本领域技术人员可以理解,图8中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:

当触发数字签名获取时,向密钥生成中心发送用户标识和签名口令以申请签名身份凭据;密钥生成中心根据用户标识和签名口令计算签名身份凭据;

接收密钥生成中心返回的签名身份凭据;

获取乘法循环群的第一元素;

确定数字签名的第一部分;

根据签名身份凭据和签名口令得到数字签名的第二部分;

根据数字签名的第一部分和数字签名的第二部分,输出数字签名。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:获取乘法循环群的第一元素之前,还包括:预先根据第一加法循环群的生成元和签名主公钥,基于双线性对运算,得到乘法循环群的第一元素;存储乘法循环群的第一元素。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:当触发数字签名获取时,向密钥生成中心发送用户标识和签名口令以申请签名身份凭据,包括:当触发数字签名获取时,随机生成签名口令;将签名口令的数据类型由整数类型转换为字节串类型;将用户标识和转换后的签名口令发送至密钥生成中心,密钥生成中心根据用户标识和转换后的签名口令确定签名身份凭据;签名口令的取值范围为小于乘法循环群的阶数的正整数。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:密钥生成中心根据用户标识和签名口令计算签名身份凭据,包括:基于第一密码杂凑函数,根据用户标识、私钥生成函数识别符和乘法循环群的阶数,得到第一临时变量;根据第一临时变量和签名主私钥,得到第二临时变量;根据第二临时变量、签名口令以及第一加法循环群的生成元,得到签名身份凭据。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:确定数字签名的第一部分,包括:根据乘法循环群的阶数产生随机数;根据乘法循环群的第一元素、随机数得到乘法循环群的第二元素;基于第二密码杂凑函数,根据待签名的消息串、乘法循环群的第二元素和乘法循环群的阶数,得到数字签名的第一部分。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:根据签名身份凭据和签名口令得到数字签名的第二部分,包括:计算中间变量;当中间变量为0时,跳转至根据乘法循环群的阶数产生随机数的步骤;当中间变量不为0时,根据中间变量、签名身份凭据、签名口令以及第一加法循环群的生成元,计算得到数字签名的第二部分。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:乘法循环群的第一元素,在向密钥生成中心发送用户标识和签名口令以申请签名身份凭据的之前或者之后任一时刻得到。

在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:

当触发数字签名获取时,向密钥生成中心发送用户标识和签名口令以申请签名身份凭据;密钥生成中心根据用户标识和签名口令计算签名身份凭据;

接收密钥生成中心返回的签名身份凭据;

获取乘法循环群的第一元素;

确定数字签名的第一部分;

根据签名身份凭据和签名口令得到数字签名的第二部分;

根据数字签名的第一部分和数字签名的第二部分,输出数字签名。

在一个实施例中,计算机程序被处理器执行时还实现以下步骤:获取乘法循环群的第一元素之前,还包括:预先根据第一加法循环群的生成元和签名主公钥,基于双线性对运算,得到乘法循环群的第一元素;存储乘法循环群的第一元素。

在一个实施例中,计算机程序被处理器执行时还实现以下步骤:当触发数字签名获取时,向密钥生成中心发送用户标识和签名口令以申请签名身份凭据,包括:当触发数字签名获取时,随机生成签名口令;将签名口令的数据类型由整数类型转换为字节串类型;将用户标识和转换后的签名口令发送至密钥生成中心,密钥生成中心根据用户标识和转换后的签名口令确定签名身份凭据;签名口令的取值范围为小于乘法循环群的阶数的正整数。

在一个实施例中,计算机程序被处理器执行时还实现以下步骤:密钥生成中心根据用户标识和签名口令计算签名身份凭据,还包括:基于第一密码杂凑函数,根据用户标识、私钥生成函数识别符和乘法循环群的阶数,得到第一临时变量;根据第一临时变量和签名主私钥,得到第二临时变量;根据第二临时变量、签名口令以及第一加法循环群的生成元,得到签名身份凭据。

在一个实施例中,计算机程序被处理器执行时还实现以下步骤:确定数字签名的第一部分,包括:根据乘法循环群的阶数产生随机数;根据乘法循环群的第一元素、随机数得到乘法循环群的第二元素;基于第二密码杂凑函数,根据待签名的消息串、乘法循环群的第二元素和乘法循环群的阶数,得到数字签名的第一部分。

在一个实施例中,计算机程序被处理器执行时还实现以下步骤:根据签名身份凭据和签名口令得到数字签名的第二部分,包括:计算中间变量;当中间变量为0时,跳转至根据乘法循环群的阶数产生随机数的步骤;当中间变量不为0时,根据中间变量、签名身份凭据、签名口令以及第一加法循环群的生成元,计算得到数字签名的第二部分。

在一个实施例中,计算机程序被处理器执行时还实现以下步骤:乘法循环群的第一元素,在向密钥生成中心发送用户标识和签名口令以申请签名身份凭据的之前或者之后任一时刻得到。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。

以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。


技术特征:

1.一种sm9数字签名生成方法,所述方法包括:

当触发数字签名获取时,向密钥生成中心发送用户标识和签名口令以申请签名身份凭据;所述密钥生成中心根据所述用户标识和所述签名口令计算所述签名身份凭据;

接收所述密钥生成中心返回的所述签名身份凭据;

获取乘法循环群的第一元素;

确定数字签名的第一部分;

根据所述签名身份凭据和所述签名口令得到数字签名的第二部分;

根据所述数字签名的第一部分和所述数字签名的第二部分,输出数字签名。

2.根据权利要求1所述的方法,其特征在于,所述获取乘法循环群的第一元素之前,还包括:

预先根据第一加法循环群的生成元和签名主公钥,基于双线性对运算,得到乘法循环群的第一元素;

存储所述乘法循环群的第一元素。

3.根据权利要求1所述的方法,其特征在于,所述当触发数字签名获取时,向密钥生成中心发送用户标识和签名口令以申请签名身份凭据,包括:

当触发数字签名获取时,随机生成签名口令;

将所述签名口令的数据类型由整数类型转换为字节串类型;

将用户标识和转换后的签名口令发送至密钥生成中心,密钥生成中心根据所述用户标识和转换后的签名口令确定签名身份凭据;所述签名口令的取值范围为小于乘法循环群的阶数的正整数。

4.根据权利要求1所述的方法,其特征在于,所述密钥生成中心根据所述用户标识和所述签名口令计算所述签名身份凭据,包括:

基于第一密码杂凑函数,根据所述用户标识、私钥生成函数识别符和所述乘法循环群的阶数,得到第一临时变量;

根据所述第一临时变量和签名主私钥,得到第二临时变量;

根据所述第二临时变量、所述签名口令以及第一加法循环群的生成元,得到签名身份凭据。

5.根据权利要求1所述的方法,其特征在于,所述确定数字签名的第一部分,包括:

根据乘法循环群的阶数产生随机数;

根据所述乘法循环群的第一元素、所述随机数得到乘法循环群的第二元素;

基于第二密码杂凑函数,根据待签名的消息串、所述乘法循环群的第二元素和所述乘法循环群的阶数,得到所述数字签名的第一部分。

6.根据权利要求5所述的方法,其特征在于,所述根据所述签名身份凭据和所述签名口令得到数字签名的第二部分,包括:

计算中间变量;当所述中间变量为0时,跳转至根据乘法循环群的阶数产生随机数的步骤;

当所述中间变量不为0时,根据所述中间变量、所述签名身份凭据、所述签名口令以及第一加法循环群的生成元,计算得到数字签名的第二部分。

7.根据权利要求2所述的方法,其特征在于,所述乘法循环群的第一元素,在向密钥生成中心发送用户标识和签名口令以申请签名身份凭据的之前或者之后任一时刻得到。

8.一种sm9数字签名生成装置,其特征在于,所述装置包括:

申请签名模块,当触发数字签名获取时,向密钥生成中心发送用户标识和签名口令以申请签名身份凭据;所述密钥生成中心根据所述用户标识和所述签名口令计算所述签名身份凭据;接收所述密钥生成中心返回的所述签名身份凭据;

获取元素模块,用于获取乘法循环群的第一元素;

确定签名模块,用于确定数字签名的第一部分;根据所述签名身份凭据和所述签名口令得到数字签名的第二部分;

输出签名模块,用于根据所述数字签名的第一部分和数字签名的第二部分,输出数字签名。

9.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述方法的步骤。

10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法的步骤。

技术总结
本申请涉及一种SM9数字签名生成方法、装置、计算机设备和存储介质。该方法包括:当触发数字签名获取时,向密钥生成中心发送用户标识和签名口令以申请签名身份凭据;密钥生成中心根据用户标识和签名口令计算签名身份凭据;接收密钥生成中心返回的签名身份凭据;获取乘法循环群的第一元素;确定数字签名的第一部分;根据签名身份凭据和签名口令得到数字签名的第二部分;根据数字签名的第一部分和数字签名的第二部分,输出数字签名。本申请的方案可以提高数字签名的安全性。

技术研发人员:罗影;李先强;周海涛;王鹏;竹贝芬;曾伟;罗建洪
受保护的技术使用者:江苏芯盛智能科技有限公司
技术研发日:2020.01.15
技术公布日:2020.06.09

转载请注明原文地址: https://bbs.8miu.com/read-20789.html

最新回复(0)