一种量子加解密应用接口的调用方法及相关设备转让专利

申请号 : CN201910925461.2

文献号 : CN112580061B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 邝礼刚潘羡忠丁松燕

申请人 : 科大国盾量子技术股份有限公司广东国盾量子科技有限公司

摘要 :

本申请公开了一种量子加解密应用接口的调用方法及相关设备,用于解决量子加解密应用中接口的调用问题,为使用量子加解密应用提供了基础。该方法包括:确定量子加解密应用的目标加解密方式;根据所述目标加解密方式确定所述量子加解密应用的目标调用接口;根据所述目标调用接口执行相应的操作。

权利要求 :

1.一种量子加解密应用接口的调用方法,其特征在于,包括:确定量子加解密应用的目标加解密方式,所述目标加解密方式包括:多组数据加解密、单组数据加解密,以及轻量级加解密中的至少一种;

根据所述目标加解密方式确定所述量子加解密应用的目标调用接口,包括:当所述目标加解密方式为所述多组数据加解密时,所述目标调用接口包括第一加密初始化接口、第一加密接口以及第一加密结束接口,其中,所述第一加密初始化接口用于进行加密初始化操作,所述第一加密接口用于对第一数据进行加密,所述第一加密结束接口用于结束对所述第一数据的加密操作,所述第一数据为待加密的至少两个分组数据;

或者,当所述目标加解密方式为所述单组数据加解密时,所述目标调用接口包括第二加密初始化接口以及第二加密接口,所述第二加密初始化接口用于进行加密初始化操作,所述第二加密接口用于对第二数据进行加密,所述第二数据为待加密的单组数据;

或者,当所述目标加解密方式为所述轻量级加解密时,所述目标调用接口为第三加密接口,所述第三加密接口用于对第三数据进行加密,所述第三数据为单组数据,且单次轻量级加密的数据长度不大于第一预设值;

根据所述目标调用接口执行相应的操作。

2.根据权利要求1所述的方法,其特征在于,当所述目标加解密方式为所述多组数据加解密时,所述根据所述目标调用接口执行相应的操作包括:调用所述第一加密初始化接口进行加密初始化操作;

调用所述第一加密接口通过第一量子加密密钥对所述第一数据进行加密,得到第一密文数据,所述第一量子加密密钥为量子密钥存储池中的任意一个量子加密密钥;

将所述第一密文数据存储至第一缓存区;

调用所述第一加密结束接口结束对所述第一数据的加密操作。

3.根据权利要求2所述的方法,其特征在于,所述目标调用接口还包括第一解密初始化接口、第一解密接口以及第一解密结束接口,所述方法还包括:调用所述第一解密初始化接口进行解密初始化操作;

调用所述第一解密接口通过与所述第一量子加密密钥对应的量子解密密钥对所述第一密文数据进行解密,得到第一明文数据;

将所述第一明文数据存储至第二缓存区;

调用所述第一解密结束接口结束对所述第一密文数据的解密操作。

4.根据权利要求1所述的方法,其特征在于,当所述目标加解密方式为所述单组数据加解密时,所述根据所述目标调用接口执行相应的操作包括:调用所述第二加密初始化接口进行加密初始化操作;

通过所述第二加密接口调用第二量子加密密钥对所述第二数据进行加密,得到第二密文数据,所述第二量子加密密钥为量子密钥存储池中的任意一个量子加密密钥;

将所述第二密文数据存储至第三缓存区。

5.根据权利要求4所述的方法,其特征在于,所述目标调用接口还包括第二解密初始化接口以及第二解密接口,所述方法还包括:调用所述第二解密初始化接口进行解密初始化操作;

调用所述第二解密接口通过与所述第二量子加密密钥对应的量子解密密钥对所述第二密文数据进行解密,得到第二明文数据;

将所述第二明文数据存储至第四缓存区。

6.根据权利要求1所述的方法,其特征在于,当所述目标加解密方式为所述轻量级加解密时,所述根据所述目标调用接口执行相应的操作包括:调用所述第三加密接口通过第三量子加密密钥对所述第三数据进行加密,得到第三密文数据,其中,所述第三量子加密密钥为量子密钥存储池中的任意一个量子加密密钥;

将所述第三密文数据保存至第五缓存区。

7.根据权利要求6所述的方法,其特征在于,所述目标调用接口还包括第三初始化解密接口以及第三解密接口,所述方法还包括:调用所述第三初始化解密接口进行解密初始化操作;

调用所述第三解密接口通过与所述第三量子加密密钥对应的量子解密密钥对所述第三密文数据进行解密,得到第三明文数据;

将所述第三明文数据存储至第六缓存区,其中单次轻量级解密的数据长度不大于第二预设值。

8.一种量子安全模块,其特征在于,包括:

第一确定单元,用于确定量子加解密应用的目标加解密方式,所述目标加解密方式包括:多组数据加解密、单组数据加解密以及轻量级加解密中的至少一种;

第二确定单元,用于根据所述目标加解密方式确定所述量子加解密应用的目标调用接口,包括:当所述目标加解密方式为所述多组数据加解密时,所述目标调用接口包括第一加密初始化接口、第一加密接口以及第一加密结束接口,其中,所述第一加密初始化接口用于进行加密初始化操作,所述第一加密接口用于对第一数据进行加密,所述第一加密结束接口用于结束对所述第一数据的加密操作,所述第一数据为待加密的至少两个分组数据;

或者,当所述目标加解密方式为所述单组数据加解密时,所述目标调用接口包括第二加密初始化接口以及第二加密接口,所述第二加密初始化接口用于进行加密初始化操作,所述第二加密接口用于对第二数据进行加密,所述第二数据为待加密的单组数据;

或者,当所述目标加解密方式为所述轻量级加解密时,所述目标调用接口为第三加密接口,所述第三加密接口用于对第三数据进行加密,所述第三数据为单组数据,且单次轻量级加密的数据长度不大于第一预设值;

处理单元,用于根据所述目标调用接口执行相应的操作。

9.根据权利要求8所述的量子安全模块,其特征在于,当所述目标加解密方式为所述多组数据加解密时,所述处理单元具体用于:调用所述第一加密初始化接口进行加密初始化操作;

调用所述第一加密接口通过第一量子加密密钥对所述第一数据进行加密,得到第一密文数据,所述第一量子加密密钥为量子密钥存储池中的任意一个量子加密密钥;

将所述第一密文数据存储至第一缓存区;

调用所述第一加密结束接口结束对所述第一数据的加密操作。

10.根据权利要求9所述的量子安全模块,其特征在于,所述目标调用接口还包括第一解密初始化接口、第一解密接口以及第一解密结束接口,所述处理单元还具体用于:调用所述第一解密初始化接口进行解密初始化操作;

调用所述第一解密接口通过与所述第一量子加密密钥对应的量子解密密钥对所述第一密文数据进行解密,得到第一明文数据;

将所述第一明文数据存储至第二缓存区;

调用所述第一解密结束接口结束对所述第一密文数据的解密操作。

11.根据权利要求8所述的量子安全模块,其特征在于,当所述目标加解密方式为所述单组数据加解密时,所述处理单元具体用于:调用所述第二加密初始化接口进行加密初始化操作;

通过所述第二加密接口调用第二量子加密密钥对所述第二数据进行加密,得到第二密文数据,所述第二量子加密密钥为量子密钥存储池中的任意一个量子加密密钥;

将所述第二密文数据存储至第三缓存区。

12.根据权利要求11所述的量子安全模块,其特征在于,所述目标调用接口还包括第二解密初始化接口以及第二解密接口,所述处理单元还具体用于:调用所述第二解密初始化接口进行解密初始化操作;

调用所述第二解密接口通过与所述第二量子加密密钥对应的量子解密密钥对所述第二密文数据进行解密,得到第二明文数据;

将所述第二明文数据存储至第四缓存区。

13.根据权利要求8所述的量子安全模块,其特征在于,当所述目标加解密方式为所述轻量级加解密时,所述处理单元还具体用于:调用所述第三加密接口通过第三量子加密密钥对所述第三数据进行加密,得到第三密文数据,其中,所述第三量子加密密钥为量子密钥存储池中的任意一个量子加密密钥;

将所述第三密文数据保存至第五缓存区。

14.根据权利要求13所述的量子安全模块,其特征在于,所述目标调用接口还包括第三初始化解密接口以及第三解密接口,所述处理单元还具体用于:调用所述第三初始化解密接口进行解密初始化操作;

调用所述第三解密接口通过与所述第三量子加密密钥对应的量子解密密钥对所述第三密文数据进行解密,得到第三明文数据;

将所述第三明文数据存储至第六缓存区,其中单次轻量级解密的数据长度不大于第二预设值。

15.一种计算机可读存储介质,其特征在于,包括指令,当其在计算机上运行时,使得计算机执行权利要求1至7中任一项所述的量子加解密应用接口的调用方法的步骤。

说明书 :

一种量子加解密应用接口的调用方法及相关设备

技术领域

[0001] 本申请涉及信息安全领域,尤其涉及一种量子加解密应用接口的调用方法及相关设备。

背景技术

[0002] 随着科技的快速发展,信息安全在各行各业显得越来越重要,应对各种突发信息安全问题事件最有效的措施之一就是采用密码算法对信息进行加密存储转发。在信息安全要求较高的金融领域,使用国家制定研发的国产密码算法,一方面可以推动密码技术在金融行业的发展;另一方面加强了金融行业安全可控,摆脱对国外技术和产品的过度依赖,在功能性和安全性上该算法可完全取代国际通用的密码算法,可以防御已有的国际密码攻击危机,更有效地保障用户的个人财产及信息安全。同时,基于国产密码算法,为了指导智能集成电路(integrated circuit,IC)卡及智能密码钥匙的设计和应用开发,统一应用开发接口,实现设备互操作,方便应用,国家密码管理局推出了《智能IC卡及智能密码钥匙应用接口规范》。此规范是基于公钥基础设施(public key infrastructure,PKI)密码体系的智能IC卡及智能密码钥匙应用接口,一般用于数字证书验签和管理
[0003] 但是,RSA(一种非对称加密算法)、椭圆曲线密码学(elliptic curve cryptography,ECC)等非对称密码算法的加解密功能及私钥和公钥生成和导出,是基于非对称密码算法的会话密钥的分发等功能,不能满足量子密钥的使用。
[0004] 由于量子密钥是对称密钥,成对地分别存放在量子安全系统(quantum security system,QSS)和量子安全模块中。使用量子密钥进行加解密业务,需要从量子安全模块内取出对应的量子密钥,导入到相对应的容器,才能调用加解密接口完成加解密功能,而现有的智能IC卡及智能密码钥匙应用接口规范是基于PKI密码体系,着重于非对称密钥体系,无论是应用逻辑结构、容器逻辑结构还是应用接口定义都不能满足量子密钥加解密功能需求。

发明内容

[0005] 本申请提供一种量子加解密应用接口的调用方法及相关设备,用于解决量子密钥接口调用问题,为应用量子密钥提供了基础。
[0006] 本申请实施例第一方面提供了一种量子加解密应用接口的调用方法,包括:
[0007] 确定量子加解密应用的目标加解密方式;
[0008] 根据所述目标加解密方式确定所述量子加解密应用的目标调用接口;
[0009] 根据所述目标调用接口执行相应的操作。
[0010] 可选地,当所述目标加解密方式为多组数据加解密时,所述目标调用接口包括第一加密初始化接口、第一加密接口以及第一加密结束接口,所述根据所述目标调用接口执行相应的操作包括:
[0011] 调用所述第一加密初始化接口进行加密初始化操作;
[0012] 调用所述第一加密接口通过第一量子加密密钥对第一数据进行加密,得到第一密文数据,所述第一数据为待加密的至少两个分组数据,所述第一量子加密密钥为量子密钥存储池中的任意一个量子加密密钥;
[0013] 将所述第一密文数据存储至第一缓存区;
[0014] 调用所述第一加密结束接口结束对所述第一数据的加密操作。
[0015] 可选地,所述目标调用接口还包括第一解密初始化接口、第一解密接口以及第一解密结束接口,所述方法还包括:
[0016] 调用所述第一解密初始化接口进行解密初始化操作;
[0017] 调用所述第一解密接口通过与所述第一量子加密密钥对应的量子解密密钥对所述第一密文数据进行解密,得到第一明文数据;
[0018] 将所述第一明文数据存储至第二缓存区;
[0019] 调用所述第一解密结束接口结束对所述第一密文数据的解密操作。
[0020] 可选地,当所述目标加解密方式为单组数据加解密时,所述目标调用接口包括第二加密初始化接口以及所述第二加密接口,所述根据所述目标调用接口执行相应的操作包括:
[0021] 调用所述第二加密初始化接口进行加密初始化操作;
[0022] 通过所述第二加密接口调用第二量子加密密钥对第二数据进行加密,得到第二密文数据,所述第二数据为待加密的单组数据,所述第二量子加密密钥为量子密钥存储池中的任意一个量子加密密钥;
[0023] 将所述第二密文数据存储至第三缓存区。
[0024] 可选地,所述目标调用接口还包括第二解密初始化接口以及所述第二解密接口,所述方法还包括:
[0025] 调用所述第二解密初始化接口进行解密初始化操作;
[0026] 调用所述第二解密接口通过与所述第二量子加密密钥对应的量子解密密钥对所述第二密文数据进行解密,得到第二明文数据;
[0027] 将所述第二明文数据存储至第四缓存区。
[0028] 可选地,当所述目标加解密方式为轻量级加解密时,所述目标调用接口为第三加密接口,所述根据所述目标调用接口执行相应的操作包括:
[0029] 调用所述第三加密接口通过第三量子加密密钥对第三数据进行加密,得到第三密文数据,其中,所述第三数据为单组数据,且单次轻量级加密的数据长度不大于第一预设值,所述第三量子加密密钥为量子密钥存储池中的任意一个量子加密密钥;
[0030] 将所述第三密文数据保存至第五缓存区。
[0031] 可选地,所述目标调用接口还包括第三初始化解密接口以及第三解密接口,所述方法还包括:
[0032] 调用所述第三初始化解密接口进行解密初始化操作;
[0033] 调用所述第三解密接口通过与所述第三量子加密密钥对应的量子解密密钥对所述第三密文数据进行解密,得到第三明文数据;
[0034] 将所述第三明文数据存储至第六缓存区,其中单次轻量级解密的数据长度不大于第二预设值。
[0035] 本申请实施例第二方面提供了一种量子安全模块,包括:
[0036] 第一确定单元,用于确定量子加解密应用的目标加解密方式;
[0037] 第二确定单元,用于根据所述目标加解密方式确定所述量子加解密应用的目标调用接口;
[0038] 处理单元,用于根据所述目标调用接口执行相应的操作。
[0039] 可选地,当所述目标加解密方式为多组数据加解密时,所述目标调用接口包括第一加密初始化接口、第一加密接口以及第一加密结束接口,所述处理单元具体用于:
[0040] 调用所述第一加密初始化接口进行加密初始化操作;
[0041] 调用所述第一加密接口通过第一量子加密密钥对第一数据进行加密,得到第一密文数据,所述第一数据为待加密的至少两个分组数据,所述第一量子加密密钥为量子密钥存储池中的任意一个量子加密密钥;
[0042] 将所述第一密文数据存储至第一缓存区;
[0043] 调用所述第一加密结束接口结束对所述第一数据的加密操作。
[0044] 可选地,所述目标调用接口还包括第一解密初始化接口、第一解密接口以及第一解密结束接口,所述处理单元还具体用于:
[0045] 调用所述第一解密初始化接口进行解密初始化操作;
[0046] 调用所述第一解密接口通过与所述第一量子加密密钥对应的量子解密密钥对所述第一密文数据进行解密,得到第一明文数据;
[0047] 将所述第一明文数据存储至第二缓存区;
[0048] 调用所述第一解密结束接口结束对所述第一密文数据的解密操作。
[0049] 可选地,当所述目标加解密方式为单组数据加解密时,所述目标调用接口包括第二加密初始化接口以及所述第二加密接口,所述处理单元具体用于:
[0050] 调用所述第二加密初始化接口进行加密初始化操作;
[0051] 通过所述第二加密接口调用第二量子加密密钥对第二数据进行加密,得到第二密文数据,所述第二数据为待加密的单组数据,所述第二量子加密密钥为量子密钥存储池中的任意一个量子加密密钥;
[0052] 将所述第二密文数据存储至第三缓存区。
[0053] 可选地,所述目标调用接口还包括第二解密初始化接口以及所述第二解密接口,所述处理单元还具体用于:
[0054] 调用所述第二解密初始化接口进行解密初始化操作;
[0055] 调用所述第二解密接口通过与所述第二量子加密密钥对应的量子解密密钥对所述第二密文数据进行解密,得到第二明文数据;
[0056] 将所述第二明文数据存储至第四缓存区。
[0057] 可选地,当所述目标加解密方式为轻量级加解密时,所述目标调用接口为第三加密接口,所述处理单元还具体用于:
[0058] 调用所述第三加密接口通过第三量子加密密钥对第三数据进行加密,得到第三密文数据,其中,所述第三数据为单组数据,且单次轻量级加密的数据长度不大于第一预设值,所述第三量子加密密钥为量子密钥存储池中的任意一个量子加密密钥;
[0059] 将所述第三密文数据保存至第五缓存区。
[0060] 可选地,所述目标调用接口还包括第三初始化解密接口以及第三解密接口,所述处理单元还具体用于:
[0061] 调用所述第三初始化解密接口进行解密初始化操作;
[0062] 调用所述第三解密接口通过与所述第三量子加密密钥对应的量子解密密钥对所述第三密文数据进行解密,得到第三明文数据;
[0063] 将所述第三明文数据存储至第六缓存区,其中单次轻量级解密的数据长度不大于第二预设值。
[0064] 本申请实施例第三方面提供了一种计算机可读存储介质,包括指令,当其在计算机上运行时,使得计算机执行上述所述的量子加解密应用接口的调用方法的步骤。
[0065] 本申请实施例第四方面提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述所述的量子加解密应用接口的调用方法的步骤。
[0066] 综上所述,本申请提供的实施例中,通过不同的加解密方式确定需要调用的不同的接口,之后通过不同的接口完成对数据的加解密操作,可以解决量子加解密应用中的接口调用问题,为使用量子加解密应用提供了基础。

附图说明

[0067] 为了更清楚地说明本申请实施例技术方案,下面将对实施例和现有技术描述中所需要使用的附图作简单地介绍。
[0068] 图1为本申请实施例提供智能IC卡及智能密码钥匙的应用程序、应用接口与设备之间的层次示意图;
[0069] 图2为本申请实施例提供的智能IC卡及智能密码钥匙的应用程序的逻辑结构示意图;
[0070] 图3为本申请实施例提供量子安全模块应用接口的层次方案示意图;
[0071] 图4为本申请实施例提供的设备的逻辑结构示意图;
[0072] 图5为本申请实施例提供的量子安全模块的应用程序的逻辑结构示意图;
[0073] 图6为本申请实施例提供的量子加解密应用接口的调用方法的流程示意图;
[0074] 图7为本申请实施例提供的量子密钥的处理方法的流程示意图;
[0075] 图8为本申请实施例提供的量子安全模块的虚拟结构示意图;
[0076] 图9为本申请实施例提供的服务器的硬件结构示意图。

具体实施方式

[0077] 为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
[0078] 首先,对《智能IC卡及智能密码钥匙应用接口规范》规定的基于PKI密码体系的智能IC卡及智能密码钥匙应用接口进行分析。基于PKI密码体系的智能IC卡及智能密码钥匙应用接口描述了密码应用接口的函数、数据类型、参数的定义和设备的安全要求。如图1所示,智能IC卡及智能密码钥匙应用接口位于智能IC卡及智能密码钥匙应用程序与设备之间,智能IC卡及智能密码钥匙应用程序通过智能IC卡及智能密码钥匙设备驱动对应到n个设备,每一个设备中存在设备认证密钥和多个应用,每一个应用之间相互独立。一个应用由管理员个人识别码(personal identification number,PIN)、用户PIN、文件和容器组成,可以存在多个文件和多个容器。每个应用维护各自的与管理员PIN和用户PIN相关的权限状态,应用的逻辑结构如图2所示。
[0079] 但是量子密钥是对称密钥,成对地分别存放在QSS服务器和量子安全模块中。客户端软件使用量子密钥进行加解密业务,首先量子安全模块需要从量子密钥存储池取出对应的量子密钥,导入到相对应的容器,返回密钥句柄;然后客户端软件根据量子安全模块返回的密钥句柄,调用加解密接口完成加解密功能;而现有的智能IC卡及智能密码钥匙应用接口规范是基于PKI密码体系,着重于非对称密钥使用,无论是应用逻辑结构、容器逻辑结构还是应用接口定义都不能满足量子密钥加解密功能需求。
[0080] 有鉴于此,本申请提供了一种量子加解密应用接口的调用方法,在智能IC卡及智能密码钥匙应用接口规范基础上扩展量子安全模块应用接口,解决以下问题:
[0081] 在应用逻辑结构中,添加密钥存储空间域;量子密钥分类存储在对应的密钥存储空间内,解决量子密钥的应用问题,为使用量子密钥提供了基础。
[0082] 在应用逻辑结构中,扩展了量子密钥容器定义,用于存放当前使用的量子密钥,为量子安全模块应用加解密接口提供了密钥支持。扩展了基于量子密钥的会话密钥的导入、导出,量子密钥加解密接口定义,为应用软件提供了量子密钥的使用接口。
[0083] 参阅图3,图3为本申请实施例提供量子安全模块应用接口的层次方案示意图,其中,量子安全模块应用接口位于量子安全模块应用程序(也即客户端软件)与设备(也即量子安全模块)之间。
[0084] 一个设备中存在设备认证密钥和多个应用,多个应用之间相互独立。其中设备的逻辑结构如图4所示。
[0085] 量子应用由管理员PIN、用户PIN、文件、量子密钥存储池和对称密钥容器组成,可以同时存在多种类型的量子密钥、多个文件、多个容器。其中,每个量子应用维护各自与管理员PIN和用户PIN相关的权限状态。量子应用的逻辑结构如图5所示。
[0086] 请参阅图5,图5为本申请实施例提供的量子安全模块的应用程序的逻辑结构示意图,量子安全模块应用接口主要由以下部分组成:设备(量子安全模块)、量子应用、PIN、文件、容器、量子密钥存储池、QSS(quantum security system,量子安全系统)、QWK(quantum work key,量子工作密钥)、QBK(quantumbackup key,量子备份密钥)、QSK(quantum session key,量子会话密钥)、QCSK(quantum charge session key,量子充注会话密钥)、QEK(quantum encryption key,量子加密密钥)、QCEK(quantum charge encryption key,量子充注加密密钥),下面具体说明各个组成部分的含义:
[0087] 设备(也即上述所说的量子安全模块):可以采用低功耗的高速专用安全处理芯片,集成多种加解密硬件引擎的器件,如加密U盾、加密TF卡、加密芯片等;内置SM1、SM4、SM3等加解密模块,大容量量子密钥存储私有区,存储着与QSS成对的量子密钥;
[0088] 量子应用:量子密钥加解密功能的相关数据及权限的集合,由管理员PIN、用户PIN、文件、量子密钥存储池和对称密钥容器组成;
[0089] PIN:量子应用的个人识别码;
[0090] 文件:文件用以满足用户扩展开发的需要,保存用户数据;
[0091] 容器:此处特指密钥容器,是一个用于存放量子密钥和会话密钥的逻辑对象,包含QWK容器、QBK容器、QSK容器、QCSK容器等量子密钥容器类型;
[0092] 量子密钥存储池:量子密钥存放的地方,量子密钥存储池类型分别是QWK存储池、QBK存储池、QEK存储池、QCEK存储池等;
[0093] QSS:管理量子应用网络中的安全介质和存储着量子密钥分发服务系统成对的量子密钥,是所有接入量子应用网络中需要获取量子密钥的设备的认证平台;
[0094] QWK:作为QSS平台内终端设备或软件与QSS通信的认证和数据安全保护密钥;
[0095] QBK:作为QSS平台内终端设备或软件与QSS通信的认证和数据安全保护密钥的备份密钥,当QWK密钥不足时,才会启用;
[0096] QSK:用于业务软件进行通信的数据安全保护密钥,量子会话密钥可由量子密钥存储设备内部生成,并使用量子加密密钥QEK进行加密导出;也可从外部导入使用量子加密密钥QEK加密的量子会话密钥,进行解密后存放于量子密钥存储设备内部中;
[0097] QEK:是量子会话密钥的加密密钥;
[0098] QCSK:用于充注时加密量子密钥数据的密钥;
[0099] QCEK:是量子充注会话密钥QCSK的加密密钥。
[0100] 本申请在智能IC卡及智能密码钥匙应用接口规范上扩展量子密钥应用逻辑结构和量子密钥容器逻辑结构:
[0101] 其中,在应用中新增量子密钥存储区域,量子密钥分类存储,量子密钥类型分别是QWK(量子工作密钥)、QBK(量子备份密钥)、QEK(量子加密密钥)、QCEK(量子充注加密密钥),这四种密钥均由量子密钥生成设备生成并导入到设备的量子应用中。
[0102] 量子密钥存储在量子应用中,方便量子密钥导入到容器中使用。
[0103] 量子密钥数据也可以用指定的量子加密密钥进行加解密。
[0104] QWK、QBK类型的量子密钥用于加密设备跟QSS之间的交互,QEK用于加密会话密钥使用,QCEK用于加密充注会话密钥使用,即在量子密钥充注时使用。
[0105] 量子容器有4种类型,分别是QWK容器、QBK容器、QSK容器以及QCSK容器,其中,QWK容器存放的是量子工作密钥,QBK容器存放的是量子备份密钥,QWK容器中的量子密钥以及QBK容器中的量子密钥分别从QWK量子密钥存储池和QBK量子密钥存储池导入;QSK容器存储的是量子会话密钥,QCSK容器存放的是量子充注会话密钥,可以从设备内部产生并导入,或者从外部加密导入。
[0106] 关于量子密钥的导入,依据导入的容器的类型不同导入的方式也是不同的:
[0107] 量子会话密钥导入到QSK容器或量子充注会话密钥导入到QCSK容器时,量子会话密钥或量子充注会话密钥由外部生成并加密导入;量子工作密钥导入QWK容器或量子备份密钥导入到QBK容器时,根据QSS量子安全系统传送的量子密钥索引idx从QWK容器或QBK容器对应的量子密钥存储池中查找对应的量子密钥,存放至相应的容器接口。
[0108] 关于量子密钥的生成和导出一般用于QSK和QCSK容器,QWK和QBK用于量子安全模块和QSS量子安全系统间的加密通信,QSS量子安全系统和量子安全模块已经存储了相同的QWK以及QBK,因此QWK容器以及QBK容器无须量子密钥的生成和导出,QSK容器和QCSK容器中密钥的生成导出为:QSK容器或QCSK容器中的量子密钥由量子安全模块根据真随机数发生器生成,并用对应的量子密钥存储池中对应的量子密钥进行加密后导出。
[0109] 下面结合图6从量子安全模块的角度对本申请实施例中的量子加解密应用接口的调用方法进行说明。
[0110] 请参阅图6,图6为本申请实施例提供的量子加解密应用接口的调用方法的流程示意图,包括:
[0111] 601、确定量子加解密应用的目标加解密方式。
[0112] 本实施例中,量子安全模块可以首先确定量子加解密应用的目标加解密方式。此处具体不限定确定目标加解密方式的方法。
[0113] 需要说明的是,该目标加解密方式包括多组数据加解密、单组数据加解密以及轻量级加解密方式中的至少一种,其中,该多组数据加解密指的是至少两个分组数据加解密。
[0114] 602、根据目标加解密方式确定量子加解密应用的目标调用接口。
[0115] 本实施例中,在量子加解密应用中,不同的加解密方式所调用的接口是不同的,因此需要根据目标加解密方式确定量子加解密应用的目标调用接口。
[0116] 603、根据目标调用接口执行相应的操作。
[0117] 本实施例中,在确定了目标调用接口之后,可以根据目标调用接口执行相应的操作。
[0118] 需要说明的是,目标加解密方式包括多组数据加解密、单组数据加解密以及轻量级加解密方式中的至少一种。多组数据加解密包括多组数据加密以及多组数据解密,单组数据加解密包括单组数据加密以及单组数据解密,轻量级加解密方式包括轻量级数据加密以及轻量级数据解密。
[0119] 下面分别对上述所述的三种加解密方式的加密以及解密的流程进行说明:
[0120] 一、当目标加解密方式为多组数据加解密时,该目标调用接口包括第一加密初始化接口、第一加密接口以及第一加密结束接口,根据目标调用接口执行相应的操作包括:
[0121] 调用第一加密初始化接口进行加密初始化操作;
[0122] 调用第一加密接口通过第一量子加密密钥对第一数据进行加密,得到第一密文数据,第一数据为待加密的至少两个分组数据,第一量子加密密钥为量子密钥存储池中的任意一个量子加密密钥(上述已经对量子密钥存储池进行说明,具体此处不再赘述);
[0123] 将第一密文数据存储至第一缓存区;
[0124] 调用第一加密结束接口结束对所述第一数据的加密操作。
[0125] 首先对量子分组密码的类型定义进行说明:
[0126] typedef struct Struct_QT_BLOCKCIPHERPARAM{
[0127] ULONG AlgID;
[0128] ULONG IVType;
[0129] UINT64 IVStartAddr;
[0130] BYTE IV[MAX_IV_LEN];
[0131] ULONG IVLen;
[0132] ULONG PaddingType;
[0133] ULONG FeedBitLen;
[0134] }QT_BLOCKCIPHERPARAM,*PQT_BLOCKCIPHERPARAM;
[0135] 类型定义中的各个参数的意义参阅表1所述:
[0136]
[0137]
[0138] 表1
[0139] 其次,对多组数据加密时所调用的函数进行说明,量子安全模块可以通过调用如下函数对多组数据进行加密:
[0140] ULONG DEVAPI SKF_EncryptUpdate(HANDLE hKey,BYTE*pbData,ULONG ulDataLen,BYTE*pbEncryptedData,ULONG*pulEncryptedLen);
[0141] 该函数用于多组数据的加密操作,也即用指定加密密钥对指定数据进行加密,被加密的数据包含至少两个分组,加密后的密文保存到指定的缓存区中。调用SKF_EncryptUpdate对至少两个分组数据进行加密,在调用SKF_EncryptUpdate之前,必须调用SKF_QT_EncryptInit进行初始化加密操作;在调用SKF_EncryptUpdate之后,必须调用SKF_EncryptFinal进行结束加密操作。下面对上述函数中各个参数进行说明:
[0142] 上述函数中的参数hKey表示加密密钥句柄,参数pbData表示待加密数据,参数ulDataLen表示待加密数据长度,参数pbEncryptedData表示加密后的数据缓存区指针,参数pulEncryptedLen表示返回加密后的数据的数据长度,当返回值为SAR_OK则说明多组数据加密成功,当返回值为其他,则表示是错误码,说明失败。
[0143] 也就是说,在调用上述函数对至少两个分组数据进行加密之前,需要先调用第一加密初始化接口进行加密初始化操作(也即调用SKF_QT_EncryptInit进行初始化加密操作),之后调用第一加密接口通过第一量子加密密钥对第一数据进行加密得到第一密文数据(也即调用SKF_EncryptUpdate对第一数据进行加密),该第一数据为待加密的至少两个分组数据,该第一量子加密密钥为量子密钥存储池中的任意一个量子加密密钥(可以理解的是,该第一量子加密密钥例如可以为QWK量子密钥存储池中的量子工作密钥,当然也还可以是其他量子密钥存储池中的密钥,具体不做限定);之后,将第一密文数据存储至第一缓存区;最后,调用第一加密结束接口结束对第一数据的加密操作(也即必须调用SKF_EncryptFinal结束加密操作)。
[0144] 下面分别对量子密钥加密初始化所调用的函数以及结束加密所调用的函数进行说明:
[0145] 1、量子密钥加密初始化:
[0146] 通过调用如下函数完成量子密钥加密初始化:
[0147] ULONG DEVAPI SKF_QT_EncryptInit(HANDLE hKey,QT_BLOCKCIPHERPARAM*EncryptParam);
[0148] 该函数的功能为对数据进行加密初始化,并设置数据加密的算法的相关参数,其中,上述函数中的参数hKey表示加密密钥句柄,参数EncryptParam表示分组密码算法相关参数(加密算法、初始化向量类型、初始化向量、初始化向量长度、填充方法以及反馈值的位长度),当返回值为SAR_OK则说明初始化成功,当返回值为其他,则表示是错误码,说明初始化失败;
[0149] 2、结束加密;
[0150] 通过调用如下函数结束加密操作:
[0151] ULONG DEVAPI SKF_EncryptFinal(HANDLE hKey,BYTE*pbEncryptedData,ULONG*ulEncryptedDataLen);
[0152] 该函数用于结束数据的加密操作,返回加密结果。该函数中的参数hKey表示加密密钥句柄,参数pbEncyptedData表示加密结果的缓存区(如上述所述的第一缓存区),参数ulEncyptedDataLen表示加密结果的长度,当返回值为SAR_OK则说明结束加密成功,当返回值为其他,则表示是错误码,说明失败。
[0153] 需要说明的是,在对多组数据加密完成之后,在使用数据时,需要对加密后的数据进行解密,当对多组数据进行解密时,目标调用接口还包括第一解密初始化接口、第一解密接口以及第一解密结束接口,具体解密流程如下:
[0154] 调用第一解密初始化接口进行解密初始化操作;
[0155] 调用第一解密接口通过与第一量子加密密钥对应的量子解密密钥对第一密文数据进行解密,得到第一明文数据;
[0156] 将第一明文数据存储至第二缓存区;
[0157] 调用第一解密结束接口结束对第一密文数据的解密操作。
[0158] 具体的,可以通过调用如下函数对多组数据进行解密:
[0159] ULONG DEVAPI SKF_DecryptUpdate(HANDLE hKey,BYTE*pbEncryptedData,ULONG ulEncryptedLen,BYTE*pbData,ULONG*pulDataLen);
[0160] 该函数用于对至少两个分组数据的解密操作,也即是用指定量子解密密钥(该指定解密密钥为与数据加密时所使用的量子加密密钥相对应的解密密钥)对指定数据进行解密,被解密的数据包含至少两个分组,解密后的数据保存到指定的缓存区中(也即上述的第二缓存区)。
[0161] 可以理解的是,在调用SKF_DecryptUpdate对至少两个分组数据进行解密之前,必须调用SKF_QT_DecryptInit进行初始化解密操作;在调用SKF_DecryptUpdate之后,必须调用SKF_DecryptFinal进行结束解密操作。其中,该函数中的参数hKey表示解密密钥句柄,参数pbEncryptedData表示待解密数据,参数ulEncryptedLen表示待解密数据长度,参数pbData表示指向解密后的数据缓存区指针,参数pulDataLen输入时表示结果数据缓存区长度,输出时表示结果数据实际长度,当返回值为SAR_OK则说明成功,当返回值为其他,则表示是错误码。
[0162] 也就是说,在调用上述函数对多组数据进行解密之前,需要先调用第一解密初始化接口进行解密初始化操作(也即调用SKF_QT_DecryptInit进行初始化解密操作),之后调用第一解密接口通过与第一量子加密密钥对应的量子解密密钥对第一密文数据进行解密,得到第一明文数据(也即调用SKF_DecryptUpdate对至少两个分组数据进行解密,得到第一明文数据),之后将解密后得到的密文数据存储至指定的第二缓存区,并调用第一解密结束接口结束对第一密文数据的解密操作(也即调用SKF_DecryptFinal进行结束解密操作)。
[0163] 下面分别对解密初始化调用的函数以及结束解密所调用的函数进行说明:
[0164] 1、量子密钥解密初始化;
[0165] 通过调用如下函数完成量子密钥解密初始化:
[0166] ULONG DEVAPI SKF_QT_DecryptInit(HANDLE hKey,QT_BLOCKCIPHERPARAM*DecryptParam);
[0167] 该函数的功能用于数据解密初始化,设置解密密钥相关参数。上述函数中的参数hKey表示解密密钥句柄,参数DecryptParam表示分组密码算法相关参数(解密算法、初始化向量类型、初始化向量、初始化向量长度、填充方法、反馈值的位长度),当返回值为SAR_OK则说明初始化成功,当返回值为其他,则表示是错误码,说明初始化失败。
[0168] 2、结束解密;
[0169] 通过调用如下函数结束对多组数据的解密操作:
[0170] ULONG DEVAPI SKF_DecryptFinal(HANDLE hKey,BYTE*pbDecryptedData,ULONG*pulDecryptedDataLen);
[0171] 该函数用于结束至少两个分组数据的解密,该函数中的参数hKey表示解密密钥句柄,参数pbDecryptedData表示指向解密结果的缓存区,如果此参数为NULL时,由pulDecryptedDataLen返回解密结果的长度,参数pulDecryptedDataLen输入时,表示pbDecryptedData缓存区的长度,输出时表示解密结果的长度,当返回值为SAR_OK则说明成功,当返回值为其他,则表示是错误码。
[0172] 二、当目标加解密方式为单组数据加解密时,该目标调用接口包括第二加密初始化接口以及第二加密接口,根据目标调用接口执行相应的操作包括调用第二加密初始化接口进行加密初始化操作;
[0173] 通过第二加密接口调用第二量子加密密钥对第二数据进行加密,得到第二密文数据,第二数据为待加密的单组数据,第二量子加密密钥为量子密钥存储池中的任意一个量子加密密钥;
[0174] 将第二密文数据存储至第三缓存区。
[0175] 具体的,可以通过调用如下函数对单组数据进行加密:
[0176] ULONG DEVAPI SKF_Encrypt(HANDLE hKey,BYTE*pbData,ULONG ulDataLen,BYTE*pbEncryptedData,ULONG*pulEncryptedLen);
[0177] 该函数的功能为对单一分组数据的进行加密操作,也即用指定量子加密密钥对指定数据进行加密,被加密的数据只包含一个分组,加密后的密文保存到指定的缓存区中,SKF_Encrypt只对单个分组数据进行加密。在调用SKF_Encrypt之前,必须调用SKF_QT_EncryptInit进行初始化加密操作,调用SKF_Encypt等价于先调用SKF_EncryptUpdate之后再调用SKF_EncryptFinal。其中,参数hKey表示加密密钥句柄,参数pbData表示待加密数据(例如上述的第二数据),参数ulDataLen表示待加密数据长度,参数pbEncryptedData表示加密后的数据缓存区指针(可以为NULL,用于获得加密后数据长度),参数pulEncryptedLen输入时表示结果数据缓存区长度,输出时表示结果数据实际长度,当返回值为SAR_OK则说明单组数据加密成功,当返回值为其他,则表示是错误码,说明失败。
[0178] 也就是说,当对单组数据进行加密时,可以首先通过第二加密初始化接口进行加密初始化操作(也即调用SKF_QT_EncryptInit初始化加密操作),之后通过第二加密接口调用第二量子加密密钥对第二数据进行加密,得到第二密文数据(也即调用上述函数SKF_Encrypt对单个分组数据进行加密,可以理解的是,调用SKF_Encypt等价于先调用SKF_EncryptUpdate再调用SKF_EncryptFinal),之后将加密后的数据保存至指定的第三缓存区。
[0179] 需要说明的是,单组数据加密初始化所调用的函数与多组数据所调用的函数相似,上述已经对多组数据加密初始化进行详细说明,具体此处不再赘述。
[0180] 还需要说明的是,在对单组数据加密完成之后,在使用数据时,需要对加密后的数据进行解密,当对单组数据进行解密时,目标调用接口还包括第二解密初始化接口以及第二解密接口,具体对单组数据的解密流程如下:
[0181] 调用第二解密初始化接口进行解密初始化操作;
[0182] 调用第二解密接口通过与第二量子加密密钥对应的量子解密密钥对第二密文数据进行解密,得到第二明文数据;
[0183] 将第二明文数据存储至第四缓存区。
[0184] 具体的,可以通过调用如下函数对单组数据进行解密操作:
[0185] ULONG DEVAPI SKF_Decrypt(HANDLE hKey,BYTE*pbEncryptedData,ULONG ulEncryptedLen,BYTE*pbData,ULONG*pulDataLen);
[0186] 该函数用于对单个分组数据的解密操作,具体为用指定解密密钥对指定数据进行解密,被解密的数据只包含一个分组,解密后的明文保存到指定的缓存区中。SKF_Decrypt只对单个分组数据进行解密,在调用SKF_Decrypt之前,必须调用SKF_QT_DecryptInit初始化解密操作。SKF_Decypt等价于先调用SKF_DecryptUpdate再调用SKF_DecryptFinal。其中,该函数的参数hKey表示解密密钥句柄,参数pbEncryptedData表示待解密数据,参数ulEncryptedLen表示待解密数据长度,参数pbData表示指向解密后的数据缓存区指针,当为NULL时可获得解密后的数据长度,参数pulDataLen输入时表示结果数据缓存区长度,输出时表示结果数据实际长度,当返回值为SAR_OK则说明成功,当返回值为其他,则表示是错误码。
[0187] 也就是说,在对单组数据进行解密之前,需要调用第二解密初始化接口进行解密初始化操作(也即调用SKF_QT_DecryptInit进行初始化解密操作),之后,调用第二解密接口通过与第二量子加密密钥对应的量子解密密钥对第二密文数据进行解密,得到第二明文数据(也即调用SKF_Decrypt对单个分组数据进行解密,可以理解的是,调用SKF_Decypt等价于先调用SKF_DecryptUpdate再调用SKF_DecryptFinal),之后将解密后的第二明文数据存储至指定的第四缓存区。
[0188] 需要说明的是,对单组数据解密之前,需要进行解密初始化操作,上述已经对多组数据的解密初始化操作进行说明,单组数据的解密初始化操作与多组数据的解密初始化操作类似,上述已经进行了详细说明,具体此处不再赘述。
[0189] 需要说明的是,调用SKF_QT_DecryptInit进行解密初始化操作之后,可以调用SKF_Decrypt对单个分组数据进行解密,也可以多次调用SKF_DecryptUpdate之后再调用SKF_DecryptFinal完成对多个分组数据的解密,具体不做限定。
[0190] 三、当目标加解密方式为轻量级加解密时,该目标调用接口包括第三加密接口,根据目标调用接口执行相应的操作包括
[0191] 调用第三加密接口通过第三量子加密密钥对第三数据进行加密,得到第三密文数据,其中,第三数据为单组数据,且单次轻量级加密的数据长度不大于第一预设值,第三量子加密密钥为量子密钥存储池中的任意一个量子加密密钥;
[0192] 将第三密文数据保存至第五缓存区。
[0193] 具体的,可以通过如下函数完成对单组数据的轻量级加密:
[0194] ULONG DEVAPI SKF_QT_LWEncrypt(HANDLE hKey,QT_BLOCKCIPHERPARAM*EncryptParam,BYTE*pbData,ULONG ulDataLen,BYTE*pbEncryptedData,ULONG*pulEncryptedLen);
[0195] 该函数的用于对单一分组数据的加密操作,用指定加密密钥对指定数据进行加密,被加密的数据只包含一个分组,加密后的密文保存到指定的缓存区中。SKF_QT_LWEncrypt只对单个分组数据进行加密,在调用SKF_QT_LWEncrypt之前,无须调用SKF_QT_EncryptInit初始化加密操作,另外一次加密数据长度不大于3Kbyte。该函数中的参数hKey表示加密密钥句柄,参数EncryptParam表示分组密码算法相关参数(加密算法、初始化向量类型、初始化向量、初始化向量长度、填充方法、反馈值的位长度),参数pbData表示待加密数据,参数ulDataLen表示待加密数据长度,参数pbEncyptedData表示加密结果的缓存区,参数ulEncyptedDataLen表示加密结果的长度,当返回值为SAR_OK则说明成功,当返回值为其他,则表示是错误码。
[0196] 也就是说,在对单组数据进行轻量级加密时,无需进行初始化加密操作,直接调用第三加密接口通过第三量子加密密钥对第三数据进行加密,得到第三密文数据(如上述的通过调用SKF_QT_LWEncrypt对单个分组数据进行加密),之后将第三密文数据保存至指定的第五缓存区。
[0197] 需要说明的是,在通过轻量级加密方式对单组数据加密完成之后,在使用数据时,需要对加密后的数据进行解密,当通过轻量级对单组数据进行解密时,目标调用接口还包括第三初始化解密接口以及第三解密接口,具体的解密流程如下:
[0198] 调用第三初始化解密接口进行解密初始化操作;
[0199] 调用第三解密接口通过与第三量子加密密钥对应的量子解密密钥对第三密文数据进行解密,得到第三明文数据;
[0200] 将第三明文数据存储至第六缓存区,其中单次轻量级解密的数据长度不大于第二预设值。
[0201] 具体的,可以通过调用如下函数完成对单组数据的轻量级解密操作:
[0202] ULONG DEVAPI SKF_QT_LWDecrypt(HANDLE hKey,QT_BLOCKCIPHERPARAM*DecryptParam,BYTE*pbEncryptedData,ULONG ulEncryptedLen,BYTE*pbData,ULONG*pulDataLen);
[0203] 该函数用于对单个分组数据的解密操作,具体的,用指定解密密钥对指定数据进行解密,被解密的数据只包含一个分组,解密后的明文保存到指定的缓存区中,SKF_Decrypt只对单个分组数据进行解密,在调用SKF_Decrypt之前,必须调用SKF_QT_QT_DecryptInit初始化解密操作,SKF_Decypt等价于先调用SKF_DecryptUpdate再调用SKF_DecryptFinal,一次解密数据长度不大于3K+32byte。其中,该函数中的参数hKey表示解密密钥句柄,参数DecryptParam表示分组密码算法相关参数(解密算法、初始化向量类型、初始化向量、初始化向量长度、填充方法、反馈值的位长度),参数pbEncryptedData表示待解密数据,参数ulEncryptedLen表待解密数据长度,参数pbData表示指向解密后的数据缓存区指针,当为NULL时可获得解密后的数据长度,参数pulDataLen输入时表示结果数据缓存区长度,输出时表示结果数据实际长度,当返回值为SAR_OK则说明成功,当返回值为其他,则表示是错误码。
[0204] 也就是说,在对单组数据进行轻量级解密之前,需要先调用第三初始化解密接口进行解密初始化操作(也即调用SKF_QT_QT_DecryptInit初始化解密操作),之后调用第三解密接口通过与第三量子加密密钥对应的量子解密密钥对第三密文数据进行解密,得到第三明文数据(也即调用SKF_Decrypt对单个分组数据进行解密),最后将第三明文数据存储至第六缓存区。
[0205] 需要说明的是,轻量级解密方式中的量子密钥解密初始化与多组数据解密方式中的量子密钥解密初始化类似,上述已经进行了详细说明,具体此处不再赘述。
[0206] 综上所述,本申请提供的实施例中,通过不同的加解密方式确定需要调用的不同的接口,之后通过不同的接口完成对数据的加解密操作,可以解决量子加解密应用中的接口调用问题,为使用量子加解密应用提供了基础。
[0207] 下面结合图7对本申请实施例通过指定量子密钥对数据进行加解密的流程进行说明:
[0208] 请参阅图7,图7为本申请实施例提供的量子密钥的处理方法的流程示意图,包括:
[0209] 701、量子安全模块通过第一密钥接口接收第一触发指令。
[0210] 本实施例中,客户端软件调用打开容器接口,打开目标容器,获取目标容器的容器句柄,同时量子安全模块也打开目标容器。客户端软件调用第一密钥接口,触发量子安全模块通过第一密钥接口接收第一触发指令,该第一触发指令为第一密钥接口的参数,该第一密钥接口的参数至少包括目标容器的容器句柄。
[0211] 需要说明的是,该目标容器可以为QWK容器、QBK容器、QSK容器以及QCSK容器中的任意一个,不同容器里面存储的密钥不同,例如QSK容器里面存储的QSK。
[0212] 该第一密钥接口与目标容器的容器类型具有关联关系,例如该目标容器为QSK容器或QCSK容器,则该第一密钥接口可以为导入会话密钥接口、导出会话密钥接口以及生成会话密钥接口中的一个,若该目标容器为QWK容器或QBK容器,该第一密钥接口可以为导入会话密钥接口,由于QWK密钥和QBK密钥用于量子安全模块和QSS间的加密通信,QSS和量子安全模块已经存储了相同的QWK和QBK,所以QWK和QBK无需生成和导出,相应的在QWK容器和QBK容器只需要导入密钥即可。
[0213] 702、量子安全模块根据第一触发指令生成目标密钥。
[0214] 本实施例中,量子安全模块在接收到第一触发指令之后,可以根据第一触发指令生成目标密钥,其中,该目标密钥与目标容器相对应。
[0215] 需要说明的是,可以根据需要导入的量子密钥类型打开对应的量子密钥容器,不同的量子密钥容器生成目标密钥的方式不同,同时不同的量子密钥容器对应的触发指令中携带的参数也是不相同的,下面进行说明:
[0216] 当第一触发指令中还包括第一密钥索引以及第一密钥密文,且该第一密钥接口为导入密钥接口时,量子安全模块根据第一密钥索引确定目标密钥,该第一密钥索引与目标容器的容器类型具有关联关系。
[0217] 可以理解的是,该第一密钥索引可以为QEK对应的索引,也可以为QCEK对应的索引,第一密钥密文与加密密钥具有关联关系,若该加密密钥为QEK,则该第一密钥密文为QSK密文,相应的目标容器为QSK容器,第一密钥接口为导入会话密钥接口,下面说明如何生成目标密钥的:
[0218] 客户端软件调用导入会话密钥接口:该接口的参数为QSK容器的容器句柄hContainer、QEK对应的密钥索引idx(也即第一密钥索引)、用QEK加密后的会话密钥密文qek{qsk}(也即第一密钥密文),其中,QEK对应的密钥索引idx以及会话密钥密文qek{qsk}由量子安全系统平台生成并传递至客户端软件的。
[0219] 之后,客户端软件在调用导入会话密钥接口时会触发量子安全模块得到导入会话密钥接口的接口参数:QSK容器的容器句柄、索引idx以及会话密钥密文qek{qsk},之后,量子安全模块根据idx从QEK对应的QEK存储池中找到对应的量子加密密钥(也即目标密钥)。
[0220] 需要说明的是,量子安全模块在得到目标密钥之后,还可以通过目标密钥对会话密钥密文qek{qsk}进行解密得到QSK明文,并返回目标密钥对应的密钥句柄。上述以QEK对会话密钥进行加密得到会话密钥密文,相应的QCEK对充注会话密钥进行加密得到充注会话密钥密文的方式与QEK的方式类似,具体此处不再赘述。
[0221] 下面结合表1对QSK以及QCSK的密文数据结构进行说明:
[0222] QSK密文以及QCSK密文的类型定义:
[0223] typedef struct Struct_QSKCIPHERBLOB{
[0224] ULONG PaddingType;
[0225] UINT64 KEKStartAddr;
[0226] BYTE HMAC[4];
[0227] ULONG CipherLen;
[0228] BYTE Cipher[1];
[0229] }QSKCIPHERBLOB,*PQSKCIPHERBLOB;
[0230] QSK密文以及QCSK密文的类型定义中各个数据项的描述如表2中所示:
[0231]
[0232] 表2
[0233] 另外,在打开容器时,可以通过如下函数获取容器句柄:
[0234] ULONG DEVAPI SKF_OpenContainer(HAPPLICATIONhApplication,LPSTR szContainerName,HCONTAINER*phContainer,其中,hApplication为应用句柄,szContainerName为容器的名称,phContainer为返回所发开容器的容器句柄,当返回值为SAR_OK则表示打开容器成功,当返回值为其他时,则表示未成功打开。
[0235] 需要说明的是,量子安全模块可以通过调用如下函数导入量子会话密钥:
[0236] ULONG DEVAPI SKF_QT_ImportSessionKey(HCONTAINER hContainer,ULONG ulAlgId,BYTE*pbWrapedData,ULONG ulWrapedLen,HANDLE*phKey);
[0237] 该函数的功能为导入会话密钥密文,使用容器中的解密密钥解密得到会话密钥,hContainer表示容器句柄,ulAlgId表示会话密钥算法标识,pbWrapedData表示要导入的会话密钥密文(当容器为WQK和QBK类型时,此参数为QWKCIPHERBLOB密文数据,当容器为QSK和QCSK类型时,此参数为QSKCIPHERBLOB密文数据),ulWrapedLen表示会话密钥密文长度,phKey表示返回会话密钥句柄,当返回值为SAR_OK,则表示成功,当返回值为其他,则表示是错误码,另外在调用上述函数导入量子会话密钥时,需要用户权限。
[0238] 在一个实施例中,量子安全模块根据第一触发指令生成目标密钥包括:
[0239] 当第一密钥接口为生成会话密钥接口时,量子安全模块生成真随机数;
[0240] 量子安全模块将真随机数确定为所述目标密钥。
[0241] 本实施例中,生成会话密钥接口的接口参数包括容器句柄hContainer,此时,量子安全模块调用真随机数发生器生成真随机数,并将真随机数作为目标密钥。
[0242] 需要说明的是,量子安全模块通过调用如下函数生成量子会话密钥:
[0243] ULONG DEVAPI SKF_QT_GenQKeySessionKey(HCONTAINER hContainer,ULONG ulAlgId,HANDLE*phKey),该函数的功能为生成量子会话密钥,且只用于生成量子会话密钥,其中,参数hContainer表示容器句柄,参数ulAlgId表示会话密钥算法标识,参数phKey表示返回会话密钥句柄,当返回值为SAR_OK,则表示成功,当返回值为其他,则表示是错误码,另外,在调用上述函数生成量子会话密钥时,需要用户权限。
[0244] 在一个实施例中,量子安全模块根据第一触发指令生成目标密钥包括:
[0245] 当第一触发指令还包括第二密钥索引时,量子安全模块根据第二密钥索引从量子密钥存储池中获取与第二密钥索引对应的目标密钥,其中,第二密钥索引与目标容器的类型具有关联关系。
[0246] 本实施例中,以该量子容器为QWK容器、调用接口为导入会话密钥接口为例进行说明,客户端软件调用打开容器接口,打开QWK容器,获取容器句柄hContainer,客户端软件调用导入会话密钥接口,接口的参数是容器句柄hContainer、QWK密钥索引idx(也即第二密钥索引)、返回密钥句柄hKey,其中QWK密钥索引idx从QSS生成并传递给客户端的,量子安全模块根据该QWK密钥索引idx在QWK存储池取出对应的量子工作密钥QWK,该对应的量子工作密钥QWK即为目标密钥。另外,上述以QSS生成QWK对应的索引,导入的容器为QWK容器为例进行说明,导入量子密钥至QBK容器的方式与导入QWK容器的方式类似,具体此处不再赘述。
[0247] 需要说明的是,此处导入量子会话密钥至QWK容器或QBK容器所调用的函数与上述导入量子会话密钥至QSK容器或QCSK容器类似,上述进行了具体说明,具体此处不再赘述。
[0248] 下面对QWK密文数据结构或QBK密文数据结构进行说明:
[0249] typedef struct Struct_QWKCIPHERBLOB{
[0250] ULONG PaddingType;
[0251] UINT64 KeyStartAddr;
[0252] }QWKCIPHERBLOB,*PQWKCIPHERBLOB;
[0253] 该QWK密文数据结构或QBK密文数据结构中的数据项的含义如表3所示:
[0254]
[0255] 表3
[0256] 需要说明的是,会话密钥导入QWK容器和QBK容器时,与会话密钥导入QSK容器和QCSK容器时包括以下不同:
[0257] 1、会话密钥导入QSK容器和QCSK容器时,会话密钥是从QSS量子安全系统生成之后并用量子加密密钥进行加密后导入的;
[0258] 2、会话密钥导入QWK容器和QBK容器时,会话密钥从应用内部对应的量子密钥存储池中取出指定量子密钥索引对应的密钥,导入到相应的容器,其中,量子密钥索引由QSS量子安全系统指定。
[0259] 703、量子安全模块将目标密钥存储至目标容器。
[0260] 本实施例中,量子安全模块在得到目标密钥之后,将目标密钥存储至对应的目标容器。例如得到的是QSK,则存储至QSK容器。
[0261] 704、量子安全模块返回目标密钥对应的密钥句柄至客户端。
[0262] 本实施例中,量子安全模块可以返回目标密钥对应的密钥句柄至客户端,使得客户端在调用密钥时,通过密钥句柄即可以实现。
[0263] 在一个实施例中,量子安全模块通过第二密钥接口接收第二触发指令,第二密钥接口为导出密钥接口;
[0264] 量子安全模块根据第二触发指令从量子密钥存储池中获取对应的第二加密密钥;
[0265] 量子安全模块根据第二加密密钥确定第二密钥密文;
[0266] 量子安全模块将第二加密密钥对应的索引以及第二密钥密文发送至客户端,以使得客户端将第二加密密钥对应的索引以及第二密钥密文发送至量子安全系统。
[0267] 本实施例中,当量子会话密钥生成并导出至QSK容器或QCSK容器时,量子安全模块在通过真随机数发生器生成真随机数,并将真随机数作为密钥导入相应的容器之后,客户端调用导出密钥接口(该导出密钥接口可以为导出会话密钥接口,也可以为导出充注会话密钥接口,具体不限定)触发量子安全模块通过对应的导出密钥接口接收到触发指令,并根据该触发指令在对应的量子密钥存储池(可以根据导出密钥接口的类型确定那个量子密钥存储池,若是导出会话密钥接口,则对应的量子密钥存储池即为量子加密密钥存储池,若是导出充注会话密钥接口,则对应的量子密钥存储池为量子充注会话密钥存储池)中取出对应的加密密钥(例如QEK或QCEK),并通过对应的加密密钥对待加密明文进行加密,得到加密后的QEK密文或QCEK密文,并将加密后的密钥密文以及对应的加密密钥的索引返回至客户端,由客户端将加密密文以及索引转发至QSS量子安全系统,保证QSS量子安全系统与量子安全模块中的量子密钥相对应。
[0268] 需要说明的是,量子安全模块可以通过调用如下函数导出量子会话密钥密文:
[0269] ULONG  DEVAPI SKF_QT_ExportQKeySessionKey(HANDLE hKey,QT_QSKEXPORTPARAM*pQSKExportParam,BYTE*pbData,ULONG*pulDataLen);
[0270] 该函数的功能是导出量子会话密钥密文,使用QEK存储池中的密钥对量子会话密钥加密后导出,其中,hKey表示量子会话密钥ID,pQSKExportParam表示量子加密密钥QEK的相关参数,pbData表示会话密钥密文和会话密钥HMAC的前4个字节,pulDataLen表示输入时表示会话密钥密文数据缓存区长度,输出时表示pbData的实际长度,当返回值为SAR_OK则说明导出量子会话密钥成功,当返回值为其他,则表示是错误码,说明导出量子会话密钥失败,另外,在调用上述参数导出量子会话密钥时,需要用户权限。
[0271] 上面从量子安全模块的角度对本申请实施例提供的量子加解密应用接口的调用方法进行说明,下面对本申请实施例提供的量子安全模块的虚拟结构进行说明。
[0272] 请参阅图8,图8为本申请实施例提供的量子安全模块的一个虚拟结构示意图,包括:
[0273] 第一确定单元801,用于确定量子加解密应用的目标加解密方式;
[0274] 第二确定单元802,用于根据所述目标加解密方式确定所述量子加解密应用的目标调用接口;
[0275] 处理单元803,用于根据所述目标调用接口执行相应的操作。
[0276] 可选地,当所述目标加解密方式为多组数据加解密时,所述目标调用接口包括第一加密初始化接口、第一加密接口以及第一加密结束接口,所述处理单元803具体用于:
[0277] 调用所述第一加密初始化接口进行加密初始化操作;
[0278] 调用所述第一加密接口通过第一量子加密密钥对第一数据进行加密,得到第一密文数据,所述第一数据为待加密的至少两个分组数据,所述第一量子加密密钥为量子密钥存储池中的任意一个量子加密密钥;
[0279] 将所述第一密文数据存储至第一缓存区;
[0280] 调用所述第一加密结束接口结束对所述第一数据的加密操作。
[0281] 可选地,所述目标调用接口还包括第一解密初始化接口、第一解密接口以及第一解密结束接口,所述处理单元803还具体用于:
[0282] 调用所述第一解密初始化接口进行解密初始化操作;
[0283] 调用所述第一解密接口通过与所述第一量子加密密钥对应的量子解密密钥对所述第一密文数据进行解密,得到第一明文数据;
[0284] 将所述第一明文数据存储至第二缓存区;
[0285] 调用所述第一解密结束接口结束对所述第一密文数据的解密操作。
[0286] 可选地,当所述目标加解密方式为单组数据加解密时,所述目标调用接口包括第二加密初始化接口以及所述第二加密接口,所述处理单元803具体用于:
[0287] 调用所述第二加密初始化接口进行加密初始化操作;
[0288] 通过所述第二加密接口调用第二量子加密密钥对第二数据进行加密,得到第二密文数据,所述第二数据为待加密的单组数据,所述第二量子加密密钥为量子密钥存储池中的任意一个量子加密密钥;
[0289] 将所述第二密文数据存储至第三缓存区。
[0290] 可选地,所述目标调用接口还包括第二解密初始化接口以及所述第二解密接口,所述处理单元803还具体用于:
[0291] 调用所述第二解密初始化接口进行解密初始化操作;
[0292] 调用所述第二解密接口通过与所述第二量子加密密钥对应的量子解密密钥对所述第二密文数据进行解密,得到第二明文数据;
[0293] 将所述第二明文数据存储至第四缓存区。
[0294] 可选地,当所述目标加解密方式为轻量级加解密时,所述目标调用接口为第三加密接口,所述处理单元803还具体用于:
[0295] 调用所述第三加密接口通过第三量子加密密钥对第三数据进行加密,得到第三密文数据,其中,所述第三数据为单组数据,且单次轻量级加密的数据长度不大于第一预设值,所述第三量子加密密钥为量子密钥存储池中的任意一个量子加密密钥;
[0296] 将所述第三密文数据保存至第五缓存区。
[0297] 可选地,所述目标调用接口还包括第三初始化解密接口以及第三解密接口,所述处理单元803还具体用于:
[0298] 调用所述第三初始化解密接口进行解密初始化操作;
[0299] 调用所述第三解密接口通过与所述第三量子加密密钥对应的量子解密密钥对所述第三密文数据进行解密,得到第三明文数据;
[0300] 将所述第三明文数据存储至第六缓存区,其中单次轻量级解密的数据长度不大于第二预设值。
[0301] 综上所述,本申请提供的实施例中,通过不同的加解密方式确定需要调用的不同的接口,之后通过不同的接口完成对数据的加解密操作,可以解决量子加解密应用中的接口调用问题,为使用量子加解密应用提供了基础。
[0302] 图9是本申请实施例提供的服务器的硬件结构示意图,该服务器900可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器(central processing units,CPU)922(例如,一个或一个以上处理器)和存储器932,一个或一个以上存储应用程序942或数据944的存储介质930(例如一个或一个以上海量存储设备)。其中,存储器932和存储介质930可以是短暂存储或持久存储。存储在存储介质930的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对服务器中的一系列指令操作。更进一步地,中央处理器922可以设置为与存储介质930通信,在服务器900上执行存储介质930中的一系列指令操作。
[0303] 该中央处理器922用于执行上述由量子安全模块执行的操作。
[0304] 本申请实施例还提供了一种存储介质,其上存储有程序,该程序被处理器执行时实现上述所述量子加解密应用接口的调用方法的步骤。
[0305] 本申请实施例还提供一种计算机可读存储介质,包括指令,当其在计算机上运行时,使得计算机执行上述所述量子加解密应用接口的调用方法。
[0306] 本申请还提供了一种计算机程序产品,当在数据处理设备上执行时,使得执行计算机程序产品时可以实现上述所述量子加解密应用接口的调用方法的步骤。
[0307] 所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0308] 在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0309] 作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0310] 另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0311] 集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,本地客户端,或者网络设备等)执行本申请图1和图3和图5各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read‑only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
[0312] 以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。