背景

当我们的产品需要卖给客户进行私有化部署时,我们通常会考虑只允许客户指定服务器上部署及对客户可用的功能权限、用户数等进行控制,进而考虑了License授权管理方案。

什么是License

License指软件许可证,是一种格式合同,由软件作者与用户签订,用以规定和限制软件用户使用软件(或其源代码)的权利,以及作者应尽的义务。软件版权属于知识产权的著作权范畴,具有知识产权的特征,即时间性,专有性和地域性。国家颁布有《计算机软件保护条例》,保护权益人的软件著作权。简单来说就是,license就是软件使用许可,一般都要买,不买就不能使用软件。

加密算法基础

软件授权机制的基础就是加密算法,加密算法可以简单分为对称加密算法和非对称加密算法。下面先来简单了加密算法的基础概念,以方便理解整个软件License授权方案的设计思路。

1、对称加密算法

对称加密(也叫私钥加密)指加密和解密使用相同密钥的加密算法。有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,同时解密密钥也可以从加密密钥中推算出来。而在大多数的对称算法中,加密密钥和解密密钥是相同的,所以也称这种加密算法为秘密密钥算法或单密钥算法。它要求发送方和接收方在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都可以对他们发送或接收的消息解密,所以密钥的保密性对通信的安全性至关重要。

主要有DES算法,3DES算法,AES算法等。

2、非对称加密算法

非对称加密需要两个密钥:公钥 (publickey) 和私钥 (privatekey)。公钥和私钥是一对,如果用公钥对数据加密,那么只能用对应的私钥解密。如果用私钥对数据加密,只能用对应的公钥进行解密。因为加密和解密用的是不同的密钥,所以称为非对称加密。

主要有:RSA、Elgamal、背包算法、Rabin、D-H、ECC (椭圆曲线加密算法)等。使用最广泛的是 RSA 算法。

整体思路

本方案中主要考虑的是一种基于RSA+DES加密算法的离线软件授权激活码的设计思路.

1、生成机器码

机器码的获取考虑CPU序列号、硬盘序列号、主板序列号,对信息进行固定规则的拼接后再通过MD5加密生成最终的机器码。

2、License生成

License授权码使用RSA+DES混合加密的方式生成。

1、确认License内容:机器码、过期时间、用户数、功能权限...
2、将机器码做为密钥种子,生成本次加密码的DES密钥。
3、使用DES密钥对License内容逐项进行DES加密。
4、生成RSA密钥对(公钥+私钥)。
5、使用RSA私钥对DES密钥进行RSA加密。
6、将DES加密后和License内容项+RSA加密后的DES密钥+RSA公钥进行组装生成License,然后使用Base64对License进行编码得到最终的License。

3、License验证

通过对License反向解密后得到License各项信息,用于系统中校验使用,验证License是否有效。

1、使用Base64对License进行解码,得到License各项内容项。
2、通过RSA公钥对DES密钥进行解密(解密失败:License无效)。
3、通过解密后的DES密钥对License内容项逐项进行解密(解密失败:License无效)。
4、验证机器码是否为本地机器码:获取本机机器码与License中机器码比较是否一致(机器码不一致:License无效)。
5、验证License是否过期,将License中的过期时间与本机时间进行比较(本机时间超过License过期时间,License已过期)。
6、验证功能权限、用户数……

总结

本方案主要介绍软件授权需求结合RSA+DES加密算法设计出的一种软件离线License授权方案,为软件授权激活设计提供了一种思路。在实际应用中还需要兼顾更多细节结合实际需求进行综合考虑来增加破解难度;同时License验证也是一种数据传输及验证,因此本方案也适用于离线/在线数据传输、接口数据传输等数据传输过程中的安全性防拦截、防篡改验证。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐