2009-01-14 18 views
17

我正在考慮製作一個小工具。這個工具會做什麼並不重要。重要的是,該工具需要在用戶的硬盤上存儲一些敏感信息。 編輯:將被存儲的信息是用戶的信息 - 我不是試圖保護我自己的內容,我與應用程序分發。Windows上有某種安全的本地存儲嗎?

我知道我需要加密這些信息。但是,我在哪裏安全地存儲加密密碼?這是某種形式的無限遞歸的...

那麼,有沒有一種方法,來加密在Windows上的信息,並有Windows安全地管理密碼?當我說Windows時,我的意思是Windows XP SP2或更高版本。

我也應該注意,在同一系統上的用戶不能訪問其他用戶的信息(即使它們都運行我的應用程序)。

我找兩個 - .NET 2.0(C#)和本地(C/C++)解決問題的對策。

回答

3

您可以使用本機加密功能。設置您的文件夾或文件的加密屬性(從屬性頁面,點擊「高級」按鈕)。然後您可以設置可以訪問該文件的用戶(默認情況下,這隻包含文件創建者)。這種解決方案的一大優點是,它從應用程序和用戶的角度來看是完全透明的。

要以編程方式做到這一點:使用Win32 API,對目錄打電話EncryptFile()要存儲敏感每用戶數據。從現在開始,此目錄中的所有新創建的文件都將被加密,並且只能由其創建者(這將是您的應用的當前用戶)讀取。或者,您可以在創建時在個別文件上使用FILE_ATTRIBUTE_ENCRYPTED標誌。您可以從資源管理器的文件屬性頁上查看加密信息,並查看應用程序創建的文件是否被正確加密並限制爲各自的用戶。沒有密碼可以存儲或使用,一切都是透明的。

如果你想隱藏的所有用戶數據,那麼你可以創建一個特殊的應用程序特定的用戶,並從你的應用程序模仿它。這與ACL一起,是Windows系統服務中受到歡迎的技術。

+0

我可以從代碼中設置它嗎?就像.NET C#或本地C++應用程序一樣? – Paulius 2009-01-14 09:59:41

+0

將代碼/工具分發給他人時,這並沒有幫助,雖然... – xan 2009-01-14 10:02:30

+0

那麼,信息必須先由用戶輸入,然後我的應用程序需要安全地存儲它。所以,如果我可以從我的應用程序內創建這樣的文件 - 它可以工作。 – Paulius 2009-01-14 10:03:42

2

您可能想要查看隔離存儲,這是一種將設置和其他數據自動存儲在每個應用程序數據上的方法。 查看exampleMSDN

這是在註冊表中的存儲標準設置,一個更好的在很多情況下......我不知道如何將數據存儲然而,文件所以你需要檢查的替代方法,您止跌不希望它可以訪問,甚至加密到其他用戶。從內存中只有應用程序。創建存儲可以打開它 - 但需要檢查。

編輯:

從內存中,當我最後一次使用這一點,一個好的辦法是寫一個「設置」類處理應用中的所有的設置等。這個類然後具有相同的Serialize和DeSerialize方法,它們允許它將其所有數據寫入IsolatedStorage文件,或者再次加載它們。

以這種方式實現它的額外好處是您可以使用屬性來標記源的位,然後可以使用屬性網格快速給予用戶對設置的編輯控制(屬性網格在運行時使用反射)。

+0

我正在閱讀文檔。這看起來很有前途...... – Paulius 2009-01-14 10:04:33

-5

Erm哈希密碼?你不需要在機器上的任何地方存儲真正的交易,只需要一個散列密碼(可能還有鹽漬)。然後,當用戶輸入密碼時,您對該密碼執行相同的操作,並將其與您存儲在磁盤上的哈希值進行比較。

0

我推薦你看看企業庫加密應用程序塊。檢查blog post。 Windows具有用於加密數據的內置Data Protection API,但Crypto Application Block使其更直接。

-4

嗯,你在做什麼試圖達到的正是DRM試圖實現的目標。加密東西,然後給用戶密鑰(無論是混淆)還是密碼。他們用DVD做了。他們用藍光做到了。他們用iTunes做到了。

你打算做的事永遠不會安全。你的平均外行人可能不會知道,但任何充分動機的攻擊者都會解決它並發現密鑰,算法和解密數據。

如果你只是在加密用戶數據,然後詢問用戶的密碼。如果您試圖保護運行該應用程序的用戶的內部數據,您就是S.O.L.

3

您應該考慮爲此使用DPAPI。它將使用基於每個用戶的特殊(內部)對稱密鑰來加密數據。在這種情況下,甚至不需要詢問密碼,因爲系統上的不同用戶將分配不同的密鑰。

它的缺點可能是你不能恢復數據,如果用戶被刪除/ Windows重新安裝(我相信這是這種情況,雖然不太確定)。在這種情況下,使用從密碼導出的「自生成」密鑰對數據進行加密,並將密碼存儲在使用DPAPI加密的註冊表/文件中。

相關問題