安全算法对于创造许可证的钥匙?
-
06-07-2019 - |
题
我想要分发的应用程序,但有许可证的关键,他们可以进入以解锁。什么是一个很好的算法,以创建一个简明关键的信息包含关于什么的版本,他们已购买,以及额外的事情,如时间许可证,等等。
我意识到这种保护可以被破解,但它保持诚实的人诚实的。我可以或不可以实施在线激活,但是我主要关心的一个好办法来产生这些钥匙。
我们都看到这种情况下,什么样的算法的最佳作品?我应该问的一个明文名称的用户和使用,创建一个独特的产品的关键基于他们自己的信息?
是有一个系统,该系统可以用来使这附近不可能生成一个有效的钥匙?
也许是一个公共/私人加密钥对种情况,唯一的制造商拥有的私人钥匙和数据可以通过验证公用钥匙,但是公众的关键不能被劫持为创建有效的钥匙。
因为这是一个产品的关键,这将是巨大的,如果它是相当短,64个字或者,也许128最大,但越短越好,32个或更少将是巨大的。
解决方案
你没有说出你所使用的平台,但这里是微软.Net中的一个:
http://jclement.ca/devel/dotnet/reallysimplelicensing.html
此页面记录非常简单 您可以使用的许可方案 你的.NET应用程序。它的目的是 相当安全,易于实施 并且易于扩展。样本版本 允许您提供许可证文件 其中嵌入了客户名称 但你可以轻松扩展它来添加 其他识别信息,机器 绑定,到期日等。
这个方案利用了微软的 RSA库和XML签名。基本上 你把任何你想要的东西放到XML中 记录并签署该文件。然后 您可以将该文件提供给您 客户和应用程序可以阅读 许可证信息 文件。由于文件是数字的 签署许可证文件不能 篡改,除非你释放你的 私钥(你真的 不应该这样做。)
其他提示
没有互联网接入和拍摄的钥匙
关于序的关键尺寸,有一个贸易之间的短暂/人可读的钥匙 (不太安全)和具有漫长的钥匙或可能许可证文件(更安全).
如果你想简短和人可读的钥匙,让你店里的东西比如有效期限和功能,可以使用SKGL一起软件保护,这两者都是开放源(https://help.cryptolens.io/faq/what-is-skgl).
然而,其缺点是,他们将最有可能的使用对称加密技术和/或存储的关键代算法内部应用程序。这意味着对终端用户可以试图发现的加密钥和/或算法(请参阅 http://www.codeproject.com/Articles/764610/Licensing-systems-in-NET).
互联网接入(或离线与激活的文件)
一个更好的选择是使用一个基于云的系统,该系统跟踪所有的许可证,并允许修改他们在任何时候。
如果你有一个基于网络的许可系统,可以保持键较短和不必储存的信息实际的关键(这种情况与大多数离线的基础系统)。
而且,你将能够支持更多授权许可模型,例如,订阅基础的模式。
该方案是:
建立这样的系统自己的 -这将要花很多时间和分散你的注意力从核心功能的应用程序。
使用现有的开放源代码系统作为起点 -虽然它可能被诱惑,因为它的开放源代码和免费的,它将需要时间来把他们带到云+配置给您的特殊需要+保持它。开放源码系统,我已经观察到的往往是非常广泛的功能,这有助于复杂性。
外包给第三方 -缺点是,他们大多都不是免费的。
在我头脑,整个程序应该外包给第三方,是一家专业发展,特别是组成部分。一旦您的规模,可能需要改变授权的逻辑。而不是开发它自己,机会是第三方已经支持该方案。
有几种解决方案(一定要寻找那些是基于网络), Cryptolens 就是一个例子。如果你是发展中的一个。网应用程序,这里是一步一步的例子: https://help.cryptolens.io/examples/key-verification.
免责声明:我是作者的SKGL/软件保护条约的许可证制度,并Cryptolens.