Hmac
生成 64 位 HMAC
給定 $ plaintext $ 及其各自的認證 $ tag $ 它是從 HMAC-MD5 生成的,因此 $ |tag| = 128 $ 位。
如果應用程序受到限制並且只能發送 $ 64 $ 位。可以嗎,如果我們異或第一個 $ 8 $ 字節和秒 $ 8 $ 的字節 $ tag $ 為了產生一個總 $ 64 $ 少量 $ tag $ ?
我相信強化實際上是關鍵大小,而不是某人做蠻力的輸出大小。更糟糕的是,如果我們執行上述操作,兩個不同的輸入可能具有相同的簽名?
或者這是否會以任何方式削弱強化?
密鑰和標籤長度是獨立的。短標籤允許隨機猜測更頻繁地有效,但不能幫助攻擊者找到密鑰。如果您需要更短的 MAC 標記,NIST 建議使用截斷而不是 XOR。SP 800-107 (pdf) 說至少使用 32 位:
當應用程序將 HMAC 輸出截斷以生成所需長度λ的MacTag時,HMAC 輸出的最左邊的λ位應用作MacTag。但是,輸出長度λ應**不小於 32 位。
但是,建議使用至少 64 位:
MacTag通常可接受的長度是 64 位;不鼓勵使用長度小於 64 位的MacTag 。
除此之外,我不會使用 HMAC-MD5,儘管它沒有被破壞。HMAC-SHA256(或 HMAC-SHA512,如果更快的話)可以被截斷為相同的大小。