2012-06-27 71 views
2

我編寫了一個C#WPF應用程序,該應用程序使用標準.Net SignedXml類簽署許可證xml文件。我能夠提取公鑰和私鑰作爲xml字符串。我可以安全地在簽名應用程序的本地隱藏我的私鑰,但遠程簽名檢查應用程序(庫)中需要的公鑰是什麼?考慮選項:我應該在哪裏將公鑰放在獨立的應用程序中

  • KeyContainer:沒有好,因爲籤核發生在2個獨立的環境
  • 硬編碼:硬編碼在我的檢查庫中的公鑰XML字符串。我知道公鑰並非祕密,但我怎樣才能防止黑客用自己的鑰匙取代密鑰?我可以簽署庫,但然後他們可以篡改應用程序使用庫...
+0

海盜灣的快速搜索會告訴你,沒有這樣的事情作爲防裂應用程序。你需要做的就是平衡多少時間讓你更難以解決問題,而不是困擾嘗試的人。很多人會花大力氣去破解Windows,但是有人會爲你的應用程序付出多少努力。 –

+0

這麼說真的..我已經有足夠的時間來同意了。複製II PC任何人? :) – Nerwi

回答

1

我把公鑰放在inetpub目錄之外的目錄中,並且如果您將私鑰移出電腦,那麼有人能做的最壞的事情就是更換公鑰並且它不再可以解密,但是當它不能解密以知道發生的事情時,你會被告知。

但是,如果有人能夠改變你的文件,你將有更大的問題,只是這一個文件改變。

UPDATE:

哎呀,我錯過了,這是一個WPF程序。不幸的是,你所能做的最好的就是將私鑰與公鑰分開,所以你可以解密,但是如果黑客更改公鑰,應用程序將無法正常工作。

這是使用公鑰/私鑰的優勢之一,以驗證只有您可以執行加密。

另一個選擇是從網絡服務器獲取公鑰,但是你有同樣的問題,有人可能欺騙應用程序去錯誤的服務器,所以它不是完全的證明,它將要求用戶有互聯網連接,並要求您唯一標識它們。

+0

inetpub?我不是在這裏談論一個web應用程序。我想阻止黑客用自己的私鑰簽名並用他們的公鑰替換我的公鑰。 – Nerwi

+0

@Nerwi你根本無法相信任何你不能相信你自己的代碼不會妥協運行的地方的密鑰庫。讓代碼正確運行是將信任置於應用程序中的先決條件。因此,您不妨將您的公鑰作爲應用程序中的資源進行分發。 –

3

將公鑰放入隨應用程序分發的標準數字證書中。證書的完整性將由Windows保證,並且您可以判斷它是否已更改。

當然,硬件和Windows本身都受到任何潛在攻擊者的控制,所以你不能真正阻止特定機器​​的妥協。

下面是我用來發布的程序的一個示例。當從許可證角度激活程序時,它將硬件哈希發送到Web服務。這將返回一個包含硬件散列的自簽名證書,然後我的程序會在啓動時進行檢查。如果證書以任何方式改變,程序將停止。

+0

我並不是那麼熟悉數字證書。我必須對此進行一些研究。看起來好像是由Windows系統組成,包含了大量的應用程序證書。 – Nerwi

+0

那麼你不能相信你在不可信機器上運行的代碼。但是,您可以減輕風險。操作系統不易受到攻擊。一個用戶帳戶。即使如此,RoadWarrior的答案是,如果不是明顯的錯誤,至少幾個解釋很短。 –

+0

@owlstead,如果您能改進我的答案或解釋您認爲可以改進的地方,我將不勝感激。 – RoadWarrior

相關問題