实际上,如果代码和密钥是SD卡的机器上,他们将能够去编译它,他们将能够发现钥匙,他们将能够提取敏感数据。
这就像加密电影一样,DVD必须包含解密电影所需的所有信息,以便可以将其显示给观众,因此所有电影复制保护机制最终都注定要失败。
您能做的最好的就是改变对产品进行反向工程的经济性。
加密和/或模糊处理值得吗?
现在我们已经确定没有办法完全保护自己,问题变成了
- 这发生的可能性有多大?
- 您的算法和数据对其他人有什么价值?
- 他们购买使用您的软件的许可证的费用是多少?
- 他们复制您的算法和数据对他们有何代价?
- 他们对您的算法和数据进行逆向工程对他们有何代价?
- 保护您的算法和数据对您而言有何代价?
如果这些对保护您的算法/数据产生了重要的经济影响,那么您应该考虑这样做。例如,如果服务的价值和客户的成本都很高,但是对代码进行反向工程的成本远低于自己开发代码的成本,那么人们可能会尝试这样做。
因此,这导致了您的问题
混淆
您建议的选项混淆了代码,使上面的内容不合时宜-它试图显着增加它们的成本(以上5),而又不增加您的成本(6)。问题在于,与DVD加密一样,它注定会失败,并且如果3、4和5之间的差异足够大,那么最终有人会这样做。
另一种选择是Steganography形式,它使您可以确定谁解密了您的代码并开始分发它。例如,如果您有100个不同的float值作为数据的一部分,并且每个值的LSB出现1位错误都不会对您的应用程序造成问题,请对这些位编码一个(针对每个客户)唯一的标识符。问题是,如果某人可以访问您的应用程序数据的多个副本,则很明显,它们是不同的,从而使识别隐藏消息更加容易。
保护
唯一真正安全的选择是提供软件即服务的关键部分,而不是将其包含在应用程序中。
从概念上讲,您的应用程序将收集运行算法所需的所有数据,将其打包为对云中服务器(由您控制)的请求,然后您的服务将计算结果并将其传递回客户端,将显示它。
这会将您所有的专有,机密数据和算法保留在完全控制的域内,并且消除了客户端提取其中任何一个的可能性。
明显的不利之处在于,客户端受您的服务供应的约束,受服务器及其Internet连接的支配。从好的方面来说,它们始终是与最新的错误修复程序。不幸的是,正是由于这些原因,许多人反对SaaS。
不过,这将是迈出的一大步,而且成本可能高达6,但这是我看到的确保算法和数据完全安全的唯一方法。