在i-device上持久存储许可证密钥的最佳方法

时间:2014-03-23 04:55:58

标签: ios woocommerce activation

我有一个带有插件的woocommerce商店,可以生成许可证密钥。

我的想法是,我的应用程序的用户将输入将针对服务器进行检查的许可证密钥。如果它是正确的,那么应用程序将创建一个特殊的文件/持久标志。

一旦激活,用户可以重置设备或其他任何内容,应用程序将只是检查是否存在此持久文件/标志。

我的问题是:

  1. 是否有专门针对此类事情的图书馆?
  2. 如果没有,这样做的最佳/标准方式是什么,这样就不能将文件复制到另一台设备来伪造激活?
  3. 我是否可以在不是文件的应用程序包中使用不可触及的内容来执行此操作?
  4. 谢谢大家,一些指导或建议会很棒。

1 个答案:

答案 0 :(得分:2)

“标准”方法是让Apple通过应用内购买或订阅为您管理许可,它们提供了一个安全的实施方式,用于检查是否支付了某些内容,但这可能不是您的选择

如果您需要自己进行滚动,则需要使用不对称加密,在没有人可以访问的服务器上使用私钥(除了您)和在应用程序中分发的公钥。您还需要设备上的[UIDevice currentDevice].identifierForVendor.UUIDString值,该值是该设备唯一的值,用户无法更改(除非它们越狱)。

服务器对某些数据进行加密,如2014-03-23,purchased-three-month-license,<device-identifier-for-vendor>,<long-random-number>,并将加密数据作为许可证密钥提供给设备。

设备具有公钥,并使用它来解密许可证密钥。然后它检查结果以查看日期是否在过去三个月中,设备标识符是否与设备的实际标识符匹配,并验证长随机数是否存在且至少有10位数字(无论是什么随机数是,它只需要在那里。)

任何监禁他们设备的人仍然可以绕过你的安全。没有办法阻止这种情况。但这需要用户做很多工作,他们可能只会付钱。

加密所需的所有库都是内置的,但它们是低级API,使用起来有点复杂,而且很容易搞砸。我建议将RNCryptor作为高级包装器。

另请注意,如果用户卸载您的应用,然后重新安装(或有时Xcode安装新版本),identifierForVendor将更改为新值。 Apple强制执行此操作以保护用户隐私,无法绕过它。您需要让服务器根据新标识符重新生成新的许可证密钥...可能要求用户输入电子邮件地址和密码。您可以通过监控特定电子邮件地址的使用次数来防止盗版。如果他们在30天内生成5次许可证密钥,那么您可以将其标记为盗版。

“woocommerce商店插件”生成的任何许可证密钥都不起作用,因为它不会使用[UIDevice currentDevice].identifierForVendor.UUIDString作为许可证密钥生成的一部分。没有这个价值,任何人盗版你的软件都是微不足道的。

没有“应用程序包内部无法触及的东西”。唯一的问题是Apple硬件中的Secure Enclave。并且为了保护用户隐私,应用程序开发人员不允许直接使用它。 identifierForVendor是唯一的选择。

在早期版本的iOS中,有更多选项,但广告公司跟踪Apple的客户会滥用这些选项,因此Apple多年来一直禁止访问。