3 回答

TA貢獻1786條經(jīng)驗 獲得超13個贊
彩虹表的要點在于,它們是預(yù)先創(chuàng)建的,并且可以批量分發(fā)以節(jié)省其他人的計算時間-動態(tài)生成彩虹表所需的時間與直接破解密碼+鹽組合所需的時間一樣長(因為實際上,在生成彩虹表時正在執(zhí)行的操作是在對哈希進行強行的預(yù)運行),因此這樣的論據(jù)是虛假的,即通過了解鹽,有人可以“生成彩虹表”。
只要將鹽存儲在單獨的文件中就沒有實際意義,只要它們是基于每個用戶的-鹽的目的只是為了使其成為一個彩虹表而不會破壞數(shù)據(jù)庫中的每個密碼。

TA貢獻1783條經(jīng)驗 獲得超4個贊
我將對此提供稍微不同的看法。
我總是將鹽和鹽密碼散列存儲在一起。
例如,我將鹽的前半部分放在密碼的哈希值之前,并將鹽的后半部分放在密碼的哈希值之后。應(yīng)用程序知道此設(shè)計,因此可以獲取此數(shù)據(jù),并獲取salt和salted-password哈希。
我對這種方法的理由是:
如果密碼/哈希數(shù)據(jù)被泄露并落入攻擊者的手中,那么攻擊者將無法通過查看數(shù)據(jù)來了解問題所在。這樣,攻擊者實際上無法執(zhí)行蠻力攻擊來獲取與哈希匹配的密碼,因為他不知道哈希開頭,也無法知道數(shù)據(jù)的哪些部分是鹽的一部分,或者Salted-Password哈希的一部分(除非他確實知道您的應(yīng)用程序的身份驗證邏輯)。
如果salted-password哈希按原樣存儲,則可以執(zhí)行蠻力攻擊以獲得密碼,該密碼在salted和hashed時會產(chǎn)生與salted-password哈希相同的數(shù)據(jù)。
但是,例如,即使salted-password哈希按原樣存儲,但預(yù)先添加了一個隨機字節(jié),只要攻擊者不知道該第一個字節(jié)將被丟棄,這也將增加難度攻擊。您的應(yīng)用程序在用于驗證用戶身份時會知道丟棄數(shù)據(jù)的第一個字節(jié)。
結(jié)論到此。
1)切勿以正確的格式存儲身份驗證應(yīng)用程序使用的數(shù)據(jù)。
2)如果可能,請對身份驗證邏輯保密,以提高安全性。
再往前走一步
如果您不能對應(yīng)用程序的身份驗證邏輯保密,那么很多人都知道您的數(shù)據(jù)如何存儲在數(shù)據(jù)庫中。并假設(shè)您已決定將鹽密碼哈希與鹽混合在一起存儲,其中一些鹽放在鹽密碼哈希之前,其余鹽則附加在鹽密碼哈希之后。
生成隨機鹽時,您還可以隨機決定在鹽密碼散列之前/之后將存儲多少鹽。
例如,您生成512字節(jié)的隨機鹽。您將鹽附加到密碼中,并獲取鹽密碼的SHA-512哈希。您還會生成一個隨機整數(shù)200。然后存儲salt的前200個字節(jié),然后存儲salted-password哈希,然后存儲salt的其余部分。
在驗證用戶的密碼輸入時,您的應(yīng)用程序?qū)⒃竭^字符串,并假定數(shù)據(jù)的前1個字節(jié)是salt的前1個字節(jié),然后是salted哈希。此通行證將失敗。應(yīng)用程序?qū)⒗^續(xù)使用數(shù)據(jù)的前2個字節(jié)作為salt的前2個字節(jié),并重復(fù)執(zhí)行直到將前200個字節(jié)用作salt的前200個字節(jié)后找到肯定的結(jié)果。如果密碼錯誤,應(yīng)用程序?qū)⒗^續(xù)嘗試所有排列,直到找不到為止。
這種方法的優(yōu)點:
增強的安全性-即使您的身份驗證邏輯已知,確切的邏輯在編譯時也是未知的。即使知道確切的邏輯,也幾乎不可能執(zhí)行暴力攻擊。加鹽長度將進一步提高安全性。
這種方法的缺點:
由于在運行時可以推斷出確切的邏輯,因此這種方法會占用大量CPU。鹽的長度越長,此方法將占用更多的CPU。
驗證不正確的密碼將涉及最高的CPU成本。這可能會對合法請求產(chǎn)生反效果,但會提高針對攻擊者的安全性。
該方法可以以多種方式實現(xiàn),并且可以通過使用可變寬度的鹽和/或鹽腌密碼哈希使其更加安全。
- 3 回答
- 0 關(guān)注
- 677 瀏覽
添加回答
舉報