2012-11-10 44 views
2

(我只是想找到我失去了什么......)为什么我们需要通过密钥哈希?

假设约翰有明确短信,他就可以创建一个常规hash(如MD5或SHA256)和然后加密消息

John现在可以向Paul发送消息+其明文散列,Paul可以知道消息是否被更改。 (解密然后比较散列)。

即使如果攻击者能够改变encrpyted数据(没有解密) - - 当保罗将打开消息 - 和重计算哈希 - 它不会产生相同的散列作为一个约翰送给他。

那么为什么我们需要散列键?

enter image description here

enter image description here

+0

你所说的“通过密钥散列”是什么意思?在你的例子中,密钥函数是明文消息。 – SomeWittyUsername

+0

@icepack编辑感谢。 –

回答

1

它看起来像你不它仅仅是一个好主意,因为通过在哈希键它显示。数据确实是用原始密钥加密的 - 几乎是无限期的,显然你上面的例子可以工作,但我会说你不能100%确定这个消息没有被智能操纵,或者暴力试验和错误,在另一方产生一个正确的解密,但不会触发哈希检查失败。

的HMAC函数由消息发送器,以产生由冷凝秘密密钥和消息输入形成的值(MAC)。通常将MAC与消息一起发送到消息接收器。接收器使用与发送器所使用的相同的密钥和HMAC功能来计算接收到的消息上的MAC,并将计算的结果与接收到的MAC进行比较。如果两个值匹配,则消息已被正确接收,并且接收者可以确信发件人是共享密钥的用户社区的成员。

FIPS PUB 198
联邦信息处理标准出版物
“的密钥散列消息认证码(HMAC)”

使用上述方法意味着你有一个额外的检查安全。在解密消息之后,您将原始密钥附加到消息并运行散列函数。然后,您将新散列与发送的散列进行比较。这是一个更好的检查,因为您知道攻击者必须知道密钥(或非常幸运)才能生成通过散列检查的内容。这基本上是试图避免那些可能知道哈希函数的攻击者,并限制他们可以做出的改变。

+0

嗨,你可以去http://chat.stackoverflow.com/rooms/19369/room-for-royi-namir-and-pebbl –

+0

@罗伊纳米尔道歉,我出去了昨天剩下的时间......今天再出来。如果你有问题,但我应该能够在一周内回答他们。 – Pebbl

0

如果你问为什么键被散列,它允许数据库或操作系统存储在更安全的格式的密码。系统可以通过比较密钥的哈希和密钥的存储哈希来检查密钥的有效性。此外,一个安全系统不仅散列一个密钥,而且还有一个密钥+已知的随机模式(= salt),它可以防止人们生成最常用密码的散列字典。即使使用密码=密码,系统首先会将它附加到“passwordAK(43mafk2;)”并计算散列值,该散列值不再与任何其他人的预先计算好的字典相匹配,但攻击者必须将他自己的密码字典连接到“AK (43mafk2“;以及遍布再次计算哈希值对系统中的每个密码

+0

恕我直言 - 盐没有关系。它们只是为了防止彩虹表而存在,并防止相同的数据产生相同的散列。我的问题是'为什么我们需要通过钥匙来计算哈希值? –

+0

你能否详细说明一下,“hash _by_ key”是什么意思? –

+0

已编辑。谢谢....... –

0

之所以有原来的未加密的文字的哈希以增加安全性。这里的问题不是是否有人操纵的加密数据 - 该操作将极少解密成有意义的事情,而是防止别人谁拥有从解密的文字,改变它,并使用相同的密钥重新加密它的关键。

所以基本上,即使有人有办法解密您的文本,如果他们这样做,改变您的文本,重新加密并将加密数据传递到最终目的地,您可以验证数据是否被操纵。

例如: 我有文件#1,里面有文本“Samuel” - 这是我们组织中间谍的名字。让我们假设我将它加密到带有文本“qwerty”的文件#2中。我将文件#2传递给彼得送到亚当。然而,彼得是一个狡猾的骗子,是苏联的间谍。他之前偷了我的加密/解密协议,他想通过将“Samuel”改为“Justin”来误导我们。于是,他解密“QWERTY”回“塞缪尔”,改变“塞缪尔”到“贾斯汀”,用同样的规则加密成“asdfg”,并沿此文件,以亚当通行证。亚当解密文件#2成功,并会承担“贾斯汀”是苏联间谍....如果他不凑“贾斯汀”,并要求我确认我们是否哈希匹配。惊喜!他们不!因此,我们知道有人操纵数据,并且有人知道解密/加密协议!数据完整性保存!

相关问题