2013-02-10 27 views
8

不知何故,我沒有得到HMACs。HMAC與對稱密碼學有什麼好處?

我曾經問Why do I need HMACs when we do have public key signatures?,我覺得我得到了這一個。更容易計算,等等...

但是,我不明白的是,爲什麼我們分別爲他們解決什麼樣的問題需要HMACs可言。

從我的理解,HMACs ...

  • 提供了一種方法,以確保信息不被篡改,
  • 是由祕密「安全的」,但對稱密鑰。

因此,爲了計算HMAC(初始或驗證),我確實需要知道密鑰。

現在,如果我能在沒有它被tampared以祕密的方式交流這方面的關鍵,我也可以在沒有它被篡改的非常相同的祕密的方式交換信息,不是嗎?

好了,現在你可能會說,你只需要一次交換密鑰,但是你可能有多個消息。沒關係。

但是,如果我們現在有一個祕密密鑰必須得到各方的保密,我們也可以直接使用對稱加密使用同樣的密鑰來加密消息,我們能不能?

當然,HMAC應提供防篡改解決方案,但是如果我只有一個沒有密鑰和合理加密算法的加密消息,我不能以a)解密仍然有效的方式更改該加密消息,和b)出現有意義的解密消息。

那麼我需要一個HMAC實際用於什麼? 或者 - 我失蹤的地方在哪裏?

+0

我認爲一種可能的用途是如果您交換了大量信息,並且不希望加密和解密所有信息的計算開銷 - 尤其是移動和嵌入式設備,這可能會成爲問題。 – Patashu 2013-02-10 09:44:33

+0

我很高興這得到了正確的回答,但應該在http://crypto.stackexchange.com/上提出這個問題(如果尚未提出)。 – 2013-02-10 12:36:32

回答

11

假設在不知道用於加密的密鑰的情況下篡改加密的消息是不可能的。情況並非如此,並且是一個危險的假設。有幾件事情可能的,即使你只能訪問密文:

  • 消息的後綴的腐敗:這會泄露有關通過的錯誤信息,時間和其他可能的方式來處理內容的信息。
  • 某些模式(ECB,CFB和其他模式)的消息範圍受損:與上面相同,但攻擊者有更多方法來觸發想要的行爲。
  • 翻轉在單塊的任意位(不知道盡管他們的初始值)和下面的塊(CFB)的腐敗:如果某些位是已知的攻擊,他可以將其設置爲他想要的價值。
  • 翻轉整個消息中任意位的流密碼或流密碼塊密碼的等效模式:這可以完全避免損壞。

因此,驗證在處理解密內容的單個字節之前沒有攻擊者篡改消息是非常重要的。由於使用臨時驗證或簡單散列法這樣做有一些缺陷,因此需要HMAC是其中一個例子的MAC。

+0

非常感謝:-)。這完美地回答了我的問題! – 2013-02-10 11:21:11

+1

歡迎來到stackoverflow,jix!您也可能對姊妹網站crypto.stackexchange.com和security.stackexchange.com感興趣。 – 2013-02-10 12:40:16