Virbox LM 的许可体系
什么是软件许可
要介绍 Virbox 许可,首先要先了解什么是软件许可(Software License)。软件许可是一种数据凭证,由软件作者与用户签订,用以规定和限制软件用户使用软件(或其源代码)的权利,以及作者应尽的义务。
什么是 Virbox 许可体系
前面我们已经介绍过了 什么是 Vibox LM,而 Virbox 许可体系是 Virbox LM 的核心部分。Virbox 许可体系是我公司在软件保护行业多年耕作的经验结晶。Virbox 许可根据软件和数据产品对于版权保护的需要,推出了控制软件的使用时长、次数、并发数、软件功能模块限制等功能。同时根据市场需求,推出了相应的硬件锁许可、云许可和软许可等产品,可满足不同行业、不同场景下的软件版权保护需求。
Virbox 许可体系可以做什么
Virbox 许可包含软件产品信息和使用限制条件,软件产品信息可以有产品编号、产品版本号、产品功能模块、产品配置数据信息等;使用限制条件又包括软件的使用时长、使用次数、并发运行数等。
使用 Virbox 许可,每个开发者可以给多于40亿个不同的产品创建独立的许可。此外,每个精锐5硬件锁最多可以存储6000个产品许可,云许可、软锁许可存储产品数量无最大限制。
许可内容
许可产品矩阵
精锐5 硬件锁许可 | 云许可 | 软许可 | Smart 许可 | |
---|---|---|---|---|
概述 | 通过 USB 等方式连接到计算机本地的一种实体加密锁 | 运行在服务器上的云服务,各开发商,各用户隔离的,也可以理解为一种运行在服务端的加密锁实体 | 通过驱动访问的本地加密容器,存储在计算机硬盘上。 | 适用于 IoT 领域的软件许可,保护算法逻辑和设备应用软件 |
安全强度 | 硬件锁 > 云锁 > 软锁 (Smart 许可由于其使用场景的特殊性,不在对比行列) | |||
许可ID | ||||
开始时间 | ||||
结束时间 | ||||
时间跨度 | ||||
使用计次 | ||||
数据区 | ||||
软件功能模块 | ||||
许可加解密 | ||||
碎片代码执行 | ||||
网络许可(局域网) | 账号: | |||
锁内文件 | ||||
锁内代码 | ||||
可存储许可数量 | 最高6000条 | 原则上无数量限制 | 原则上无数量限制,为保证运行效率,每台机器最好不要超过200个 | 一码一机、一码多机 |
许可升级方式 |
| 云托管签发,自动升级 | 云托管签发。通过授权码方式在线/离线激活;通过账户的方式在线/离线激活 | 云托管签发,通过授权码方式在线/离线激活 |
开发商和用户对应关系 | 每一只用户锁对应唯一一个开发商 | 开发商隔离,每个用户账号可以对应多个开发商 | 开发商隔离,每个用户账号可以对应多个开发商 | 开发商隔离,每个授权码对应一个开发商 |
锁内时间 | 标准版:虚拟时钟 时钟版:优先使用硬件时钟 | 服务器时间 | 软锁虚拟时钟 | 软锁虚拟时钟 |
时钟校准 | 通过 Virbox用户工具 手动校准 | 无需校准 | 在线情况自动校准;离线情况许可绑定时校准 | 授权码激活时校准 |
联网限制 | 无限制 | 实时在线使用 | 在线、间接在线、完全离线使用 | 无限制 |
唯一标识 | 外壳打码号或者芯片序列号 | 用户账号 | 用户账号或者软锁号 | 机器唯一识别码 |
使用寿命 | 最低 10 年 | 无限期 | 随计算机使用寿命 | 随设备使用寿命 |
支持操作系统 | Windows、Linux、macOS、Android设备 | Windows、Linux、macOS | Windows、Linux、ARM-Linux、macOS | Android、ARM-Linux |
规格 | 根据容量:标准版/旗舰版 根据时钟类型:标准版/时钟版 根据外观:通用版/精灵版/工业版 | 账号和密码 | 账号版软许可和授权码版软许可 | 授权码 |
价格 | 标准版88元/只 其他类型参考 官方商城 报价 | 按许可使用方式计费,详细计费规则参考 官网价格表 | 按许可使用方式计费,详细计费规则参考 官网价格表 | 按许可使用方式计费,详细计费规则请联系 技术服务人员 |
许可条款
条款 | 写入权限 | 备注 |
---|---|---|
功能标识位 | 开发锁签发 | 二进制标识,保证许可功能是否开启。使用和判断方法是按照位操作。具体含义参考下文:许可标志位解释 |
许可版本 | 开发锁签发 | 当前许可的版本号 |
许可ID | 开发锁签发 | 范围从1至4294967295,0号许是生产时写入,是用于管理用途且不可删除的特殊许可。 |
开始时间 | 开发锁签发 | 软件不能早于此时间启动。支持范围:2000-1-1 00:00:00到2099-12-31 23:59:59 |
结束时间 | 开发锁签发 | 软件不能超过此时间启动。支持范围:2000-1-1 00:00:00到2099-12-31 23:59:59 |
首次使用时间 | 软件首次运行时自动记录 | 软件第一次访问许可的时间,用于实现时间跨度授权 |
时间跨度 | 开发锁签发 | 许可第一次使用之后的时间跨度,例如时间跨度是 30 天,那么软件从第一次启动开始后的 30 天内有效 |
使用计次 | 开发锁签发 | 登录递减,当为 0 的时候许可失效 |
软件并发数 | 开发锁签发 | 最多可以同时启动软件的数量 |
软件运行并发类型 | 开发锁签发 | 是否为网络许可的标识,详细描述请参考本文 网络许可标识 中的相关描述 |
许可只读区 | 开发锁签发 | 可以读取,但是不可写入。参考本文描述 许可数据区 中的相关描述 |
许可公开区 | 开发锁签发 | 数据只读,用户可见 |
许可读写区 | 软件可读取可写入 | 数据可以被读取,也可以被修改 |
软件功能模块 | 开发锁签发 | 最多支持 64 个功能模块 |
可离线时长 | 云平台签发 | 适用于软许可,设置该许可可离线使用的时长,到期将不可使用 |
累积绑定设备数 | 云平台签发 | 适用于软许可,设置该许可累积绑定的设备数,每次绑定计数减少,计数归零不可使用 |
同时绑定设备数 | 云平台签发 | 适用于软许可,设置该许可同时绑定的设备数,每次绑定计数减少,计数归零不可使用 |
注意
各个条款是可以组合签发的,为了最大程度的保护开发者利益,任何一个许可条款失效,软件均不可用。
许可标识位
许可标识位是用来控制许可条款的是否可用的使能位。开发者实际不需要关心其具体值,只需要了解具体所代表的意义即可。
成员 | 意义 |
---|---|
L1 | 时钟限制,终止 |
L1 | 时钟限制,起始 |
L1 | 时钟限制,跨度授权(在N天之内的授权) |
L1 | 次数限制 |
L1 | 并发数,以系统会话并发限制 |
L1 | 并发数,以进程会话并发限制 |
L2 | 若0号许可使用,设置此项则禁用所有许可 |
L2 | 许可为账户许可(暂不可用) |
L2 | 许可单元是否有效 |
网络许可标识
许可标识位中的并发类型和并发数,如下表所示
操作 | 软件并发数 | 软件运行并发类型 | 说明 |
---|---|---|---|
设置 | 0 | process | 单机许可,进程并发,仅本地可使用。 |
设置 | 非0 | process | 网络许可,进程并发,限制进程数量 |
设置 | 0 | win_user_session | 网络许可,网络并发,不限制机器访问数量 |
设置 | 非0 | win_user_session | 网络许可,网络并发,限制访问机器数量 |
禁用 | -- | disable | 网络许可,网络和进程并发,不做进程和访问机器数的限制 |
许可数据区
名称 | 意义 | 数据区大小 | 备注 |
---|---|---|---|
ROM | 只读区 | 0-65535字节 | 使用控制锁修改ROM区数据 |
RAW | 读写区 | 0-65535字节 | 应用程序合法登录后可以读写数据 |
PUB | 公开区 | 0-65535字节 | 任意时候只能读取 |
只读区
开发者可以用用户数据区作软件所需要的数据的存储,例如一些配置信息。只读区较读写区更为常用,原因是所存储的内容不会在未授权的情况下被任意更改。更改只读区内容只有一种方法:用安全远程更新的方法,通过签发生成一个包含新的数据内容升级包文件,使用工具写入加密锁,完成只读区数据的更新。
读写区
读写区允许开发者把运行过程中的必要数据保存在加密锁内,下次启动的时候读取并使用。
公开区
公开区数据允许开发者只读,开发者可以在此存储软件产品信息等内容,公开区数据将在Virbox用户工具上公开显示。修改只能依赖远程的安全升级包。
0号许可
Virbox许可体系中提供了0号许可和普通许可的概念,其中0号许可是指许可ID为0的许可,其他许可均为普通许可。0号许可为默认许可,加密锁生产时自带的许可,永久有效,其许可内容和普通许可完全一致,但0号许可有自身的特别之处。
0号许可为开发者提供普通许可管理的功能,通过0号许可可以控制所有其他许可,例如:通过锁定0号许可来实现对所有普通许可的锁定,一旦签发锁定所有许可,0号许可的许可标识位将置为锁定状态,这时所有的普通许可将不可使用(由于0号许可永久有效,仍然可以使用0号许可)。
0号许可软件开发者不能删除,但是可以修改其中的许可标志位和许可条款等。
许可模式
许可模式 | 描述 |
---|---|
永久许可 | 一次签发,永不过期。 |
并发许可 | 存储于网络服务器的加密锁中,根据设置并发类型限制若干个应用程序或若干台计算机连接并使用网络许可,每个连接都会占用一个并发数。 |
试用许可 | 用户仅能在软件商授予的有限时间内使用某些软件功能。 |
租赁许可 | 开发者指定许可过期时间。 |
按需许可 | 开发者在许可中激活特定的产品功能或模块。 |
许可管理
许可管理是许可生命周期(产品创建、许可的生成、许可证的发放、许可的使用、许可证的吊销)管理和用户管理的总称。
- 【安全】许可的算法和许可的远程升级全部在加密锁内运行,秘钥和算法不出加密锁,无法被破解。软件的关键部分,例如数据、算法等,一旦和许可进行绑定,在调用其功能和特性时,必须调用许可证书获取授权之后才能访问。如果许可过期、被删除或者被锁定,所有与之绑定的算法一起失效,黑客无法通过破解授权API的返回值来破解整个软件。
- 【易用】软件加密与授权分离,软件开发者只需要在产品设计阶段定义好与许可绑定的模块即可,无需处理软件到期等控制逻辑,一切由加密锁进行管理,减少工作量的同时,又能保证灵活、强大的许可管理方法。
- 【超前】许可编码的空间可充分满足开发者需求,支持多达40亿个许可ID (1–0xFFFFFFFF)。另外,云锁支持的许可数量更多,可支持软件开发者未来几十年的发展规划。
- 【升级】许可升级客户端,免除开发者自行开发许可升级工具等。并且,所有的数据和程序均可升级,前后兼容,过渡平滑。
Virbox LM 的理念:
- 一次加密,多种发布
- 许可安全:数据绑定和算法绑定与许可锁内升级模式
- 超前管理:大于40亿个许可空间与企业内部“三权”分立
- 高安全性:打造安全的高性能软硬件环境;算法与许可直接绑定
- 高易用性:完整的工作流和工具链支持;商业API支持;一套接口,多类型锁使用
- 高灵活性:加密与授权完全分离;丰富的许可支持任何分发模式;安全远程升级
- 高扩展性:完整的底层接口平台支持二次开发
许可生命周期
许可生产
加密锁内许可出厂时候只有0号许可,后面许可证只能通过开发者通过控制锁签发远程升级包,然后通过远程升级发放软件许可证。
其中升级包种类有:创建许可、更新许可、删除许可、锁定所有许可、解除锁定许可、删除所有许可。
许可升级
以下规则仅对硬件锁许可有效,云锁和软锁许可请参考云平台相关文档
序号 | 名词 | 解释 | 备注 |
1 | 许可升级不可重放 | 一个升级包不能用两次,已经升级过的升级包不能再次使用。 | 每个升级包拥有一个签发时间戳和流水号码保证。 |
2 | 多包顺序升级 | 多个升级包必需按照顺序升级 | 每个升级包拥有一个签发时间戳和流水号码保证,并且后面的包签发时间和流水号码是递增关系 |
3 | 许可新建(非强制) | 只能创建锁内不存在的许可 | 防止业务出错 |
4 | 许可新建(强制) | 创建锁内不存在的许可,若锁内已存在许可则覆盖原有许可 | 对更新许可的有效优化 |
5 | 更新许可 | 只能更新锁内已经存在的许可 | 防止骗取授权 |
6 | 删除许可 | 删除锁内已经存在的许可 | 业务严谨性 |
7 | 锁定全局许可 | 所有许可将不能使用 | 对于做“坏事”的用户一种惩罚,只有开发者解锁。 |
8 | 解除全局锁定许可 | 解除锁定全局许可的限制 | 取消惩罚 |
许可吊销
许可吊销是指在许可有效期内删除可用许可的手段,签发删除许可升级包,执行远程升级即可。
许可深度应用
加密算法
Virbox LM 提供了若干种算法,除AES算法之外,还有DES、RSA、SHA-1 HASH开发者自定义算法供开发者使用。其中AES是最常用的软件保护算法,RSA算法常用于软件的正版验证,开发者也可以通过自定义一套算法提高软件保护级别。
AES 算法
AES 算法是美国NIST最新的对称算法标准,提供目前已知的最佳安全性。Virbox 许可内部包含了 AES 算法的实现,开发者可以通过 API 接口完成加密解密。AES 算法过程可逆,即对一段 Message 进行加密之后再解密,其结果与Message相同。
注意:加解密的计算结果与 License ID 有关,开发者在使用算法的时候必须先登录当前许可。换句话说,加解密是与特定的 License ID 绑定,对于不同的 License ID,计算结果也不相同,保证不同许可加密数据的安全性。另外,深思数盾发放给每个开发者的加密锁都是互不相同的,所以,不同开发者的相同 License ID 加密得到的结果也是不一样的。
算法与 License ID 绑定的目的:
- 与 License ID 绑定可以实现算法有 2^32 个不同版本,从而达到更好的保护效果;
- 方便对软件授权。
AES 算法常用于加密软件中的数据或者变量,提高软件数据的安全性。
操作步骤:
- 开发者可以在编码阶段使用加密接口对代码中的关键数据(全局变量、敏感配置数据、账号信息等)加密;
- 使用密文替换原明文记录在代码文件中的数据;
- 当软件运行需要使用被加密的数据时,调用解密接口解密还原后使用。
强烈建议:开发者可以利用对称算法加密用户生成的文档全部或者关键部分,比如每次打开读取和保存文件时候,由于密钥存储在安全容器(加密锁里面),黑客无法攻击密钥。最终结果是不可能存在一个盗版软件能正确打开正版软件产生的数据文档,从而保证正版软件价值。其中SLM加密是锁内直接加解密,算法和密钥都无法从外部获取。
密钥使用的是锁内隐藏密钥,密钥的值由开发者ID、盐和绑定的licenseID计算得出,没有任何机制可以导出该密钥任何副本到加密锁以外。
通常情况下,建议锁内直接加解密算法使用的是锁内隐藏密钥,锁外快速加解密使用的是开发者设置密钥,该密钥如果没有设置,则使用默认值作为密钥(该默认值为全0的直接解密结果)。
RSA 算法
RSA 是一种非对称算法,RSA 适用于以下场景:
以 RSA 算法的数字签名和签名验证功能,确保在任何(甚至软件在已破解)情况下都不会出现“克隆锁”——克隆锁意味着一个克隆锁能够100%被正版软件所接受。在一些国家或地区,盗版软件销售会带来暴利,盗版者确保软件能够尽可能的接近原版,或者保护“劳动成果”(破解后的软件),会使用克隆加密锁替换正版加密锁与软件一起销售。
Virbox LM 模块内部 RSA 算法使用 2048 位,这是目前最为合理的兼顾性能和安全性的密钥长度。
Virbox LM 模块反克隆的基本思路是软件对加密锁的合法性进行验证,可以理解是身份识别过程,其工作流程如下:
- 软件的 Challenger 向加密锁锁发起一次挑战,最简单的方式就是产生一个随机数并发送给加密锁,要求作出相应;
- 加密锁的 Responder 对收到的随机数简单处理后进行数字签名,通过保存在加密锁内部的秘密私钥 Kb 进行;
- 软件中的 Verifier 对加密锁作出的签名结果进行验证,通过保存在软件内部的与 Kb 配对的 Ka 进行;
RSA 算法特性在公钥完全公开的条件下,密钥长度 2048 不能通过计算得到私钥,因此任何人都不可能制作出能够被软件接受的克隆锁。
是否在软件中执行这种反克隆策略取决于软件所面临的盗版尤其是克隆锁压力。
远程正版验证的方法与反克隆类似,唯一区别是验证加密锁合法性的软件不再是客户端软件,而是联网服务器,软件公司可以通过开发一个小型的网络服务程序来给用户提供正版验证的服务。
常见问题
结束时间和时间跨度
我们在设置许可的时候,结束时间和时间跨度是可以同时设置的,那么就有一个问题,假如结束时间到期了但是时间跨度还没有到期,或者时间跨度到期了结束时间还没到,这两种情况是怎么判断的?
我们在设计初期已经考虑到这种问题,有许多开发商会设置这种条款,因为开发者可能希望用户在一定时间期限内使用一定时长,说起来很拗口,我们举个例子:
例子
某软件开发者新发布一款软件,向市场推广试用,开发者的要求是:
软件推广的开始日期为 6月1日,从发布日起到 12月31日为推广期,每个用户只能试用 30天,12月31日 以后软件无论还在不在试用期,都无法试用。这种情况下,开发者可以设置结束时间为当年 12月31日,然后再设置许可时间跨度为 30天,这样就能满足上面的需求了。
例如 A 用户在 6月2日 申请了试用并启动了软件,由于软件的时间跨度设置的是 30天,那么从6月2日起往后推算 30天,也就是 7月2日 软件将不可使用。
例如 B 用户在 12月15日 申请了试用,由于软件的结束时间设置为 12月31日,那么软件的实际可使用天数只有 15天,因此软件在第二年的 1月1日将不可使用。
同样的情况也可以适用于次数和时间的组合。