我的web應用程序存儲外部網站登錄/密碼以便與他們進行交互。要與這些網站進行交互,我需要使用原始密碼文本,因此僅將哈希存儲在我的數據庫中不起作用。存儲原始密碼文本
我應該如何存儲這些密碼?
編輯: 我擔心是否有人訪問我的服務器。如果我使用某種雙向加密並且他們有服務器訪問權限,那麼他們可以檢查密碼在後端代碼中的解密方式。
我的web應用程序存儲外部網站登錄/密碼以便與他們進行交互。要與這些網站進行交互,我需要使用原始密碼文本,因此僅將哈希存儲在我的數據庫中不起作用。存儲原始密碼文本
我應該如何存儲這些密碼?
編輯: 我擔心是否有人訪問我的服務器。如果我使用某種雙向加密並且他們有服務器訪問權限,那麼他們可以檢查密碼在後端代碼中的解密方式。
在我看來,你想以類似於Firefox和Chrome的方式存儲密碼。那麼爲什麼不看他們如何做呢?
這是Chrome瀏覽器如何做的: http://www.switchonthecode.com/tutorials/how-google-chrome-stores-passwords
如果你必須這樣做,你應該使用雙向加密。這裏有很多算法(密碼),但基本上用加密密鑰加密數據,並使用相同的密鑰再次解密。
選擇合適的加密取決於由你選擇的編程語言的支持,但它的實例是:
他們有不同的複雜性和一些比其他人更難以破解。但是,您應該認識到,如果有足夠的時間,雙向加密不會受到破解的威脅。所以這一切都取決於這些密碼有多敏感。
/Carsten
好的,但你在哪裏存儲加密密鑰?對我來說,就像你剛把問題搬到另一個地方一樣。 – 2010-06-14 04:44:44
這就是我所擔心的 - 如果有人可以訪問我的服務器,那麼他們可以計算出原始密碼,不管它們是否加密。 – hoju 2010-06-14 05:55:55
@Mike:同意。但根據理查德的設置,數據庫數據可能比文件系統更容易(從破解者的角度來看)訪問。所以我們所有的答案都取決於理查德想要消除什麼樣的威脅。 – 2010-06-14 06:07:49
確定您正在保護他們的是什麼。選項包括(但不限於):意外泄露,您的披露,傳輸中的披露,由於代碼錯誤引起的披露,由於硬件的物理盜竊而導致的披露等。
如果這是一個Web應用程序,用戶正在存儲他/她自己的一組密碼,那麼您可以使用他們的登錄密碼將這些密碼加密到您的應用程序中。如果這是每個用戶單獨安裝的應用程序,並且它保留自己的本地數據庫,那麼您可以擁有一個可選的主密碼(如Firefox)。
如果您只是在硬件被盜時確保數據安全,則可以使用像TrueCrypt或PGP WDE或Ubuntu,Debian或Fedora內置方法的全盤加密解決方案,並且需要PIN碼或每次啓動時輸入密碼。
如果您只關心安全傳輸,請確保您使用傳輸安全性的代碼,並且不必擔心加密數據庫中的數據。
是的,它是一個Web應用程序,我擔心有人能夠訪問數據庫和後端代碼可讀的服務器 – hoju 2010-06-14 06:01:36
因此,使用用戶的登錄密碼或其衍生作爲密鑰對數據庫中的密碼進行加密(對稱) (例如,secure_hash(constant_server_secret + user_password)) 只有當它們的會話處於活動狀態時,纔會將該密鑰保存在內存中,並在會話過期或註銷時將其丟棄。不要發送給用戶;他們不在乎,而且暴露了關鍵。 攻擊者(甚至你自己)可以訪問的唯一密碼是具有活動會話的用戶的密碼,然後只是仔細查看當前內存狀態。 – Slartibartfast 2010-06-15 03:26:44
我會去這個以下列方式。
對硬件保護數據被竊取:
使用光盤加密在以前的文章中討論。
保護數據,如果服務器被攻破(黑客攻擊):
我會用兩個不同的服務器爲這個項目,一名工人服務器和一個前服務器。
A)工人服務器
B)前服務器
從工人服務器接收數據,從不使用密碼本身。只有聯繫工作服務器的方法是通過上面提到的API,僅用於新用戶信息。這是所有用戶登錄查看他們的信息的地方等。
在同一臺服務器上這樣做的問題,如果你被黑客入侵,黑客可以坐下來嗅探所有傳入的數據/密碼等等。所以即使他們存儲/加密/解密安全,有一定的耐心,他會聞所有。
我知道如果一個黑客能夠訪問工作服務器,你就會被搞砸了,但這會讓它變得幾乎不可能。您還可以添加工作服務器上的API依次調用存儲過程。 – grandnasty 2010-06-14 13:21:09
當應用程序第一次運行時,它會生成一個隨機密鑰。該密鑰將用於加密和解密敏感數據。將密鑰存儲在本地文件中,並設置文件權限,以便其他人無法讀取它。確保運行Web服務器的用戶沒有登錄訪問權限(無論如何,這是個好主意)。
可能的方式來打破這個系統:
只要你對所有這些採取合理的預防措施,你應該沒問題。
編輯:試想想起來了,你可以只直接存儲在密鑰文件中的敏感數據。加密會提供額外的安全層,但它不會是一個非常強大的層;如果攻擊者可以訪問該文件,那麼他也有權訪問數據庫。
有趣的部分是在最後:「CryptProtectData,它是一個Windows API函數,用於加密數據。[...]它只能在同一臺機器上和同一用戶解密......」它不告訴我們加密是如何工作的,或者其他平臺有什麼替代方案,所以我不確定它是否直接適用。 – 2010-06-14 13:51:46