软件License授权原理

一、各种许可证

图片

二、License分类

依据用途的不同,License可分为两大类别:商用License非商用License

非商用License主要服务于诸如展览展示活动、各类研发活动等多种非直接盈利性的应用场景;

商用License,则通常适用于那些开展商业运营活动的企业场所。

基于使用的期限,License可以划分为固定期限License和永久License两类。

三 、如何实现License授权?

要想生成一个安全性高的License,必须让其满足以下几个特征:

  • 保密性
  • 防篡改
  • 时效性
  • 可找回

非对称加密

有非对称加密必然就会有对称加密,对称加密就是我们一般意义上的加密算法,这种算法在加密和解密时都使用同一个密钥,所以对称加密算法的密钥又叫做共享密钥。对称加密算法一般使用AES(Advanced Encryption Standard)加密算法。

图片

非对称加密有两个密钥,一个公钥一个私钥。公钥是公开的,供多个人使用;私钥是非公开的,仅一个人或者少数群体使用。当非对称加密算法用作加解密时,公钥用来对明文加密,私钥用来给密文解密,这个顺序不能颠倒。你可以这样理解,密文是私密的东西,只有少数人才能解密,所以少数人手里的私钥用来解密,多数人手里的公钥不能解密只能加密。

图片

签名&验签

签名就是认证你的身份。这里还是使用非对称密钥算法,只不过使用的顺序和加密消息时恰好相反。签名时是私钥用来加密,公钥用来解密。

图片

License文件理论上来说至少需要以下一些信息:

  • 软件所有者信息
  • 申请授权时间
  • 授权截止时间
  • 软件使用者信息

下图是License文件流的结构图,主要字段有:

  • 魔数值
  • 分隔符
  • 申请时间
  • 到期时间
  • 公钥的长度 & 公钥
  • 携带信息的长度 & 携带信息

图片

生成License主要做了这样几个事情:

  • 对需要携带的信息加密成密文
  • 对密文签名
  • 保存申请日期、有效截止日期和公钥
  • 生成源文件

图片

申请日期和有效截止日期也需要签名但不需要加密。因为如果不签名的话,客户可以将日期解析出来之后篡改成自己想要的任何日期。

加载License

图片

客户申请到License之后,就可以去软件上面激活啦。激活License首先判断License是否合法,检查文件头魔数和分隔符是否正确,检查License是否过期等。然后就是提取License的授权信息进行验签比对。如果有必要,还可以检查授权信息里携带的MAC地址是否与安装设备的MAC地址匹配。如果一切正常就可以通过验证。

图片

  • 如何防止客户在多台服务器上使用同一个License?

答:将服务器的ip或者mac地址与License做绑定关系。

  • 如何解决java代码反编译之后,修改验证License的逻辑?

答:混淆代码,增加反编译的难度。

  • 如何防止客户修改服务器时间以避免License过期?

答:分为离线和在线两种情况。

在线情况下加载License信息时,可以将License里保存的过期时间和线上标准时间做比较

离线情况下,需要满足条件:申请时间 <= 系统时间 <= 截止时间

具体实现方案是,第一次加载License成功之后,将申请时间存到A处;

定时更新A处的时间,更新前比较当前系统时间,如果系统时间 < 申请时间,说明系统时间被篡改过。否则,更新A处时间为当前系统时间;

保存的时间是经过加密的,但是有个问题是如果用户备份了一开始的时间,过了一段时间之后用这个备份文件恢复,再修改系统时间就可以永不过期,如何解决?

\1. 可以将A处的时间信息保存到数据库里,数据库权限设置为只有开发人员可以修改,此外数据库安装的机器不能与软件安装的机器相同,否则用户可以将二者统一安装到某一个虚拟机里,快到期的时候再统一恢复到初始时间。

\2. A处除了保存时间以外,还需要License的唯一id、使用License的机器mac地址,这些字段是为了保证License不被重复使用。

  • 如何防止用户得到了源文件并获取了私钥,就可以自己伪造License?

答:避免将生成License的代码安装在用户的机器环境下,最好在自己的机器环境下生成License。因为生成License之后得到的源文件一般会保存在代码路径下,如果用户反编译生成License的代码,就能够得到源文件信息。

最后整理了一张泳道图,可以从整体观察一下不限制、防止篡改系统时间和防止多设备共享License等问题的解决方案。

图片

原文链接:https://mp.weixin.qq.com/s/7QmoG0cvOd8fidPAHkUunQ

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2022-2024 lk
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信