2012-11-07 40 views
4

我不是在談論服務器端node.js.是否有像bcrypt一樣的緩慢的Javascript散列算法?

我想在我的網站的客戶端使用緩慢的散列算法。我找到了SHA-256的實現,其中seem to be reliable。我還發現導致OP creating his own librarythis question

但是,我不確定是否應該只執行多輪SHA散列或者信任某些代碼,因爲我不是安全專家,並且它似乎沒有很大的跟隨,只是「盯着「由36人。

這種情況下最好的選擇是什麼?我(基本上)一旦選擇了某些東西,就不能改變方法。

我想要一個緩慢的哈希(不加密)算法,我寧願它產生一個短的字符串。例如,一個慢60個字符的bcrypt與快速的70個字符的SHA-256。

回答

7

目前有三個關鍵推導函數被廣泛認爲是對抗暴力破解企圖的安全措施。密鑰衍生函數與常規哈希算法略有不同,因爲即使面對基於GPU的現代計算,它們也可以設計爲,設計爲

我將列出他們爲了理論安全:

  • PBKDF2由RSA設計的基礎上,SHA,並且是由NIST推薦算法。您可以在瀏覽器中使用a coupleimplementations

    對節點用戶的注意事項:節點的crypto模塊有一個built-in PBKDF2 function。使用它。

  • bcrypt,基於Blowfish,比PBKDF2稍微安全一些。它已經過相對良好的測試和驗證,但沒有任何標準機構的批准,如果這是您的考慮因素。有a generic JS implementation here

    對節點用戶的注意事項:使用node.bcrypt,它在單獨的線程上執行計算量很大的東西。

  • 最後,scrypt是理論上最安全(最慢)的KDF。不幸的是,該算法是非常新的,所以它沒有通過密碼社區的嚴格研究和測試來驗證。然而,它是,on track to become a IETF standard

    由於該算法如此新穎,因此很難找到實現。我只能找到this half-baked one。雖然安全性好處非常有希望,但我不會推薦scrypt,直到算法本身及其實現經過驗證安全。

這三者究竟如何比較呢?該scrypt paper有一個比較:

algorithm comparison table

實際上,即使PBKDF2使得成本過高的人,但政府破解一個8個字符的密碼。

0

您總是可以忽略快速SHA-256的最後10個字符。或者包含前10個字符。

SHA具有可變數量的回合。兩輪SHA應該有點可逆。我有一個模糊的想法,認爲20輪被認爲是「安全的」。 30輪應該是「高度安全的」,並且50輪幾乎沒有任何改善。

SHA旨在保證安全 - 不是希望破解者擁有足夠慢的機器 - 而是通過數學證明。如果並且當每輪中不可逆比特的數量增加並且置換爲256比特散列碼時,將不會有足夠的計算機能力來嘗試產生該特定散列碼的所有可能的序列。宇宙中還沒有足夠的能量來包裝256位計數器。

除非產生散列的字符串非常小或寫在某人的監視器上的文章上。

+0

是的,我可以,但我寧願不。無論如何,我的問題是關於使用Javascript慢慢計算哈希的最佳方法。 – Xeoncross

+0

爲什麼它要慢? –

+0

減少每秒可以計算的數量。例如,某人可以跳過Javascript計算,而是使用他們的GPU來計算每秒數百萬次SHA2哈希值。 http://stackoverflow.com/q/6791126/99923 – Xeoncross

相關問題