天天看點

對消息認證碼的攻擊

一 重播攻擊

1 故事

對消息認證碼的攻擊

主動攻擊者Mallory想到可以通過将事先儲存的正确MAC值不斷重放來發動攻擊,如果這種攻擊成功的話,就可以讓100萬元滾雪球般地變成1億元。

攻擊過程如下:

1 Mallory竊聽到Alice銀行與Bob銀行之間的通信。

2 Mallory到Alice銀行向自己在Bob銀行中的賬戶M-2653彙款100萬元。于是Alice銀行生成了下列彙款請求消息:

“向賬戶M-2653彙款100萬元”

Alice銀行為該彙款請求消息計算出正确的MAC,然後将MAC和消息一起發送給Bob銀行。

3 Bob銀行用收到的消息自行計算MAC,并将計算結果和收到的MAC值進行對比。由于兩個MAC值相等,是以Bob銀行判斷該消息是來自Alice銀行的合法彙款請求,于是向Mallory的賬戶M-2653彙款100萬元。

4 Mallory·竊聽了Alice銀行發給Bob銀行的彙款請求消息以及MAC值,并儲存在自己的計算機中。

5 Mallory将剛剛儲存下來的彙款請求消息以及MAC值再次發給Bob銀行。

6 Bob銀行用收到的消息自行計算MAC值,并将計算結果與收到的MAC值進行對比,由于兩個MAC值相等,是以Bob銀行判斷該消息時來自Alice銀行的合法彙款請求(誤解),于是向Mallory的賬戶M-2653彙款100萬元。

7 Mallory将步驟5重複100次。

8 Bob銀行向Mallory的賬号總計彙入100萬元*100=1億元,這時Mallory将這筆錢取出來。

在這裡,Mallory并沒有破解消息認證碼,而隻是将Alice銀行正确MAC值儲存下來重複利用而已。這種攻擊方式稱為重播攻擊。

2 抵禦重播攻擊方法

2.1 序号

約定每次都對發送消息賦予一個遞增的編号(序号),并且在計算MAC值時将序号也包含在消息中。這樣一來,由于Mallory無法計算序号遞增之後的MAC值,是以就可以防禦重播攻擊。這種方法雖然有效,但是對每個通信對象都需要記錄最後一個消息的序号。

2.2 時間戳

約定在發送消息時包含目前的時間,如果收到以前的消息,即便MAC值正确也将其當做錯誤的消息來處理,這樣就能夠抵禦重播攻擊。這種方法雖然有效,但是發送者和接收者的時鐘必須是一緻的,而要考慮到通信的延遲,必須在時間判斷上留下緩沖,于是多多少少還是會存在可以進行重播攻擊的空間。

2.3 nonce

在通信之前,接收者先向發送者發送一個一次性的随機數,這個随機數一般稱為nonce。發送者在消息中包含這個nonce并計算MAC值。由于每次通信時nonce的值都會發發生變化,是以無法進行重播攻擊。這種方法雖然有效,但通信的資料量會有所增加。

二 密鑰推測攻擊

和單向散列函數的攻擊一樣,對消息認證碼也可以進行暴力破解以及生日攻擊。

對于消息認證碼來說,應保證不能根據MAC值推測出通信雙方所用的密鑰。如果主動攻擊Mallory能夠從MAC值反算出密鑰,就可以進行篡改、僞裝等攻擊。例如HMAC中就是利用單向散列函數的單向性和抗碰撞性來保證無法根據MAC值推測出密鑰的。

此外,在生成消息認證碼所使用的密鑰時,必須使用密碼學安全的、高強度的僞随機數生成器。如果密鑰是人為標明的,則會增加密鑰被推測的風險。 

繼續閱讀