数字签名生成、验证方法及装置、电子设备及存储介质制造方法及图纸

技术编号:28300512 阅读:25 留言:0更新日期:2021-04-30 16:28
本公开提供了一种数字签名生成、验证方法及装置、电子设备及存储介质。该方法包括:获取待签名消息;计算待签名消息的哈希值;通过随机数发生器产生随机数;基于随机数计算椭圆曲线中点的横坐标和纵坐标,椭圆曲线的阶数为N;采用如下方式将第一数值对N求模,得到第一数字签名值,第一数值为横坐标和随机数之和:将第一数值按其位数,分解为多个第二数值,对各个第二数值对N进行求模,并对求模的结果进行求和,基于模值之和输出第一数字签名值;基于第一数字签名值、随机数和用户私钥,计算第二数字签名值;将第一数字签名值和第二数字签名值转换为字节串,作为待签名消息的数字签名。

【技术实现步骤摘要】
数字签名生成、验证方法及装置、电子设备及存储介质
本公开涉及数据存储领域,特别涉及一种数字签名生成、验证方法及装置、电子设备及存储介质。
技术介绍
椭圆曲线密码(EllipticCurveCryptography,ECC)属于非对称密码体制,其具有密钥长度短、加解密速度快的特性。SM2密码标准是我国于2010年提出的公钥密码标准,SM2是一种基于ECC的非对称密码体制。ECC/SM2椭圆曲线算法包括ECC/SM2加密/解密密码算法和ECC/SM2签名/验签密码算法,在ECC/SM2签名、验签过程中,往往涉及两个大数相乘并对N求模的计算,N为椭圆曲线的阶。由于N不是广义梅森素数,所以没法进行快速约减运算。通常对N求模,只能直接运用除法运算,然而除法运算无论对于软件(程序)实现或者硬件(例如现场可编程逻辑门阵列(FieldProgrammableGateArray,FPGA)/专用集成电路(ApplicationSpecificIntegratedCircuit,ASIC))实现,造成对N求模的效率较低,进而影响签名/验签的速度;而如果增加额外的除法器,由于利用率较低,会导致软硬件资源的浪费。
技术实现思路
本公开实施例提供了一种数字签名生成、验证方法及装置、电子设备及存储介质,在不增加除法器的前提下,改变数字签名生成、验证过程,提高对N求模的效率,加快签名/验签的速度。所述技术方案如下:本公开至少一实施例提供了一种数字签名生成方法,所述方法包括:获取待签名消息;计算所述待签名消息的哈希值;通过随机数发生器产生随机数;基于所述随机数计算椭圆曲线中点的横坐标和纵坐标,所述椭圆曲线的阶数为N;采用如下方式将第一数值对N求模,得到第一数字签名值,所述第一数值为所述横坐标和所述随机数之和:将所述第一数值按其位数,分解为多个第二数值,其中每个所述第二数值与N的差值小于N,分别对各个所述第二数值对N进行求模,对各个所述第二数值对N进行求模的结果进行求和,得到模值之和;如果所述模值之和大于或等于N,则将所述模值之和减去N的正整数倍,直到小于N,输出所述模值之和减去N的正整数倍的结果作为所述第一数字签名值;如果所述模值之和小于N,则输出所述模值之和作为所述第一数字签名值;基于所述第一数字签名值、所述随机数和用户私钥,计算第二数字签名值;将所述第一数字签名值和所述第二数字签名值转换为字节串,作为所述待签名消息的数字签名。在上述过程中,通过对第一数值进行分解,然后对各个第二数值对N进行求模,再将求模的结果进行求和,之后再与N进行比较并在大于N时进行相减,从而得到了第一数值对N求模的值。可选地,将所述第一数值对N求模按所述第一数值的位数分解为多个第二数值对N求模的模值之和,包括:确定第一椭圆曲线密码算法类型;基于所述椭圆曲线密码算法类型与数值分解方式的对应关系,按照所述第一椭圆曲线密码算法类型对应的数值分解方式对所述第一数值进行分解并求模值之和。可选地,基于所述椭圆曲线密码算法类型与数值分解方式的对应关系,按照所述第一椭圆曲线密码算法类型对应的数值分解方式对所述第一数值进行分解并求模值之和,包括:当所述第一椭圆曲线密码算法类型为ECC时,基于如下公式对所述第一数值求模:B%N=(B[lo]+B[hi][lo]*(D0)+BN[lo]+BN[hi]*(D0))%N;其中,BN=B[hi][hi]*(D1),D0=2T%N,D1=2(T+T/2)%N,%表示求模;B为所述第一数值,位数为2T;B[hi]为所述B的高位部分,位数为T;B[lo]为所述B的低位部分,位数为T;B[hi][hi]为所述B[hi]的高位部分,位数为T/2;B[hi][lo]为所述B[hi]的低位部分,位数为T/2;BN[hi]为所述BN的高位部分,位数为T/2;BN[lo]为所述BN的低位部分,位数为T。可选地,基于所述椭圆曲线密码算法类型与数值分解方式的对应关系,按照所述第一椭圆曲线密码算法类型对应的数值分解方式对所述第一数值进行分解并求模值之和,包括:当所述第一椭圆曲线密码算法类型为SM2时,基于如下公式对所述第一数值求模:B%N=(B[lo]+∑(i=0~3)B[hi][lo][i]*Di+∑(i=0~3)B[hi][hi][i]*Di)%N;其中,D0=2T%N,D1=2T+32%N,D2=2T+64%N,D3=2T+96%N,%表示求模;B为所述第一数值,位数为2T;B[hi]为所述B的高位部分,位数为T;B[lo]为所述B的低位部分,位数为T;B[hi][hi]为所述B[hi]的高位部分,位数为T/2;B[hi][lo]为所述B[hi]的低位部分,位数为T/2;B[hi][lo][0]~B[hi][lo][4]为所述B[hi][lo]按照位宽被连续分成的4个部分,每个部分的位宽为32;B[hi][hi][0]~B[hi][hi][4]为所述B[hi][hi]按照位宽被连续分成的4个部分,每个部分的位宽为32。本公开至少一实施例提供了一种数字签名验证方法,所述方法包括:获取待验证消息和数字签名,所述数字签名包括第一数字签名值和第二数字签名值;计算所述待验证消息的哈希值;将所述第一数字签名值和所述第二数字签名值转换为整数;采用如下方式将第三数值对N求模,得到第一模值,所述第三数值为所述第一数字签名值和所述第二数字签名值之和:将所述的第三数值按其位数,分解为多个第四数值,其中每个所述第四数值与N的差值小于N,分别对各个所述第四数值对N进行求模,对各个所述第四数值对N进行求模的结果进行求和,得到模值之和;如果所述模值之和大于或等于N,则将所述模值之和减去N的正整数倍,直到小于N,输出所述模值之和减去N的正整数倍的结果作为所述第一模值;如果所述模值之和小于N,则输出所述模值之和作为所述第一模值;基于所述第二数字签名值、所述第一模值和公钥,计算椭圆曲线的中点的横坐标和纵坐标,所述椭圆曲线的阶数为N;将所述哈希值和所述横坐标之和对N求模,得到第二模值;基于所述第二模值和所述第一数字签名值的大小关系,确定所述数字签名是否通过验证。可选地,将所述第三数值分解为多个第四数值之和,包括:确定第一椭圆曲线密码算法类型;基于所述椭圆曲线密码算法类型与数值分解方式的对应关系,按照所述第一椭圆曲线密码算法类型对应的数值分解方式对所述第三数值进行分解。本公开至少一实施例提供了一种数字签名生成装置,所述装置包括:获取模块,用于获取待签名消息;第一处理模块,用于计算所述待签名消息的哈希值;随机数产生模块,用于通过随机数发生器产生随机数;第二处理模块,用于基于所述随机数计算椭圆曲线中点的横坐标和纵坐标,所述椭圆曲线的阶数为N;采用如下方式将第一数值对N求模,得到第一数字签名值,所本文档来自技高网...

【技术保护点】
1.一种数字签名生成方法,其特征在于,所述方法包括:/n获取待签名消息;/n计算所述待签名消息的哈希值;/n通过随机数发生器产生随机数;/n基于所述随机数计算椭圆曲线中点的横坐标和纵坐标,所述椭圆曲线的阶数为N;/n采用如下方式将第一数值对N求模,得到第一数字签名值,所述第一数值为所述横坐标和所述随机数之和:/n将所述第一数值按其位数,分解为多个第二数值,其中每个所述第二数值与N的差值小于N,分别对各个所述第二数值对N进行求模,对各个所述第二数值对N进行求模的结果进行求和,得到模值之和;如果所述模值之和大于或等于N,则将所述模值之和减去N的正整数倍,直到小于N,输出所述模值之和减去N的正整数倍的结果作为所述第一数字签名值;如果所述模值之和小于N,则输出所述模值之和作为所述第一数字签名值;/n基于所述第一数字签名值、所述随机数和用户私钥,计算第二数字签名值;/n将所述第一数字签名值和所述第二数字签名值转换为字节串,作为所述待签名消息的数字签名。/n

【技术特征摘要】
1.一种数字签名生成方法,其特征在于,所述方法包括:
获取待签名消息;
计算所述待签名消息的哈希值;
通过随机数发生器产生随机数;
基于所述随机数计算椭圆曲线中点的横坐标和纵坐标,所述椭圆曲线的阶数为N;
采用如下方式将第一数值对N求模,得到第一数字签名值,所述第一数值为所述横坐标和所述随机数之和:
将所述第一数值按其位数,分解为多个第二数值,其中每个所述第二数值与N的差值小于N,分别对各个所述第二数值对N进行求模,对各个所述第二数值对N进行求模的结果进行求和,得到模值之和;如果所述模值之和大于或等于N,则将所述模值之和减去N的正整数倍,直到小于N,输出所述模值之和减去N的正整数倍的结果作为所述第一数字签名值;如果所述模值之和小于N,则输出所述模值之和作为所述第一数字签名值;
基于所述第一数字签名值、所述随机数和用户私钥,计算第二数字签名值;
将所述第一数字签名值和所述第二数字签名值转换为字节串,作为所述待签名消息的数字签名。


2.根据权利要求1所述的方法,其特征在于,将所述第一数值对N求模按所述第一数值的位数分解为多个第二数值对N求模的模值之和,包括:
确定第一椭圆曲线密码算法类型;
基于所述椭圆曲线密码算法类型与数值分解方式的对应关系,按照所述第一椭圆曲线密码算法类型对应的数值分解方式对所述第一数值进行分解并求模值之和。


3.根据权利要求2所述的方法,其特征在于,基于所述椭圆曲线密码算法类型与数值分解方式的对应关系,按照所述第一椭圆曲线密码算法类型对应的数值分解方式对所述第一数值进行分解并求模值之和,包括:
当所述第一椭圆曲线密码算法类型为ECC时,基于如下公式对所述第一数值求模:
B%N=(B[lo]+B[hi][lo]*(D0)+BN[lo]+BN[hi]*(D0))%N;
其中,BN=B[hi][hi]*(D1),D0=2T%N,D1=2(T+T/2)%N,%表示求模;
B为所述第一数值,位数为2T;B[hi]为所述B的高位部分,位数为T;B[lo]为所述B的低位部分,位数为T;B[hi][hi]为所述B[hi]的高位部分,位数为T/2;B[hi][lo]为所述B[hi]的低位部分,位数为T/2;BN[hi]为所述BN的高位部分,位数为T/2;BN[lo]为所述BN的低位部分,位数为T。


4.根据权利要求2所述的方法,其特征在于,基于所述椭圆曲线密码算法类型与数值分解方式的对应关系,按照所述第一椭圆曲线密码算法类型对应的数值分解方式对所述第一数值进行分解并求模值之和,包括:
当所述第一椭圆曲线密码算法类型为SM2时,基于如下公式对所述第一数值求模:
B%N=(B[lo]+∑(i=0~3)B[hi][lo][i]*Di+∑(i=0~3)B[hi][hi][i]*Di)%N;
其中,D0=2T%N,D1=2T+32%N,D2=2T+64%N,D3=2T+96%N,%表示求模;
B为所述第一数值,位数为2T;B[hi]为所述B的高位部分,位数为T;B[lo]为所述B的低位部分,位数为T;B[hi][hi]为所述B[hi]的高位部分,位数为T/2;B[hi][lo]为所述B[hi]的低位部分,位数为T/2;B[hi][lo][0]~B[hi][lo][4]为所述B[hi][lo]按照位宽被连续分成的4个部分,每个部分的位宽为32;B[hi][hi][0]~B[hi][hi][4]为所述B[hi][hi]按照位宽被连续分成的4个部分,每个部分的位宽为32。


5.一种数字签名验证方法,其特征在于,所述方法包括:
获取待验证消息和数字签名,所述数字签名包括第一数字签名值和第二数字签名值;
计算所述待验证消息的哈希值;
将所述第一数字签名值和所述第二数字签名值转换为整数;
采用如下方式将第三数值对N求模,得到第一模值,所述第三数值为所述第一数字签名值和所述第二数字签名值之和:
将所述的第三数值按其位数,分解为多个第四数值...

【专利技术属性】
技术研发人员:樊荣袁国材周浩宇万立王庆年徐鹏飞黄哲潘芸叶耀文王隽许林黄秀肖威周思承汪沛然杜祝淳增辉黄灿黄波李欣宇
申请(专利权)人:武汉船舶通信研究所中国船舶重工集团公司第七二二研究所
类型:发明
国别省市:湖北;42

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1