是否说HMAC-SHA1的安全性不取决于对碰撞的抵抗力?他们是在专门针对HOTP还是针对HMAC-SHA1进行任何使用?
如果将HMAC-SHA1用于验证文档的完整性,并且发现冲突,则可以在文档中进行更改,对吗?
http://tools.ietf.org/html/rfc2104#section-6
即使RFC指出抵抗碰撞也很重要
这里介绍的消息身份验证机制的安全性取决于哈希函数H的密码属性:冲突发现的抵抗力(限于初始值是秘密和随机且函数输出的情况)不能明确地提供给攻击者使用),以及将H的压缩函数的消息认证属性应用于单个块时
我在这里缺少什么? >
#1 楼
在此答案的第一部分中,我将假设通过更好的硬件或/和算法改进,通过类似于王小云,Yiqun Lisa Yin和Hongbo的方法对SHA-1进行碰撞已成为常规可行Yu的进攻,或Marc Stevens的进攻。这已在2017年初公开实现,并且显然是可行的(这项工作仅代表花费在比特币挖矿上的哈希工作数小时;但是用于此目的的硬件不能重新用于SHA-1的攻击) 。与问题所考虑的相反,这不允许攻击者不拥有HMAC-SHA-1密钥而无法在文档中进行未发现的更改;这包括攻击者是否能够准备自己愿意稍后修改的文档。
一种解释是,我们正在考虑对SHA-1进行的碰撞攻击需要了解SHA-的状态。 1个链接变量,并且不知道密钥的HMAC攻击者通过在消息位于HMAC中的回合迭代的两个末端输入密钥而剥夺了该知识。要打破HMAC,需要更深层次地突破SHA-1的回合功能。并非巧合的是,M。Bellare的针对NMAC和HMAC的新证明:无冲突抵抗的安全性表明,HMAC的安全性假设其舍入函数仅具有比相应散列的抗碰撞性所需的弱的属性。对于知道HMAC密钥的攻击者来说,可能的是准备一个他/他以后愿意更改的文档,可以在不更改MAC的情况下对其进行更改。但是由于攻击者持有HMAC密钥,因此这不认为是HMAC的破坏。建议在需要抗碰撞的应用中快速淘汰SHA-1(如图所示:当您离开没有烟雾时会响起警报的建筑物时,请迅速走开)。这包括用于完整性检查的散列或其他人准备的文档(包括大部分文档)的数字签名。如果继续使用SHA-1具有强大的运营优势,则可以通过在对手可能影响的消息的任何部分之前插入对手无法预测的内容来安全地将其作为例外。例如,通过在请求证书时强制使用不可预测的证书序列号,证书颁发机构仍可以使用SHA-1作为内部签名来安全地颁发证书。
如第一部分所述这个答案,只要假设HMAC-SHA-1的密钥是秘密的,就没有迹象表明HMAC-SHA-1是不安全的,因为它使用SHA-1。如果认为该密钥是公开的,或者认为仍存在泄漏的可能性,而仍希望HMAC具有防撞性,包括在密钥公开后准备的消息,则适用上一段中的预防措施。
评论
$ \ begingroup $
那么什么时候不应该使用SHA1?即在SHA1中发现问题,使其无法在哪里使用?
$ \ endgroup $
–user93353
15年6月25日在10:42
$ \ begingroup $
通常建议从SHA-1移开(“走”而不是“跑”)。就是说,由于HMAC的安全性证明不依赖底层PRF的抗冲突性,因此仍认为HMAC-SHA1的特定构造可以安全使用(假定为密钥)。如有疑问,请移至SHA-2。
$ \ endgroup $
–斯蒂芬·托瑟(Stephen Touset)
2015年6月25日在16:37
$ \ begingroup $
@StephenTouset-是的,我明白了。但是,SHA-1是否有任何用途,您应该从中逃走而不是离开或走开。
$ \ endgroup $
–user93353
2015年6月25日19:23
$ \ begingroup $
不,否则将是建议。 SHA-1的耐碰撞性目前仅在理论上被打破。尽管目前最好的攻击只是在可行性边缘,但尚未发现已知的冲突。
$ \ endgroup $
–斯蒂芬·托瑟(Stephen Touset)
2015年6月25日19:50
#2 楼
当人们说HMAC-MD5或HMAC-SHA1仍然是安全的时,它们表示它们仍然像PRF和MAC一样安全。 br />$$ \ mathrm {HMAC} = \ mathrm {hash}(k_2 | \ mathrm {hash}(k_1 | m))$$
可能的攻击1:找到一个通用冲突,它对许多键都有效:这意味着攻击者在消息开始时不知道哈希的内部状态。查找最容易冲突的消息是$ k_1 $是非常困难的1。需要的休息不仅仅是碰撞。这类似于第一次映像前攻击,此属性对于MD5和SHA1仍然很强大。
另一方面,如果您使用了攻击者已知的密钥,并且攻击者能够在基础哈希中发现冲突(对于任意IV),则这些冲突将变为HMAC。因此,如果您需要在无密钥的情况下安全,请使用诸如SHA2之类的抗冲突哈希,并考虑完全不使用HMAC。即使对于计算上不受限制的攻击者,也很难证明。
评论
$ \ begingroup $
那么什么时候不应该使用SHA1?即在SHA1中发现问题,使其无法在哪里使用?
$ \ endgroup $
–user93353
15年6月25日在10:41
$ \ begingroup $
@ user93353就像我说的那样,HMAC-SHA1的安全性取决于未知密钥。如果没有密钥或攻击者不知道,则SHA1中的冲突将成为威胁。但是SHA1应该很少(如果有的话)用在新设计中,因为有更好的选择。
$ \ endgroup $
– CodesInChaos
2015年6月25日在10:47
$ \ begingroup $
如果攻击者知道密钥,那么即使SHA2也是问题,对吗?
$ \ endgroup $
–user93353
15年6月25日在10:53
$ \ begingroup $
@ user93353取决于您要实现的目标。当然,没有密钥散列不是MAC。
$ \ endgroup $
– CodesInChaos
2015年6月25日在11:03
$ \ begingroup $
@CodesInChaos-您说HMAC-SHA1仅在知道密钥的情况下才是问题。但是,如果知道密钥,那么对于任何HMAC哈希操作都会是一个问题,对吗?
$ \ endgroup $
–user93353
15年6月25日在11:19
评论
这个问题似乎有一个困惑:HMAC-SHA1并不用于签署文档(至少通常不使用;并且假设是这样,由于签名,HMAC的标准输入假设其密钥输入是秘密的,因此无法成立)验证程序是公开的)。我觉得这个答案很好。@fgrieu-我认为我在术语上犯了一个错误-编写签名时,我实际上应该编写生成消息身份验证摘要来保护完整性。如果发生冲突,您可以更改消息并保留相同的MAC,所以这是一个问题,对吗?
我们是否应该将其作为HMAC-MD5的副本用于身份验证加密数据的安全性吗?虽然这个问题是关于SHA1而不是MD5的,但答案几乎是相同的。
我很确定我是否会对SHA-1进行映像前攻击,然后爆炸。