2009-11-30 83 views
4

我有一個應用程序,我需要第三方憑證存儲到像亞馬遜S3,FTP,SFTP等服務..加密第三方憑據

我知道這是可以訪問一些這些系統的無密碼但這有它自己的問題。如果我們的客戶通過ACL訪問他們的S3存儲桶,我們仍然需要驗證哪個存儲桶屬於哪個用戶,同樣適用於SFTP和ssh密鑰認證。

我們將盡可能允許非密碼替代方案,但有時(FTP)它是不可能的。因此,我正在尋找如何將這些敏感數據存儲在我們的數據庫(MySql)或其他地方的建議。

在過去,我已經閱讀過有關使用TrueCrypt分區的人,這些人會自動卸載,但這可能需要體面的入侵檢測。現在我對簡單的方法感興趣,這些方法導致合理的安全性,並且可以在未來得到改進。

任何關於這個問題的建議都會被高度評價!

回答

3

有各種各樣的可能性,因爲在我看來你沒有提供有關上下文的足夠信息,我會嘗試從我的角度給你一個概述。我認爲在這裏最重要的方面是對數據和用戶進行身份驗證的機密性。數據的完整性和可用性並不重要。

如果你想要基本的安全性,你可以讓MySQL通過用戶名/密碼組合來處理它,並在給定的賬戶上設置訪問權限。但是,由於mysql的訪問控制機制並不細緻(您可以只設置每個表的訪問控制規則,而不是每行),這可能會產生一個錯誤的數據庫設計。

如果您想要使用非密碼方法,您可以爲用戶提供客戶證書,並讓他們通過展示其客戶證書(使用TLS)或讓他們簽署某些內容來證明他們的身份(請注意他們的危險因素你創建一個所謂的簽名oracle)。

另一種方法是加密數據庫中的數據。您可以通過從密碼導出對稱密鑰並使用此數據加密憑據來完成此操作。當然,這裏的關鍵在於你的密鑰派生協議應該是好的,這很難完成(所以如果你選擇這個,我建議你採用現有的密鑰派生協議或使用流密碼)。看看這裏的流清代碼列表http://en.wikipedia.org/wiki/Stream_cipher

如果您非常關心安全性,您可以開始考慮使用智能卡進行身份驗證等奇特的解決方案,或者使用時間同步防篡改設備來生成acccess代碼。但是,請注意,這些奇特的解決方案不會爲您提供免費的安全性,如果硬性和昂貴(由於開發部署)而實施此類系統),但是,如果正確完成,它們將提供最佳的安全性。

1

用戶在設置帳戶時(在提供密碼之前)提供(強)密碼。然後使用從用戶密碼的強散列(SHA256或類似的東西)派生的密鑰加密數據庫中該帳戶的所有數據。這樣,如果您的服務器受到威脅,則不會顯示任何數據,因爲它使用用戶密碼進行加密(以及用戶密碼的散列),並且該密碼不會存儲在服務器上的任何位置。

+0

如果您這樣做,請小心更改密碼:當用戶更改密碼時(或者是因爲他們忘記了密碼,或者通過自動更改腳本,或者忘記密碼並與某人交談,或者因爲已經過了30天,或其他),您需要更新派生密鑰和加密數據。 – atk 2009-11-30 22:36:30

+0

另外請記住,密碼重置期間通過電子郵件發送密碼會將密鑰移開。生成一個新的密碼將使所有以前的數據無用。 – 2009-11-30 23:06:15

+0

-1在這種情況下,存儲散列與存儲密碼一樣糟糕。如果攻擊者獲得對散列的訪問,他可以簡單地導出密鑰並使用它來解密帳戶數據。 – Theran 2009-12-09 04:52:46

0

您需要調查密鑰庫的使用。 TruCrypt就是這樣一個密鑰庫的一個例子,但這是一個個人密鑰庫,不是用於服務級別的憑證。

您將無法避免以他人可以訪問的格式存儲他們的密碼,目標是最大限度地減少可以訪問信息的人員。與應用程序數據放入相同的MySQL需要災難。