我正在开发一个无法连接到互联网的 C# 应用程序。
这个应用程序将为我的硬件生成一个配置文件。
我想确定的是,当我将配置文件提供给我的助手时,他不会更改它,而是将具有不同配置的文件放入硬件中。
为了避免这种情况,我目前正在使用一种简单的方法。
在代码中我有一个 key :abcd123
我的应用程序生成一个配置文件,然后:
对配置文件进行 HASH 并使用存储在中的 KEY: abcd123 加密 HASH 字符串变量KEY
将配置文件交给我的助手,由其将其加载到硬件中
现在,硬件拥有 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/