簡體   English   中英

關於.net桌面應用程序中的指令文件加密和認證問題

[英]Question about encrypting and authenticating instruction file in a .net desktop application

我想做下面的事情。 實現這一目標的最佳方法是什么?

  1. 我在 C# 中有一個桌面應用程序,它將安裝在多台客戶端計算機上。
  2. 該應用程序能夠執行 X 操作,但它需要一些可以從文件中讀取的輔助信息。 該輔助信息本質上提供了一些細節,用於標識應該在哪里運行操作以及要運行什么操作等。
  3. 我將與客戶合作以獲取有關他的機器的一些輔助信息(例如主機名/IP 地址等),我想將這些信息與其他信息一起放入此文件中,並在我的機器上生成並與他/她分享提供給我的軟件。 我想加密這些數據,以便打開它的人看不到數據的結構。 (我會通過電話或電子郵件從客戶那里獲得一些機器識別信息)。
  4. 我想以某種方式加密和保護這個文件,這樣只有我可以生成文件,但我的任何安裝都可以讀取它。 但由於包含的信息特定於一台機器,它將僅在一台機器上執行(其他機器將讀取但拒絕它,因為給定的主機名/ip等與該機器不匹配)
  5. 我該怎么做呢? 我想確保以下內容:
  • 只有我可以生成這個文件。
  • 我需要以某種方式驗證這僅由我生成,而不是由其他人生成。
  • 但是我在客戶端機器上的軟件應該能夠解密這個。
  • 我不想從客戶那里獲取密碼等所有解密邏輯都應該在安裝的軟件本身中。 我想把它編碼進去。

當我在網上研究這個時,很多人都在談論公共和私人密碼學,但他們在那里談論用公鑰加密和用私鑰解密。 但我認為這不會起作用,因為解密是由我的軟件在客戶端機器上完成的,所以我不應該將私鑰放在我的代碼中。 因為,根據我的閱讀,私鑰可以生成公鑰,因此如果我這樣做,有人可能會生成該指令文件。

做這個的最好方式是什么? 我可以用私鑰加密並用公鑰解密嗎? 如果有人拿到我的公鑰可以嗎(比如他們反匯編了 C# 代碼)? 任何其他加密和身份驗證的好方法,以便我隨身攜帶私人數據,但在應用程序中只編碼無害的公鑰/數據?

TIA。

你想保護誰?

您正在向最終用戶提供您的應用程序二進制文件。 假設他們可以反編譯它並弄清楚它是如何工作的。 或者在調試器中單步執行您的代碼,並訪問每個變量的內容。 假設攻擊者可以了解他們需要了解的有關其工作原理的所有信息。

充其量我會建議創建一個 hash 的機器詳細信息和鹽值。 然后創建該 hash 的簽名。

將簽名的鹽和公鑰作為常量保存在應用程序二進制文件中。 也許 XOR 值在一起,所以攻擊者必須考慮一下它是如何工作的。

但再多的事情都是沒有意義的。 任何具有更多技能的攻擊者只會修補您的程序以完全刪除測試。 所以我不會費心構建任何太復雜的東西。

給某人一個程序,並阻止他們使用它,就像試圖讓水不濕一樣。

你有兩個問題

  • 您如何加密信息,以及
  • 您的客戶如何確保信息來自您。

那些是正交的

我將首先解決第二個問題 - 它更容易。

首先,hash 文件,並將 hash 添加到有效負載中。 然后生成一個公鑰/私鑰對,然后用私鑰加密一些已知(但不重要)的信息並將其添加到有效負載中。 您可以將公鑰與您的應用程序一起分發。 如果您的應用程序對文件進行哈希處理並且哈希匹配並且它可以解密已知信息並理解它,那么它來自您並且沒有人更改它。

這稱為數字簽名。 如果您查找數字簽名提供商並遵循文檔,它應該可以工作。

加密問題更是一個問題。 幾乎沒有辦法做你想做的事。 如果您的應用程序可以使用您隨應用程序分發的信息解密信息,那么一個確定的壞人可以提取該密鑰材料並對其進行解密。

但是,您可以在安裝應用程序時使用客戶端上的 RSA 密鑰容器進行加密。 該過程類似於在 web.config 文件中使用加密部分。 由於您不會遵循加密的配置部分食譜,因此過程很復雜。

我以前做過,但那是幾份工作之前的事,所以我沒有任何東西可以給你看。

但是,它將被加密,因此只能在加密的地方讀取。 沒有兩個安裝會識別彼此的文件。

那就是說...

加密似乎是一把重錘,以防止您的客戶能夠猜測“數據的結構[因此]對於打開它的人來說並不明顯”

除非您有值得保護的東西,否則您可能會通過混淆數據而僥幸逃脫。 例如,您可以將數據作為 JSON,然后在 Utf8Encoding 上使用GetBytes來獲取byte[]並將其轉換為十六進制字符串。 一個堅定的黑客可以反編譯你的代碼,弄清楚你做了什么並扭轉它,但這似乎並不是你真正需要擔心的威脅。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM