pre-signed-url · L0

HMAC 是什麼

HMAC:用密鑰算出的防偽指紋

一句話:HMAC 是「拿一把 secret key、對一段訊息算出的一段指紋」。同一把 key、同一段訊息,兩邊各自算會得到同一指紋——所以能證明「訊息確實出自握有這把 key 的人、而且沒被改過」。

先懂它的底料:hash(雜湊)

hash 是把任意長度的資料,壓成一段固定長度的「指紋」。兩個關鍵特性:

最常見的雜湊演算法是 SHA-256(輸出 256 bit)。

純 hash 不夠:誰都能算

問題在於——任何人拿到訊息都能算出它的 hash,所以光靠 hash 無法證明「這是我算的、不是別人偽造的」。

HMAC 補上這一塊:摻進一把只有兩邊知道的 key

HMAC 在算 hash 時,摻進一把只有你和 server 知道的 secret key。於是:

比喻:hash 像「把文件縮成一張特徵摘要」,誰都能印。HMAC 像「先蓋一顆只有你有的私章、再縮成摘要」——別人看得到摘要卻仿不出那顆章;收件方也有同一顆章,重蓋一次比對,就知道是不是你、內容有沒有被動過。

正式定義(RFC 2104)

HMAC 的規格出自 RFC 2104:它可搭配任何雜湊函數(如 SHA-256),配一把 secret key,用於「訊息認證」——確認訊息的來源完整性。寫法常記為 HMAC-SHA256(key, message)

它跟 pre-signed URL 的關係

pre-signed URL 網址尾巴那段 X-Amz-Signature,骨子裡就是一連串 HMAC-SHA256 算出來的(Level 3 會整個拆開)。現在只要記住這句:有 key 才算得出、兩邊算一次就能對、改一個字就對不上——這正是「為什麼改動 URL 任一字元、簽章就立刻失效」的根源。

參考來源