Java 离线授权方案

2018-06-04 18:58:37 +08:00
 Lighfer

公司开发了一个新产品,客户是在内网环境下使用的,但是我们的产品又需要卖授权,有没有人做过类似的方案呢? 目前考虑的方案是:使用非对称加密算法生成公钥和私钥,公钥保存在公司内,用于生成 licence,私钥嵌入产品内,licence 中包含机器码等信息,软件启动时加载 licence 并用私钥解密,判断机器码和使用时间等信息是否有效。 但是这个方案容易被破解,毕竟 class 反编译后私钥,licence 文件格式,授权检验等信息都藏不住,把检验的 class 文件替换掉就破裂掉了。 即使做代码混淆也不过是提高了反编译的难度而已。 技术所限,想了一天都想不到解决方案,各位有没有什么更好的方案可以提供参考呢?或者其他离线授权机制的思路?

10316 次点击
所在节点    Java
55 条回复
Lighfer
2018-06-04 18:59:17 +08:00
手机发表的,换行都没了,我一会回去调整一下
Lighfer
2018-06-04 19:00:58 +08:00
好像不能编辑… 各位看官辛苦了……
shayuvpn0001
2018-06-04 19:01:30 +08:00
加密狗 + 限时的 Licence
chinvo
2018-06-04 19:03:17 +08:00
Java bytecode 和明文源码没多大区别,所以用硬件,把一部分核心逻辑放到加密狗里面。
olOwOlo
2018-06-04 19:04:12 +08:00
。。。我还是第一次听说把公钥保密,私钥公开的
chinvo
2018-06-04 19:05:44 +08:00
@olOwOlo #5 你一说我才发现楼主是保密公钥
Lighfer
2018-06-04 19:05:53 +08:00
@shayuvpn0001 客户的机子上是禁止 usb 的,所以加密狗用不了,licence 限时意义不大,因为被反编译后授权完整的代码基本都呈现出来了,很容易造出一个破解版的 class 文件把验证算法跳过去……
Lighfer
2018-06-04 19:06:17 +08:00
@chinvo 不用用加密狗,usb 禁用的……
Lighfer
2018-06-04 19:07:26 +08:00
@olOwOlo rsa 加密一般不都是用公钥加密私钥解密吗,而且只要保证其中任意一个不泄露,其实用哪个公开都可以的吧?
gam2046
2018-06-04 19:07:49 +08:00
看应用被破解的强度吧。一般的,用自定义 ClassLoader 去加载 bytecode,同时 ClassLoader 用 native 写,基本上可以防止很多中低端的破解手段。

要高强度的就是考虑上面大佬说的看门狗方案,将部分功能以及授权验证抽离到独立外部硬件中进行。
chinvo
2018-06-04 19:08:45 +08:00
@Lighfer
#8 用 PCI 的狗咯

#9 你可理解错了,公钥可以直接用私钥计算出来
Lighfer
2018-06-04 19:10:06 +08:00
@gam2046 客户的机子禁用 usb,所以似乎加密狗的方案行不通…… classloader 倒是一个更好的思路,我回头研究一下,十分感谢!
Lighfer
2018-06-04 19:11:50 +08:00
@chinvo !!原来是这样…怪我调研不足,十分感谢提醒!
Lighfer
2018-06-04 19:12:15 +08:00
@olOwOlo 有人给出解释了,私钥可以推出公钥,十分感谢指出问题!
zhjits
2018-06-04 19:26:43 +08:00
如果客户终端比较多的话写一个 license server,server 要求定期从公司网站下一个 license file 喂进去(
wenzhoou
2018-06-04 19:58:41 +08:00
公钥保存在公司内。说的是谁的公司内,你的公司内 还是使用者公司内?
jadec0der
2018-06-04 20:19:27 +08:00
@chinvo
@Lighfer RSA 的话,私钥不能计算公钥。只是有的实现会把公钥也放进私钥文件里
Lighfer
2018-06-04 20:23:46 +08:00
@zhjits 这样问题就变成了破解 licence server 了。。
Lighfer
2018-06-04 20:24:27 +08:00
@wenzhoou 我们公司内,我们公司用公钥计算出授权文件,再卖给客户
Lighfer
2018-06-04 20:25:28 +08:00
@jadec0der 一会吃完饭我去仔细研究一下,十分感谢,受教了!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/460322

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX