2014-07-07 106 views
2

我需要在公共WPF應用程序中存儲加密算法的加密/解密密鑰,可以免費下載給任何人。
顯然,我想以安全的方式存儲這些密鑰,以便用戶可能看不到它們。如何將敏感信息存儲在.Net/WPF應用程序中?

正如我所看到的那樣,這是不可能的,因爲反編譯.Net應用程序非常容易,而且對它進行混淆並沒有太大的作用。我想不出有什麼地方可以存儲這些信息,這些信息或者不是用戶可訪問的,或者是「自然」加密的(比如某種「Windows保險庫」),但是用戶可以創建一個假裝成我自己的應用程序,他不會嗎?)

從用戶訪問(編譯)代碼和(清除)app.config的時刻起,我看不到如何在本地存儲敏感信息。

我看到很多幫助來編碼連接字符串和保護在IIS上的東西,但沒有在WPF應用程序上。

有什麼方法可以安全地存儲任何數據與.Net/WPF?

謝謝!

+0

爲什麼不使用[單向加密(哈希)](http://en.wikipedia.org/wiki/Cryptographic_hash_function)來存儲您的密碼。然後你儲存這些。這樣,即使有人能夠訪問哈希密碼,它也是[不可行*](http://en.wikipedia.org/wiki/Computational_complexity_theory#Intractability)來解密它們。您仍然必須將這些存儲在安全的地方,但這比2路加密更好 – Liam

+0

我們使用存儲在註冊表中的加密密鑰並使用ProtectedData類完成加密(http://msdn.microsoft.com/zh-cn/library/2fh8203k( v = vs.110)的.aspx)。只有系統管理員可以使用Entrophy,系統管理員可以生成這些加密數據並存儲到註冊表中,使用MSI安裝程序將註冊表推送到客戶端。在客戶端,我們使用WCF(它從machine.config中獲取它)服務來解密註冊表中的密鑰。我知道總是有辦法破解這個,但它比存儲在web.config中更安全。 – VRK

+0

@Liam:這不是我要存儲的密碼,而是我想解密的信息,例如跟蹤ID。 – thomasb

回答

4

簡單:你沒有。

沒有辦法做到這一點的工作。沒有。永遠。所有在幾天內破解的複製保護都基於「嘿,我可以隱藏某些東西」。

您可以安全地將用戶特定的數據存儲在用戶的特定文件夾中 - 並將其保留到操作系統以保護這些位置。但是認爲你可以在你的應用中隱藏加密密鑰 - 基本上:如果沒有人聰明地看着它們(或者:沒有專門的黑客),你可以隱藏它們。這可能奏效 - 但它是「依靠人們不是真的想找到它」。

+0

是的,這也是我的想法。 – thomasb

5
  1. 不要把它放在應用程序 - 「任何人」都可以得到它。

  2. 將祕密(私鑰)存儲在證書存儲區中,以便只有具有適當權限的進程才能訪問。請安裝一個單獨的進程/設置的私鑰一部分,以便管理員能做到從安裝應用程序分開,讓應用程序搜索/一旦查詢的證書存儲

+0

謝謝,但它是一個公共應用程序,任何人都可以訪問它,任何人都應該可以安裝它。所以不同的訪問權限是不可能的。 – thomasb

+3

如果它是公開的,你不能隱藏它的祕密。您只能隱藏高度受限訪問的容器中的祕密,並且任何用戶的隨機機器都不是這樣的容器。使用安全服務器設置SSL並將祕密內容傳遞給服務器。使用客戶端的公鑰加密該祕密,以便只有那些有權訪問私鑰的人才能解密該祕密。 –

1

的信息被存儲在用戶的機器上,你必須假設他可以訪問它;沒有辦法繞過它。唯一的選擇,如果你想讓用戶不可能訪問密鑰,就是在遠程服務器上進行加密,但如果要加密的數據很大,並不總是一個可行的選擇。

+0

是的,這也是我的想法。我無法想象用戶無法在他的計算機上訪問某些內容的方式,否則我的軟件也無法訪問。 – thomasb

相關問題