C# 实现节点锁定许可证:带签名的公共字段与完全加密 背景

C# 实现节点锁定许可证:带签名的公共字段与完全加密 背景,c#,cryptography,public-key-encryption,C#,Cryptography,Public Key Encryption,我需要实现一个简单的节点锁定许可机制(即,许可证需要仅对特定的物理计算机有效) 我打算使用非对称加密算法,如RSA 以下是我打算如何组织基本许可“工作流”: 需要获得许可的应用程序读取唯一标识计算机(当前正在运行)的数据。让我们将此数据称为“计算ID” 用户通过发送计算机ID请求许可证 根据计算机ID生成并保护许可证(通过完全加密或签名),然后发送回用户 然后,应用程序可以将许可证与实际计算机ID进行比较,如果不匹配,则拒绝运行 请注意,计算机ID不会特别敏感(可能只是一个MAC地址,也可能

我需要实现一个简单的节点锁定许可机制(即,许可证需要仅对特定的物理计算机有效)

我打算使用非对称加密算法,如RSA

以下是我打算如何组织基本许可“工作流”:

  • 需要获得许可的应用程序读取唯一标识计算机(当前正在运行)的数据。让我们将此数据称为“计算ID”
  • 用户通过发送计算机ID请求许可证
  • 根据计算机ID生成并保护许可证(通过完全加密或签名),然后发送回用户
  • 然后,应用程序可以将许可证与实际计算机ID进行比较,如果不匹配,则拒绝运行
请注意,计算机ID不会特别敏感(可能只是一个MAC地址,也可能是一个HD序列号),它本身并不代表秘密

问题: 我面临的困境是是否:

  • 加密计算机ID(在许可证申请和许可证本身中)
  • 或者将其作为纯文本包含(在请求和许可证中),只需添加一个签名(在许可证中)
  • (1) 如果选择完全加密,则需要两对公钥/私钥-每个方向一对(一对用于加密请求并在生成许可证之前解密;另一对用于加密许可证并由应用程序解密)

    (2)如果我选择使用签名,我只需要一个键-私钥来签名许可证和公钥,以便在应用程序运行时验证签名(因此它知道许可证中的纯文本计算机ID没有改变)。 方法(2)在我看来更简单,但它是否和(1)一样“强大”


    我在C#中实现了这一点,但我希望得到关于每种方法的优缺点的一般“高级”建议,不管实现细节如何。

    由于您的计算id仅在可以复制计算id的机器上工作,因此如果您以明文形式传输计算id,实际上并不是一个问题。即使有人偷了它,他也无法使用它。 如果有人通过交通工具操纵它,你也会认出它(因为它是签名的)

    但是:这取决于您生成的计算id的类型。如果您没有使用适当的算法,某人可能会获得有关生成计算id的系统的一些信息(您的许可证持有人不会欣赏这些信息)
    为此,您应该使用无(或不可预测的)冲突的“保存”散列函数。

    由于您的计算id仅在可以复制计算id的机器上工作,因此如果您将计算id作为明文传输,实际上并不成问题。即使有人偷了它,他也无法使用它。 如果有人通过交通工具操纵它,你也会认出它(因为它是签名的)

    但是:这取决于您生成的计算id的类型。如果您没有使用适当的算法,某人可能会获得有关生成计算id的系统的一些信息(您的许可证持有人不会欣赏这些信息)
    为此,您应该使用无(或不可预测的)冲突的“save”哈希函数。

    由于这是我的专业领域,请允许我加入。。。看起来你正试图从头开始创建自己的激活系统。我想问一下,你们为什么这样做,而不仅仅是使用商业系统

    在使用激活来保护软件许可证的早期,许多公司采取了在没有深厚专业知识的情况下开发自己的系统的方法,而他们对如何制作一个安全、用户友好的激活系统的无知使激活名声扫地。因此,为了帮助您不必痛苦地重新吸取这些教训并激怒您的客户,您需要考虑以下几点:

    • 如果用户没有到服务器的网络连接,或者他们的连接被防火墙阻止,他们将如何激活许可证
    • 您说过您正在将应用程序锁定到用户系统的某些参数。您将如何处理对系统进行轻微升级,导致节点锁定参数更改的人?注意,MAC地址不是一个很好的选择,即使它是常用的,因为在某些系统上可以轻松配置MAC地址意味着MAC地址节点锁定是不安全的
    • 用户的系统崩溃-他们如何在另一个系统上运行许可证?(你怎么知道他们说出了系统崩溃的真相?)
    • 如果用户想在一段时间后将其许可证移动到另一台机器上,比如从台式机移动到笔记本电脑,该怎么办。您的系统是否允许他们这样做,而不会造成安全漏洞或烦人的手动过程需要您的支持
    • 您将如何保护您的许可证,防止密钥篡改、欺骗或篡改许可证代码等
    • 从你的帖子看来,你现在只想启用整个应用程序。如果将来您希望激活限时试用或订阅许可证、配置产品功能或启用某些模块等,您的激活系统是否支持此功能,或者您是否需要重新构建它
    • 一些公司不希望任何关于他们的系统的明文信息通过互联网传输,因此您可能希望从一开始就对上传的系统详细信息进行加密

    有一些事情需要考虑。

    既然这是我的专业领域,那就让我开始吧。。。看起来你正试图从头开始创建自己的激活系统。我想问一下,你们为什么这样做,而不仅仅是使用商业系统

    在使用激活保护软件许可证的早期,有许多