1

我需要在我的应用程序中嵌入私有 RSA 密钥。我的 RSA 密钥是根据产品序列号和选项生成的。示例 serial#1_opt1.private(此文件包含我想嵌入代码中的密钥) serial#1_opt1.public(如果用户(例如硬件经销商)需要访问受限功能,我将向他发送此文件以解锁特定选项) 每个客户需要/可能需要一组不同的密钥,具体取决于他被授权使用的选项。

我希望每个人都拥有我的应用程序中的一组标准功能(对硬件的基本控制)我的愿景是产品的标准功能集没有序列号,也没有嵌入式密钥。因此,所有受限制的功能都不会起作用,但所有标准的东西都会起作用。该程序将有一个版本号,但在 about/help 部分没有序列号

如果我需要启用受限功能[s],我使用 MSbuild 编译程序,并使用我在命令行上为该客户生成的序列号。MSBuild 将获取序列号并将其嵌入到我可以在我的代码中访问它的位置我希望它最终会出现在 properties.settings 文件中???并将其放在名为序列号的 var 中,默认情况下为空白。现在 MSBuild 已将序列号放在正确的位置,我现在希望它使用私钥 [s] 查找文件 serial#1_opt1.private 并将其/它们放在某个地方?我可以在哪里访问它们......但希望不是很容易找到它们的地方。当我的应用程序运行时,我使用私钥来加密“某物”,如果用户拥有带有公钥的文件[s],他可以解密该“某物”,这将允许他使用该特定选项。如果他拥有所有选项的所有公钥文件,那么他可以对硬件做任何我能做的事情......因为把它搞砸了,它必须返回工厂重新校准。有人可以告诉我这是否是正确的方法吗?如果不是,那么正确的方法是什么?如果是这样,我怎样才能让 MSBuild 完成这些技巧?

4

1 回答 1

2

为什么不走另一条路:

  • 将公钥嵌入到您的应用程序中(或者只是将其与您的应用程序一起公开分发)
  • 此公钥对于所有客户可以是相同的
  • 如果您需要给客户一些特殊的选择,您可以创建一个 XML
  • 该 XML 包含您定义的格式的任何选项
  • XML 可以包含明文形式的任何内容
  • 您签署该 XML(使用您的从未分发的私钥创建签名)
  • 您的应用程序可以通过验证签名来验证 XML 的真实性(为此它需要公钥)

您的客户无法根据公钥创建有效签名...如果您的硬件有一些不可更改的序列号,您的应用程序可以读取,那么我也会将此硬件序列号放入 XML 中...这样一个 XML 文件不能被不同的客户复制/使用...

您甚至可以通过提供客户特定的公钥(并保持相应的私钥私有)来扩展此方案......这些可以与应用程序一起公开分发,而无需隐藏或 MSBUILD 技巧,因为任何人都不知道公钥完全有安全风险...

理想情况下,你签署你的应用程序/程序集(为此你需要一个证书),它提供了一些防止篡改你的应用程序/程序集的安全性,那么你就拥有了一些真正可靠的东西,而不需要任何“技巧”......

于 2011-08-30T23:09:40.910 回答