2016-11-22 89 views
0

我已經在出版物中看到過這段代碼。它爲生成11次散列帶來了什麼好處?由於熵,它比一個更安全嗎?幾次運行sha512散列函數的好處

var hash = sha512(salt+":"+user+":"+passwd); 
for(i = 0; i < 10; i++) 
    hash = sha512(salt+":"+user+":"+passwd); 
+1

我不知道,但我想說的好處可能是,如果一些散在某些彩虹表如。 ''somepassword「>」some-hash「',那麼如果你多次散列它,它就不會在這樣的表上找到,或者它需要這個表是10倍大。 – pie6k

+3

這段確切的代碼?這與運行她的SHA512完全相同 - 熵沒有實際變化。最多隻需要稍微延長一點(以防止暴力),但我真的懷疑它會有效。 – vlaz

+1

重複運行相同的哈希變得更加安全,因爲以暴力方式重新創建哈希會變得計算量更大。看看[這個問題]的一些答案(http://softwareengineering.stackexchange.com/questions/115406/is-it-more-secure-to-hash-a-password-multiple-times) – castis

回答

5

這個例子中的最終散列值並沒有比散列一次更安全(甚至沒有任何不同)。我從所提供的代碼中看到的唯一效果是它需要更長的時間。

關於一些有關重複哈希的鏈接,評論和其他答案,這隻有在隨後的哈希函數應用於之前哈希的輸出時纔有意義。提問者的例子一遍又一遍地清理相同的數據,產生相同的結果。

此代碼可能會更有效:

var hash = sha512(salt+":"+user+":"+passwd); 
for(i = 0; i < 10; i++) 
    hash = sha512(salt+":"+user+":"+passwd+":"+hash); 
2

在攻擊者獲得對包含哈希密碼的數據庫的訪問權限的情況下更安全。

多次散列會使攻擊者的速度減慢一個與哈希迭代次數成線性關係的因數,同時嘗試使用暴力攻擊從哈希中猜測純密碼。我認爲10是一個相當小的數字,如果這種情況(攻擊者獲得密碼數據庫的訪問權限)是你關心的問題,那麼我認爲對於更多的迭代比10更好(比如說1000)。

編輯:我剛剛注意到,在這個問題重複哈希總是使用原始密碼,它不是遍地散列再次如下面的代碼

var hash = sha512(salt+":"+user+":"+passwd); 
for(i = 0; i < 10; i++) 
    hash = sha512(salt+":"+user+":"+hash); 

我的反應是指這種情況下, (一遍又一遍散列哈希),而不是問題中提到的代碼。

+1

需要注意的是,這是一個非常糟糕的關鍵伸展實現,有一種被證明的方式來做這個迭代,稱爲[PBKDF2](https://en.wikipedia.org/wiki/PBKDF2)。 – martinstoeckli