[英]Question about encrypting and authenticating instruction file in a .net desktop application
我想做下面的事情。 實現這一目標的最佳方法是什么?
當我在網上研究這個時,很多人都在談論公共和私人密碼學,但他們在那里談論用公鑰加密和用私鑰解密。 但我認為這不會起作用,因為解密是由我的軟件在客戶端機器上完成的,所以我不應該將私鑰放在我的代碼中。 因為,根據我的閱讀,私鑰可以生成公鑰,因此如果我這樣做,有人可能會生成該指令文件。
做這個的最好方式是什么? 我可以用私鑰加密並用公鑰解密嗎? 如果有人拿到我的公鑰可以嗎(比如他們反匯編了 C# 代碼)? 任何其他加密和身份驗證的好方法,以便我隨身攜帶私人數據,但在應用程序中只編碼無害的公鑰/數據?
TIA。
你想保護誰?
您正在向最終用戶提供您的應用程序二進制文件。 假設他們可以反編譯它並弄清楚它是如何工作的。 或者在調試器中單步執行您的代碼,並訪問每個變量的內容。 假設攻擊者可以了解他們需要了解的有關其工作原理的所有信息。
充其量我會建議創建一個 hash 的機器詳細信息和鹽值。 然后創建該 hash 的簽名。
將簽名的鹽和公鑰作為常量保存在應用程序二進制文件中。 也許 XOR 值在一起,所以攻擊者必須考慮一下它是如何工作的。
但再多的事情都是沒有意義的。 任何具有更多技能的攻擊者只會修補您的程序以完全刪除測試。 所以我不會費心構建任何太復雜的東西。
給某人一個程序,並阻止他們使用它,就像試圖讓水不濕一樣。
你有兩個問題
那些是正交的
我將首先解決第二個問題 - 它更容易。
首先,hash 文件,並將 hash 添加到有效負載中。 然后生成一個公鑰/私鑰對,然后用私鑰加密一些已知(但不重要)的信息並將其添加到有效負載中。 您可以將公鑰與您的應用程序一起分發。 如果您的應用程序對文件進行哈希處理並且哈希匹配並且它可以解密已知信息並理解它,那么它來自您並且沒有人更改它。
這稱為數字簽名。 如果您查找數字簽名提供商並遵循文檔,它應該可以工作。
加密問題更是一個問題。 幾乎沒有辦法做你想做的事。 如果您的應用程序可以使用您隨應用程序分發的信息解密信息,那么一個確定的壞人可以提取該密鑰材料並對其進行解密。
但是,您可以在安裝應用程序時使用客戶端上的 RSA 密鑰容器進行加密。 該過程類似於在 web.config 文件中使用加密部分。 由於您不會遵循加密的配置部分食譜,因此過程很復雜。
我以前做過,但那是幾份工作之前的事,所以我沒有任何東西可以給你看。
但是,它將被加密,因此只能在加密的地方讀取。 沒有兩個安裝會識別彼此的文件。
那就是說...
加密似乎是一把重錘,以防止您的客戶能夠猜測“數據的結構[因此]對於打開它的人來說並不明顯”
除非您有值得保護的東西,否則您可能會通過混淆數據而僥幸逃脫。 例如,您可以將數據作為 JSON,然后在 Utf8Encoding 上使用GetBytes
來獲取byte[]
並將其轉換為十六進制字符串。 一個堅定的黑客可以反編譯你的代碼,弄清楚你做了什么並扭轉它,但這似乎並不是你真正需要擔心的威脅。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.