[英]Storing Passwords in reversible form
我有一個PHP應用程序需要運行bash腳本,並提供用戶名和密碼(用於遠程系統)。 我需要將這些憑據存儲在我的PHP(Web)應用程序可訪問的某個位置。 邏輯位置是數據庫(目前是MySQL,但是不可知)。 散列和存儲憑證的“標准”方式的問題在於它是不可逆的。 我必須能夠以未加密的明文形式獲取憑證,以便能夠將數據插入到bash腳本中。
有沒有人有任何建議可以安全地解決這個問題?
我想也許是PKI的憑證,並將結果存儲在DB中。 然后使用私鑰解密(PHP可以做到這一點)。 存儲腳本以在Web根目錄外執行此操作。
任何想法都非常感激。
首先,說明(希望)明顯,如果你可以以任何方式避免存儲用戶名和密碼這樣做; 這是一項重大責任,如果您的憑據存儲被破壞,它可能會為同一用戶提供訪問許多其他地方(由於密碼共享)。
其次,如果您必須使用不可逆的鹽漬加密哈希來存儲憑證,而不是存儲密碼,那么如果您的數據受到損害,則密碼不能輕易地進行逆向工程,並且根本不需要存儲解密密鑰。
如果必須存儲可解密的憑據:
如果沒有必要使用用戶名來查找帳戶記錄(在您的情況下不是這樣),請加密用戶名和密碼。 如果您對兩者進行加密,請將它們加密為一次加密運行,例如
userAndPass =(用戶+ “:” +傳);
encryptInit();
加密(鹽);
加密(userAndPass);
密文= encryptFinal();
並存儲奇異的blob,這樣就可以減少短密碼文本的出現,這些密文更易於破解,用戶名還可以進一步密碼。
PS:我不用PHP編程,因此無法在該環境中評論合適的加密s / w。
你需要研究好的雙向加密方法,我的一般經驗法則是:
因此,找到一個經過充分驗證的良好實現,並利用它。
這里可能有一些很好的信息:
檢查這個庫: PECL gnupg它為您提供了與gnupg交互的方法。 您可以使用安全的公鑰加密算法輕松加密和解密數據。
我建議您不要存儲密碼,而是通過生成ssh密鑰並將公鑰存儲在遠程系統的authorized_keys文件中,使用從主機到遠程系統的無密碼ssh連接。 然后,您只需要在配置期間建立連接。 不可否認的是,並沒有完全回答你的問題,但是以可逆的形式存儲密碼對於安全漏洞來說是一個滑坡,盡管我確信聰明的大腦可以使它安全。
一個簡單的入門方法是使用mysql的ENCODE()和DECODE()函數。 我不知道下面使用了什么算法,但它很容易使用:
INSERT INTO tbl_passwords SET encoded_pw = ENCODE('r00t', 'my-salt-string');
和
SELECT DECODE(encoded_pw, 'my-salt-string') FROM tbl_passwords;
如果你去PKI,我會,確保你保護你的私鑰! PKI提供的強大加密功能與密鑰一樣安全。
我認為你是目標。 看看GPG是否有一個好的開放式加密庫
看起來你幾乎有兩種方法可以做到這一點:
1)與您建議的一樣,使用加密算法或算法,然后可以解密並用於腳本中的身份驗證。 您可以使用PHP中的MCrypt庫來完成此任務。
2)根據所需的安全級別和腳本的漏洞級別,您可以使用安全散列,密鑰或其他一些難以猜測的唯一標識符,您可以使用該標識符在腳本范圍內劫持每個用戶的帳戶。
正如許多人所述,您需要加密用戶名和密碼。 我建議您查看php的mcrypt擴展名以進行加密/解密。
我想我將研究使用從Web應用程序中即時嵌入的憑據來編譯PHP腳本。
我會要求提供憑據(用於給定用途),然后創建並編譯一個新的PHP腳本,僅供此用戶使用。 這樣,腳本只會做我需要的,而且不應該是“可讀的”。 我認為這聽起來是最安全的方法。
將嘗試使用Roadsend。 http://www.roadsend.com/
為了跟進使用MySQL編碼和解碼功能的建議,手冊對這些工作方式含糊不清 :
加密的強度取決於隨機生成器的好壞程度。 它應該足夠短串。
但我建議你可以使用內置的MySQL 5.0 AES函數 ; AES_ENCRYPT()
和AES_DECRYPT()
SELECT AES_ENCRYPT('secret squirrel', '12345678') AS encoded
=> ØA;J×ÍfOU»] É8
SELECT AES_DECRYPT('ØA;J×ÍfOU»] É8', '12345678') AS decoded
=> secret squirrel
這些使用128位AES,對於大多數用途來說應該足夠強大。 正如其他人評論的那樣,使用鹽值和具有高熵的密鑰是一種很好的做法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.