应用许可证生成器

daf*_*afi 12 cocoa licensing

我正在使用XCode和Objective C(Cocoa)开发OSX应用程序,我需要一个系统来为每个销售的应用程序生成许可证.

系统必须

  • 生成序列号而不过期
  • 生成过期的序列号(对于试用版)
  • 处理黑名单
  • 包含用于输入和检查OSX应用程序的许可证号的API

有什么东西要做,或者我自己应该实施吗?

Die*_*Epp 13

我会以三种方式之一实现这一点,这取决于我是多么偏执.

你正在使用的语言并不重要.

方法1:RSA签名的许可证

如果您对某人进行逆向工程许可生成器的偏执,那么这就是您使用的方法.您生成RSA密钥对,并将公钥与应用程序捆绑在一起.每个许可证号都使用私钥签名,应用程序使用公钥验证签名.由于您是唯一一个拥有私钥的人,因此几乎没有人可以为您的应用程序生成许可证生成器.

缺点:许可证密钥很长,可能至少有200个字符(四行文本).用户不希望输入这些内容,他们将不得不复制和粘贴.

好处:任何人都有可能编写许可证生成器的几率为零.没有经常性的费用.

方法2:HMAC签署的许可证

如果你不那么偏执,这就是你使用的方法.许可证使用HMAC和私钥进行签名,但私钥必须与您的应用程序捆绑在一起.你可以混淆,但它永远是可能的聪明人来提取您的应用程序中的密钥.

缺点:许可证生成器是可能的.

好处:短按键.您可以选择使用截断的HMAC; 64位签名可能"足够好",基数16只有16个字符.没有经常性费用.

方法3:在线验证

这种方法既偏执又方便,但它要求用户具有互联网连接,并且需要运行服务器.每个许可证只是一个随机字符串.服务器上的数据库将随机字符串映射到许可证.当用户注册应用程序时,它会向服务器发出HTTP请求,以获取与指定字符串对应的许可证信息.服务器回复RSA签名的许可证.

缺点:服务器的重复成本.没有互联网连接就无法注册.您可以轻松检测盗版密钥.

好处:短按键.没有许可证生成器 许可证撤销很容易.对那些担心你会破产的人的销售损失.

临时许可证

临时许可证也可以通过三种方式完成.

  1. 线上

  2. 签署到期日

  3. 签署许可条款

显然,如果您使用签名的许可条款,那么用户将能够擦除其首选项以重新启动许可条款,如果它们是不道德的. 请勿尝试隐藏用户无法找到的许可条款信息,这违反了用户的信任,即您的应用程序不会做任何恶意的事情.如果我发现任何应用程序隐藏了我的计算机上的数据,我会删除该应用程序并拒绝从开发人员那里购买任何东西,我相信其他一些用户也有同感.

黑名单

如果您是在线许可证服务器,这很容易 - 黑名单在服务器上.否则,您必须将黑名单与应用程序捆绑在一起,并且只有在每次发布新版本时才会更新.

是否阻止那些使用盗版许可证的问题.这个问题没有一个明显的答案:你可能认为最好是直接阻止盗版许可证,但是接受带有警告信息的盗版许可证实际上是出售新许可证的机会.

编码

我相信你可以想出自己的编码许可证方式.我已经看过使用Base 32,这很好,因为它很难被误读(与Base 64不同).我也看过使用交替的字母和数字组的方案,这很好,因为在阅读长按键时很容易记住你的位置.

许可证密钥的剖析

以下是使用HMAC的脱机许可证密钥的示例方案:

AAXX-XXXX-YYYY-ZZZZ-ZZZZ-ZZZZ-ZZZZ
  • AA:产品名称,缩写为两个字母
  • XXXXXX:一个随机数
  • YYYY:到期日,自2013年1月1日起的天数,或0表示无限制
  • ZZZZZZZZZZZZZZZZ:密钥第一部分的签名

对于RSA密钥,该ZZZ...部件将非常长.

使用在线密钥服务器时,密钥只ZZZ...需要很长(12或16个字符).

关于破解的说明

无论您采用何种方案,都无法阻止某人破解您的应用程序.智能工程师可以反汇编您的应用程序并禁用许可检查.你用来阻止它们的任何技术只会减慢它们的速度,而不是阻止它们.

  • 你不会使用RSA,你会使用ECDSA.ECDSA签名比具有可比安全性的RSA签名短得多.使用192位ECDSA,足以获得许可并与1,024位RSA相当,签名为48个字节,可以很容易地用76个字符表示. (2认同)