一种提高数字签名安全性的方法

文档序号:7597612阅读:331来源:国知局
专利名称:一种提高数字签名安全性的方法
技术领域
本发明涉及数据安全技术,尤其涉及一种提高数字签名安全性的方法。
背景技术
在电子商务、企业信息平台等领域中,数字签名体制被广泛运用。数字签名的安全性是保障认证、授权、完整性、不可抵赖等安全服务的关键技术。
数字签名的目标类似于物理的笔记签名,它必须易生成和验证而难伪造和抵赖,并且保证被签名的内容难以篡改。
这可以通过非对称密码体制实现。在用于数字签名的非对称密码体制中,签名者有两个一一对应的密钥,一个是私有密钥(简称私有密钥),必须严格保密,另一个是公有密钥(简称公有密钥),可以公之于众。使用私有密钥对数据进行加密很容易,由与之对应的公有密钥进行解密也很容易。虽然这两个密钥完全是一一对应的,但由于产生它们所基于的数学难题的特点,使得用公有密钥推导出私有密钥非常困难,并且很难将任意的数据加密为可以被一个未知私有密钥所对应的公有密钥解密的密文。
可以很容易地利用这种非对称密码体制来构造满足要求的数字签名体制。要生成数字签名,可以对要签名的数据使用私有密钥进行加密,将密文作为数字签名。要进行数字签名验证,就可以使用公有密钥对数字签名进行解密,将解密结果与被签名的数据对比,对比无误就认为验证通过。很容易根据前面所提到的非对称密码体制的特点来说明这种方案是易生成和验证而难伪造和抵赖以及难篡改的。
但前面的讨论跟实际应用中的数字签名有所不同,已知的所有非对称密码体制的效率都很低,而且密文常常比对应的明文尺寸大许多。所以,通常在用私有密钥进行加密之前都要对要签名的数据进行压缩,压缩的方式是通过密码学中的单向散列函数生成散列值,然后对这个散列值进行加密和解密。单向散列函数效率远远高于非对称密码体制,而利用单向散列函数运算之后的数据尺寸缩短为一个较短的固定长度,非对称密码体制就可以用很少的次数(通常是一次)完成加密。
然而,采用了单向散列函数的数字签名体制的安全性就由原来的仅仅依赖于非对称密码体制的安全性变成同时还依赖于单向散列函数的安全性,二者中任何一个被攻破整个数字签名体制都不再安全。
对于一个特定的单向散列函数,其安全性取决于解决与之相关的以下几个问题的难度a.原像问题找到一组数据使其散列值恰好等于指定的值。
b.第二原像问题找到一组不同的数据使其散列值恰好和指定的数据相同。
c.碰撞问题找到任意两组不同的数据使二者的散列值恰好相等。
密码学对于以上三个问题有如下结论原像问题和第二原像问题的难度都不小于碰撞问题。如果解决了原像问题或者第二原像问题,则一定可以解决碰撞问题。反过来解决了碰撞问题,对解决原像问题或第二原像问题则可能毫无帮助。对于一个特定的单向散列函数找到解决这三个问题中任何一个的有效算法,都会对该单向散列函数的安全性造成威胁。
图1为数字签名生成的过程以及数字签名验证过程的示意图在数字签名生成过程中,单向散列函数将待签名的数据(图中就是一个许可文件)进行压缩生成一个散列值,再经过非对称密码算法用私有密钥进行加密,就得到了许可文件的数字签名。在数字签名验证过程中,数字签名经过非对称密码算法经公共密钥进行解密,还原出散列值,与待验证的数据通过单向散列函数生成的散列值相比较,二者如果完全相同,则验证成功。
实际上即使不使用单向散列函数,对待签名数据进行全文非对称加密,也可以生成数字签名,但这样得到的数字签名值尺寸要比待签名数据还大(甚至大几倍),而且目前已知的非对称加密算法速度都是系统性能的瓶颈,这在实际应用中都是难以忍受的问题。所以,实际的数字签名方案都会先使用高效的单向散列函数对数据进行不可逆压缩。这样一来,数字签名方案的安全性同时依赖于单向散列函数的安全性和非对称加密算法的安全性,一旦二者之一被发现了安全漏洞,整个数字签名方案就不再安全。
虽然现有的数字签名技术方案有许多种,但绝大部分都是先利用单向散列函数计算待签名数据的散列值,然后对散列值用私有密钥加密。这些方案之间的区别仅仅在于使用的单向散列函数不同和非对称加密算法不同。可选的单向散列函数有MD2、MD4、MD5、HAVAL、RIPEMD、SHA0、SHA1、SHA2、HMAC等,除此之外单向散列函数还可以由各种加密算法来构造,非对称加密算法包括RSA、EC、DH、DSA等。
由于目前的各种安全体制和安全产品中,安全性在相当大的程度上是基于对所使用的算法的无条件信任。这种无条件的信任很可能是危险的,因为没有任何一种实用的密码算法能够被彻底证明是安全的。这些算法的安全性实际上建立在大量密码学家长时间广泛的分析之后仍然没有发现可利用的弱点上,这样的算法被称作久经考验的算法,人们对这种算法的信心有理由大于新的未经过广泛分析考验的算法。但下面这种情况却出现过多次一种算法很久以来都没有人能够发现其安全漏洞,突然有人宣布找到了该算法的安全漏洞。如果安全性完全建立在对算法的信任基础之上,那么一旦出现这种突发事件,大量已经投入使用的体制和产品就会因措手不及而陷入安全危机之中。更糟糕的是可能有人已经找到了算法的安全漏洞,却没有公开,而是利用这个安全漏洞进行非法活动。所以在实际应用中如何在算法存在潜在安全漏洞的情况下仍然最大程度地保障安全性也应该引起足够的重视。
前面提到的一些单向散列函数中有些单向散列函数已经找到了制造碰撞的有效算法,或者被认为存在着潜在的碰撞威胁。当这些弱点被找到时,常常已经存在了基于该算法的数字签名标准或者安全产品。这些标准或者产品在被新标准或产品取代之前,仍然会存在一段时间,造成安全隐患。
在现有的数字签名体制中,如果解决了单向散列函数的碰撞问题就可以对电子商务系统进行如下碰撞攻击,如果图2所示
假定参与电子商务的三方为买方A,卖方X,银行B。A和X都在B中开有户头。A订购了X的若干产品,X向A提供一份购物清单,注明了A订购的商品和价格等信息,A确定这些信息准确无误之后,用A的私有密钥对购物清单的散列值进行数字签名,并将签名后的购物清单返回给X。X将原始购物清单和签了名的购物清单提交给B,B用A的公有密钥对数字签名进行验证,如果验证通过B就认为A确实认可交易金额,于是从A的户头上把清单中确定的交易金额转账到X的户头。
如果X试图进行欺诈,并且掌握了解决所使用的单向散列函数碰撞问题的有效算法,那么X就可以事先产生两个不同的购物清单,一份是A认可的,另一份是A不认可的(比如把商品的价格提高了一千倍,或者包含了A根本不想要的物品),然后X利用制造碰撞的有效算法,同时在两份清单中做一些看似无关紧要的调整调整清单中的商品顺序,增加或删除一些空白字符,将某些单词用同义词替代,使两份清单的散列值相等。然后X将A认可的清单(虽然有一些看似无关紧要的调整),提交给A进行签名,A签名之后X把另外一份A不会认可清单和数字签名提交给B审核,由于二者散列值相同,认证自然会通过,B就会把远远超过A认可的金额转账到X的户头。
必须提到的是,除了这种攻击之外,A也可以利用这个漏洞进行抵赖明明认可了一份购物清单,但A却诬陷X在清单中做了前面所描述的手脚而拒不承认自己曾经所签名的就是这份购物清单。
也就是说,一旦找到了所使用的单向散列函数碰撞问题的有效算法,交易的双方都可以用这种方式非法获利。
总之,随着找到越来越多的制造碰撞的有效算法,使现有使用了单向散列函数的数字签名体制也越来越容易遭到碰撞攻击,从而导致现有的数字签名体制存在很大的安全隐患。

发明内容
有鉴于此,本发明提供一种提高数字签名安全性的方法,以解决现有的数字签名体制容易遭到抗碰撞攻击的问题。
为解决上述问题,本发明提供如下技术方案一种提高数字签名安全性的方法,该方法包括如下步骤A、由签名方主动修改待签名原始许可文件,并使修改后许可文件中数据的语意和所述原始许可文件中数据的原始语意保持不变;B、利用单向散列函数对修改后的许可文件进行运算得到第一散列值;C、对第一散列值进行加密得到数字签名。
所述方法还包括步骤D、将待验证许可文件和所述数字签名提交给验证方;E、验证方解密所述数字签名得到第一散列值,以及利用单向散列函数对待验证许可文件进行运算得到第二散列值;F、确定第一散列值和第二散列值是否相同,如果相同则验证成功,否则验证失败。
所述原始许可文件是指从不完全可信任途径得到的待签名的许可文件。
步骤A中所述的主动修改是指根据原始许可文件的数据类型增加、删除和/或替换不改变数据原始语意的内容。
步骤A中所述的主动修改是指在原始许可文件中附加一个随机扰码。
本发明通过签名方主动对原始许可文件进行保护数据原始语意不变的篡改,在对数字签名体制的性能没有明显影响的前提下,让数字签名体制的安全性依赖于所用单向散列函数的更难解的第二原像问题,不再依赖于相对容易解决的碰撞问题,从而有效提高了数字签名体制的安全性。
本发明将数字签名攻击方所需要解决的问题由碰撞问题提升为第二原像问题。理论上可以一般性地证明任何单向散列函数第二原像问题的难度都绝对不会低于碰撞问题,实际应用中经过长期广泛分析和应用的单向散列函数一般认为第二原像问题不仅不低于碰撞问题,而是明显高于碰撞问题,近年来对若干单向散列函数的分析进展在一定程度上也支持了这种看法。因此可以合理地断言本发明的方法将提高数字签名体制的安全性。这种方法的具体实现是高效的,对系统整体性能的影响可以忽略不计。此外,这种方案既可以用于制定数字签名标准,又可以在相关的标准出台之前在许多安全产品中单方面实施而不会导致通讯对方无法理解所接收的数字签名信息。


图1为现有技术中数字签名和签名验证的示意图;图2为对数字签名进行碰撞攻击的示意图;图3为本发明数字签名和签名验证的流程图;图4为难以对本发明的数字签名进行攻击的示意图。
具体实施例方式
本发明主要是针对现有技术中对签名体制的碰撞攻击,将攻击者面临的与单向散列函数相关的碰撞问题提升为第二原象问题,达到无论签名中使用的单向散列函数是否抗碰撞,均可使数字签名体制能够抵抗碰撞攻击的目的。因此本发明仅涉及如何减少数字签名体制对单向散列函数安全性的依赖,不涉及非对称密码体制的内容。
前述碰撞攻击的原理是攻击者事先生成两个具有相同散列值的不同数据,然后将其中一份数据提交给签名者签名。如果签名者对数据做出了攻击者无法预期的主动篡改,再对数据生成数字签名,那么攻击者事先生成的另外一份数据由于其散列值与主动篡改后的数据不同,就无法利用其进行攻击。如果攻击者要根据签名者修改后的数据生成另外一组数据使之散列值不变,就需要解决更难的单向散列函数第二原象问题,只要第二原象问题没有找到有效算法,这种攻击就是不可行的,参阅图3所示。
因此,本发明的原理是在数字签名之前,签名方主动执行随机篡改步骤,将待签名数据进行一种非破坏性的随机扰乱,称为主动篡改,但要注意的是,这种主动篡改过程必须保护篡改前和篡改后数据的原始语意不变;然后再执行数字签名。
为了让攻击者不能预期主动篡改,因此可能的修改方式的组合总数必须足够多,并且在这些组合中进行挑选的算法也必须足够随机。如果只有一种固定的修改方式,那么攻击者可以在提交签署之前把这种固定的修改方式考虑进去,仍然可以进行碰撞攻击。可能的不同修改组合总数的最低限度根据此次签名能够容忍多大的攻击概率确定。没有绝对的安全,任何手段都不可能保证遭到攻击的概率为0,但必须要降低到可以接受的程度。价值1元的订单和价值100亿元的订单的安全要求显然是不同的。但可能修改的组合数是否越大越安全呢?并非如此,这只是安全链条的一个环节,如果所有可能修改的组合数的位宽度超过了散列值的位宽度,继续增大组合数就不会再提高安全性。例如,散列值的宽度是128bit,在许可文件中找到了200个修改位置,每个位置有两种修改方式,那么组合数的位宽度就是200bit,这种情况下所提高的安全性受散列值的位宽度限制,有72个修改位置是多余的。
保持数据原始语意不变的修改方式有许多种,可以构造一种数字签名协议,根据协议确定一种修改方式。但在针对这种问题的协议出现之前,本发明的机制仍然可以工作,但需要根据数据类型的不同,采取以下不同的随机修改方案1、文本格式。对于文本格式的数据(例如协议书或物品清单之类的数据),由于自然语言自身所具有的冗余性,可以选择的修改非常多将一些名词用同义词或缩略语替代,词和词、句和句之间的空格数量可以是一个、两个或者更多,段落尾部的空格数量可以更加随意地控制,空行中空格的数量,文件尾部空格和空行的数量,文件中某些列表的顺序等。除此之外,如果文本格式限制不是非常严格,可以直接在文本格式中附加一个辅助的随机扰码,直接附加在文本中。这个随机扰码可以用16进制来表示,所表示的数据宽度没有必要超过所用单向散列函数产生的散列值宽度。
2、图形格式。对于图形格式,或者视频格式,可以采用类似图像水印之类的机制,在不明显影响图片视觉效果的前提下进行随机微扰。要注意微扰本身的可能组合数没有必要超过散列值宽度,对于通常的图像来说,可能仅仅其中极少量的像素点就可以达到目的了。
3、声音格式。与图形格式类似,在不明显影响声音效果的前提下进行随机微扰,通常只需要修改极少量的采样点。
4、其它各种类型的数据格式,需要分析格式中的冗余信息,这些信息可以进行替代或增删而丝毫不影响数据的原始语意。如果格式本身就包括一些无关紧要的信息,例如程序代码中的注释,或者一些备注信息等等,可以直接在其中加入一个明显的随机扰码。
通过对这些格式的讨论可以看到,对于不同的格式,采取主动篡改的方式可能不同,而且在文本格式中,甚至可能难以完全自动化实现,某些类型的修改只能实现为半自动的人机交互版本。这显然对于安全产品的开发是不利的。不同的安全产品必须对它所处理的数据类型进行针对性的随机修改,甚至需要用户参与。
如何解决这个问题呢?一个更好的办法是创建使用主动篡改技术的数字签名标准协议。规定数字签名生成必须对原始数据附加一个与散列值宽度相同的随机扰码,数字签名验证方也必须对包含了扰码的数字签名进行验证。这样无论什么数据,都可以进行统一的自动化处理。这就是主动篡改法在数字签名协议中的应用方式,这种方式完全可以进行通用的自动化实现。
随机扰动过程中对随机性的要求。在计算机中使用随机扰动,就需要使用随机数发生器。随机数发生器包括硬件真随机数发生器,也包括软件伪随机数发生器,在完善的安全系统中,还可以得到安全随机数服务。对于无统计偏差的硬件真随机数发生器,其安全性自然得到保证。但更广泛使用的是软件伪随机数发生器。这种随机数发生器必须满足密码学对伪随机数的安全要求,否则一旦攻击者能够对之进行预测,那么随机扰码就毫无用处了。(真或伪)随机数发生器的安全性实际上不仅是主动篡改技术所必须的,密钥生成,数字签名验证等重要的安全服务,其安全性都依赖于随机数发生器的安全性(本发明不涉及如何保证伪随机数发生器的安全性,有关符合密码学安全标准的随机数发生器的内容请参考密码学和算法方面的专著)。
以数字签名协议为例说明具有主动篡改的数字签名和签名验证过程,如图4所示步骤1签名方在得到待签名的原始许可文件后,主动在待签名文本尾部附加一个名为“扰码”的字段,内容为随机生成的16进制数字字符串,该串所表示的随机数据位宽度等于原有数字签名体制中所用的单向散列函数生成的散列值宽度。所述的原始许可文件主要是指从不完全可信任途径得到的待签名的许可文件。
步骤2签名方利用单向散列函数对经过主动篡改的文件进行运算得到第一散列值。
步骤3签名方利用私有密钥对步骤2中得到的第一散列值进行加密得到数字签名。
步骤4将待验证的许可文件和数字签名提交给验证方。
签名方主动篡改之后的许可文件和数字签名均需要提交给验证方,主动篡改之后的许可文件作为待签名文件。当然验证方收到的待验证文件可能是签名方主动篡改后的许可文件,也可能是经第三方恶意修改后的待签名文件。
步骤5验证方利用签名方私有密钥所对应的公有密钥解密所述数字签名得到第一散列值。
步骤6验证方利用与步骤2中相同的单向散列函数对待验证的许可文件明文进行运算得到第二散列值。
步骤7判断第一散列值和第二散列值是否相同,如果相同则验证成功,即说明待验证的许可文件内容是真实有效的,如果不相同则验证失败,即说明待验证的许可文件内容不真实。
验证方并不关心“扰码”字段的内容,只要包括“扰码”字段的文本全文能够通过原有的签名验证即可确保许可文件内容真实有效。
上述签名过程采用的是非对称加/解密算法,当然也可以用对称加/解密算法,其主要不同之处在于签名方和验证方使用的是相同的密钥。对于具体的单向散列函数和加/解算法的采用与现有技术相同。
对于不允许附加额外字段的数据类型或者协议,也可以选择前述的几种对不同类型数据的主动篡改方式对待签名数据进行主动篡改,“扰码”字段的宽度也不一定要等于单向散列函数的散列值宽度相同,根据安全性的要求,可以小于这个宽度,以便减少数据长度。
从上述可知,无论单向散列函数是否抗碰撞,采用本发明都可使数字签名体制能够抵抗碰撞攻击,因此能够提高数字签名的安全性;而且本发明对数字签名体制的运行效率(包括时间和空间效率)没有负面影响。本发明的方法可以应用在数字签名标准或者安全产品中。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若对本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
权利要求
1.一种提高数字签名安全性的方法,其特征在于包括如下步骤A、由签名方主动修改待签名原始许可文件,并使修改后许可文件中数据的语意和所述原始许可文件中数据的原始语意保持不变;B、利用单向散列函数对修改后的许可文件进行运算得到第一散列值;C、对第一散列值进行加密得到数字签名。
2.如权利要求1所述的方法,其特征在于该方法还包括步骤D、将待验证许可文件和所述数字签名提交给验证方;E、验证方解密所述数字签名得到第一散列值,以及利用单向散列函数对待验证许可文件进行运算得到第二散列值;F、确定第一散列值和第二散列值是否相同,如果相同则验证成功,否则验证失败。
3.如权利要求1所述的方法,其特征在于,所述原始许可文件是指从不完全可信任途径得到的待签名的许可文件。
4.如权利要求1、2或3所述的方法,其特征在于,步骤A中所述的主动修改是指根据原始许可文件的数据类型增加、删除和/或替换不改变数据原始语意的内容。
5.如权利要求4所述的方法,其特征在于,根据不同修改方式组合总数的位宽不大于所述单向散列函数的散列值位宽的原则进行随机修改。
6.如权利要求1、2或3所述的方法,其特征在于,步骤A中所述的主动修改是指在原始许可文件中附加一个随机扰码。
7.如权利要求6所述的方法,其特征在于,所述随机扰码插入原始许可文件的尾部。
8.如权利要求6所述的方法,其特征在于,所述随机扰码的位宽不大于所述散列值的位宽。
9.如权利要求6所述的方法,其特征在于,采用硬件真随机数发生器或符合密码学安全要求的软件伪随机数发生器产生所述随机扰码。
10.如权利要求1所述的方法,其特征在于,所述加密和解密采用对称加/解密算法,或者采用非对称加/解密算法。
全文摘要
本发明公开了一种提高数字签名安全性的方法,以使数字签名体制能够抵抗碰撞攻击。该方法为由签名方主动修改从不完全可信任途径得到的待签名的原始许可文件,并使修改后许可文件中数据的语意和所述原始许可文件中数据的原始语意保持不变;然后对修改后的许可文件进行哈希运算和加密得到数字签名。本发明将数字签名攻击方所需要解决的问题由碰撞问题提升为第二原像问题,从而使数字签名体制能够抵抗碰撞攻击。
文档编号H04L9/30GK1753360SQ20041007928
公开日2006年3月29日 申请日期2004年9月26日 优先权日2004年9月26日
发明者孙伊 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1