一种基于国产密码算法的软件许可证安全控制方法与流程

文档序号:33258661发布日期:2023-02-21 18:05阅读:44来源:国知局
一种基于国产密码算法的软件许可证安全控制方法与流程

1.本发明涉及软件安全技术领域,尤其涉及一种基于国产密码算法的软件许可证安全控制方法。


背景技术:

2.如今计算机技术的发展和计算机软件普遍应用在工作、生活中,各公司的软件许可证管理的需求越来越多。而且随着密码技术的发展和计算机技术的发展,国内密码领域所采用的一般加密算法受到严重的安全挑战。
3.目前应用软件的安全控制最常见的是采用注册码和许可证文件,注册码通常是固定长度,许可证文件通常是通过文本模板生成properties或xml格式的内容,同时存在明文与密文,被破解的风险较大。有些涉及到绑定ip,也容易被多人复用许可证,无法起到控制作用。
4.现有加密方法通常采用流行的对称加密算法,或者单一算法,容易受到非法破解。而对于注册码和许可证文件的生成和管理,现有技术中也缺少合理的管理办法,导致面对数以千计的应用软件的安全控制时,需要花费大量的人力。


技术实现要素:

5.鉴于上述的分析,本发明实施例旨在提供一种基于国产密码算法的软件许可证安全控制方法,用以解决现有加密算法安全性不高和安全控制不灵活的问题。
6.一方面,本发明实施例提供了一种基于国产密码算法的软件许可证安全控制方法,包括如下步骤:
7.基于应用软件中集成的安全控制模块,获取运行环境机器码;
8.获取应用软件通用授权属性和应用控制属性,作为授权对象,基于预置的对称加密密钥,利用国产密码算法sm2、sm3和sm4对授权对象和运行环境机器码进行加密,生成加密后的公钥串、运行环境机器码十六进制串和签名对象串,使用固定分隔符依次连接后得到授权码,将授权码写入许可证文件;
9.加载许可证文件,安全控制模块读取并校验许可证文件,包括使用sm4和sm2校验签名合法性,使用sm3校验运行环境机器码一致性,校验授权对象中通用授权属性匹配性,当任一校验不通过,停止后续校验,当全部校验通过,将授权对象缓存在内存中,用于应用控制。
10.基于上述方法的进一步改进,安全控制模块是一个独立的jar,包括:
11.许可证注册界面,用于显示应用软件授权状态和运行环境机器码,提交授权码,上传许可证文件;
12.运行环境机器码获取单元,运行环境机器码是16位字符串,运行环境机器码获取单元根据运行环境的1个或多个mac地址,截取16位字符串作为运行环境机器码,显示在许可证注册界面中;
13.许可证文件读取校验单元,用于从jvm参数中配置的许可证文件所在路径,或者预置的默认路径中获取许可证文件后,校验许可证文件中的授权码;
14.定时检查单元,用于定时触发许可证文件读取校验单元,执行读取并校验许可证文件的操作。
15.基于上述方法的进一步改进,加密后的公钥串的生成过程包括:
16.使用sm2生成密钥对,密钥对包括原始公钥与原始私钥;
17.根据预置的对称加密密钥,使用sm4对生成的密钥对进行二次加密,生成加密后的密钥串,包括加密后的公钥串和私钥串。
18.基于上述方法的进一步改进,运行环境机器码十六进制串的生成过程包括:使用sm3对运行环境机器码加密得到哈希值,将哈希值转换为十六进制串,得到运行环境机器码十六进制串。
19.基于上述方法的进一步改进,签名对象串的生成过程包括:
20.将获取的授权对象构造为json字符串;
21.将json字符串使用utf-8编码并压缩成二进制字节数组;
22.将二进制字节数组,使用原始私钥,通过sm2算法进行签名得到签名串;
23.将二进制字节数组转换为十六进制,得到授权对象十六进制串;
24.将授权对象十六进制串与签名串,使用固定分隔符组成新的字符串,并转换为十六进制,得到授权对象十六进制新串,使用运行环境机器码十六进制串作为私钥,通过sm4加密授权对象十六进制新串后得到签名对象串。
25.基于上述方法的进一步改进,加载许可证文件包括:
26.将许可证文件放置在应用软件的编译目录下,在jvm启动参数中通过扩展参数配置许可证文件所在路径;或者,
27.在安全控制模块的许可证注册界面,输入许可证文件中的授权码,或者上传许可证文件。
28.基于上述方法的进一步改进,使用sm4和sm2校验签名合法性,包括:
29.根据固定分隔符分割授权码,得到加密后的公钥串、运行环境机器码十六进制串和签名对象串;
30.使用sm4解密公钥串和签名对象串,得到原始公钥和授权对象十六进制新串;
31.将授权对象十六进制新串转换为文本字符串,并根据固定分隔符分隔后,分别得到签名串和授权对象十六进制串;
32.使用sm2算法,结合原始公钥和签名串,校验签名合法性。
33.基于上述方法的进一步改进,使用sm3校验运行环境机器码一致性,包括:
34.将使用sm4和sm2校验签名合法性过程中得到的授权对象十六进制串,转换为二进制字节数组,再解压得到授权对象的json字符串;
35.识别json字符串中授权类型是否是正式授权,如果是正式授权,再一次获取运行环境机器码,根据运行环境机器码十六进制串的生成过程,得到新的运行环境机器码十六进制串,与授权码中的运行环境机器码十六进制串对比一致性;
36.如果是临时授权,无需对比一致性,默认符合一致性。
37.基于上述方法的进一步改进,校验授权对象中通用授权属性匹配性,包括:
38.从解压得到的授权对象的json字符串中获取操作系统类型、cpu个数、许可证过期时间,分别与实际获取的操作系统类型、cpu个数、当前时间对比匹配性。
39.基于上述方法的进一步改进,当任一校验不通过,停止后续校验,包括:
40.当安全控制模块在应用软件启动时读取并校验许可证文件,当任一校验不通过,显示异常信息,终止当前进程,应用软件启动失败;
41.当安全控制模块定时执行读取并校验许可证文件的任务,当任一校验不通过,显示异常信息,停止后续校验,不影响应用软件运行,在应用软件重启时显示异常信息,终止当前进程,应用软件重启失败。
42.与现有技术相比,本发明至少可实现如下有益效果之一:
43.1、综合采用多个国产密码算法,安全性和可靠性高;
44.2、避免使用单一的mac地址,由安全控制模块根据实际部署的目标机器获取运行环境机器码,难以被盗用和破解,提高了安全控制能力;
45.3、结合应用软件的业务需求,增加应用控制属性加密为许可证的部分内容,增加了安全控制的适用场景,提高了应用软件的可扩展性,增加了应用软件的安全控制力度;
46.4、同时支持授权码和许可证文件两种方式,并且提供界面化功能,便于软件许可证的更新,安全控制模块内置定时检查功能,实现了许可证内容的动态生效,无需重启应用软件,减轻部署人员的工作量;
47.5、安全控制模块以一个独立的jar的形式被使用,可加入任何基于java实现的应用软件中,复用度高。
48.本发明中,上述各技术方案之间还可以相互组合,以实现更多的优选组合方案。本发明的其他特征和优点将在随后的说明书中阐述,并且,部分优点可从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过说明书以及附图中所特别指出的内容中来实现和获得。
附图说明
49.附图仅用于示出具体实施例的目的,而并不认为是对本发明的限制,在整个附图中,相同的参考符号表示相同的部件。
50.图1为本发明实施例中基于国产密码算法的软件许可证安全控制方法流程图;
51.图2为本发明实施例中软件许可证文件生成过程流程图;
52.图3为本发明实施例中软件许可证文件加载及校验过程流程图。
具体实施方式
53.下面结合附图来具体描述本发明的优选实施例,其中,附图构成本技术一部分,并与本发明的实施例一起用于阐释本发明的原理,并非用于限定本发明的范围。
54.本发明的一个具体实施例,公开了一种基于国产密码算法的软件许可证安全控制方法,如图1所示,包括如下步骤:
55.s11:基于应用软件中集成的安全控制模块,获取运行环境机器码;
56.s12:获取应用软件通用授权属性和应用控制属性,作为授权对象,基于预置的对称加密密钥,利用国产密码算法sm2、sm3和sm4对授权对象和运行环境机器码进行加密,生
成加密后的公钥串、运行环境机器码十六进制串和签名对象串,使用固定分隔符依次连接后得到授权码,将授权码写入许可证文件;
57.s13:加载许可证文件,安全控制模块读取并校验许可证文件,包括使用sm4和sm2校验签名合法性,使用sm3校验运行环境机器码一致性,校验授权对象中通用授权属性匹配性,当任一校验不通过,停止后续校验,当全部校验通过,将授权对象缓存在内存中,用于应用控制。
58.实施时,分为生成许可证和使用许可证两部分,在生成许可证过程中,由安全控制模块根据实际部署的目标机器实时获取运行环境机器码,使用国产密码算法sm2、sm3和sm4,将运行环境机器码和应用软件的其它授权信息加密成授权码,写入许可证文件;在使用许可证过程中,由安全控制模块读取许可证文件,并使用国产密码算法sm2、sm3和sm4解密许可证文件中的授权码,依次校验许可证的签名合法性、一致性和匹配性,全部检验通过后,将解密获取的授权对象缓存在内存中,用于后续应用软件的业务控制。
59.与现有技术相比,本实施例提供的基于国产密码算法的软件许可证安全控制方法,综合采用多个国产密码算法,安全性和可靠性高;避免使用单一的mac地址,由安全控制模块根据实际部署的目标机器获取运行环境机器码,难以被盗用和破解,提高了安全控制能力;结合应用软件的业务需求,增加应用控制属性加密为许可证的部分内容,增加了安全控制的适用场景,提高了应用软件的可扩展性,增加了应用软件的安全控制力度。
60.需要说明的是,步骤s11中的安全控制模块是一个独立的jar,缺省集成在应用软件中,示例性地,通过maven依赖方式依赖到应用软件系统中,或者直接将jar放入应用软件依赖的jar目录中。
61.安全控制模块可加入任何基于java实现的应用软件中,复用度高。同时通过其它包括依赖、启动时检测等技术手段避免安全控制模块被非法移除和非法篡改,示例性地,应用软件中其它功能程序依赖安全控制模块,移除安全控制模块会导致编译不通过,应用软件出现错误。
62.具体来说,安全控制模块包括:
63.许可证注册界面,用于显示应用软件授权状态和运行环境机器码,提交授权码,上传许可证文件;
64.运行环境机器码获取单元,运行环境机器码是16位字符串,运行环境机器码获取单元根据运行环境的1个或多个mac地址,截取16位字符串作为运行环境机器码,显示在许可证注册界面中;
65.示例性地,先识别实际部署的目标机器的mac地址数量,如果只有1个,则从开始截取16个字符作为运行环境机器码,如果有2个mac地址,则分别截取8个字符拼接在一起作为运行环境机器码,如果有3个或3个以上的mac地址,则最多选取3个mac地址,按照一定的数量分别截取后拼接在一起作为运行环境机器码。
66.许可证文件读取校验单元,用于从jvm参数中配置的许可证文件所在路径,或者预置的默认路径中获取许可证文件后,校验许可证文件中的授权码;
67.定时检查单元,用于定时触发许可证文件读取校验单元,执行读取并校验许可证文件的操作。
68.示例性地,通过扩展jvm启动参数,使用-d设置定时检查频率,在内存中记录和更
新触发时间,由定时检查单元根据触发时间执行读取并校验许可证文件的操作。
69.优选地,可以使用应用软件采用的定时框架,比如quartz、xxl-job,将许可证校验的定时任务初始化进去,通过定时框架配置调度频率。
70.在步骤s12中,使用国产密码算法sm2、sm3和sm4,生成许可证文件。其中,sm2算法是非对称密钥算法,其加密强度为256位。sm3算法叫密码杂凑算法,属于哈希(摘要)算法的一种,杂凑值为256位。sm4算法为对称加密算法,其加密强度为128位。如图2所示,步骤s12可进一步细化为如下步骤:
71.s121:获取应用软件通用授权属性和应用控制属性,作为授权对象。
72.需要说明的是,应用软件许可证类型包括临时授权和正式授权,其中,临时授权一般适用于试用、测试等非生产环境,一个临时许可证可以应用在多个运行环境中,通过许可证过期时间来限制应用软件的使用,或者在许可证管理上通过限制一个应用软件的临时许可证申请次数;正式授权一般适用于生产环境,一个正式许可证只允许应用在一个运行环境中,通过多个过程校验许可证的合法性,通过多种属性来限制应用软件的使用,避免正式许可证被非法盗用和滥用。
73.应用软件通用授权属性包括:操作系统类型、cpu个数、许可证过期时间、授权类型;应用控制属性包括:应用软件类别名称、应用软件类别码、应用软件的最大并发用户数、中间件线程池最大数量、数据库连接池最大数量、授权的功能组件。将这两部分信息一并作为授权对象。
74.优选地,对于正式授权,通用授权属性必填,应用控制属性可根据实际应用软件的控制需求,以及对应于控制属性实现的校验功能进行设置。
75.s122:使用sm2和sm4生成加密后的公钥串。
76.具体来说,首先,使用sm2生成密钥对,密钥对包括原始公钥与原始私钥;然后,根据预置的对称加密密钥,使用sm4对生成的密钥对进行二次加密,生成加密后的密钥串,包括加密后的公钥串和私钥串。
77.优选地,预置的对称加密密钥通常为英文数字加下划线,不包括特殊字符,如果未预置,则随机生成一个字符串。
78.s123:使用sm3生成运行环境机器码十六进制串。
79.值得注意的是,对于正式授权,必须通过安全控制模块获取运行环境机器码,对于临时授权,因为只校验许可证到期时间,可以不获取运行环境的机器码,在加密过程中随机生成一个唯一的16位字符串作为运行环境机器码。
80.具体来说,运行环境机器码十六进制串生成过程包括:
81.使用sm3对运行环境机器码加密得到哈希值,将哈希值转换为十六进制串,得到运行环境机器码十六进制串。
82.s124:使用sm2和sm4生成签名对象串。
83.具体来说,签名对象串的生成过程包括:
84.将获取的授权对象构造为json字符串;
85.将json字符串使用utf-8编码并压缩成二进制字节数组byte[];
[0086]
将二进制字节数组,使用步骤s122中得到的原始私钥,通过sm2算法进行签名得到签名串;
[0087]
将二进制字节数组转换为十六进制,得到授权对象十六进制串;
[0088]
将授权对象十六进制串与签名串,使用固定分隔符组成新的字符串,并转换为十六进制,得到授权对象十六进制新串,使用步骤s123得到的运行环境机器码十六进制串作为私钥,通过sm4加密授权对象十六进制新串后得到签名对象串。
[0089]
需要说明的是,分隔符在加密和解密过程中保持一致即可,示例性的,固定分隔符采用
“‑”
进行连接。
[0090]
s125:生成许可证文件内容,写入许可证文件。
[0091]
将步骤s122得到的加密后的公钥串、步骤s123得到的运行环境机器码十六进制串和步骤s124得到的签名对象串,使用固定分隔符依次连接后得到授权码,将授权码写入许可证文件。
[0092]
优选地,许可证文件按照预置文件名输出。
[0093]
与现有技术相比,综合采用多个国产密码算法,而且许可证文件的内容均是密文,安全性和可靠性高。
[0094]
优选地,步骤s12可以通过一种软件许可证管理系统,通过业务流程自动化推动系统中各功能模块之间的交互,集中管理软件许可证的申请、生成、更新和终止,减少人力,提高管控效率。
[0095]
优选地,软件许可证管理系统至少包括如下功能模块:
[0096]
许可证申请模块,由拥有许可证配置角色的人员在可视化界面中录入应用软件通用授权属性、应用控制属性和运行环境机器码,发起申请,并记录申请人相关信息;
[0097]
许可证审批模块,由拥有许可证管理角色的人员审核许可证的申请;如果审批通过,返回许可证文件给申请人;如果审批不通过,说明原因,返回给申请人;
[0098]
许可证管理模块,用于查看和查询用户提交的应用软件许可证申请相关信息,以应用软件为维度,显示许可证申请明细,包括申请时间、到期时间、许可证类型、许可证文件;
[0099]
许可证生成组件,用于调用国产密码算法组件,对通过审批的许可证申请内容加密,生成许可证文件;
[0100]
许可证定时提醒组件,定时检查许可证文件到期情况,根据预置的到期提醒天数,提醒对应的许可证申请人和应用软件的负责人。
[0101]
在步骤s13中,加载许可证文件,使用国产密码算法sm2、sm3和sm4解密及校验许可证文件。如图3所示,步骤s13可进一步细化为如下步骤:
[0102]
s131:加载许可证文件。
[0103]
具体来说,加载许可证文件包括:将许可证文件放置在应用软件的编译目录下,在jvm启动参数中通过扩展参数配置许可证文件所在路径;或者,在安全控制模块的许可证注册界面,输入许可证文件中的授权码,或者上传许可证文件。
[0104]
需要说明的是,安全控制模块首先识别jvm启动参数中是否已配置许可证文件所在路径,如果已配置,将配置的路径作为文件加载路径,如果未配置,将预置的默认路径作为文件加载路径。
[0105]
根据文件加载路径和预置文件名,获取到许可证文件,如果可获取到许可证文件,则将输入的授权码覆盖原许可证文件中的授权码,或者将上传的许可证文件覆盖原许可证
文件;如果未找到许可证文件,则将输入的授权码写入默认许可证文件中,并将默认许可证文件放置在配置的路径下,或者将上传的许可证文件放置在配置的路径下。
[0106]
安全控制模块同时支持授权码和许可证文件两种方式,提供界面化功能,便于软件许可证的更新。
[0107]
s132:安全控制模块读取许可证文件。
[0108]
需要说明的是,在应用软件启动或者安全控制模块定时检查许可证时,会先判断jvm启动参数中是否存在特定的扩展参数,是否配置了许可证文件所在路径,如果配置了路径,则根据路径获取许可证文件,如果文件不存在,则显示异常信息,如果文件存在,则读取许可证文件内容,得到授权码;如果不存在特定的扩展参数,则在默认目录下获取默认名称的许可证文件,如果文件不存在,则显示异常信息,如果文件存在,则读取许可证文件内容,得到授权码。
[0109]
s133:使用sm4和sm2校验签名合法性。
[0110]
具体来说,签名合法性的校验过程包括:
[0111]
根据固定分隔符分割授权码,得到加密后的公钥串、运行环境机器码十六进制串和签名对象串;
[0112]
使用sm4解密公钥串和签名对象串,得到原始公钥和授权对象十六进制新串;需要说明的是,sm4是对称加密法,加密时使用的密钥,也是解密时需要的密钥。因此,基于预置的对称加密密钥,对加密后的公钥串进行解密得到原始公钥;使用运行环境机器码十六进制串,对签名对象串进行解密得到授权对象十六进制新串。
[0113]
将授权对象十六进制新串转换为文本字符串,并根据固定分隔符分隔后,分别得到签名串和授权对象十六进制串;
[0114]
使用sm2算法,结合原始公钥和签名串,校验签名合法性。
[0115]
s134:使用sm3校验运行环境机器码一致性。
[0116]
具体来说,运行环境机器码一致性的校验过程包括:
[0117]
将步骤s133中使用sm4和sm2校验签名合法性过程中得到的授权对象十六进制串,转换为二进制字节数组,再解压得到授权对象的json字符串;
[0118]
识别json字符串中授权类型是否是正式授权,如果是正式授权,再一次获取运行环境机器码,根据运行环境机器码十六进制串的生成过程,得到新的运行环境机器码十六进制串,与授权码中的运行环境机器码十六进制串对比一致性;如果是临时授权,无需对比一致性,默认符合一致性。
[0119]
s135:校验授权对象中通用授权属性匹配性。
[0120]
具体来说,从步骤s134中解压得到的授权对象的json字符串中获取操作系统类型、cpu个数、许可证过期时间,分别与实际获取的操作系统类型、cpu个数、当前时间对比匹配性。
[0121]
s136:当任一校验不通过,停止后续校验,当全部校验通过,将授权对象缓存在内存中,用于应用控制。
[0122]
需要注意的是,在执行步骤s133-s135时,如果是安全控制模块在应用软件启动时读取并校验许可证文件,则当任一校验不通过,显示异常信息,终止当前进程,应用软件启动失败;
[0123]
如果是安全控制模块定时执行读取并校验许可证文件的任务,则当任一校验不通过,显示异常信息,停止后续校验,不影响应用软件运行,在应用软件重启时显示异常信息,终止当前进程,应用软件重启失败。
[0124]
示例性地,在安全控制模块的定时检查中,根据许可证到期时间,识别出许可证文件已过期,则在显示的异常信息中提示许可证文件已过期,但是应用软件仍可使用,直至下次应用软件重新启动时,识别出许可证文件已过期,显示异常信息并中断启动进程,应用软件无法使用。
[0125]
在任一种情况下,如果全部校验通过,将授权对象缓存在内存中,用于应用软件更进一步的控制。
[0126]
优选地,安全访问控制模块封装通用的工具方法,便于从授权对象的json字符串中获取属性对应的值,实现业务控制,比如识别当前用户数是否超过许可证文件中最大并发用户数,根据许可证文件中授权的功能组件,获取用户可访问的功能组件。
[0127]
示例性地,提供commonsecurityutil.getvalue(string key)方法,其中key为json串中属性key,得到json串中属性value值。
[0128]
安全控制模块的定时检查功能,在对许可证进行更新时,实现了许可证内容的动态生效,无需重启应用软件,减轻部署人员的工作量。
[0129]
示例性地,在更新许可证授权信息时,修改了最大并发用户数,更新许可证文件或授权码后,在安全控制模块的定时检查中,如果全部校验通过,会将新的授权对象的json串缓存在内存中,应用控制时可直接获取到最新的授权对象,无需重启应用软件。
[0130]
本领域技术人员可以理解,实现上述实施例方法的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于计算机可读存储介质中。其中,所述计算机可读存储介质为磁盘、光盘、只读存储记忆体或随机存储记忆体等。
[0131]
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1