c# - .NET 应用程序位置中的离线安全性在代码中存储混淆 key

标签 c# .net security cryptography obfuscation

我正在开发一个无法连接到互联网的 C# 应用程序。

这个应用程序将为我的硬件生成一个配置文件。

我想确定的是,当我将配置文件提供给我的助手时,他不会更改它,而是将具有不同配置的文件放入硬件中。

为了避免这种情况,我目前正在使用一种简单的方法。

  1. 在代码中我有一个 key :abcd123

  2. 我的应用程序生成一个配置文件,然后:

  3. 对配置文件进行 HASH 并使用存储在中的 KEY: abcd123 加密 HASH 字符串变量KEY

  4. 将配置文件交给我的助手,由其将其加载到硬件中

现在,硬件拥有 KEY abcd123,它会解密配置并哈希有效负载。如果 2 个哈希值相同,我假设我的助手没有更改配置文件。

我担心的是.NET 代码中的 KEY 存储很容易在不混淆的情况下恢复。

我因此购买了Crypto Obfuscator ,但我不知道我的 key 有多安全。

我的技术不够熟练,无法反编译我的程序并查看 key 是否仍然清晰。

您可以建议我采取哪些方法来确保我的 key “安全”?

我知道没有办法保护它,但我只是想为我不太了解的自动混淆提供合理的额外安全性。

我希望我已经说清楚了,但要求澄清。

最佳答案

what i want to be sure, is that when i give the configuration file to my assistant he doesn't change it and puts in the hardware a file with different configuration.

您正在寻找数字签名算法。一般来说,有两种方法可以做到这一点:

  • 使用对称算法来计算加密可靠的哈希值(例如 SHA-2)。您发布哈希值和相应的文件。硬件获取文件,使用相同的算法计算哈希值,并断言它与公开发布的哈希值相同。看看如何 Apache log4net提供库和匹配的签名。

  • 另一种方法是使用公钥-私钥签名,例如使用 RSA。可以从 msdn 获取示例,其中展示了如何使用 RSACryptoServiceProvider 对 XML 文档进行签名。您可以创建私钥-公钥对。私钥用于创建数字签名,您自己保管。使用公钥,您只能验证签名,这就是您部署到设备的内容。

上面链接中的另一个安全提示:

Never store or transfer the private key of an asymmetric key pair in plaintext. Never embed a private key directly into your source code. Embedded keys can be easily read from an assembly using the Ildasm.exe (MSIL Disassembler) or by opening the assembly in a text editor such as Notepad.

关于c# - .NET 应用程序位置中的离线安全性在代码中存储混淆 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9130078/

相关文章:

c# - Environment.CurrentDirectory 设置为 system32;我如何确定在哪里?

PHP 账户安全

php - 停止直接访问文件夹中的所有文件,但允许 ajax 请求

java - 如何在SunPKCS11中获取 session 句柄

c# - 动态的意外编译时错误

c# - 使用 Chello 在 Trello 上创建卡片

c# - 如何从 SQLServer 的几何数据中获取 GeoJSON 格式?

c# - 如何使用 WinForm 将图像正确添加到 TabControls 中的选项卡

c# - 如何从另一个添加了 UIViewController 的 Controller 更改标签的文本值

c# - 在 C# 中创建数据透视表