(我只想找到我错过的东西......)
假设John有清除短信,他可以创建常规hash
(如md5或sha256),然后加密消息。
John现在可以向Paul发送消息+其(明文)哈希,Paul可以知道消息是否被更改。 (解密然后比较哈希)。
即使如果攻击者可以更改加密数据(没有解密) - - 当paul打开邮件时 - 并重新计算哈希 - 它不会生成与john发送给他的哈希相同的哈希值。
那为什么我们需要按密钥哈希?
答案 0 :(得分:1)
看起来你不必须它只是一个好主意,因为通过在哈希中包含密钥,它表明数据确实是用原始密钥加密的 - 几乎是无限期的。显然你上面的例子可行,但我会说你不能100%确定消息没有被智能操纵,或者暴力破解试图在另一方产生解密但是看起来不正确但是没有不会触发哈希检查失败。
消息发送方使用HMAC功能生成通过压缩密钥和消息输入形成的值(MAC)。通常将MAC与消息一起发送到消息接收器。接收方使用与发送方使用的密钥和HMAC功能相同的密钥和HMAC函数计算接收到的消息上的MAC,并将计算结果与接收到的MAC进行比较。如果两个值匹配,则已正确接收消息,并确保接收方确认发送方是共享密钥的用户社区的成员。
FIPS PUB 198
联邦信息处理标准出版物
“密钥哈希消息认证码(HMAC)”
使用上述方法意味着您需要额外检查安全性。解密消息后,将原始密钥附加到消息并运行散列函数。然后,将新哈希与发送的哈希进行比较。这是一个更好的检查,因为您知道攻击者必须知道密钥(或非常幸运)才能生成通过哈希检查的内容。它基本上是试图避免那些可能非常了解散列函数的攻击者,并限制他们可以做出的改变。
答案 1 :(得分:0)
如果您问为什么密钥是经过哈希处理的,它允许数据库或操作系统以更安全的格式存储密码。系统可以通过将密钥的散列与存储的密钥散列进行比较来检查密钥的有效性。
此外,安全系统不仅具有密钥,而且还具有密钥+已知随机模式(= salt),这可防止人们生成最常用密码的哈希字典。即使使用密码=密码,系统首先将其附加到“passwordAK(43mafk2;”并计算散列。该散列不再与任何其他人的预计算字典匹配,但攻击者必须将自己的密码字典连接到“AK” (43mafk2;“并为系统中的每个密码重新计算哈希值。
答案 2 :(得分:0)
原始未加密文本的哈希的原因是为了增加安全性。这里的问题不在于是否有人操纵加密数据 - 该操作很少会解密成有意义的内容,而是阻止拥有密钥的人解密文本,更改文本并使用相同的密钥重新加密。
所以基本上,即使有人有办法解密您的文本,如果他们这样做,更改您的文本,重新加密并将加密数据传递到最终目的地,您可以验证数据是否被操纵。
实施例: 我有文件#1,里面有文字“Samuel” - 这是我们组织中间谍鼹鼠的名字。让我们假设我用文本“qwerty”将其加密到文件#2中。我将文件#2传递给彼得以交付给亚当。然而,彼得是一个狡猾的卑鄙小人,是苏联的间谍。他之前窃取了我的加密/解密协议,他希望通过将“Samuel”改为“Justin”来误导我们。因此,他将“qwerty”解密回“Samuel”,将“Samuel”更改为“Justin”,使用相同的规则将其加密为“asdfg”,并将此文件传递给Adam。亚当成功解密文件#2并假设“贾斯汀”是苏联间谍......如果他没有哈希“贾斯汀”并打电话给我确认我们的哈希是否匹配。惊喜!他们不!因此,我们知道有人操纵数据并且有人知道解密/加密协议!保存数据完整性!