具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。
应理解,说明书通篇中提到的“本申请实施例”或“前述实施例”意味着与实施例有关的特定特征、结构或特性包括在本申请的至少一个实施例中。因此,在整个说明书各处出现的“本申请实施例中”或“在前述实施例中”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
在未做特殊说明的情况下,电子设备执行本申请实施例中的任一步骤,可以是电子设备的处理器执行该步骤。还值得注意的是,本申请实施例并不限定电子设备执行下述步骤的先后顺序。另外,不同实施例中对数据进行处理所采用的方式可以是相同的方法或不同的方法。还需说明的是,本申请实施例中的任一步骤是电子设备可以独立执行的,即电子设备执行下述实施例中的任一步骤时,可以不依赖于其它步骤的执行。
应当理解,此处所描述的具体实施例仅用以解释本申请,并不用于限定本申请。
本申请实施例提供一种签名生成方法,该方法可以由计算机设备的处理器执行。其中,计算机设备指的可以是服务器、笔记本电脑、平板电脑、台式计算机、智能电视、机顶盒、移动设备(例如移动电话、便携式视频播放器、个人数字助理、专用消息设备、便携式游戏设备)等具备数据处理能力的设备。参照图1所示,该方法包括如下步骤101至步骤104:
步骤101、基于数字签名验证需求和密钥生成算法,确定第一要素生成函数。
数字签名验证需求指的可以是数字签名要可被指定验证者唯一验证。
密钥生成算法用于生成验证者和签名者的私钥。在一种可行的实现方式中,密钥
生成算法指的可以是SM9算法中的密钥生成算法。例如,密钥生成算法的计算公式可以为:,其中,表示用户标识ID的密钥(私钥),表示系统公
开密钥,表示密码杂凑函数,表示大于等于1且小于等于N-1的整数
集合,为一个字节的识别符、该识别符用于表示密钥生成算法,表示加法循环群的
生成元。
第一要素生成函数用于生成具有唯一性的第一签名要素,以使对应的数字签名可被指定验证者唯一验证。第一数字签名指的可以是为第一指定验证者生成的数字签名。第一指定验证者指的可以是可唯一验证第一数字签名的验证者。
在一种可行的实现方式中,第一数字签名可以包括第一签名要素和第二签名要素。第一签名要素和第二签名要素可以用于对第一数字签名进行验证。例如,第一签名要素可以表示为C,第二签名要素可以表示为S。
在一些实施方式中,可以基于SM9算法中的密钥生成算法和数字签名验证需求确定第一要素生成函数中的各参数,以及各参数之间的函数关系,基于该各参数和该各参数之间的函数关系确定第一要素生成函数。
步骤102、采用所述第一要素生成函数对第一指定验证者的标识进行处理,得到第一签名要素。
第一指定验证者的标识用于唯一标识第一指定验证者;例如,第一指定验证者的
标识可以表示为。
在一些实施方式中,可以将第一指定验证者的标识输入至第一要素生成函数进行运算处理,得到第一签名要素。
步骤103、基于待签名明文、第一签名者的标识和所述第一指定验证者的标识,确定第二签名要素。
待签名明文指的可以是当前需要进行签名的数据;例如,待签名明文可以表示为
m。第一签名者的标识用于唯一标识第一签名者;例如,第一签名者的标识可以表示为。
在一些实施方式中,第二签名要素的生成方式与SM9算法中的S的生成方式类似,本申请实施例对此不作限定。
在一些实施方式中,第二签名要素的生成方式还可以为:确定第二要素生成函数;采用所述第二要素生成函数对所述待签名明文、所述第一签名者的标识和所述第一指定验证者的标识进行处理,得到所述第二签名要素。
在一种可行的实现方式中,可以将待签名明文、第一签名者的标识和所述第一指定验证者的标识输入至第二要素生成函数进行运算处理,得到第二签名要素。
步骤104、基于所述第一签名要素和所述第二签名要素,确定为所述第一指定验证者生成的第一数字签名。
在一些实施方式中,可以将第一签名要素和第二签名要素进行组合,得到为第一指定验证者生成的第一数字签名。
进一步地,在一些实施方式中,第一数字签名中还可以携带有签名类型。此时,可
以基于第一签名要素、第二签名要素、以及签名类型进行组合,得到第一数字签名。例如,第
一数字签名可以表示为。
其中,签名类型用于表征数字签名可由所有用户进行验证,还是仅由指定用户进
行验证。在一种可行的实现方式中,签名类型可以表示为;在为第一数值时,表示对
应的数字签名为SM9签名;在为第二数值时,表示对应的数字签名为指定验证者签名。例
如,第一数值可以为0x01,第二数值可以为0x02。
本申请实施例所提供的签名生成方法,根据数字签名验证需求和密钥生成算法可以确定出第一要素生成函数,根据第一要素生成函数对第一指定验证者的标识进行处理后可以生成唯一的第一签名要素,进而,基于第一签名要素和第二签名要素可生成唯一的第一数字签名、且第一数字签名仅由第一指定验证者进行验证,从而,第一数字签名具有唯一性、且具有较强的验证能力和可靠性,解决了相关技术中的无法由指定用户进行验证,存在验证能力差、可靠性低的问题。
基于前述实施例,本申请实施例提供一种签名生成方法,应用于计算机设备,参照图2所示,该方法包括如下步骤201至步骤208:
步骤201、响应目标用户触发的签名类型。
目标用户可以为当前需要数字签名的用户。
在一些实施方式中,目标用户可以通过预设选项,触发当前所需的签名类型。预设选项可以为预先设置于开始菜单栏中的选项,还可以为预先设置的物理按键。
步骤202、在所述触发的签名类型为普通类型的情况下,将所述目标用户作为普通用户,采用SM9算法生成所述普通用户的数字签名。
普通类型用于表示当前要生成SM9签名。
在一些实施方式中,采用SM9算法生成普通用户的数字签名的具体实现方式可以
为:基于待签名明文m、第一临时参数w、循环群的阶数N和密码杂凑函数,生成临时变量;基于临时变量、群中的随机数r和第
一签名者的私钥,生成签名要素;基于临时变量和签名要素确定普通用户的数字签
名。
在一种可行的实现方式中,生成临时变量的具体实现方式可以为:采用密码杂
凑函数对待签名明文m、第一临时参数w和循环群的阶数N进行处理,得到临时变量。
具体地,对待签名明文m、第一临时参数w和循环群的阶数N进行拼接处理,得到第
三拼接数据;采用密码杂凑函数对第三拼接数据进行哈希运算,得到临时变量。例如,
临时变量的计算公式可以表示为:。
在一种可行的实现方式中,生成签名要素的具体实现方式可以为:对群中的
随机数r和临时变量进行第一运算处理;对该第一运算后的数据和第一签名者的私钥进行第二运算处理,得到签名要素。
具体地,第一运算指的可以是减法运算,第二运算指的可以是标量乘运算;也即,
对群中的随机数r和临时变量进行减法运算,对该减法运算后的数据和第一签名者的
私钥进行标量乘运算,得到签名要素。例如,签名要素的计算公式可以为:。
在一种可行的实现方式中,确定普通用户的数字签名的具体实现方式可以为:将
临时变量和签名要素进行组合,得到普通用户的数字签名。
进一步地,对临时变量、签名要素和普通类型sid=0x01进行组合,得到普通用
户的数字签名。例如,普通用户的数字签名可以表示为。
步骤203、在所述触发的签名类型为指定类型的情况下,将所述目标用户作为第一指定验证者。
指定类型表示当前要生成指定验证者签名。此时签名类型sid=0x02。
步骤204、基于数字签名验证需求和密钥生成算法,确定第一要素生成函数。
步骤205、采用所述第一要素生成函数对第一指定验证者的标识进行处理,得到第一签名要素。
步骤206、确定第二要素生成函数。
步骤207、采用所述第二要素生成函数对所述待签名明文、所述第一签名者的标识和所述第一指定验证者的标识进行处理,得到所述第二签名要素。
步骤208、基于所述第一签名要素和所述第二签名要素,确定为所述第一指定验证者生成的第一数字签名。
这里,上述步骤204至步骤208分别对应于前述步骤101至步骤104,在实施时可以参照前述步骤101至步骤104的具体实施方式。
在一些实施例中,上述步骤204可以通过如下步骤2041至步骤2043来实现:
步骤2041、基于所述数字签名验证需求,确定安全参数和最大用户数量。
在一些实施方式中,可以通过密钥生成中心选取安全参数和最大用户数量。其中,
安全参数可以表示为。
在一种可行的实现方式中,安全参数可以预先设置,也可以为密钥生成中心自动选取的。
步骤2042、基于所述安全参数和所述最大用户数量,确定系统公开参数和系统主密钥。
系统公开参数可以包括乘法循环群群中的元素g、加法循环群的生成元、
加法循环群的生成元、密码杂凑函数和、加法循环群的元素、密钥生成算法识别符hid。例如,
系统公开参数可以表示为:,系统主密钥可以表示为
msk=α。
在一些实施方式中,可以通过密钥生成中心,基于安全参数和最大用户数量生成系统公开参数和系统主密钥。
具体地,密钥生成中心生成双线性群;其中,双线性群包
括加法循环群和、乘法循环群、双线性映射和循环群的阶数N,N
为大于的素数。在群中选取随机数α,作为系统主密钥。在群中随机选取生成元,在群中随机选取生成元,秘密保存α。计算群中的元素,计算群中的元素
g,选择用一个字节表示密钥生成算法识别符hid、用一个字节表示标签类型标识符sid。
步骤2043、基于所述系统公开参数、所述系统主密钥和所述密钥生成算法,确定所述第一要素生成函数。
在一些实施方式中,可以从系统公开参数中选取部分参数;基于选取的部分参数、系统主密钥和密钥生成算法,确定第一要素生成函数。
在一些实施方式中,步骤2043可以通过如下步骤2043a至步骤2043c来实现:
步骤2043a、从所述系统公开参数中,确定第一循环群的生成元和第二循环群的随机数。
第一循环群的生成元指的可以是群中的生成元。第二循环群的随机数指的
可以是群中的随机数r。
步骤2043b、确定所述密钥生成算法中的第一哈希函数。
第一哈希函数指的可以是中的。
步骤2043c、基于所述第一循环群的生成元、所述第二循环群的随机数、所述系统主密钥和所述第一哈希函数,确定所述第一要素生成函数。
在一些实施方式中,可以确定第一循环群的生成元、第二循环群的随机数、系统主密钥和第一哈希函数之间的关联关系,基于该关联关系对第一循环群的生成元、第二循环群的随机数、系统主密钥和第一哈希函数进行整合处理,得到第一要素生成函数。
在一些实施方式中,步骤2043c的具体实现方式可以为:基于所述系统主密钥和所述第一循环群的生成元,确定目标参数;确定所述第一哈希函数、所述第一循环群的生成元、所述目标参数和所述第二循环群的随机数之间的第一函数关系;基于所述第一哈希函数、所述第一循环群的生成元、所述目标参数、所述第二循环群的随机数和所述第一函数关系,确定所述第一要素生成函数。
在一种可行的实现方式中,确定目标参数的实现方式可以为:基于系统主密钥α和群中的生成元,确定目标参数。
具体地,可以对系统主密钥α和群中的生成元进行第二运算处理,得到目标
参数。例如,目标参数的计算公式可以为:。
在一种可行的实现方式中,确定第一函数关系的具体实现方式可以为:基于数字签名验证需求,确定第一哈希函数、第一循环群的生成元、目标参数和第二循环群的随机数之间的第一函数关系。
具体地,基于数字签名验证需求对第一哈希函数、第一循环群的生成元、目标参数和第二循环群的随机数之间的函数关系进行不断测试,以确定出能够满足数字签名验证需求的第一函数关系。
例如,第一哈希函数和第一循环群的生成元之间的函数关系为第二运算,该第二运算后的值与目标参数之间的函数关系为第三运算,该第三运算后的值与第二循环群的随机数之间的函数关系为第二运算。例如,第二运算指的可以是标量乘运算,第三运算指的可以是加法运算。
在一种可行的实现方式中,确定第一要素生成函数的具体实现方式可以为:先对第一哈希函数和第一循环群的生成元进行第二运算,再对该第二运算后的值和目标参数进行第三运算,最后将第三运算后的值与第二循环群的随机数进行第二运算,得到第一要素生成函数。
具体地,先对第一哈希函数和第一循环群的生成元进行标量乘运算,再对该标量
乘运算后的值和目标参数进行加法运算,最后将加法运算后的值与第二循环群的随机数进
行标量乘运算,得到第一要素生成函数。例如,第一要素生成函数的计算公式可以为:。
需要说明的是,第一要素生成函数中的可以在系统初始化阶段进行计算,如
此,可以提高数字签名的生成速率。
在一些实施例中,上述步骤205可以通过如下步骤2051至步骤2053来实现:
步骤2051、确定循环群的阶数、所述密钥生成算法的标识。
循环群的阶数为N。密钥生成算法的标识为hid。
步骤2052、对所述第一指定验证者的标识、所述密钥生成算法的标识和所述循环群的阶数进行拼接处理,得到第一拼接数据。
在一种可行的实现方式中,可以对第一指定验证者的标识、密钥生成算法的标
识hid和循环群的阶数N进行拼接处理,得到第一拼接数据。
步骤2053、采用所述第一要素生成函数对所述第一拼接数据进行处理,得到所述第一签名要素。
在一些实施方式中,可以采用第一要素生成函数对第一
拼接数据进行哈希运算,得到第一签名要素。
在一些实施例中,上述步骤206可以通过如下步骤2061至步骤2063来实现:
步骤2061、从系统公开参数中,确定第二哈希函数和第二循环群的随机数。
第二哈希函数指的可以是密码杂凑函数。第二循环群的随机数指的可以是
群中的随机数r。
步骤2062、确定所述第二哈希函数、所述第二循环群的随机数和所述第一签名者的私钥之间的第二函数关系。
在一些实施方式中,确定第二函数关系的具体实现方式可以为:基于数字签名验证需求对第二哈希函数、第二循环群的随机数和第一签名者的私钥之间的函数关系进行不断测试,以确定出能够满足数字签名验证需求的第二函数关系。
例如,第二循环群的随机数和第二哈希函数之间的函数关系为第一运算,该第一运算后的值与第一签名者的私钥之间的函数关系为第二运算。例如,第一运算指的可以是减法运算,第二运算指的可以是标量乘运算。
步骤2063、基于所述第二哈希函数、所述第二循环群的随机数、所述第一签名者的私钥和所述第二函数关系,确定所述第二要素生成函数。
在一些实施方式中,确定第二要素生成函数的具体实现方式可以为:先对第二循环群的随机数和第二哈希函数进行第一运算,再对该第一运算后的值和第一签名者的私钥进行第二运算,得到第二要素生成函数。
具体地,先对第二循环群的随机数和第二哈希函数进行减法运算,再对该第一运
算后的值和第一签名者的私钥进行标量乘运算,得到第二要素生成函数。例如,第二要素生
成函数的计算公式可以为:。
在一些实施例中,上述步骤207可以通过如下步骤2071至步骤2074来实现:
步骤2071、确定循环群的阶数、第二循环群的随机数和第三循环群的元素。
循环群的阶数指的是N,N为大于的素数。第二循环群的随机数指的是群中
的随机数r。第三循环群的元素指的是群中的元素g。
步骤2072、基于所述第二循环群的随机数和所述第三循环群的元素,确定第一临时参数。
在一些实施方式中,确定第一临时参数的具体实现方式可以为:对第二循环群的随机数和第三循环群的元素进行第四运算,得到第一临时参数。
在一种可行的实现方式中,第四运算指的可以是指数运算,可以对第二循环群的
随机数和第三循环群的元素进行指数运算,得到第一临时参数。例如,第一临时参数。
步骤2073、对所述待签名明文、所述第一签名者的标识、所述第一指定验证者的标识、所述第一临时参数和所述循环群的阶数进行拼接处理,得到第二拼接数据。
在一种可行的实现方式中,可以对待签名明文m、第一签名者的标识、第一指定
验证者的标识、第一临时参数w和循环群的阶数N进行拼接处理,得到第二拼接数据。
步骤2074、采用所述第二要素生成函数对所述第二拼接数据进行处理,得到所述第二签名要素。
在一些实施方式中,采用第二要素生成函数对第二拼接数据进行处理,得到第二签名要素。
需要说明的是,第一要素生成函数和第二要素生成函数中的参数均可以在系统初始化阶段计算好,以便加快生成数字签名。
基于前述实施例,本申请实施例提供一种签名验证方法,应用于计算机设备,参照图3所示,该方法包括如下步骤301至步骤303:
步骤301、在第二指定验证者的第二数字签名的签名类型为指定类型的情况下,基于所述第二指定验证者的私钥和所述第二数字签名中的第三签名要素,确定第一待验证元素;所述第三签名要素是采用第一要素生成函数对所述第二指定验证者的标识进行处理后得到的。
第二指定验证者指的可以是对自己接收到的第二数字签名进行唯一验证的用户。
第二数字签名可以包括第三签名要素和第四签名要素。在第二指定验证者与第一指定验证
者指的是同一用户的情况下,第三签名要素指的是第一签名要素C,第四签名要素指的
是第二签名要素。
在一些实施方式中,可以采用双线性映射e对第二指定验证者的私钥和第
二数字签名中的第三签名要素C进行处理,得到第一待验证元素。例如,第一待验证元素
的计算公式可以表示为:。
步骤302、基于所述第二数字签名中的第四签名要素、所述第二指定验证者的标识和第二签名者的标识,确定第二待验证元素。
在第二指定验证者与第一指定验证者指的是同一用户的情况下,第二签名者
指的是第一签名者,此时第二签名者的标识为。
在一些实施方式中,步骤302的具体实现方式可以为:采用第一哈希函数对所述第二签名者的标识进行处理,得到所述第二签名者的哈希值;采用第二哈希函数对所述第二指定验证者的标识和第二签名者的标识进行处理,得到联合哈希值;基于所述第二签名者的哈希值、所述联合哈希值和所述第四签名要素,确定所述第二待验证元素。
在一种可行的实现方式中,确定第二签名者的哈希值的具体实现方式可以为:在
第二签名者的标识为的情况下,可以对第二签名者的标识、密钥生成算法的标识
hid和循环群的阶数N进行拼接处理,得到第四拼接数据;采用第一哈希函数对第四拼接数据进行哈希运算,得到第二签名者的哈希值。
在一种可行的实现方式中,确定联合哈希值的具体实现方式可以为:对明文、第
二签名者的标识、第二指定验证者的标识、第一临时参数w和循环群的阶数N进行拼
接处理,得到第五拼接数据;采用第二哈希函数对第五拼接数据进行哈希运算,得到联合哈希值。
在一些实施方式中,“基于所述第二签名者的哈希值、所述联合哈希值和所述第四签名要素,确定所述第二待验证元素”的具体实现方式可以为:确定第一循环群的生成元、目标参数和第三循环群的元素;基于所述第一循环群的生成元、所述目标参数和所述第二签名者的哈希值,确定待映射参数;基于所述第四签名要素和所述待映射参数,确定第二临时参数;基于所述联合哈希值和所述第三循环群的元素,确定第三临时参数;基于所述第二临时参数和所述第三临时参数,确定所述第二待验证元素。
在一种可行的实现方式中,确定待映射参数的具体实现方式可以为:对第二签名
者的哈希值和第一循环群的生成元进行第二运算;对该第二运算后的数据和目标元素进行第三运算得到待映射参数R。
具体地,对第二签名者的哈希值和第一循环群的生成元进行标量乘运算,再
对该标量乘后的数据和目标元素进行加法运算得到待映射参数。
在一种可行的实现方式中,确定第二临时参数的具体实现方式可以为:采用双线
性映射函数e对第四签名要素S和待映射参数R进行映射处理,得到第二临时参数u。
在一种可行的实现方式中,确定第三临时参数的具体实现方式可以为:对联合哈
希值和第三循环群的元素g进行第四运算,得到第三临时参数。具体地,第四运算
指的可以是指数运算,可以对联合哈希值和第三循环群的元素g进行指数运算,得到第三
临时参数。
在一种可行的实现方式中,确定第二待验证元素的具体实现方式可以为:对第二
临时参数u和第三临时参数t进行第二运算,得到第二待验证元素。具体地,第二运算指的可
以是标量乘运算,可以对第二临时参数u和第三临时参数t进行标量乘运算,得到第二待验
证元素。
步骤303、在所述第一待验证元素与所述第二待验证元素相同的情况下,确定所述第二数字签名验证成功。
在一些实施方式中,在第一待验证元素与第二待验证元素相同的情况下,
确定第二数字签名验证成功;在第一待验证元素与第二待验证元素不同的情况下,
确定第二数字签名验证失败。
下面说明本申请实施例提供的签名生成方法在实际场景中的应用。
该方法具体包括签名者、验证者、密钥生成中心(Key Generation Center,KGC)这三类实体,该方法具体包括如下四个阶段:
阶段一、系统初始化。密钥生成中心(可信机构)根据安全参数和最大用户数量生成系统主公开参数和系统主密钥,将系统主密钥秘密保存。
生成系统主公开参数和系统主密钥具体包括如下步骤a)至步骤c):
步骤a)选取安全参数λ。密钥生成中心生成双线性群。其
中,双线性群包括加法循环群和、乘法循环群、双线性映射和循
环群的阶N,N为大于的素数。
步骤b)在群中选取随机数α,作为系统主私钥。在群中随机选取生成元,在群中随机选取生成元,秘密保存α。
步骤c)计算群中的元素,计算群中的元素,
选择用一个字节表示密钥生成算法识别符hid,用一个字节表示签名类型标识符sid。
选取密码杂凑函数和。确定的系统
公开参数为,系统主密钥为msk=α。
阶段二、密钥生成。已知用户(包括签名者和验证者)的标识信息为ID,KGC首先对
ID、hid和N进行拼接,并采用哈希算法计算拼接后的字符串的哈希得到用
户哈希值。最后,利用主密钥msk(α)计算签名者和验证者的私钥并通过安
全信道发送给用户,用户私钥的计算公式可以为:。
阶段三、数字签名生成。选取待签名的明文m,输入签名者标识、指定验证者标
识和签名者私钥。签名者按如下步骤计算:
步骤a)选取群中的随机数r,然后,计算第一签名要素,
第一签名要素属于群中的元素。
步骤b)计算第一临时变量,该临时变量属于群中的元素。
步骤c)可选地,若生成公开可验证的签名(普通类型的签名),则计算临时变量,该临时变量的计算方法可以与SM9签名算法相同;若生成指定验证者
的签名(指定类型的签名),输入签名者标识,指定验证者标识,计算联合哈希值。
步骤d)计算第二签名要素,该第二签名要素为群中的元素;
若生成公开可验证的签名(普通类型的签名),输出签名;若生成指定验证
者签名(指定类型的签名),输出签名。
阶段四、数字签名验证。验证者接收到签名或,
若为0x01,则运行标准的SM9签名验证算法进行验证。否则,按照如下步骤进行验证:
步骤a)计算群中的元素;(e:从到的双线性映
射)。
步骤b)计算整数,/>。/>
步骤c)计算群中的元素。
步骤d)计算群中的元素。
步骤e)计算群中的元素。
步骤f)验证是否成立,若成立则通过验证;若不成立,则验证失败。
签名者的签名准确性证明如下:
若验证者接收到的第一签名要素是正确的,那么有,证明如下:
得到正确的w,那么,下面给出的正确性证明:
相关技术中的基于标识的强指定验证者签名方案,大多围绕国外算法进行展开,缺少适配SM9算法的指定验证者签名生成方法。并且,相关技术中存在计算开销和存储开销较大的问题,这限制了其在物联网环境以及低带宽设备上的应用。
而本申请中的强指定验证者签名方法为首个非交互式的基于SM9的指定验证者签名方法,签名者和指定验证者无需交互即可完成对签名的验证,并且在验证签名过程中,需要验证者的私钥参与运算,保证了验证的唯一性,也保护了签名者的隐私。
本申请至少具有如下欲保护点:
1)密钥生成中心(Key Generation Center,KGC)输入安全参数,运行系统初始
化算法,输出系统公开参数和系统主私钥,秘密保存系统主私钥。
2)每个用户存在唯一标识ID,KGC根据主私钥和用户标识计算签名者和验证者的私钥。KGC通过安全信道将用户私钥分发给各个用户,私钥由用户秘密保存。
3)若生成指定验证者签名,输入系统公开参数、消息m、指定验证者标识和签名
者的私钥,签名者运行签名算法,输出签名。若生成标准SM9签名,则按照SM9签名算
法正常计算。
4)首先根据签名中的签名标识符判断签名是标准SM9签名方法还是指定验证者签
名方法。若签名为指定验证者签名,输入系统公开参数,消息m、签名、签名者标识和验证
者的私钥,运行签名验证算法,输出验证成功或验证失败。当且仅当输入指定验证者
的私钥才能正确验证,输入其他任何人的私钥都无法通过验证。
基于前述的实施例,本申请实施例提供一种签名生成装置,该装置包括所包括的各单元、以及各单元所包括的各模块,可以通过计算机设备中的处理器来实现;当然也可通过具体的逻辑电路实现;在实施的过程中,处理器可以为中央处理器(Central ProcessingUnit,CPU)、微处理器(Microprocessor Unit,MPU)、数字信号处理器(Digital SignalProcessor,DSP)或现场可编程门阵列(Field Programmable Gate Array,FPGA)等。
图4为本申请实施例提供的一种签名生成装置的组成结构示意图,如图4所示,签名生成装置400包括:第一确定模块410和处理模块420,其中:
第一确定模块410,用于基于数字签名验证需求和密钥生成算法,确定第一要素生成函数;
处理模块420,用于采用所述第一要素生成函数对第一指定验证者的标识进行处理,得到第一签名要素;
第一确定模块410,还用于基于待签名明文、第一签名者的标识和所述第一指定验证者的标识,确定第二签名要素;
第一确定模块410,还用于基于所述第一签名要素和所述第二签名要素,确定为所述第一指定验证者生成的第一数字签名。
在一些实施例中,第一确定模块410具体用于:基于所述数字签名验证需求,确定安全参数和最大用户数量;基于所述安全参数和所述最大用户数量,确定系统公开参数和系统主密钥;基于所述系统公开参数、所述系统主密钥和所述密钥生成算法,确定所述第一要素生成函数。
在一些实施例中,第一确定模块410具体用于:从所述系统公开参数中,确定第一循环群的生成元和第二循环群的随机数;确定所述密钥生成算法中的第一哈希函数;基于所述第一循环群的生成元、所述第二循环群的随机数、所述系统主密钥和所述第一哈希函数,确定所述第一要素生成函数。
在一些实施例中,第一确定模块410具体用于:基于所述系统主密钥和所述第一循环群的生成元,确定目标参数;确定所述第一哈希函数、所述第一循环群的生成元、所述目标参数和所述第二循环群的随机数之间的第一函数关系;基于所述第一哈希函数、所述第一循环群的生成元、所述目标参数、所述第二循环群的随机数和所述第一函数关系,确定所述第一要素生成函数。
在一些实施例中,处理模块420具体用于:确定循环群的阶数、所述密钥生成算法的标识;对所述第一指定验证者的标识、所述密钥生成算法的标识和所述循环群的阶数进行拼接处理,得到第一拼接数据;采用所述第一要素生成函数对所述第一拼接数据进行处理,得到所述第一签名要素。
在一些实施例中,第一确定模块410具体用于:确定第二要素生成函数;采用所述第二要素生成函数对所述待签名明文、所述第一签名者的标识和所述第一指定验证者的标识进行处理,得到所述第二签名要素。
在一些实施例中,第一确定模块410具体用于:从系统公开参数中,确定第二哈希函数和第二循环群的随机数;确定所述第二哈希函数、所述第二循环群的随机数和所述第一签名者的私钥之间的第二函数关系;基于所述第二哈希函数、所述第二循环群的随机数、所述第一签名者的私钥和所述第二函数关系,确定所述第二要素生成函数。
在一些实施例中,第一确定模块410具体用于:确定循环群的阶数、第二循环群的随机数和第三循环群的元素;基于所述第二循环群的随机数和所述第三循环群的元素,确定第一临时参数;对所述待签名明文、所述第一签名者的标识、所述第一指定验证者的标识、所述第一临时参数和所述循环群的阶数进行拼接处理,得到第二拼接数据;采用所述第二要素生成函数对所述第二拼接数据进行处理,得到所述第二签名要素。
基于前述的实施例,本申请实施例提供一种签名验证装置,该装置包括所包括的各单元、以及各单元所包括的各模块,可以通过计算机设备中的处理器来实现;当然也可通过具体的逻辑电路实现;在实施的过程中,处理器可以为中央处理器(Central ProcessingUnit,CPU)、微处理器(Microprocessor Unit,MPU)、数字信号处理器(Digital SignalProcessor,DSP)或现场可编程门阵列(Field Programmable Gate Array,FPGA)等。
图5为本申请实施例提供的一种签名验证装置的组成结构示意图,如图5所示,签名验证装置500包括:第二确定模块510和判断模块520,其中:
第二确定模块510,用于在第二指定验证者的第二数字签名的签名类型为指定类型的情况下,基于所述第二指定验证者的私钥和所述第二数字签名中的第三签名要素,确定第一待验证元素;所述第三签名要素是采用第一要素生成函数对所述第二指定验证者的标识进行处理后得到的;
第二确定模块510,用于基于所述第二数字签名中的第四签名要素、所述第二指定验证者的标识和第二签名者的标识,确定第二待验证元素;
判断模块520,用于在所述第一待验证元素与所述第二待验证元素相同的情况下,确定所述第二数字签名验证成功。
在一些实施例中,第二确定模块510具体用于:采用第一哈希函数对所述第二签名者的标识进行处理,得到所述第二签名者的哈希值;采用第二哈希函数对所述第二指定验证者的标识和第二签名者的标识进行处理,得到联合哈希值;基于所述第二签名者的哈希值、所述联合哈希值和所述第四签名要素,确定所述第二待验证元素。
在一些实施例中,第二确定模块510具体用于:确定第一循环群的生成元、目标参数和第三循环群的元素;基于所述第一循环群的生成元、所述目标参数和所述第二签名者的哈希值,确定待映射参数;基于所述第四签名要素和所述待映射参数,确定第二临时参数;基于所述联合哈希值和所述第三循环群的元素,确定第三临时参数;基于所述第二临时参数和所述第三临时参数,确定所述第二待验证元素。
以上装置实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。在一些实施例中,本申请实施例提供的装置具有的功能或包含的模块可以用于执行上述方法实施例描述的方法,对于本申请装置实施例中未披露的技术细节,请参照本申请方法实施例的描述而理解。
需要说明的是,本申请实施例中,如果以软件功能模块的形式实现上述方法,并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本申请各个实施例所述方法的全部或部分。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read Only Memory,ROM)、磁碟或者光盘等各种可以存储程序代码的介质。这样,本申请实施例不限制于任何特定的硬件、软件或固件,或者硬件、软件、固件三者之间的任意结合。
本申请实施例提供一种计算机设备,包括存储器和处理器,所述存储器存储有可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述方法中的部分或全部步骤。
本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述方法中的部分或全部步骤。所述计算机可读存储介质可以是瞬时性的,也可以是非瞬时性的。
本申请实施例提供一种计算机程序,包括计算机可读代码,在所述计算机可读代码在计算机设备中运行的情况下,所述计算机设备中的处理器执行用于实现上述方法中的部分或全部步骤。
本申请实施例提供一种计算机程序产品,所述计算机程序产品包括存储了计算机程序的非瞬时性计算机可读存储介质,所述计算机程序被计算机读取并执行时,实现上述方法中的部分或全部步骤。该计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一些实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一些实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software Development Kit,SDK)等等。
这里需要指出的是:上文对各个实施例的描述倾向于强调各个实施例之间的不同之处,其相同或相似之处可以互相参考。以上设备、存储介质、计算机程序及计算机程序产品实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本申请设备、存储介质、计算机程序及计算机程序产品实施例中未披露的技术细节,请参照本申请方法实施例的描述而理解。
需要说明的是,图6为本申请实施例提供的一种计算机设备的硬件实体示意图,如图6所示,该计算机设备600的硬件实体包括:处理器601、通信接口602和存储器603,其中:
处理器601通常控制计算机设备600的总体操作。
通信接口602可以使计算机设备通过网络与其他终端或服务器通信。
存储器603配置为存储由处理器601可执行的指令和应用,还可以缓存待处理器601以及计算机设备600中各模块待处理或已经处理的数据(例如,图像数据、音频数据、语音通信数据和视频通信数据),可以通过闪存(FLASH)或随机访问存储器(Random AccessMemory,RAM)实现。处理器601、通信接口602和存储器603之间可以通过总线604进行数据传输。
应理解,说明书通篇中提到的“一个实施例”或“一实施例”意味着与实施例有关的特定特征、结构或特性包括在本申请的至少一个实施例中。因此,在整个说明书各处出现的“在一个实施例中”或“在一实施例中”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。应理解,在本申请的各种实施例中,上述各步骤/过程的序号的大小并不意味着执行顺序的先后,各步骤/过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元;既可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。
另外,在本申请各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(Read Only Memory,ROM)、磁碟或者光盘等各种可以存储程序代码的介质。
或者,本申请上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本申请各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、ROM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。