一种数字签名及消息散列值恢复方法技术

技术编号:13674167 阅读:94 留言:0更新日期:2016-09-07 23:18
针对不支持从签名值恢复签名运算时的消息散列值的数字签名算法,本发明专利技术提出了一种数字签名及消息散列值恢复方法:当进行签名运算时,密码模块将消息散列值作为填充或附加数据填充或附加到使用私钥对消息散列值进行签名运算后的签名值中形成最终的签名值;当数字签名应用程序请求使用签名者的公钥从签名值恢复数字签名运算时的消息散列值时,密码模块从签名值中获取或分离出签名运算后填充或附加的消息散列值,然后用获得的消息散列值和签名者的公钥对用签名者私钥密码运算后的签名值进行签名验证;若验证通过则将从签名值中获取或分离出的消息散列值作为恢复的消息散列值返回,否则将一个固定值或随机值作为恢复的消息散列值返回。

【技术实现步骤摘要】

本专利技术属于信息安全领域,特别是一种数字签名及消息散列值恢复方法
技术介绍
目前的数字签名方案分为两种。一种在数字签名时,使用签名者的私钥对待签名的消息(message)的散列值(hash value)(简称消息散列值)进行加密密码运算即签名运算,运算得到的结果作为对消息签名的签名值(signature value);在数字签名验证时,使用签名者的公钥对签名值进行解密密码运算,解密获得签名运算时的消息散列值,然后同待验证签名的消息的散列值进行比对(散列值直接比对),若二者相同,则数字签名验证通过,否则,不通过。这种方案在进行数字签名验证时要从签名值恢复签名运算时的消息散列值,基于RSA密码算法的数字签名方案就是这种方案。另一种方案在数字签名时,使用签名者的私钥对要签名的消息的散列值即消息散列值进行密码运算即签名运算,运算得到结果是针对消息签名的签名值;在数字签名验证时,将待验证签名的消息的散列值加入到用签名者公钥对签名值进行签名验证的密码运算中,并对密码运算结果进行比对(散列值间接比对),若比对的结果一致则数字签名验证通过,否则,不通过。这种方案在进行数字签名验证时不从签名值恢复签名运算时的消息散列值,也不支持从签名值恢复签名运算时的消息散列值,基于DSA(Digital Signature Algorithm)、ECC(Elliptic Curve Cryptography)、IBC(Identity Based Cryptography)密码算法的数字签名方案就是这种方案。通常,密码模块的签名验证接口函数的输入参数包括:签名者公钥、签名值、待验证签名的消息或消息的散列值,签名验证接口函数根据这些输入参数完成签名验证。基于Windows CryptoSPI、PKCS#11接口的密码模块都有这种签名验签接口函数。这种签名验证接口函数同时适用于前面所述的两种数字签名方案。但是,有的密码模块还提供了从签名值恢复消息散列值的接口函数,如PKCS#11密码模块(C_VerifyRecovery)。使用这种接口函数进行数字签名验证的数字签名应用程序先调用密码模块的散列函数计算得到待签名验证的消息的散列值,然后调用从签名值恢复消息散列值的接口函数,从待签名验证的签名值中恢复出签名运算时的消息散列值,然后比对两个散列值是否一致。但是,在实际应用中会存在这样一个问题:数字签名应用程序采用从签名值恢复签名运算时的消息散列值的方式进行签名验证,而数字签名应用程序调用密码模块对消息进行数字签名时采用的数字签名算法不支持从签名值恢复出签名运算时的消息散列值,这样数字签名应用程序将无法调用密码模块的从签名值恢复消息散列值的接口函数,从待签名验证的签名值恢复签名运算时的消息散列值完成数字签名验证。
技术实现思路
本专利技术的目的是提出一种技术方案,使得不支持从签名值恢复签名运算时的消息散列值的数字签名算法在实际应用中也能实现从签名值恢复签名运算时的消息散列值。为了实现以上目的,本专利技术提出了一种数字签名及消息散列值恢复方法,包括数字签名方法、消息散列值恢复方法和签名验证方法,具体如下。数字签名方法:当数字签名应用程序调用密码模块使用签名者的私钥对消息散列值进行数字签名运算时,密码模块将消息散列值作为填充或附加数据填充或附加到用私钥对消息散列值进行签名运算后的签名值中形成最终的签名值。消息散列值恢复方法:当数字签名应用程序调用密码模块请求使用签名者的公钥从签名值恢复数字签名运算时的消息散列值时,密码模块按如下方式进行处理:先从(数字签名应用程序提交的)签名值中获取或分离出数字签名运算时填充或附加到签名值的消息散列值;然后用获得的消息散列值和签名者的公钥对使用签名者私钥进行签名运算后的签名值(即不包含填充或附加的消息散列值的签名值)进行签名验证;若验证通过,则将从签名值中获取或分离出的消息散列值作为恢复的消息散列值返回,否则,将一个固定值或随机值作为恢复的消息散列值返回。签名验证方法:当数字签名应用程序调用密码模块请求使用签名者的公钥、消息或消息散列值对签名值进行签名验证时,密码模块将填充或附加的消息散列值从签名值中剥离,然后使用签名者的公钥、消息或消息散列值对剥离了填充或附加的消息散列值的签名值进行签名验证。从以上方案可以看到,基于本专利技术,即便数字签名应用程序调用密码模块进行数字签名时采用的数字签名算法不支持从签名值恢复签名运算时的消息散列值,数字签名应用程序也能调用密码模块的从签名值恢复消息散列值的接口函数,从待签名验证的签名值中恢复签名运算时的消息散列值。附图说明无。具体实施方式下面结合实施例对本专利技术作进一步的描述。实施例一、密码模块提供的数字签名功能包括使用不支持从签名值恢复签名运算时的消息散列值的数字签名算法进行数字签名,但密码模块没有从签名值恢复消息散列值的接口函数,比如Windows CSP,对于这种密码模块,需要在其数字签名接口函数(如Windows CSP的CPSignHash)和签名验证接口函数(如Windows CSP的CPVerifySignature)中分别实施本专利技术的数字签名方法和签名验证方法,具体如下。在数字签名接口函数的执行中,密码模块判断数字签名应用程序使用的签名者私钥的算法类型是否支持从签名值恢复签名运算时的消息散列值,若支持,则按通常的数字签名方式进行数字签名的处理,否则,按本专利技术的数字签名方法进行数字签名的处理。在签名验证接口函数的执行中,密码模块判断数字签名应用程序使用的签名者公钥的算法类型是否支持从签名值恢复签名运算时的消息散列值,若支持,则按通常的签名验证方式进行签名验证的处理,否则,按本专利技术的签名验证方法进行签名验证的处理。实施例二、密码模块提供的数字签名功能包括使用不支持从签名值恢复签名运算时的消息散列值的数字签名算法进行数字签名,且密码模块除了有签名验证接口函数外,还有从签名值恢复消息散列值的接口函数,比如PKCS#11密码模块,对于这种密码模块,需要在其数字签名接口函数(如PKCS#11的C_Sign、C_SignRecovery类接口函数)、签名验证接口函数(如PKCS#11的C_Verify类接口函数)和从签名值恢复消息散列值的接口函数(如PKCS#11的 C_VerifyRecovey类接口函数)中分别实施本专利技术的数字签名方法、签名验证方法和消息散列值恢复方法,其中数字签名接口函数、签名验证接口函数的实施同实施例一,从签名值恢复消息散列值的接口函数的实施具体如下。在从签名值恢复消息散列值的接口函数的执行中,密码模块判断数字签名应用程序使用的签名者公钥的算法类型是否支持从签名值恢复签名运算时的消息散列值,若支持,则按通常的从签名值恢复消息散列值的方式从签名值恢复签名运算时的消息散列值,否则,按本专利技术的消息散列值恢复方法从签名值恢复签名运算时的消息散列值。对实施例一中的密码模块也需要实施本专利技术的方法的原因在于:数字签名应用程序在数字签名时可能使用的是实例一中的密码模块,而在签名验证时可能使用的是实例二中的密码模块,或者反过来。其他未说明的具体技术实施,对于相关领域的技术人员而言是众所周知,不言自明的。本文档来自技高网
...

【技术保护点】
一种数字签名方法,其特征是:所述数字签名方法使用的数字签名算法不支持从签名值恢复签名运算时的消息散列值;当数字签名应用程序调用密码模块使用签名者的私钥对消息散列值进行数字签名运算时,密码模块将消息散列值作为填充或附加数据填充或附加到用私钥对消息散列值进行签名运算后的签名值中形成最终的签名值。

【技术特征摘要】
1.一种数字签名方法,其特征是:所述数字签名方法使用的数字签名算法不支持从签名值恢复签名运算时的消息散列值;当数字签名应用程序调用密码模块使用签名者的私钥对消息散列值进行数字签名运算时,密码模块将消息散列值作为填充或附加数据填充或附加到用私钥对消息散列值进行签名运算后的签名值中形成最终的签名值。2.针对权利要求1所述的数字签名方法的消息散列值恢复方法,其特征是:当数字签名应用程序调用密码模块请求使用签名者的公钥从签名值恢复数字签名运算时的消息散列值时,密码模块按如下方式进行处理:先从签名值中获取或分离出数字签名运算时填充或附加到签名值的消息...

【专利技术属性】
技术研发人员:龙毅宏何翔
申请(专利权)人:武汉理工大学
类型:发明
国别省市:湖北;42

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

1