某些字符串 STR 的结果是:
SHA256(STR)=3f7c54571faee024e3fd68603c5c95f6a4c8ef73a398840b974f3f57737a116f
有可能得到结果SHA256(myOwnString+STR)
吗?('+' 用作连接)
这种情况下是否有任何已知的攻击?
myOwnString+STR
将是一个完全不同的字符串STR
- 所以,这两个将有完全不同的哈希值;并查看那些散列,您无法猜测它们是您的散列函数被应用于STR
和基于STR
.
这正是我们通常建议在对密码进行哈希处理时使用盐的原因——请参阅Salt (cryptography)。
您所描述的是评估哈希函数的“雪崩属性”;如果你稍微改变输入,输出会改变多少?即使输入仅更改一位,任何体面的散列函数都应该能够彻底破坏结果。这就是为什么像盐和随机数这样的东西可以很好地工作的原因,因为在初始字符串中添加几个字节(它本身可能很弱、很短或可预测,就像密码一样),会将散列的结果更改为与原始字符串完全不同且无关的东西.
更直接地回答你的问题:
2008 年的一次攻击破坏了 80 轮 SHA-512 中的 46 轮和 64 轮 SHA-256 中的 41 轮的原像抗性。 [1] 针对多达 24 步的 SHA-256 的碰撞攻击
和
有两次针对 SHA-2 的中间相遇原像攻击,轮数减少。第一个攻击 64 轮中的 41 轮 SHA-256,时间复杂度为 2253.5,空间复杂度为 216,以及 80 轮中的 46 轮 SHA-512,时间为 2511.5,空间为 23。第二个攻击 42 轮SHA-256 的时间复杂度为 2251.7,空间复杂度为 212,42 轮 SHA-512 的时间复杂度为 2502,空间复杂度为 222。
所以是的,它被削弱了,但它还远没有用处。而且我还没有发现任何特定于处理输入长度扩展的攻击。