我们都知道,HASHing是验证密码系统完整性的用户。我有个关于哈希的疑问。
假设中间攻击者操纵数据并使用相同的散列算法(因为哈希算法是通用算法)创建新哈希(通过在被操纵的数据上运行算法),并将其与被操纵的数据一起发送给receiver.when接收方,运行在被操纵数据上的算法,则得到相同的哈希(攻击者创建的哈希),尽管完整性将得到验证。但实际数据已被操纵/修改,完整性受到损害。
有可能吗?如果有可能,我们如何才能消除这个问题(解决同样的问题)?
发布于 2015-04-17 09:07:19
的确,散列是用来确保完整性的,但不是这样。
您的想法似乎是发送(msg, Hash(msg))。事实上,这是不安全的,因为你所描述的攻击。
第一步从你自己说的话开始:
散列算法是通用的算法。
这个名字不是统一的,而是公开的,它意味着任何人都知道它。而不是哈希算法,我们将使用一个MAC (维基百科:MAC),这是一个带有密钥的散列算法。一个很好的MAC结构是HMAC:HMAC(msg,key1,key2) = H( key1 || H(key2||msg) ),其中H是一个密码散列,而||是级联的。
如果我们阻止对手知道我们使用的密钥,他就不能在修改消息后重新计算MAC。所以现在我们只需要MAC密钥上的隐私,这是另一个挑战,你可以用密钥交换协议(通常是: Diffie-Hellman)来解决它,如果你有中间人身份验证,等等……
发布于 2015-04-21 02:07:53
通常,哈希本身并不是为了完整性而使用的,这正是您所述的原因。为了使它们更强大,我们使用发送方的private key对哈希进行加密。这样,任何拥有发件人的public key的人都可以解密哈希并根据消息的新哈希来检查它,但是中间人不能伪造它,因为他们没有发送者的private key。
这叫做数字签名。
https://crypto.stackexchange.com/questions/25048
复制相似问题