2015-10-14 718 views

回答

4

SHA-2家族由多個密切相關的散列函數組成。它基本上是一個單一的算法,其中一些變量中的一些次要參數是不同的。

初始規格只包含224,256,384和512位變體。

變體之間最顯着的區別是有些是32位變體,有些是64位變體。在表現方面,這是唯一重要的區別。

對於32位CPU,SHA-224和SHA-256比其他變體快很多,因爲它們是SHA-2系列中唯一的32位變體。由於在32位CPU上執行64位操作增加了複雜性,因此在32位CPU上執行64位變量將會很慢。

在64位的CPU上,SHA-224和SHA-256的速度會比其他版本慢一點。這是因爲由於一次僅處理32位,所以爲了使其通過相同數量的字節,它們將不得不執行更多的操作。由於64位變量比32位變量具有更多的循環次數,因此從切換到64位變量的速度並沒有增加一倍。

對於兩個32位變體,內部狀態的大小爲256位,對於所有四個64位變體,其內部狀態的大小爲512位。因此,內部狀態的可能尺寸數量少於最終輸出的可能尺寸數量。取決於你的觀點,從大的內部狀態到較小的輸出可以是好的還是壞的。

如果保持固定的輸出大小,通常可以預期增加內部狀態的大小將提高安全性。如果保持固定內部狀態的大小並減小輸出的大小,碰撞變得更可能,但長度擴展攻擊可能變得更容易。使輸出尺寸大於內部狀態將是毫無意義的。由於64位變體的速度更快(在64位CPU上),並且可能更安全(由於內部狀態更大),因此使用64位字但輸出更短的兩個新變體被引入。那些被稱爲512/224和512/256。

想要輸出比內部狀態短得多的變體的原因通常是對於某些用法來說,使用如此長的輸出是不切實際的,或者需要將輸出用作某些算法的關鍵點,輸入一定大小。

簡單地將最終輸出截斷爲所需的長度也是可能的。例如,HMAC構造指定將最終散列輸出截斷爲所需的MAC長度。由於HMAC將一次散列調用的輸出提供給另一次調用,這意味着使用輸出較短的散列會導致內部狀態較少的HMAC。由於這個原因,使用HMAC-SHA-512並將輸出截斷爲384位比使用HMAC-SHA-384可能稍微安全一些。

SHA-2的最終輸出只是內部狀態(在處理長度擴展輸入之後)被截斷爲所需數量的輸出位。 SHA-384和SHA-512在同一輸入上看起來如此不同的原因是,爲每個變體指定了不同的IV。

2

百科:

的SHA-2家族包括六個散列函數與該是224,256,384或512位的摘要(哈希 值):SHA-224,SHA-256,SHA- 384, SHA-512,SHA-512/224,SHA-512/256。

相關問題