簡體   English   中英

存儲可解密密碼的安全方法

[英]Safe way to store decryptable passwords

我正在使用PHP創建應用程序,並且要求必須能夠解密密碼,以避免將用戶數據庫切換到不同系統時將來出現問題。 考慮到無法修改此未來系統的密碼方法,我需要純文本密碼才能生成密碼。

計划是使用存儲在服務器上的公鑰加密用戶的密碼。 通過加密輸入和比較結果來完成認證。 沒有解密完成。 能夠解密的私鑰存儲在異地以供以后使用。

您建議使用哪種加密/解密算法? 當您認為攻擊者無法使用私鑰時,加密密碼是否仍然像散列(MD5 / SHA1)一樣安全?

我會改用Jammer的方法 -

  1. 生成公鑰/私鑰對。 在您的網絡服務器上對公鑰進行硬編碼。 將私鑰存儲在Web服務器/數據庫/任何開發人員無法訪問的物理銀行存儲櫃中。
  2. 用戶注冊時,使用公鑰加密密碼+鹽。 此步驟與使用哈希算法相同。 將加密密碼+ salt存儲在數據庫中。
  3. 如果要驗證密碼,請再次對其進行加密,並將其與存儲在數據庫中的值進行比較。

如果攻擊者獲取數據庫,則他無法解密密碼,因為他沒有私鑰。 他無法獲得私鑰,因為它位於他無法觸及的銀行金庫中。 由於鹽,兩個相同的密碼仍將以不同方式存儲在數據庫中。

我不建議使用上述方法,因為在將來的某個時間點,有人可能會濫用私鑰並訪問所有密碼。

但是,如果您保證私鑰將永遠保密,那么我沒有看到技術缺陷。

當然,我可能是錯的。

不要解密密碼。 如果以后需要更改密碼系統,請添加名為storage_type(或其他)的字段。

然后,當您需要更改密碼時,您將檢查它是否是舊密碼。 如果是,則下次登錄時,您可以更改密碼編碼。 否則,使用新系統登錄。

能夠解密密碼是一個壞主意(並且可能沒有任何方法可以比未加密存儲它們更好)。 聽起來你的主要問題是如果你改變你的存儲方法就能使用密碼。 只需執行Linux所做的操作,存儲如何使用密碼對密碼進行哈希處理。 所以例如$ 1 $ salt $ hash是MD5。 這樣,如果您決定更改密碼的存儲方式,您仍然可以檢查舊密碼(如果有人正確登錄,您可以使用新哈希更新其密碼)。

我看到的唯一問題是,大多數公鑰 - 私鑰加密代碼將使用公鑰加密對稱密鑰,並依賴私鑰解密,然后使用對稱密鑰加密消息。

您想使用公鑰直接加密密碼+ salt。

因此,針對您的系統的攻擊歸結為:

  1. 攻擊一般公鑰/私鑰加密
  2. 攻擊您的私鑰存儲區。

對於大多數應用程序來說,存儲SHA-1密碼哈希就足夠了。

是的,在大多數散列算法中存在已知的沖突,但這並不意味着實際的攻擊向量。 特別是當你腌制哈希時。

對於salt:將其存儲在無法從外部訪問但可由PHP安裝讀取的配置文件中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM