Algorithm 创建许可证密钥的安全算法?

Algorithm 创建许可证密钥的安全算法?,algorithm,software-distribution,product-key,Algorithm,Software Distribution,Product Key,我想发布一个应用程序,但有许可证密钥,他们可以进入解锁。什么是一个好的算法来创建一个简洁的密钥,该密钥包含关于他们购买的版本的信息,以及诸如许可证期限等附加内容 我知道这种保护是可以破解的,但它能让诚实的人保持诚实。我可能会也可能不会实现在线激活,但我主要关心的是生成这些密钥的好方法 我们都见过这种情况,什么算法最有效?我是否应该请求用户的纯文本名称,并使用该名称根据他们自己的信息创建唯一的产品密钥 是否有一种系统可以用来使生成有效密钥几乎不可能 可能是一种公钥/私钥对加密情况,其中只有制造商拥

我想发布一个应用程序,但有许可证密钥,他们可以进入解锁。什么是一个好的算法来创建一个简洁的密钥,该密钥包含关于他们购买的版本的信息,以及诸如许可证期限等附加内容

我知道这种保护是可以破解的,但它能让诚实的人保持诚实。我可能会也可能不会实现在线激活,但我主要关心的是生成这些密钥的好方法

我们都见过这种情况,什么算法最有效?我是否应该请求用户的纯文本名称,并使用该名称根据他们自己的信息创建唯一的产品密钥

是否有一种系统可以用来使生成有效密钥几乎不可能

可能是一种公钥/私钥对加密情况,其中只有制造商拥有私钥,并且数据可以通过公钥进行验证,但不能劫持公钥来创建有效密钥


由于这是一个产品密钥,如果它相当短,64个字符或最多128个字符就好了,但越短越好,32个或更少就越好。

您没有说您在哪个平台上,但Microsoft.Net中有一个:

这个页面记录了一个非常简单的 可与一起使用的许可证方案 您的.NET应用程序。这是有意的 相当安全,易于实现 并且易于扩展。示例版本 允许您提供许可证文件 其中嵌入了客户机名称 但您可以轻松地扩展它以添加 其他识别信息、机器 绑定、有效期等

该方案利用了微软的 RSA库和XML签名。基本上 您可以将任何需要的内容放入XML中 记录并签署该文件。然后 您可以将该文件提供给您的 客户和应用程序可以读取 从中获取许可证信息 文件因为文件是数字的 无法对许可证文件进行签名 除非你释放你的 私钥(你真的需要它吗 不应该这样做)

没有互联网接入和快捷键 关于串行密钥大小,短密钥/人类可读密钥之间存在权衡 (不太安全)并且具有长密钥或许可证文件(更安全)

如果您希望使用简短且可读的密钥来存储到期日期和功能等信息,那么可以将SKGL与软件保护器结合使用,两者都是开源的()

然而,缺点是它们很可能使用对称加密和/或将密钥生成算法存储在应用程序中。这意味着最终用户可以尝试查找加密密钥和/或算法(请参阅)

Internet访问(或脱机使用激活文件) 更好的选择是使用基于云的系统,该系统跟踪所有许可证密钥,并允许您随时修改它们

如果您有基于web的许可系统,则可以缩短密钥,而不必将信息存储在实际密钥中(大多数基于脱机的系统都是这样)

此外,您将能够支持更多的许可模型,例如,基于订阅的模型

解决办法是:

  • 自己构建这样的系统——这将花费大量时间,并分散您对应用程序核心功能的注意力

  • 使用现有的开源系统作为出发点-虽然这可能很诱人,因为它是开源的,而且是免费的,但将它们带到云端+根据您的特定需要配置它+维护它需要时间。我所观察到的开源系统在功能上往往非常广泛,这导致了复杂性

  • 外包给第三方——缺点是大多数外包都不是免费的

在我看来,整个过程应该外包给专门开发该特定组件的第三方。扩展后,可能需要更改许可逻辑。与其自己开发,第三方可能已经支持该场景

例如,有几种解决方案(确保寻找基于web的解决方案)。如果您正在开发.NET应用程序,下面是一个分步示例:



免责声明:我是SKGL/Software Protector的作者,这是一篇关于许可证系统和加密镜头的文章。

如果你分发的是人们想要的独立软件,而不需要付费,它就会被破解。我唯一能想到的可靠解决方法是创建依赖于您控制的服务器的东西。+1。我认为“让诚实的人诚实”是解决这个问题的正确心态。没有什么是加密安全的,但为每个许可证提供某种唯一的密钥或编号实际上可以让商业客户更容易地对其软件进行说明,从而为您的产品增加价值。繁重的数字版权管理(不起作用)旨在挫败犯罪分子(他们无论如何都不会付钱),这只是向客户付款的一个障碍。@erickson除非你真的搞砸了,否则要使事情以加密的方式安全是相对容易的。不安全的是执行环境。如果用户可以修改他们机器上的内存,他们就可以绕过你的加密。@Paul-大多数开发人员都把加密搞得一团糟。例如,当应用程序需要真实性而不是隐私时,您谈论的是加密。无论如何,当我说“加密安全”时,我将密钥管理作为所需加密操作安全的核心。当您的协议要求将密钥提供给攻击者时,您无法获得安全性。这可以很容易地适应其他平台。链接似乎已失效:404