使用MSBuild为每个客户的应用程序副本添加序列号和RSA私钥

本文关键字:添加 副本 序列号 私钥 RSA 应用程序 MSBuild 客户 使用 | 更新日期: 2023-09-27 18:07:00

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

在我的应用程序中有一组标准的功能,我希望每个人都拥有(硬件的基本控制)我的愿景是为标准的功能集的产品将没有一个序列号,没有嵌入式键。所以所有的受限函数都不成立但是所有的标准函数都成立。在"关于"/"帮助"部分

中,程序将有版本号,但没有序列号。

如果我需要启用受限制的功能[s],我使用MSbuild和我在命令行上为该客户生成的序列号编译程序。MSBuild将采用序列号并将其嵌入到我可以在代码中访问它的地方我希望它最终会被用于房地产。设置文件? ?并将其放入名为serial number的变量中,该变量默认为空白。现在MSBuild已经把序列号放在正确的位置,我现在想让它去寻找文件序列号#1_opt1。私钥[s],并把它/他们放在某个地方?我可以在哪里访问它们......但希望不是在容易找到的地方。当我的应用程序运行时,我使用私钥加密"某些东西",如果用户拥有带有公钥的文件,他可以解密"某些东西",这将允许他使用特定的选项。如果他拥有所有选项的所有公钥文件,那么他就可以对硬件做任何我能做的事情......就像把它搞砸了,它必须被送回工厂重新校准。有人能告诉我这是正确的方法吗?如果不是,正确的方法是什么?如果是,我怎么能让MSBuild做这些技巧?

使用MSBuild为每个客户的应用程序副本添加序列号和RSA私钥

为什么不走另一条路呢:

  • 将公钥嵌入到你的应用程序中(或者只是在你的应用程序中公开分发它)
  • 此公钥可以对所有客户相同
  • 如果你需要给客户一些特殊的选择,你可以创建一个XML
  • XML包含任何你定义的格式的选项
  • XML可以包含任何明文
  • 你对XML签名(用你的私钥创建签名,这是永远不会分发的)
  • 你的应用程序可以通过验证签名来验证XML是真实的(为此它需要公钥)

您的客户无法基于公钥创建有效签名…如果你的硬件有一些不可更改的序列号,你的应用程序可以读取,那么我也会把这个硬件序列号放入XML。这样一个XML文件就不会被不同的客户复制/使用…

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

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