0

我正在爲我的一個項目實施雙因素身份驗證系統,並且希望建立一些「一次性代碼」,就像Google對其雙因素身份驗證一樣。爲雙因素身份驗證存儲「備份代碼」的最佳方法?

我的問題是,將這些代碼存儲在服務器上最安全的方法是什麼?他們需要在數據庫中加密嗎?我會使用像bcrypt這樣的東西,讓他們以同樣的方式散列密碼嗎?考慮到攻擊者會知道每個散列代表一個6位數字,這會使暴力時間減少到幾乎沒有。

回答

1

問題有點含糊,但這裏有一些指針:

  1. 一個單獨的機器上存儲認證至少一部分減少了部件的風險被泄露到一起。
  2. 鹽你的哈希!鹽可能對您的網站是唯一的,或者對用戶來說是唯一的,只要您可以在要驗證時重新創建鹽即可。
    • 爲什麼要鹽?字符串123456的md5hash是e10adc3949ba59abbe56e057f20f883e - 正如您所說的那樣,輕鬆強制強制。但是如果我添加用戶的ID呢?您可以將其添加到散列並重新散列或將其添加到原始文本,如下所示:123456aneroid的md5hash是74821b76b332b28532136eb58e1b7f40
    • 其他addtional鹽也可使用,請參閱本SO帖子:https://stackoverflow.com/a/5482545/1431750
  3. 數據庫應該存儲這些salted hashes
  4. 您的一種鹽可能來自第二份憑證。
  5. 您可以重新散列哈希多次。
1

將您的一次性代碼(OTC)視爲密碼。現在使用安全最佳實踐來管理密碼。

此外,你不應該使用6位數字作爲場外交易。就像我說的,這些(相當於)密碼,你不希望這些密碼很弱。

有關如何安全存儲密碼的更多信息,請參閱Password Storage Cheat Sheet