如何设计一个尽量防止破解的系统激活码

20 小时 8 分钟前
 chobits336

系统部署到客户的服务器,全部服务用 docker 启动,如何设计一个激活码机制让这个系统到指定时间不能使用

现在的设计是:

  1. 生成 rsa 公私钥,使用私钥加密 license ,部署时配置 license 文件
  2. 公钥放在系统中,使用公钥解密 license 校验其合法性
  3. license 里有系统 id 、签发人、过期时间属性

部署是离线环境,防止通过修改系统时间来破解授权,就想到了用系统运行时间来校验;将运行时间加密存在文件里,但如果这个时间文件被删除或被克隆,记录的运行时间就会被重置了,请问各位大佬怎么解决这个问题

3581 次点击
所在节点    程序员
43 条回复
newaccount
19 小时 57 分钟前
把当前时间和已运行时间一起放到时间文件里,多记录几个差值,增加调整时间的模拟难度
至于文件被删除,那就默认不允许运行好了,让他们找你
chobits336
19 小时 42 分钟前
@newaccount 如果服务器有快照,回滚到指定时间点,然后把系统时间也修改到那个时间,时间差是一样的,就破解了
chobits336
19 小时 36 分钟前
@chobits336 但也记录了恢复快照前的时间,用这个来对比当前时间,好像可以防止
dmitsc
19 小时 21 分钟前
数据上埋呢 加上数据库内容。他们总不能把历史数据清了吧
ysc3839
18 小时 27 分钟前
非对称加密是基础操作,但是可能遇到 hook OpenSSL (如果公钥验证用了 OpenSSL 等外部库的话),或者直接替换可执行文件内的公钥。
建议加解密部分静态链接进可执行文件,同时做好自校验。
InDom
18 小时 19 分钟前
发硬件,一年后收回硬件。USBkey 也是。
ysc3839
17 小时 53 分钟前
至于修改系统时间,没有好的解决办法,一般的思路是尽可能多的把最后时间存在各种文件中。比如某绘图软件会把试用时间存在源文件里,过了试用期之后,那个源文件就只能用付费版打开,任何其他试用版都打不开。还可以考虑把时间写到配置文件里面,要重置就只能删配置文件。
janus77
17 小时 50 分钟前
硬件+1 ,PC 端网银软件不就是这么解决的吗
rekulas
17 小时 47 分钟前
离线
到指定时间不能使用

这两者本身就冲突了,从技术上无法完美解决,只有参考那些工业机器授权过期的解决方案,附带一个加密硬件/设备作为钥匙,你的授权强度就看你硬件破解难度了
chobits336
17 小时 42 分钟前
@ysc3839 把时间写在源文件或配置文件里,回滚磁盘快照就重置时间了
wfhtqp
17 小时 39 分钟前
@chobits336 存数据库,数据库还能重置?
msg7086
17 小时 34 分钟前
只有完全可信设备才能做到,比如带时钟的加密狗。

还有一种做法就是把时间戳合并到永久存储的数据中,比如类似区块链这样每一条数据写入的时候同时写入时间戳,每条数据都可以向上回溯校验数据完整性,这样用户如果要回滚就要连同数据一起回滚。
GeekGao
17 小时 33 分钟前
做一个发号器机制:运行时长超过特定时间后自动降频(能用,但是会很卡顿,以至于无法继续商用)
815979670
17 小时 32 分钟前
如果对时间要求特别严格,可以提供一个带内置时钟的加密狗(淘宝好像就几十块钱)
chobits336
17 小时 30 分钟前
@wfhtqp 数据库也是部署到同一台服务器上的,快照恢复数据库也会影响到吧
chobits336
17 小时 23 分钟前
@msg7086 和数据绑定校验的话,完全可以将数据先导出来再回滚,在把数据导进去(数据库也是在客户的服务器部署的,环境变量里有密码)
thevita
17 小时 15 分钟前
把授权信息和业务数据混在一起

比如对历史业务数据 进行分区块签名, 把所有业务操作和结果都记账,也能防止某些时钟回拨

虽然可以通过不停恢复快照继续使用,但是业务功能也就没意义了
sn0wdr1am
17 小时 3 分钟前
道高一尺,魔高一丈。
有意思。
msg7086
17 小时 2 分钟前
@chobits336 数据导出来有什么用,你把时间戳嵌入进去,数据导回去不还是能检查出时间不对吗。
yuankui
16 小时 57 分钟前
电子签名

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

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

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

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

© 2021 V2EX