Hash
HMAC-SHA1 與 HMAC-SHA256
我有三個問題:
- 您會使用 HMAC-SHA1 還是 HMAC-SHA256 進行消息認證?
- HMAC-SHA256 比 HMAC-SHA1 慢多少?
- SHA256(超過 SHA1)的安全改進是否足以證明其使用的合理性?
您會使用 HMAC-SHA1 還是 HMAC-SHA256 進行消息認證?
是的。
這是一個半嚴肅的答案;兩者都是非常好的選擇,當然,假設消息驗證碼是合適的解決方案(即雙方共享一個密鑰),並且您不需要極高的速度。
HMAC-SHA256 比 HMAC-SHA1 慢多少?
這類加密性能問題是非常特定於平台的,因此很難明確回答。以我的經驗,我發現 SHA-1(以及 HMAC-SHA-1)比 SHA-256 快 30%;當然,您的里程可能會有所不同。
當然,明顯的回歸是“這個性能增量對您來說有多重要?”。這取決於您添加/檢查完整性標籤的速度。
SHA256(超過 SHA1)的安全改進是否足以證明其使用的合理性?
據我們所知,HMAC-SHA256 和 HMAC-SHA1 之間本質上沒有安全差異;使用足夠長的密鑰,兩者都不會受到暴力破解,並且使用相當長的標籤,兩者都會以預期的機率擷取任何偽造的消息。SHA1 有一個已知的弱點,它允許某人在比預期更短的時間內計算碰撞;沒有已知的方法可以將其應用於 HMAC-SHA1,因此沒有已知的攻擊方法(正如我剛才提到的,蠻力和隨機猜測標籤)。
我會使用 HMAC-SHA256。
雖然雨披關於兩者都是安全的回答是合理的,但有幾個原因我更喜歡使用 SHA-256 作為雜湊:
- 攻擊只會變得更好。SHA-1 的抗碰撞性已經被打破,所以未來也有可能發生其他攻擊也不是不可能的。
- 它允許您僅依賴一個雜湊函式,您也可以在需要抗碰撞性的簽名算法等中使用該雜湊函式。
- 您不必證明使用損壞的原語是合理的。(“我聽說 SHA-1 壞了?”)
唯一潛在的缺點是性能,但在大多數 HMAC 案例中可能並不重要,因為在性能很重要的地方,您可以找到更快的 MAC 來代替。因此,我認為上述原因在大多數情況下足以證明使用 SHA-256 作為 HMAC 雜湊是合理的。