簡介訊息驗證碼
訊息驗證碼(MAC)的目的是用來確保資料完整性,同時可作為身分驗證用。
資料完整性在簡介雜湊的應用時,蠻多都是應用在確保資料完整性。但問題來了,資料總是會網路上傳來傳去,比方說,老師在上完課交報告時,發現有收到一份沒寫名字的報告檔,但有兩個學生說是他們寫的,這時老師是無從驗證的。會發生這個問題是因為「資料完整」跟「資料是誰給的」並沒有絕對關係。同理,從硬碟裡找到的 debian-10.1.0-amd64-netinst.iso
,即便驗證 checksum 通過了,也還不一定能證明這個檔案真的是 Debian 所提供的 ISO 檔,因為如果 checksum 在下載的時候也被竄改的話,那就無法信任這個檔案 + checksum 所驗證的結果了。
而這個問題簡單的解法是:在交檔案的時候,附上一個只有自己和老師能從檔案產生附帶檢驗資訊的方法,而老師在收到檔案和訊息時,把檔案拿來產生訊息,並跟收到的訊息做比對。若不一致,則不是該同學交的;若一致,即可確認這份作業是這位同學交的。
雜湊大部分都是應用在確保資料完整性。而 MAC 也有一樣的功能,並且多了身分驗證功能。因為這個 key 只有該同學和老師所持有,另一個同學則會是另一把 key,因此可以確認資訊是由某個同學發出來的。而在有做 MAC 的前提下,也就沒辦法惡搞其他同學,比方說代其他同學交白卷。
實作
MAC 相關的實作有很多,這裡以 CBC-MAC 簡單做個說明。
圖片來源:維基百科
CBC(Cipher Block Chaining) 在講 AES 的時候有提過,它是把資料先切成固定大小,然後一塊處理完後,結果再拿來處理下一塊。CBC-MAC 做法也一樣,只是圖片裡 IV 是設成 0,然後跟 AES 加密類似,一塊接著一塊,最後得到的結果即為 MAC。
接收資料的人要驗證,必須要拿同一把 key 才能運算出同個結果。不同的 key 結果就會不一樣。
小結
因 MAC 具有身分驗證功能,因此會更加安全,尤其是要求確認來源的場合會使用。如金融業有使用,並稱之為押碼。