亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么golang包bcrypt能夠在對密碼進行哈希處理后檢索鹽?

為什么golang包bcrypt能夠在對密碼進行哈希處理后檢索鹽?

Go
慕田峪4524236 2022-07-11 16:51:49
我無法理解golang crypto bcrypt repo中的以下代碼func newFromHash(hashedSecret []byte) (*hashed, error) {    if len(hashedSecret) < minHashSize {        return nil, ErrHashTooShort    }    p := new(hashed)    n, err := p.decodeVersion(hashedSecret)    if err != nil {        return nil, err    }    hashedSecret = hashedSecret[n:]    n, err = p.decodeCost(hashedSecret)    if err != nil {        return nil, err    }    hashedSecret = hashedSecret[n:]    // The "+2" is here because we'll have to append at most 2 '=' to the salt    // when base64 decoding it in expensiveBlowfishSetup().    p.salt = make([]byte, encodedSaltSize, encodedSaltSize+2)    copy(p.salt, hashedSecret[:encodedSaltSize])    hashedSecret = hashedSecret[encodedSaltSize:]    p.hash = make([]byte, len(hashedSecret))    copy(p.hash, hashedSecret)    return p, nil}據我了解,加鹽用于防止攻擊者入侵數據庫并獲取哈希密碼列表,為了從哈希中獲取原始密碼,黑客可以遍歷所有有效的密碼組合并對其中的每一個進行哈希處理,如果其中一個生成的哈希與黑客數據庫中的哈希匹配,黑客可以取回密碼。在哈希之前添加鹽會迫使對手重新生成彩虹表。關鍵是將密碼與鹽一起散列hash(password + salt)迫使黑客專門為鹽重新生成彩虹表但似乎bcrypt能夠取回鹽,所以從技術上講,如果對手知道系統正在使用bcrypt,他可以刪除鹽并獲取未加鹽的哈希密碼。換句話說,一旦黑客得到hashedSecret = hashedSecret[encodedSaltSize:],他可以使用彩虹攻擊來取回密碼,使鹽無用。我有什么問題嗎?
查看完整描述

2 回答

?
qq_遁去的一_1

TA貢獻1725條經驗 獲得超8個贊

他可以刪除加鹽,得到沒有加鹽的哈希密碼。

除了這部分之外的一切都是正確的。

想象一下,你有一個密碼通行證和兩個鹽:s1,s2。

  • 哈希(s1 + 通過)= 123

  • 哈希(s2 + 通過)= 456

因此,您的數據庫中將有兩條存儲記錄:

  • s1 $ 123

  • s2$456

刪除鹽部分不會讓對手在任何地方得到攻擊,因為他仍然需要破解兩個不同的哈希摘要123456 。

另一方面,一旦您從用戶那里獲得明文,它將使您無法重建您的哈希值。

想象一下他們給你發pass。您要做的是從存儲在您的數據庫中的哈希中獲取鹽子字符串,例如s2 $456,然后將其與明文連接,然后將哈希(s2 + pass)與上面的 456 進行比較。如果沒有將鹽存儲在數據庫中,您將無法執行此操作,這就是它的必要性。


查看完整回答
反對 回復 2022-07-11
?
慕尼黑5688855

TA貢獻1848條經驗 獲得超2個贊

您可以取回鹽,但這并不意味著您可以獲得未加鹽的密碼哈希?!皳Q句話說,一旦黑客得到 hashedSecret = hashedSecret[encodedSaltSize:],他就可以使用彩虹攻擊來取回密碼,從而使鹽無用?!?nbsp;具有誤導性。攻擊者可以獲得鹽和散列密碼,但這不允許“彩虹攻擊”。

“彩虹攻擊”中的攻擊是:一次生成一個巨大的彩虹表,預先。該列表是一對 (cleartextpassword,passwordhash) 條目。生成此表非常耗時(如果包含大量密碼,可能會變得很大,如果包含所有密碼,則可能會變得很大?。??!安屎绻簟敝械墓羰牵耗恍枭纱瞬屎绫?em>一次,并且可以使用它非??焖俚夭檎覕蛋偃f個密碼哈希的明文密碼。

由于上面 bcrypt 代碼中的每個密碼都有自己的 ,因此您不能使用一個彩虹表:您必須為每個鹽創建一個彩虹表。使“彩虹攻擊”無用。


查看完整回答
反對 回復 2022-07-11
  • 2 回答
  • 0 關注
  • 98 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號