2012-08-29 52 views
1

我們用C語言編寫一個Web服務/ C++ 今天之前的用戶密碼被簡單地使用MD5加密並存儲在數據庫 顯然對我來說,這種算法並不安全在所有存儲密碼安全地在中等負載服務器

Web服務是1線程應用程序。它平均每秒接收100個數據包(100p/s)。其中一些是認證數據包。

我讀過關於bcrypt和salt的內容,但實際上根本沒有使用這種技術。 由於安全原因,bcrypt產生的散列比MD5慢,這一事實對我來說也很明顯。 如果我們這樣做,並使用bcrypt或scrypt來加密密碼並檢查auth數據包,它是否會使我們的服務變得更慢?

+0

如果你只是添加一個鹽,這將是一個很大的改進。如果你關心速度,請使用sha2而不是bcrypt。 –

+0

誰和爲什麼downvoted? –

回答

1

如果減慢攻擊媒介,安全性會更好。始終記住這一點。

至於醃製和散列,我建議你使用總是醃製,具有良好的熵產生,並做了幾輪的散列函數。

爲什麼要鹽析?

如果直接從密碼哈希使用,你會得到散列和密碼的1對1的表示(在最好的情況下)。醃製(特別是含有至少32位熵的強鹽)阻止字典式攻擊。如果你的鹽的熵值低或者是少量的,那麼如果你的鹽漬和散列的密碼被盜,你很可能會被攻擊到一個rainbow table

爲什麼四捨五入?

四捨五入(應用幾輪散列函數,如bcrypt)增加了一些反饋散列,但更重要的是,增加了構建定製彩虹表的成本。如果您在哈希之前沒有使用密碼,舍入無效。

爲什麼減速?

你會看到,有些網站的指數退避時間,只要你輸入憑據無效。這是爲了禁止機器人暴力破解密碼。如果服務器保存重要數據,請始終執行指數回退。

作爲一般信息,bcrypt做1000發散列的,這就是爲什麼它是緩慢的。

相關問題