iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 24
0
Security

無趣的密碼學,有趣的加密!系列 第 24

[Day 24] 024 - 訊息鑑別碼 - Message authentication code

  • 分享至 

  • xImage
  •  

訊息鑑別碼 - Message Authentication Code

訊息鑑別碼其實有蠻多種類的,除了今天要介紹的『雜湊訊息鑑別碼 HMAC』之外:

還有單金鑰訊息鑑別碼 OMAC、加密訊息鑑別碼 CMAC 等等的。

那目前主流的用法都是 HMAC,中文稱呼雜湊訊息鑑別碼。

其實原理也不難理解就是了,等等我們就會拿來說說。


HMAC

我們看一下 RFC 的定義

RFC2104 HMAC: Keyed-Hashing for Message Authentication

能看到一個重點公式:

HMAC(Key,Text) = Hash((Key XOR OPad) || Hash((Key XOR IPad) || Text))
  1. K:金鑰。
  2. test:文本。
  3. H:SHA家族的任何一個Hash。
  4. opad跟ipad:填充。
    • opad :0x5c5c5c…5c5c。
    • ipad :0x363636…3636。

結束……

聊聊HMAC

好拉,我不能那麼隨便的就這樣敷衍,我必需要跟大家說說HMAC的一些原理跟應用。

HMAC其實就是利用Hash的高熵,來做認證。

JWT也就是利用HMAC來做驗證的。

可以設定一個Key,然後因為加入這個Key導致資料Hash摘要改變。

那要確定是我Server簽發的Token,可以把這份Token存起來。

但分散式的系統來說,來要去詢問儲存這份Token的Server。

那我好多台的Server共同約定一個Key,然後利用這個Key跟用戶基本資訊作跟Key做HMAC後放放到資料的最後面。

整個結構大約長:

Base64(規格).Base64(用戶基本資訊(無隱密資訊,加入時間戳跟到期時間等)).HMAC(Key,戶基本資訊)

當分散式的系統要驗證是否是由相同系統所發出的,除了檢查時間到期跟基本驗證資訊之外,Server可以把Base64的用戶基本資訊做HMAC。

因為是系統共同擁有的Key,應該HMAC出來必需要跟最後的資料相符合,要是不符合就是偽造。

而因為第三者不知道Key,無法簽發出偽造的資料。

大家可以去官網看一下、玩一下~

JWT

MAC的其他型態

其實除了HMAC之外,還能把其他密碼學相關的資訊拿來用。

第一個就是加密了,把Hash函數換成加密的。

還有非對稱的方法,就是把『用戶基本資訊』做非對稱加密,而認證的時候就是將加密後的資料做解密。

如果能還原並完全比對,就是由共同Server簽發的。


MAC 結論

說真的這章真的超水的,但又不得不介紹。

如果跟SHA或其他的Hash放在一起顯得有點不倫不類。

所以我只能把這章獨立分出來,但HMAC又是沒什麼很難的內容。

導致這樣的文章出現……

也順便把JWT也給介紹了一下,而自己也可以使用HMAC的特性來做一些功能。

下一章也很水,跟大家聊聊加密的差異與方法。

感覺起來越後面越水的感覺……希望是錯覺。


參考資料

RFC2104 HMAC: Keyed-Hashing for Message Authentication

金鑰雜湊訊息鑑別碼

JWT


上一篇
[Day 23] 023 - 雜湊 - Hash(附錄)(密碼Hash,分享,非細節)(附:後端資訊安全常識)
下一篇
[Day 25] 025 - 加密資料的差異與方法
系列文
無趣的密碼學,有趣的加密!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言