Keys
如果尾部用於辨識,256 位 HMAC-SHA256 密鑰是否會受到損害?
使用密鑰的截斷散列似乎是一種辨識密鑰(即密鑰指紋)的安全方法,但是在 HMAC-SHA256 的情況下截斷密鑰本身呢?
例子:
$ key=`openssl rand 32 -base64` $ keyId=`echo $key | cut -c 40-43` $ echo $key RlBDpvx3pCD/rs2SyeHX0enLOxCP7mEQCB8zvtQhD6g= $ echo $keyId hD6g $
使用
$keyId
作為一種辨識密鑰的方法是否安全?我知道安全強度會降低,但這是一個可以忽略/可以接受的量嗎?文獻中是否有一些內容涉及披露 HMAC 密鑰的尾部如何影響安全性?
這不會嚴重影響密鑰的安全性。HMAC 非常有彈性,更改散列的最後部分不會允許對諸如 SHA-256 之類的散列進行攻擊。
請注意,您只選擇了 4 個字元,其中最後一個字元只編碼 4 位(因為它在末尾)。這意味著您有一個大小為 2^22 編碼位的校驗值,即有 1 / 4194304 的機會匹配您不打算匹配的密鑰。如果您生成大量密鑰,則由於生日問題,您當然不能使用它從一組密鑰中選擇一個密鑰。
HMAC 的安全性也因 22 位而降低,為您提供 256 - 22 = 234 位的最大安全性。對於 HMAC 的通常設置,將其減半,因此稍微揮動一下,您就剩下 117 位。
通常,您在編碼為 base 64之前從二進制數據中獲取字節。如果您需要 base 64,您可以在之後單獨編碼字節。
在不顯著降低質量的情況下可能:是的。
可取的?絕對不是,似乎沒有任何充分的理由這樣做。改用 KBKDF(基於密鑰的密鑰派生機制)來創建密鑰指紋。為此,您可以使用普通密鑰和不太可能的字元串來使用 HMAC。