2011-03-17 207 views
3

我正在研究Java RCP應用程序。用戶需要使用智能卡對自己進行身份驗證才能訪問應用程序。在這裏面,他可以打開/保存需要加密存儲的文件。如何安全地存儲加密密碼

目前,我使用帶有硬編碼密碼的基於密碼的AES加密。 這顯然不安全,所以我需要一種不同的方法來加密/解密文件。

什麼引起這個問題是有要滿足幾個條件:

  • 沒有保證的網絡連接(必須處於離線模式下可用)
  • 多個用戶必須有權訪問文件(所以不公鑰/私鑰加密)
  • 不應該有用於所有文件的一個「主」 - 鍵

編輯: 我不需要很高的安全級別。攻擊者只需要打開分佈式JAR文件並以純文本形式獲取密鑰即可獲得密鑰。

任何提示將不勝感激。

+0

不要存儲密碼,存儲密碼的散列。 – 2011-03-17 21:47:26

+0

我需要密碼來重建密鑰並解密文件。所以哈希不起作用。 – st3ve 2011-03-17 21:49:13

+0

使用散列作爲鍵。無論哪種方式,如果_they_找到你的鑰匙,你可能會被擰緊,不管它的存儲格式如何;不要存儲密鑰,但每次通過散列給定的密碼重新構建它 - 有效的密碼=正確的密鑰。 – 2011-03-17 21:50:32

回答

1

對於每個文件,創建一個新的密鑰。用該密鑰加密文件(使用AES)。

然後,對於允許讀取文件的每個用戶,使用其公鑰(對應於其智能卡上的私鑰)對新密鑰進行加密。將這些加密的密鑰與文件一起存儲。

當用戶想要讀取文件時,軟件使用他的智能卡恢復用於該文件的內容加密密鑰。

文件格式可以使用PKCS#7的加密消息語法或OpenPGP。

+0

這幫了很大忙。非常感謝你! – st3ve 2011-03-17 23:34:18

0

警告:我對安全性不甚瞭解,這只是一種想法。

建議將每個文件的密碼設置爲包含爲每個文件隨機生成的已知鹽的哈希,以及爲每個用戶單獨加密的單個密碼。您可以安全地在本地存儲隨機鹽,因爲這些不是該文件的關鍵字,並且沒有用戶知道密碼來解鎖文件。通過使用公鑰加密對密碼進行加密和簽名,您可以對用戶進行身份驗證並根據每個用戶和每個文件控制訪問。

這樣,您可以使用來自每個用戶的公鑰加密來傳遞密碼,該密碼不存儲在系統中的任何位置,彼此獨立保護文件,而不依賴於外部來源。

+0

如果我對你有所瞭解,那麼如果一個文件只需要被** single **用戶解密,這將是一個好方法。在我的應用程序中,單個文件需要被許多用戶讀取。很不好,這使得你的建議無法使用。 – st3ve 2011-03-17 22:01:23

相關問題