c# - 我应该将公钥放在独立应用程序中的哪里

标签 c# .net rsa public-key-encryption

我编写了一个 C# WPF 应用程序,该应用程序使用标准 .Net SignedXml 类对许可证 xml 文件进行签名。我能够将公钥和私钥提取为 xml 字符串。我可以安全地将我的私钥存放在本地以用于签名应用程序,但是远程签名检查应用程序(库)中所需的公钥又如何呢?考虑的选项:

  • KeyContainer:不好,因为签名和检查发生在两个不同的环境中
  • 硬编码:将公钥硬编码为我的检查库中的 xml 字符串。我知道公钥并不 secret ,但是如何防止黑客用自己的 key 替换 key 呢?我可以对库进行签名,但他们可以使用该库篡改应用程序......

最佳答案

将公钥放入与应用程序一起分发的标准数字证书中。 Windows 将保证证书的完整性,您可以知道它是否已被更改。

当然,硬件和 Windows 本身都处于任何潜在攻击者的控制之下,因此您无法真正防止特定计算机受到损害。

这是我曾经分发过的一个程序的示例。当从许可证的角度激活该程序时,它会将硬件哈希发送到 Web 服务。这返回了一个包含硬件哈希的自签名证书,我的程序在启动时会检查该证书。如果证书以任何方式发生更改,程序就会停止。

关于c# - 我应该将公钥放在独立应用程序中的哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11225439/

相关文章:

Java - 公私钥加密 - 如何计算RSA中的私钥

c# - Swashbuckle SchemaFilter 用于 api 操作参数

c# - 使用数据库而不是内存存储身份服务器 4

c# - 如何从另一个 View 模型实例化和显示一个 ViewModel

c# - WPF C# 应用程序产生两个主窗口的问题

c# - .NET JAXB 等效项?

java - 从大整数构造公钥?

java - 在模数 RSA key 中获得额外的 1 个字节,有时也用于指数

c# - 内存泄漏 : TimerCallbacks objects referenced by root

c# - 从同一 Web 服务调用 Web 方法