我有一個網站,用戶提交的敏感數據到它,然後一個PHP腳本中使用的Rijndael 256加密這些敏感數據並將其存儲在MySQL數據庫如何將encyption密鑰安全地存儲在PHP代碼文件
的問題是,我想將密鑰存儲在一個安全的地方,只能通過php腳本訪問,而不能被其他任何人看到。
我有一個網站,用戶提交的敏感數據到它,然後一個PHP腳本中使用的Rijndael 256加密這些敏感數據並將其存儲在MySQL數據庫如何將encyption密鑰安全地存儲在PHP代碼文件
的問題是,我想將密鑰存儲在一個安全的地方,只能通過php腳本訪問,而不能被其他任何人看到。
取決於您需要的數據安全程度。您可以考慮爲每個用戶安裝一個不同的安全密鑰,方法是對可識別該特定用戶的數據進行加密並將其附加到256位加密密鑰上。但更好的辦法是將密鑰拆分並在整個密鑰中插入加密的數據。使它更復雜的破譯。這意味着如果程序員能夠訪問密鑰,程序員不能簡單地解密每個人的數據,而無需訪問客戶的加密數據,這對每個用戶都是不同的。
是的,程序員仍然可以將密鑰回顯到屏幕上,但他們也需要客戶加密的數據給他們想要解密數據的每個客戶。
如果適用,您也可以考慮使用公鑰和私鑰加密。客戶/用戶可以生成自己的密鑰。客戶將公鑰放在網站上的表單中,並存儲在數據庫中,然後客戶/用戶將擁有私鑰來解密數據。您使用公鑰來加密數據。這意味着每個用戶/客戶都有自己的一組密鑰。私鑰甚至可能放置在鑰匙卡上並掛接到計算機上以驗證訪問權限。
通過分裂你的意思[祕密共享](http://en.wikipedia.org/wiki/Secret_sharing)的關鍵,對吧? – Gumbo
一種選擇是有PHP腳本中調用外部腳本(並不一定是另一個PHP腳本,它可以是任何東西),將有機會獲得的關鍵。只要沒有人對外部腳本有寫入權限,或者只要將密鑰硬編碼到外部腳本中,就可以讀取訪問權限,那麼它應該是相對安全的。如果將密鑰存儲在單獨的文件中,則該文件只能由外部腳本的所有者讀/寫。
您可以使用證書進行加密/解密,並讓服務器在啓動時請求證書的密碼。
好處是您的密鑰只在內存中,並且對於每個安裝/服務器都可能不同。
但是,這種方法是相當痛苦的,通常只有當你有自己的系統管理員/不依賴於第三方託管提供者時纔有效。
中間溶液,以產生數據庫中的每部/用戶/客戶端的加密密鑰和與該每個客戶端密鑰來加密敏感數據。這些每客戶端密鑰使用主密鑰進行加密並存儲在數據庫中,而主密鑰存儲在磁盤上的某個地方並具有最低特權。
當您的服務器完全受到危害時,這並不安全,但在例如數據泄露/部分泄露等情況下確實會限制風險。
如果問題是你不信任a)程序員或b)系統管理員,那麼你是不走運的。
好吧,您可以使用加密器/解密器類,但對於應用程序開發人員來說,使用字符串上的解密器類很容易。我期待安全專家的回答。 –
如果沒有人可以看到密鑰,PHP腳本將從哪裏獲取密鑰? – jdigital
是的,我想隱藏程序員的密鑰,我想PHP腳本是唯一能夠訪問密鑰的PHP腳本將從另一臺服務器獲得密鑰 –