1. 程式人生 > >訊息認證碼無法解決的問題

訊息認證碼無法解決的問題

一 點睛

假設傳送者Alice要向接收者Bob傳送訊息,如果使用了訊息認證碼,接收者Bob就能夠斷定自己收到的訊息與傳送者Alice所發出的訊息是一致的,這是因為訊息中的MAC值只有用Alice和Bob之間共享的金鑰才能夠計算出來,即便主動攻擊者Mallory篡改訊息,或者偽裝成Alice傳送訊息,Bob也能夠識別出訊息的篡改和偽裝。

但是,訊息認證碼也不能解決所有的問題,例如“對第三方證明”和“防止否認”,這兩個問題就無法通過訊息認證碼來解決。

二 對第三方證明

假設Bob在接收了Alice的訊息之後,想要向第三方驗證者Victor證明這條訊息的確是Alice傳送的,但是訊息認證碼無法進行這樣的證明,這是為什麼呢?

首先,Victor要校驗MAC,就需要知道Alice和Bob之間共享的金鑰。

假設Bob相信Victor,同意將金鑰告訴Victor,即便如此,Victor也無法判斷這條訊息時由Alice傳送的,因為Victor可以認為:“即使MAC值是正確的,傳送者條訊息的人也不一定是Alice,還有可能是Bob。”

能夠計算出正確MAC值的人只有Alice和Bob,在它們兩個人之間進行通訊時,可以斷定是對方計算了MAC值,這是因為共享這個金鑰的雙方之中,有一方就是自己。然而對於第三方Victor,Alice或Bob卻無法證明是對方計算了MAC值,而不是自己。

三 防止否認

假設Bob收到了包含MAC值的訊息,這個MAC值是Alice和Bob共享的金鑰計算出來的,因此Bob能夠判斷這條訊息的確來自Alice。

但是,Bob無法向驗證者Victor證明這一點,也就是說,傳送者Alice可以向Victor聲稱:“我沒有向Bob傳送過這條訊息”。這樣的行為就稱否認。

Alice可以說“這條訊息時Bob自己編的吧”“說不定Bob的金鑰被主動攻擊者Mallory給盜取了,我的金鑰可是妥善保管這呢”等。說白了,就是Alice和Bob吵起來了。

即便Bob拿MAC值來舉證,Victor也無法判斷Alice和Bob誰的主張才是正確的,也就是說,用訊息認證碼無法防止否認。