我编写了一个 C# WPF 应用程序,该应用程序使用标准 .Net SignedXml 类对许可证 xml 文件进行签名。我能够将公钥和私钥提取为 xml 字符串。我可以安全地将我的私钥存放在本地以用于签名应用程序,但是远程签名检查应用程序(库)中所需的公钥又如何呢?考虑的选项:
- KeyContainer:不好,因为签名和检查发生在两个不同的环境中
- 硬编码:将公钥硬编码为我的检查库中的 xml 字符串。我知道公钥并不 secret ,但是如何防止黑客用自己的 key 替换 key 呢?我可以对库进行签名,但他们可以使用该库篡改应用程序......
最佳答案
将公钥放入与应用程序一起分发的标准数字证书中。 Windows 将保证证书的完整性,您可以知道它是否已被更改。
当然,硬件和 Windows 本身都处于任何潜在攻击者的控制之下,因此您无法真正防止特定计算机受到损害。
这是我曾经分发过的一个程序的示例。当从许可证的角度激活该程序时,它会将硬件哈希发送到 Web 服务。这返回了一个包含硬件哈希的自签名证书,我的程序在启动时会检查该证书。如果证书以任何方式发生更改,程序就会停止。
关于c# - 我应该将公钥放在独立应用程序中的哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11225439/