出于签名和验证签名的目的,哈希函数的值是什么?

为什么以后确定SHA1易于破解怎么办?由于仍使用公钥/私钥过程,SHA1仅仅是创建较小数据进行签名的实用工具吗? br />

评论

欢迎使用密码学堆栈交换。您的问题之所以被迁移到这里,是因为与软件开发没有直接关系(Stack Overflow的主题),而在这里完全成为话题。请也在这里注册您的帐户,以便能够发表评论并接受答案。

#1 楼

数字签名方案具有一定的规模(例如,可以对哪种消息进行签名)。此消息的大小通常与密钥的大小有关,并且比您要签名的大多数有趣消息小。

因此,我们使用哈希函数来映射任意长度的消息(理论上大多数散列函数的最大大小限制,但实际上不相关)固定长度的散列,然后将此散列用作签名函数的输入。

对于用于数字签名,我们需要哈希函数的抗碰撞属性:


要找到一对消息$ x \ neq x'$使得$ H(x)= H( x')$。

没有此属性,对手可能会产生两个具有相同哈希值的不同消息,给我一个(看起来很天真)签名,然后再来展示另一个

加密散列函数的其他有趣属性是图像前阻力(给定散列$ h $,应该很难找到带有$ h的消息$ x $ = H(x)$)–本身并没有那么有趣,因为我们通常已经知道签名后的消息–和第二原像电阻(给定消息$ x $,应该很难找到消息$ x'\ neq带有$ H(x)= H(x')$)的x $ –防止攻击者创建第二条消息,该消息具有与我已经签名的哈希相同的散列值。Rob在回答中详细说明了发现的冲突(或第二个原像)是否具有有效的消息格式。尽管可能更容易发现与无效消息的冲突,但通过暴力冲突搜索,我们可以使用任意给定的散列原则上创建任何有效格式的消息(只要有足够的余量可以操作)。如果哈希函数是安全的,则蛮力是找到(第二个)原图像或冲突的最佳方法,然后哈希输出大小(以及一次哈希评估的时间)成为安全性的限制因素。 (当然,假定签名方案本身是安全的。)

对于MD5,抗碰撞性实际上被破坏了,即,创建两条消息并不难,它们仅在某些方面有所不同在中间,并具有相同的哈希值。

由于SHA-1与MD5具有相似的结构,因此预计SHA-1也将发现弱点,而SHA-今天首选2(即SHA-256或SHA-512)。

有一个竞争正在定义SHA-3,它应该比SHA-2更安全。 Keccak哈希函数系列赢得了这一竞争,2015年SHA-3标准在FIPS 202中正式发布。SHA-3的结构与MD5,SHA-1和SHA-2完全不同,因此,预计会有任何弱点

在设计新协议时,请尝试以可以切换散列功能的方式进行操作,以便在其他协议可以使用SHA-2或SHA-3时使用一个显示吱吱作响。

评论


$ \ begingroup $
如果我完全控制签名怎么办?我的意思是,我在封闭的门后面创建了Public,Private,Message和Hash ...然后对消息签名。接下来,我放弃消息和公共密钥。我再也不会“签名”,甚至不会尝试验证。只有拥有公钥和消息的人才会尝试用我刚才在银色盘子上给他们的东西进行验证。在这种情况下,我不确定SHA 1弱点会如何影响我。如果这听起来很愚蠢,那只是因为我还没有头脑好。
$ \ endgroup $
–微晶石
2011-09-28 19:34

$ \ begingroup $
如果散列被破坏(在第二原像意义上),则拥有该消息的任何人都可以构造具有相同散列的第二条消息,从而使相同的签名有效。此人甚至不需要公钥或原始签名。
$ \ endgroup $
–PaŭloEbermann
2011-09-28 19:39



$ \ begingroup $
是的,完全正确。 (或者您可以说您签署了其他内容,显示了伪造的文档。)
$ \ endgroup $
–PaŭloEbermann
2011年9月28日在20:06

$ \ begingroup $
“对于MD5,原像电阻有效地被破坏了”,我想你的意思是说“防碰撞”。
$ \ endgroup $
– CodesInChaos
2012年7月30日12:28

$ \ begingroup $
btw。并非每个签名方案都需要基础哈希函数的抗冲突性。例如,如果该方案以攻击者在散列之前无法预测的值作为消息的前缀,则正常的冲突将不起作用。
$ \ endgroup $
– CodesInChaos
2012年7月30日12:30



#2 楼

从理论上讲,您可以通过使用私钥加密整个文档来“签名”整个文档。这将使签名与文档的大小大致相同,这是不切实际的。相反,我们通过使用私钥对文档的哈希值加密来签署文档。这样可以减小签名的大小,这在大多数情况下更加实用。这是哈希定义中固有的。产生良好哈希值的原因是:(a)给定哈希值后,很难找到生成哈希值的文档;(b)生成相同哈希值的两个文档应该有很大的不同。 “完全不同”是指“一个是电子表格,另一个是100 PB的噪声。”

一个较差的散列函数是一种可以让您找到两个“合理的”文档,具有相同的哈希值。一项很差的哈希函数是一种功能,它使您无法制作出看上去有意义的文档,从而生成所需的哈希值。

因此,想象一下我可以修改您的电子表格,并在末尾添加额外的兆字节数据,它将生成与原始哈希相同的哈希。这将是一个非常糟糕的哈希函数,尤其是在电子表格程序愿意忽略其他信息的情况下。我们希望SHA-1是这种哈希函数。

请注意,加密就像建立桥梁。这都是关于安全裕度的。仅仅因为今天的攻击是不切实际的,并不意味着明天的攻击就不切实际(攻击只会变得越来越好,它们永远不会变得更糟)。当我们开始发现算法中的细小裂缝时,就该开始开发下一个算法了。对于大多数实际问题,MD5仍然足够,但是它开始出现裂纹,因此是时候将其替换为SHA-0(其中存在错误,并替换为SHA-1)。 SHA-1开始显示出一些裂缝,因此正在开发SHA-3来替代它。 (SHA-2已经存在,但大多数开发人员可能会跳过它。)

评论


$ \ begingroup $
实际上,“应该千差万别”更像是“很难找到两个这样的文档”(但是,很可能会有很多电子表格仅在某些单元格中有所不同) 。
$ \ endgroup $
–PaŭloEbermann
2011-09-28 17:18

$ \ begingroup $
我同意“很难找到两个这样的文档”,但是部分要点是,“完全不同”意味着“可以想象,只有无限的等效于哈希的文档中的一个应该映射到有意义的数据编码。 ”如果一个是MP3,另一个是文字处理文档,那仍然太相似了。就您的观点而言:“即使如此,也很难找到与哈希值等效的难以理解的Blob。”
$ \ endgroup $
–罗布·纳皮尔
2011-09-28 17:50

$ \ begingroup $
不,有无限多个可能有意义的文档,但是只有2 ^ 160个不同的SHA-1散列。通过仅更改文档的某些短部分(总长度超过80位,例如电子表格的非重要单元格中的一些数字),您必然会与明智的文档发生冲突。当然,这(使用安全的哈希函数)在攻击者的一生中仍然花费太多时间。
$ \ endgroup $
–PaŭloEbermann
2011-09-28 17:57



$ \ begingroup $
此外,跳过SHA-2绝对不是事实;如果您需要安全的哈希函数,通常使用SHA-2哈希(因为SHA-1具有已知的弱点,而SHA-3不可用)。
$ \ endgroup $
–雨披
2011-09-28 18:36

$ \ begingroup $
如果您尝试通过使用RSA的私钥对整个文档进行加密而仅对整个文档进行“签名”,则会发生可怕的事情。对于大文档,您需要将文档切成小段。然后,对手可以删除一段,并且签名仍然有效。对手可以按任何顺序将多个签名中的片段拼凑在一起。此外,他知道全零,数字1和数字n-1的段的签名。对手可以选择任何$ s $,计算$ m = s ^ e \ bmod N $,并为分段$ m $签名。
$ \ endgroup $
–fgrieu♦
16-10-6在7:39