在密码学中,密码散列函数上的原像攻击用于寻找有着特定哈希值的消息。一个密码散列函数应该抵御对其原像的攻击。
在攻击情形下存在两种原像抗性:
这些可以与抗碰撞性(英语:collision resistance)对比。抗碰撞性是指无法从计算角度找到任何两个哈希值都相同的独特输入,例如() = (′)。
抗碰撞性包含了次原像抗性,但无法保证原像抗性。相反,次原像攻击包含碰撞攻击(详细来说,除了′,在一开始就已知)。
根据定义,使用最快方法计算出原像或次原像破解理想的杂凑函数的方法是使用暴力破解法。对于一个位哈希,此攻击对于典型输出 = 128位的大小有着过高的时间复杂度2。若这种复杂度最佳且可被被攻击者达到,这种哈希函数就被认为是抗原像的。然而,量子计算机可在√2 = 2/2内执行原像攻击,也就意味着可进行次原像攻击即碰撞攻击。
通过分析特定杂凑函数可找到对此函数更快原像攻击。学者找到了部分重大的原像攻击,但它们并不实际。若找到了实际的原像攻击,它将极大地影响诸多互联网协议。此例中,“实际”意味着可被攻击者使用可行数量的资源执行。例如,一个花费几万亿与数十年来找出一条哈希值或信息的原像攻击是不实际的;而一个仅花费几千块且只需要几周时间的攻击可能是非常实际的。
所有对MD5与SHA-1已知的实际或近乎实际的攻击均为碰撞攻击。总之,碰撞攻击相比原像攻击更易进行,碰撞攻击不被任何设定的值(任意两个值均可用于碰撞)所限制。相反,碰撞攻击的时间复杂度为2/2。
为提高对原像攻击的抗性,双重散列(英语:double hashing)是一种抵御某种情况攻击者破解了首个哈希的好策略。比特币系统使用双重散列SHA256,一种2000年代减缓哈希破解的常见手段。