Hash

我可以在 SRP 中使用密鑰派生函式作為雜湊函式 H 嗎?

  • January 19, 2019

在安全遠端密碼協議中,驗證者必須儲存在伺服器上。在伺服器受損的情況下,攻擊者可以獲得這些驗證器。如果沒有人重複使用密碼,這沒什麼大不了的(因為使用者的數據也可能受到損害)。然而,由於人們確實重複使用密碼,因此對密碼文件進行離線攻擊似乎是個好主意。

SRP 基於加密雜湊 H;離線攻擊的部分成本將是計算 H,因此在此步驟中使用昂貴的雜湊似乎很好。但是,我不確定可調昂貴的散列機制(例如 PBKDF2、bcrypt、scrypt)是否適用於此。

RFC 2945作者 Tom Wu,SRP 發明者使用x = H(s, H(I, ":", p))where Iis the username 展示可以做任何你想做的事情來擴展密碼,例如給使用者名加上前綴然後散列它。因此,在使用 PBKDF2 將其投入使用之前延長使用者輸入的密碼會增加字典攻擊所需的時間,而不會影響協議的強度,例如x = H(s, PBKDF2(p))

編輯註意設計文件使用x = H(s, p)但從該頁面連結到的 SRP-6a 論文x = H(s, I, P)使用,因此兩者都與 RFC 不同。)

H在整個協議中進行交換PBKDF2會大大降低伺服器的速度。對於線上詞典攻擊,您希望攻擊客戶端執行緩慢而不佔用伺服器資源。這表明只減慢函式的速度,同時在整個協議的其餘部分x保持良好的散列函式一樣或更好。SHA256此外,正如@otus 在對擷取的驗證者進行離線攻擊的評論中指出的那樣,他們不需要執行完整的協議,只需要生成驗證者的步驟。這再次意味著減慢整個協議的速度沒有任何好處。

將函式更改x為僅使用密鑰拉伸算法x = PBKDF2(s, p)會降低伺服器速度。執行密鑰拉伸算法的目的是減慢客戶端的速度,因此請同時使用 RFC 函式HPBKDF2使用 RFC 函式,x但拉伸原始密碼,然後傳遞給 RFC 函式x = H(s, H(I, ":", PBKDF2(p)))

這種方法的優點是您實際上根本不需要更改您的 SRP 實施。您只需在輸入點拉伸密碼,然後將拉伸密碼傳遞給您的 SRP 實現。伺服器無需進行任何更改即可支持拉伸。任何針對洩露的驗證者的蠻力攻擊都會因拉伸而減慢。

引用自:https://crypto.stackexchange.com/questions/3425