2013-01-18 27 views
4

我正在研究一個C++應用程序,它通過衆多的類,數據庫庫等存儲(並經常訪問)其單個目錄中的許多文件的數據。我想開始使用託管密鑰加密磁盤上的所有數據由應用程序。如何使用特定於應用程序的密鑰加密目錄?

在Windows上,通過編程啓用目錄的EFS將是完美的如果應用程序可以直接設置加密密鑰,而不是基於登錄用戶的密碼使用加密密鑰。這似乎不可能。

因爲在讀取/寫入文件的代碼中有很多地方,有些是完全隨機訪問的,所以在沒有直接操作系統支持的情況下,導出類似於操作系統文件操作API的庫是最容易的。

Windows是最大的用戶羣,但在Mac和Linux上可用的東西將是一大利好。

有什麼建議嗎?

+0

打算保護用戶的數據還是提供靜態安全(如EFS)? –

+0

我需要只能由應用程序讀取的數據。當應用程序沒有運行時,即使對運行該帳戶的所有者,機器的管理員等等,數據也應該是不可訪問的。實際的加密密鑰將被從本地機器中扣除,當它被應用程序檢索時開始,並在退出時被遺忘。 –

回答

1

您是否考慮過將文件存儲在加密存檔中,如zip文件?不知道你在用什麼語言,很難給出更具體的答案。

+0

C++。我真的需要真正的文件系統提供的所有訪問,例如隨機訪問讀寫。我會更新這個問題。 –

1

我不是專家,但我有幾個建議,
(「用戶」被認爲是男性這裏)

在Windows中,當用戶登錄時,他將所有操縱的權利文件或文件夾屬於他。
但是,如果他試圖操作屬於其他用戶的文件或文件夾,則不允許他這樣做。所以,他不能操縱其他用戶的文件。
如果用戶是管理員,他將擁有操縱文件的所有權限。
在你的情況下,我相信用戶不是管理員。

所以,我建議給你:
創建該應用程序的用戶,說鮑勃(Bob是不是誰去使用這個應用程序的用戶)。
然後,您創建一個文件夾來存儲您的文件,並授予所有權限只有鮑勃(和管理員)。
對於所有其他人,沒有權限對文件夾執行任何操作。
您的應用程序必須由管理員安裝。

當您開始時,您的應用程序會向當前用戶詢問Bob的密碼。
如果密碼正確,
使用您的應用程序允許當前用戶具有完全訪問文件夾權限。然後應用程序可以按照你的意願工作
如果用戶退出應用程序,
刪除當前用戶的所有權限,以便在退出此應用程序後,其他人無法訪問該內容。
但管理員仍然可以訪問此內容。

這與Linux用戶管理類似。
當你得到一個shell時,你可以在完成工作時使用su username來更改用戶,並且他退出shell後,其他人就不能使用這些文件。但root用戶可以在Linux中做任何事情。

但是有一個問題
管理員可以獲得完整的內容和訪問權限,因爲他可以修改權限。
要禁止此操作,請通過使用任何技術和使用密碼進行壓縮來保存文件。該密碼只有使用它的用戶才知道。在將文件保存到文件夾之前,請使用密碼對其進行壓縮。在使用該文件之前,使用密碼解壓縮它。

如果壓縮密碼與用戶密碼相同,則出現問題。
管理員可以重置用戶密碼,並打開他的帳戶。
爲防止出現這種情況,您可以使用以下技術:
使用zip密碼作爲用戶密碼的反向,以便如果他的密碼是1234,則壓縮密碼是4321,或者使用用戶密碼的哈希值作爲壓縮密碼。
如果zip密碼是散列值,如MD5散列或SHA-1,則由於密碼長度的原因,對zip文件的暴力破解將不起作用。
我不知道這是否是一個工作解決方案或者如果這可以實施或不。
但是,如果你認爲這裏有一些好的想法,你可以從中得到一些想法。

+0

如果我們可以說服用戶真正使用不同的操作系統帳戶,我們不會有這個問題。人們非常固執於這個事實(不是我責怪他們 - 多個操作系統帳戶是一個痛苦)。事後加密並不可行,因爲只需在計算機上拔插頭就會使其變得脆弱,就像移動到加密文件後磁盤上的純文本殘留一樣。 –

+0

@BrianWhite關於加密我有一個選項。當用戶需要訪問數據時,更改文件夾權限,讀取文件,讀取操作即將完成重置權限。我認爲閱讀不會超過幾秒鐘。所以我不認爲用戶會在重置權限之前拔插頭。這就像,如果你想寫一個文件,更改權限,寫入,然後重置權限。這不會花費太多時間。 – sujeesh

+0

任何將純文本數據寫入磁盤都是一個安全問題,因爲即使文件被刪除,扇區仍然包含數據。 –

2

將應用程序配置爲作爲服務帳戶運行,僅用於它。然後,配置EFS。由於應用程序的服務帳戶將擁有這些文件,因此其用戶特定的密鑰應該是唯一有效的EFS密鑰,因此只有應用程序(這是在此新服務帳戶下運行的唯一應用程序)才能夠訪問這些文件。

+0

這很有趣。什麼版本的Windows支持這個?該服務帳戶中的數據是否只能通過單個應用程序訪問? (當然,系統管理員也可能是個問題,但我們暫時忽略它)。換句話說,是否可以編寫新的惡意軟件程序,將其安裝爲通常使用我的應用程序的操作系統用戶,並讓該惡意軟件程序訪問我的應用程序的加密數據? –

+0

如果惡意軟件具有管理權限,它可以做任何事情**,無論您做什麼,都可以讀取您的數據。如果它沒有管理員權限,則數據應該是安全的。 –

+0

即使本地用戶惡意軟件也可以安裝鍵盤記錄程序並獲取訪問密碼(甚至更敏感的信息)。我並沒有試圖抵禦持續的攻擊。但是,一旦程序關閉,任何人,甚至機器的管理員或任何程序都不能讀取數據。 –

1

除非我錯過了你的問題,TrueCrypt似乎是你的理想解決方案。

這將允許:

  1. 利用現有的操作系​​統文件API(如安裝量將表現就像正常的音量)
  2. 編程管理訪問密鑰(密碼)
  3. 限制進入安裝體積(由OS力學)
  4. 利用上的所有平臺相同的原則(在Windows,Mac和Linux)

或者,如果您願意,您可以使用它加密/解密單個文件。

有很多關於如何使用它的例子。

+0

TrueCrypt是一個很棒的產品,我個人使用它。但是,它不是自動的或者是由應用程序控制的(即用戶必須手動設置並管理它),我不能隨我們的產品一起發貨。這比使用單獨的操作系統帳戶更有用,而且我無法讓我的用戶使用這些帳戶。 –

相關問題