cryptography - 消息中的内部散列摘要是否加强了外部摘要?

标签 cryptography hash

消息摘要用于验证消息是否是预期消息。

将散列摘要与内容捆绑在一起以形成消息会增加多少碰撞和原像攻击消息的难度?

例如编码:

message = data . hash1(data)
message_hash = hash2(message)

使用 message_hash 验证消息:

check(hash2(message) == message_hash)
data = message[:-digest_size]
check(hash1(data) == message[-digest_size:])

hash1hash2 可以是完全不同类型的哈希函数。

我的理由是,任何攻击都必须破坏两个哈希函数——伪造外部摘要需要使用有效的内部哈希构建消息。

最佳答案

如果外部哈希算法被破坏,内部哈希可能会有所帮助,但您必须考虑使用备受推崇的算法时出现这种情况的可能性有多大。

如果外层哈希值太小以至于可以进行暴力攻击,那么内层哈希值就毫无用处。攻击者不必找到具有相同哈希值的消息,而是必须找到一条消息加上具有相同外部哈希值的内部哈希值,这几乎等同于同一件事。

因此,使散列尽可能大,并集中精力确保系统的其余部分没有后门。 64 位可能就差不多了,除非你预计政府或大公司会对破解你的哈希感兴趣。

关于cryptography - 消息中的内部散列摘要是否加强了外部摘要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5587496/

相关文章:

java - 在客户端-服务器应用程序中使用 RSA 时为 "UnsupportedEncodingException: SHA"

mysql - 关于在 MySQL 中使用 md5() 内置函数哈希的问题

c# - 如何在不同平台创建相同的 MD5 token ?

powershell - 如何使用PowerShell自动填充Active Directory hashedPassword字段

encryption - 如何将 256 位公钥编码为可变长度的字序列

javascript - NodeJs 加密 key 创建(google kms key 导入) NodeJs

java - SHA256withRSA 签名从 PHP 验证从 JAVA

.net - RSACryptoServiceProvider.Decrypt() 为 "System.Security.Cryptography.CryptographicException: Bad Key."

java - 如何膨胀 git 树对象?

java - 当我们散列特定字符串或单词时,真正发生的事情(实际过程)