Two-Factor-Authentication Large
Two-Factor-Authentication Large

為了在資料庫中安全地儲存恢復碼(Recovery Codes),這些恢復碼用於當使用者無法使用常規的二步驟驗證方法時仍能存取其帳戶,可以按照以下步驟設計資料庫架構:

設計思路

獨立的表格:為了安全性和靈活性,恢復碼應該儲存在使用者表格之外的一個獨立表格中。 這樣做可以確保即使用戶表被訪問,恢復碼也能保持安全。

哈希(Hash)存儲:出於安全考慮,恢復碼應該以哈希形式存儲,類似於密碼的存儲方式。 這樣,即使資料庫洩露,恢復碼也不會立即暴露。

關聯使用者ID:每個恢復碼都應該關聯到一個特定的使用者ID,以便在驗證恢復碼時能夠識別使用者。

資料庫結構定義

恢復碼資料庫表格設計:

在這個設計中:

id 是恢復碼的唯一識別碼。
user_id 是恢復碼所屬的使用者的ID,它透過外鍵與使用者表格的ID關聯。
code_hash 是恢復碼的雜湊值。
used 標記恢復碼是否已被使用,以防止同一個恢復碼重複使用。
created_at 記錄了恢復碼的建立時間,有助於管理和定期更新恢復碼。

處理恢復碼

產生和儲存:當產生新的恢復碼時,先對其進行雜湊處理,然後將雜湊值儲存到資料庫中。

驗證:當使用者嘗試使用恢復碼登入時,將提交的恢復碼進行相同的雜湊處理,然後與資料庫中的雜湊值進行比較。
標記為已使用:一旦一個恢復碼被成功驗證,應該立即將其標記為已使用,以防止再次使用。

Model

 

恢復碼實作安全性考慮

產生的恢復碼安全性已經相當高,特別是因為使用了 random_int() 和一個足夠大的字元集。

安全儲存恢復碼:如果需要在伺服器端儲存恢復碼,請確保它們是安全儲存的,最好是哈希化存儲,類似於密碼的處理方式。

安全傳輸恢復碼:如果需要將恢復碼傳送給使用者(例如透過電子郵件),請確保使用安全的通訊管道,以避免在傳輸過程中被截獲。

透過以上方法,不僅優化了產生恢復碼的函數,還進一步確保了恢復碼的安全性。

進一步安全考慮

限制嘗試次數:為了防止暴力破解,應該限制恢復碼驗證嘗試的次數。

定期更新:鼓勵使用者定期更新或在使用任何恢復碼後重新產生新的碼集,以保持帳戶安全。

透過以上方法,即可實現一個既安全又便於管理的恢復碼系統,為使用者提供了一個在丟失二步驟驗證設備時的替代登入方式。

前一篇文章資訊安全,帳號登入,實施雙因素認證(2FA),實作案例-3:安裝endroid/qr-code
下一篇文章資訊安全,帳號登入,實施雙因素認證(2FA),實作案例-5:安裝RobThree / TwoFactorAuth
學經歷 淡江大學資訊管理研究所 諸銘科技軟體發開部經理與教育事業部總監 專長 網路創業、網路行銷、創業貸款、個資保護、資訊安全、程式設計(ASP.NET VB.NET MVC C# Core 6) 資安與個資證照:CompTia Security+ , ISO 27701。 演講與課程經歷 工研院講師 勞動部微型創業鳳凰貸款顧問 台北市社會局 衛福部中央健保署 新北市政府勞工局 管科會 中國生產力中心 中衛中心 中山管理教育基金會 中華軟協 南科產協 青創會 青創會內訓 臺北青年職涯發展中心 經濟部樂活創業人才班 中小企業總會 外貿協會 高雄醫學大學 雲林科技大學 台北醫學大學 銘傳大學 明新科大 中台科大 台灣科技大學 師範大學 大葉大學 台北城市大學 聖約翰科技大學 萬能科技大學 輔英科大 明新科大 美和科大 嘉南藥理大學 東南科大 亞太創意技術學院 格致商工 霧峰農工 三重商工 新店戒護所 台南就業處 台灣知識庫 台北景福扶輪社 富邦人壽 台北國際書展

回覆留言

Please enter your comment!
Please enter your name here