2014-01-20 48 views
2

使用Express.js框架和密碼與pbkdf2散列密碼我讀了默認算法是HMAC-SHA1,但我不明白爲什麼它沒有升級到其他家族或SHA之一。Crypto-Express.js是否PBKDF2 HMAC-SHA1夠了?

crypto.pbkdf2(password, salt, iterations, keylen, callback) 

是我們提供我們想要的SHA的變體的keylen嗎?像SHA-256,512等?

另外HMAC如何改變輸出?

最後當SHA1被破壞時它足夠強大嗎?

對不起,如果我混合東西了。

+0

只是不要使用超過20個字節的keylen。 – CodesInChaos

+0

PBKDF2相對於其他密碼哈希的缺點,比如bcrypt或scrypt比SHA-256在這方面的缺點要大得多。 – CodesInChaos

回答

1

是我們提供我們想要的SHA的變體的keylen嗎?像SHA-256,512等?

當你說出你哈希尤其是密碼,@CodesInChaos是正確的 - KEYLEN(即從PBKDF2輸出的長度)會在你HMAC的本地哈希函數的比特最數目。

  • 對於SHA-1,這是160位(20個字節)
  • 對於SHA-256,這是256位(32個字節),等等
  • 這樣做的原因是,如果要求一個比哈希函數支持的哈希更長(keylen),第一個本地長度是相同的,所以攻擊者只需要攻擊比特。這是1Password在Hashcat團隊發現它時發現和修復的問題。

實施例爲證明:

這裏是22個字節值得PBKDF2-HMAC-SHA-1的 - 這是一個天然的散列大小+ 2多個字節(共服用8192次迭代 - 第4096次迭代!產生前20個字節,那麼我們做的是另4096次迭代集合後):

  • PBKDF2 SHA1 「密碼」 「鹽」 4096 22
    • 4b007901b765489abead49d926f721d065a429c12e46

,這裏是剛剛起步的前20個字節的PBKDF2-HMAC-SHA-1 - 即只有一個本土的散列輸出大小(以總共4096次迭代)

  • PBKDF2 SHA1 「密碼」 「鹽」 4096 20
    • 4b007901b765489abead49d926f721d065a429c1

即使你存儲22 PBKDF2-HMAC-SHA-1的字節,攻擊者只需要計算20個字節......這花費了大約一半的時間,爲了得到字節21和22,計算了另一整套HMAC值,然後只有2個字節是保持。

  • 是的,你是對的;對於PBKDF2-HMAC-SHA-1,21個字節需要20倍的時間,40個字節實際上只需要21個字節。然而,41字節需要20倍長度的三倍,因爲41/20在2和3之間,是唯一的。

另外HMAC如何改變輸出?

HMAC RFC2104是鍵控哈希函數,尤其是那些有缺點,當你只是在連接鍵和文字在一起的一種方式。 HMAC-SHA-1是HMAC中使用的SHA-1; HMAC-SHA-512是在HMAC中使用的SHA-512。

最後當SHA1被破壞時它足夠強大嗎?

如果您有足夠的迭代次數(2014年數以萬計的成千上萬來降低數十萬甚至更多),那麼它應該是沒問題的。特別是PBKDF2-HMAC-SHA-512具有的優點是,它在當前的圖形卡(即許多攻擊者)上比在當前的CPU(即大多數防禦者)上做得更差。

對於黃金標準,請參閱@ThomasPornin在Is SHA-1 secure for password storage?中給出的答案,其中的一小部分內容是「對MD4,MD5和SHA-1的已知攻擊是關於碰撞,而不影響前像抵抗。表明MD4有一些弱點,當試圖破壞HMAC/MD4時可能(只在理論上)被利用,但這不適用於你的問題.Kesley和Schneier在論文中的2106秒原像攻擊是一種通用的折衷它只適用於非常長的輸入(260字節;這是一百萬太字節 - 注意到106 + 60超過了160;這就是你看到這種折衷沒有什麼魔力的地方)。「

0

SHA-1壞了,但並不意味着它不安全; SHA-256(SHA-2)或多或少可用於未來的打樣和長期替代。破碎意味着比bruteforce更快,但沒有可行或實用的可行性(但)。

也看到這個答案:https://crypto.stackexchange.com/questions/3690/no-sha-1-collision-yet-sha1-is-broken

一個功能越來越壞往往只意味着我們應該開始 遷移到其他功能更強,而不是有 實際危險呢。攻擊只會變得更加強烈,所以一旦第一個裂縫開始出現,想到 是一個好主意。

+0

但我沒有看到任何理由使用破碎的散列函數,有點奇怪,當SHA幾乎移動到SHA3時它仍然是默認值。我不認爲你有更多的答案,其餘的QS?但thnx很多! – Drakoumel

+0

AFAIK SHA-3尚未標準化。我非常想知道,常常半知識和炒作會導致錯誤的決定(例如,我從一家公司那裏聽說他們不想使用TLS,因爲它存在(理論上的)攻擊。我不是安全專家,而是據我記憶,SHA-1是完全安全的使用和安全的,所以沒有必要(現在還有可能在不久的將來)使用其他算法。通常安全概念不會中斷,並且像這樣指向。 – for3st

+2

10 HMAC-SHA1是即使是SHA1,也不會中斷,甚至HMAC-MD5也能正常工作,這是因爲HMAC受哈希函數衝擊的影響要小得多,HMAC只需要哈希函數產生前像抗性,而MD5和SHA1都具有完全的前像抗性。 – ntoskrnl