一种量子密钥分发方法及装置与流程

文档序号:11479421阅读:211来源:国知局
一种量子密钥分发方法及装置与流程

本申请涉及量子密钥技术,具体涉及一种量子密钥分法方法。本申请同时涉及一种量子密钥分发装置。



背景技术:

量子力学的发展是人类在过去的一百多年里最伟大的科学发现和进步。随着对量子力学认识的深入,量子力学相关技术开始逐渐应用到了人类生活中的方方面面。其中量子力学在密码学领域的应用取得了较大的发展与突破,很多机构实现了完整的量子密钥分发系统。

一个完整的量子密钥分发系统由三个部分组成:量子引擎(quantumengine)、密钥管理(keymanagement)和有加密需求的应用程序(cryptographicapp),三个部分之间相对独立,同时在功能上构成一个从上至下的分层调用结构。量子密钥分发系统的架构如图1所示,其中,quantumengine实现了单光子的收发、随机数生成、初始密钥筛选、误码纠错、隐私放大以及安全认证等功能,完成密钥的协商生成过程,然后将生成的密钥序列传递到对应的密钥管理程序并存储在密钥池中。由密钥管理模块实现对密钥的管理以及响应应用程序的请求。

当有多个请求方(例如:应用程序或者应用程序中的线程)并发向密钥管理程序请求密钥序列的时候,密钥管理程序通常可以采用多线程和/或异步处理方式处理密钥获取请求,但是由于密钥池是共享资源,密钥管理模块对每个请求的响应都需要从该密钥池中获取密钥,所以最终所有的处理过程会在密钥池前串行的排起长队,即:处理某一个请求的时候挂起其他的请求,直到当前请求处理完毕,再开始处理下一个请求。也就是说,所有的请求以串行方式获取响应,得到需要的密钥序列。

由此可见,在大量密钥获取请求并发的应用场景下,会引起对密钥池的强烈竞争,请求越多,每个请求得到响应的平均等待时间就会越长,甚至等待时间可能随着密钥请求数量的增长呈指数级增长,导致密钥管理程序无法快速响 应应用程序的请求,密钥分发的服务能力大幅下降,甚至无法满足应用程序的需求。



技术实现要素:

本申请实施例提供一种量子密钥分发方法,以解决在大量密钥获取请求并发的场景下、由于对密钥池资源的竞争而导致无法快速响应的问题。本申请实施例还提供一种量子密钥分发装置。

本申请提供一种量子密钥分发方法,包括:

接收来自请求方的量子密钥获取请求;

从为所述请求方分配的子密钥池中获取与请求长度相符的密钥序列;

将所述密钥序列返回给所述请求方。

可选的,所述请求方请求固定长度的密钥序列;所述子密钥池包括:以密钥块为基本单元的子密钥池,所述密钥块包含的密钥序列的长度与所述固定长度一致;

所述从为所述请求方分配的子密钥池中获取与请求长度相符的密钥序列,包括:从为所述请求方分配的子密钥池中获取密钥块,并将所述密钥块包含的密钥序列作为待返回给所述请求方的密钥序列。

可选的,所述请求方包括:执行密钥获取操作的一对对等实体中的主动发起方;所述方法在与所述主动发起方对应的密钥管理程序中实施。

可选的,在所述接收来自请求方的量子密钥获取请求之后,在所述从为所述请求方分配的子密钥池中获取与请求长度相符的密钥序列之前,包括:

判断是否已为所述请求方分配子密钥池,若否则为所述请求方分配子密钥池。

可选的,所述为所述请求方分配子密钥池,包括:

从存储待分发密钥序列的指定密钥池中申请预设长度的密钥序列,并利用申请的密钥序列为所述请求方构建子密钥池,其中,所述预设长度大于所述请求长度。

可选的,所述请求方请求固定长度的密钥序列;

所述利用申请的密钥序列为所述请求方构建子密钥池,包括:根据所述固 定长度将所述申请的密钥序列分割成相应长度的密钥块,并以分割得到的密钥块为基本单元构建所述子密钥池。

可选的,在从为所述请求方分配的子密钥池中获取与请求长度相符的密钥序列之前,包括:

判断所述子密钥池中是否存在符合所述请求长度的密钥序列;

若不存在,从存储待分发密钥序列的指定密钥池中申请预设长度的密钥序列,并将申请的密钥序列添加到所述子密钥池中。

可选的,所述请求方请求固定长度的密钥序列,所述子密钥池包括:以密钥块为基本单元的子密钥池,所述密钥块包含的密钥序列的长度与所述固定长度一致;

所述判断所述子密钥池中是否存在符合所述请求长度的密钥序列,包括:判断所述子密钥池中是否存在包含所述固定长度的密钥序列的密钥块;

所述将申请的密钥序列添加到所述子密钥池中,包括:根据所述固定长度将所述申请的密钥序列分割成相应长度的密钥块,并将分割得到的密钥块添加到所述子密钥池中。

可选的,所述指定密钥池包括:公共密钥池。

可选的,在所述将所述密钥序列返回给所述请求方之后,还包括:

若检测到所述请求方停止获取密钥,则释放为所述请求方分配的子密钥池。

可选的,所述量子密钥获取请求,是通过与所述请求方之间的数据连接接收到的;

所述检测到所述请求方停止获取密钥,包括:接收到所述请求方发送的断开所述数据连接的指令。

可选的,所述检测到所述请求方停止获取密钥,包括:

在预设时间段内没有接收到来自所述请求方的量子密钥获取请求。

可选的,在所述检测到所述请求方停止获取密钥之后,在所述释放为所述请求方分配的子密钥池之前,还包括:

将所述子密钥池中剩余的密钥序列添加到回收密钥池中。

可选的,在所述将所述密钥序列返回给所述请求方之后,还包括:

若检测到所述请求方停止获取密钥,则将所述子密钥池中剩余的密钥序列 添加到回收密钥池中、并释放为所述请求方分配的子密钥池;

在从存储待分发密钥序列的指定密钥池中申请预设长度的密钥序列之前,包括:

判断所述回收密钥池中是否存在所述预设长度的密钥序列;

若存在,将所述回收密钥池作为所述指定密钥池;

否则,将公共密钥池作为所述指定密钥池。

可选的,所述请求方包括:执行密钥获取操作的一对对等实体中的被动发起方,所述方法在与所述被动发起方对应的密钥管理程序中实施;

所述子密钥池包括:根据主动发起方对应的密钥管理程序发送的同步请求、为所述请求方分配并维护的子密钥池。

相应的,本申请还提供一种量子密钥分发装置,包括:

请求接收单元,用于接收来自请求方的量子密钥获取请求;

密钥序列获取单元,用于从为所述请求方分配的子密钥池中获取与请求长度相符的密钥序列;

密钥序列返回单元,用于将所述密钥序列获取单元获取的密钥序列返回给所述请求方。

可选的,所述请求接收单元接收到请求固定长度密钥序列的量子密钥获取请求;所述密钥序列获取单元所采用的子密钥池包括:以密钥块为基本单元的子密钥池,所述密钥块包含的密钥序列的长度与所述固定长度一致;

所述密钥序列获取单元,具体用于从为所述请求方分配的子密钥池中获取密钥块,并将所述密钥块包含的密钥序列作为待返回给所述请求方的密钥序列。

可选的,所述装置包括:

分配判断单元,用于在所述请求接收单元接收到量子密钥获取请求之后,判断是否已为请求方分配子密钥池,若是则触发所述密钥序列获取单元工作;

子密钥池分配单元,用于当所述分配判断单元的输出为否时,为所述请求方分配子密钥池,并触发所述密钥序列获取单元工作。

可选的,所述子密钥池分配单元,具体用于从存储待分发密钥序列的指定密钥池中申请预设长度的密钥序列,并利用申请的密钥序列为所述请求方构建子密钥池,其中,所述预设长度大于所述请求长度。

可选的,所述请求接收单元接收到请求固定长度密钥序列的量子密钥获取请求;所述子密钥池分配单元,具体用于从存储待分发密钥序列的指定密钥池中申请预设长度的密钥序列,根据所述固定长度将所述申请的密钥序列分割成相应长度的密钥块,并以分割得到的密钥块为基本单元构建所述子密钥池。

可选的,所述装置包括:

长度判断单元,用于判断所述子密钥池中是否存在符合所述请求长度的密钥序列,并在是时触发所述密钥序列获取单元工作;

密钥序列添加单元,用于当所述长度判断单元的输出为否时,从存储待分发密钥序列的指定密钥池中申请预设长度的密钥序列,并将申请的密钥序列添加到所述子密钥池中,随后触发所述密钥序列获取单元工作。

可选的,所述请求接收单元接收到请求固定长度密钥序列的量子密钥获取请求;所述密钥序列获取单元所采用的子密钥池包括:以密钥块为基本单元的子密钥池,所述密钥块包含的密钥序列的长度与所述固定长度一致;

所述长度判断单元,具体用于判断所述子密钥池中是否存在包含所述固定长度的密钥序列的密钥块,并在是时触发所述密钥序列获取单元工作;

所述密钥序列添加单元,具体用于当所述长度判断单元的输出为否时,从存储待分发密钥序列的指定密钥池中申请预设长度的密钥序列,根据所述固定长度将所述申请的密钥序列分割成相应长度的密钥块,并将分割得到的密钥块添加到所述子密钥池中,随后触发所述密钥序列获取单元工作。

可选的,所述装置还包括:

停止获取检测单元,用于当所述密钥序列返回单元将密钥序列返回给请求方后,检测所述请求方是否停止获取密钥;

子密钥池释放单元,用于当所述停止获取检测单元检测到请求方停止获取密钥后,释放为所述请求方分配的子密钥池。

可选的,所述停止获取检测单元,具体用于若接收到所述请求方发送的断开数据连接的指令,则判定所述请求方停止获取密钥。

可选的,所述停止获取检测单元,具体用于如果在预设时间段内没有接收到来自所述请求方的量子密钥获取请求,则判定所述请求方停止获取密钥。

可选的,所述装置还包括:

密钥序列回收单元,用于当所述停止获取检测单元检测到所述请求方停止获取密钥后,将所述子密钥池中剩余的密钥序列添加到回收密钥池中,并触发所述子密钥池释放单元工作。

可选的,所述装置包括:

停止获取检测单元,用于在所述密钥序列返回单元将密钥序列返回给请求方后,检测所述请求方是否停止获取密钥;

密钥序列回收单元,用于在所述停止获取检测单元检测到所述请求方停止获取密钥后,将所述子密钥池中剩余的密钥序列添加到回收密钥池中;

子密钥池释放单元,用于在所述密钥序列回收单元工作完毕后,释放为所述请求方分配的子密钥池;

所述装置还包括:

指定密钥池设置单元,用于在所述子密钥池分配单元或者所述密钥序列添加单元工作之前,判断所述回收密钥池中是否存在所述预设长度的密钥序列,若存在,将所述回收密钥池作为所述指定密钥池,否则,将公共密钥池作为所述指定密钥池。

与现有技术相比,本申请具有以下优点:

本申请提供的量子密钥分发方法,在接收来自请求方的量子密钥获取请求后,从为所述请求方分配的子密钥池中获取与请求长度相符的密钥序列,并将所述密钥序列返回给所述请求方。本申请提供的上述方法,由于为请求方分配了与之对应的子密钥池,因此在接收到来自请求方的密钥获取请求后可以从所述子密钥池中获取密钥序列,而不必从公共密钥池中获取密钥序列,相当于将对公共资源的竞争转换为对私有资源的访问,在密钥获取请求大量并发的应用场景下,可以大大减少对公共密钥池的竞争,充分地利用多线程和/或异步处理的优势,提高密钥管理程序的并发处理能力,从而提升其服务能力和服务质量。

附图说明

图1是量子密钥分发系统的架构示意图;

图2是本申请的一种量子密钥分发方法的实施例的流程图;

图3是本申请实施例提供的从为请求方分配的子密钥池中获取与请求长度相符的密钥序列的处理流程图;

图4是本申请的一种量子密钥分发装置的实施例的示意图。

具体实施方式

在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是,本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此,本申请不受下面公开的具体实施的限制。

在本申请中,分别提供了一种量子密钥分发方法,以及一种量子密钥分发装置,在下面的实施例中逐一进行详细说明。在对实施例进行描述之前,先对本申请的技术方案作简要说明。

现有技术中,密钥管理程序将量子引擎传递的、待分发密钥序列存储在其管理的密钥池中,密钥池是共享资源,密钥管理程序为了响应每个请求方的量子密钥获取请求,都需要从密钥池中获取密钥序列,因此在有大量并发请求的情况下,即使密钥管理程序采用多线程和/或异步处理技术,针对每个请求的处理过程最终也是以串行的方式从密钥池中获取密钥序列,并返回给相应的请求方。由此可见,密钥池作为共享资源,对其的访问过程成为了整个密钥分发服务的瓶颈,导致密钥管理程序无法快速响应应用程序的请求。

针对现有技术存在的上述问题,本申请提供了一种新的量子密钥分发方法,在本方法中,为了便于区分,将用于存储由量子引擎传递的、待分发密钥序列的密钥池称为公共密钥池,而将为请求方分配的私有密钥池称为子密钥池(子密钥池中的密钥序列通常是从公共密钥池申请的)。

本申请提供的量子密钥分发方法的核心在于:为请求方分配其专用的子密钥池,因此在接收到来自请求方的密钥获取请求后可以从其专用的子密钥池中获取密钥序列,而不必从公共密钥池中获取密钥序列,相当于将对公共资源的竞争转换为对私有资源的访问,从而在密钥获取请求大量并发的应用场景下,可以充分地利用多线程和/或异步处理的优势,提高密钥管理程序的并发处理能力,快速地为请求方提供其所需的密钥序列。

所述请求方,通常是指发出量子密钥获取请求的实体,在具体实施中,所 述请求方可以是某个需要执行加密或者解密操作的应用程序,对于以多线程方式运行的应用程序,所述请求方也可以是其中的某个具有密钥获取需求的线程。

在量子密钥分发系统中,针对一次数据保密传输操作,需要由位于系统两端的请求方分别向各自的密钥管理程序发送密钥获取请求、以获取相同的密钥序列执行所需的加解密操作。在本技术方案中将上述位于系统两端的请求方称为执行密钥获取操作的一对对等实体,其中首先发起量子密钥获取请求的一方称为主动发起方,随后发起量子密钥获取请求的一方称为被动发起方。

在实际应用中,具有加密传输需求的一方通常是主动发起方,通过发起量子密钥获取请求,获取密钥序列并实现数据的加密传输;执行解密操作的一方通常是被动发起方,通过发起量子密钥获取请求,获取与主动发起方相同的密钥序列并对接收到的加密数据执行相应的解密操作。

本申请提供的量子密钥分发方法,可以在主动发起方对应的密钥管理程序中实施、也可以在被动发起方对应的密钥管理程序中实施,在下面的实施例中以在主动发起方对应的密钥管理程序中实施为例,对具体的实施方式进行说明。

请参考图2,其为本申请的一种量子密钥分发方法的实施例的流程图,所述方法包括如下步骤:

步骤201、接收来自请求方的量子密钥获取请求。

请求方需要获取量子密钥时,通常会向实施本方法的密钥管理程序(简称宿主程序)发送量子密钥获取请求,宿主程序就会相应地接收到所述请求。在具体应用中,本步骤可以有不同的实施方式。

如果请求方与宿主程序运行在同一个设备上,那么两者可以通过进程间通信(ipc)机制进行交互,例如:请求方通过发送消息的方式向宿主程序发出所述量子密钥获取请求,宿主程序通过解析接收到的消息可以获取该请求;如果请求方与宿主程序运行在不同的设备上,则两者可以通过彼此之间的网络连接进行交互,例如:请求方可以与宿主程序建立tcp数据连接,并通过该连接以http报文的形式向宿主程序发送量子密钥获取请求,宿主程序自然也可以通过该连接获取量子密钥获取请求。

所述量子密钥获取请求中,通常携带请求方希望获取的密钥序列的长度,即:本实施例所述的请求长度,以及用于区分不同请求方的标识信息。

步骤202、从为所述请求方分配的子密钥池中获取与请求长度相符的密钥序 列。

在实际应用中,请求方通常会根据自己的需求在一段时间内向宿主程序连续多次请求量子密钥,在本实施例中将所述一段时间称为一个密钥获取周期。在接收来自请求方的量子密钥获取请求时,如果尚未为所述请求方分配子密钥池,通常说明一个新的请求方启动了密钥获取周期,此时可以为所述请求方分配子密钥池,在后续接收到同一请求方的量子密钥获取请求时,则可以直接从已分配的子密钥池中获取密钥序列。优选地,考虑到子密钥池内的密钥序列的数量有限,而有些请求方对密钥的需求量相对比较大,因此在从子密钥池中获取密钥序列之前,还可以先判断子密钥池内是否有符合请求长度的密钥序列,并在没有时向子密钥池中添加密钥序列。上述处理过程可以包括如下所示的步骤202-1至步骤202-5,下面结合图3作进一步说明。

步骤202-1、判断是否已为所述请求方分配子密钥池,若否,执行步骤202-2,否则执行步骤202-3。

本步骤可以根据量子密钥获取请求中携带的请求方标识信息进行判断,如果已经存在与请求方标识信息对应的子密钥池,则说明所述量子密钥获取请求不是来自于一个新的请求方,宿主程序已经为其分配了子密钥池;反之,如果不存在与请求方标识信息对应的子密钥池,则说明所述量子密钥获取请求来自于一个新的请求方,宿主程序尚未为其分配子密钥池,因此执行步骤202-2分配子密钥池,否则可以执行步骤202-3。

步骤202-2、为所述请求方分配子密钥池。

执行到本步骤,说明接收到了新的请求方的量子密钥获取请求,为了在后续为所述请求方提供量子密钥时,减少对公共密钥池的竞争,本步骤为所述请求方分配其专用的子密钥池。

在具体实施时,宿主程序可以预先创建好若干个子密钥池,每个子密钥池都包含一系列可供分发的密钥序列,那么本步骤可以选取一个子密钥池,将其状态设置为“已分配”,并在所述请求方的标识信息与所选子密钥池之间建立起对应关系,从而就完成了为所述请求方分配子密钥池的操作。

优选地,考虑到在量子密钥获取请求大量并发的应用场景下,预先创建的子密钥池的数量可能无法满足需求,因此本实施例提供根据请求方的需求、动态分配子密钥池的优选实施方式,即:在接收到来自新请求方的量子密钥获取 请求后,从存储待分发密钥序列的指定密钥池中申请预设长度的密钥序列,并利用申请的密钥序列为所述请求方构建子密钥池,其中,所述预设长度大于所述请求长度。也即:通过申请大于所述请求长度的一大块密钥序列构建子密钥池,为响应本次以及后续的量子密钥获取请求做好准备。

所述存储待分发密钥序列的指定密钥池通常是指:公共密钥池。本步骤可以从公共密钥池中申请预设长度的密钥序列,并利用申请的密钥序列为所述请求方构建子密钥池。构建所述子密钥池可以采用不同的方式,例如:可以从公共密钥池中申请预设长度的密钥序列,并将存储所述密钥序列的部分公共密钥池,直接从整个公共密钥池中分离出来,作为子密钥池;也可以先根据预设长度额外申请一块内存作为子密钥池,然后将从公共密钥池中申请的密钥序列复制到所述子密钥池中也是可以的。

构建的子密钥池可以以密钥比特为基本单元,即:子密钥池中存储的是无结构的密钥比特流。在具体实施时,可以采用比特数组的数据结构实现所述子密钥池,即:将子密钥池中的密钥序列存储在所述比特数组中,数组中每个成员存储密钥序列中的一个密钥比特。

优选地,考虑到在很多应用场景中,请求方通常采用相对固定的加解密算法,因此向宿主程序请求的是固定长度的密钥序列,也即:请求方在一个密钥获取周期中所请求的密钥序列的长度都是相同的(所述请求长度都等于所述固定长度),为了能够进一步地快速对请求方的响应速度,本实施例提供以密钥块作为基本单元构建子密钥池的优选实施方式,其中每个密钥块包含的密钥序列的长度都与所述固定长度一致,采用这种方式,每次向请求方返回密钥序列时,可以直接从密钥池中获取一个密钥块即可,可以提高处理效率。

采用所述优选实施方式,本步骤可以先向公共密钥池申请所述预设长度的密钥序列,然后根据所述固定长度将所述申请的密钥序列分割成相应长度的密钥块,并以分割得到的密钥块为基本单元构建所述子密钥池。

在具体实施时,可以采用队列或者数组等数据结构实现所述子密钥池,以队列为例,可以将分割好的密钥块添加到队列中,即队列中的每个单元就是一个密钥块,通过队列的读指针和写指针实现对子密钥池的访问,例如:需要从子密钥池获取密钥序列时,直接返回读指针指向的密钥块即可,如果需要向子密钥池中添加密钥块,则直接将密钥块添加到写指针指向的单元中即可。

在具体应用中,本步骤通常仅在尚未为所述请求方分配子密钥池时执行,一旦分配了子密钥池,那么每次接收到来自所述请求方的量子密钥获取请求后,则无需执行本步骤,而是直接执行后续步骤202-3即可。

步骤202-3、判断所述子密钥池中是否存在符合所述请求长度的密钥序列,若不存在执行步骤202-4,否则执行步骤202-5。

为请求方分配的子密钥池中存储了待分发的密钥序列,每次从子密钥池中获取密钥序列返回给请求方后,子密钥池中的密钥序列的数量都会相应减少,为了避免执行错误的获取操作,因此在从子密钥池中获取密钥序列之前,可以先判断所述子密钥池中是否存在符合所述请求长度的密钥序列,若不存在则执行步骤202-4向子密钥池中添加密钥序列,否则执行步骤202-5获取密钥序列。

例如:对于采用比特数组实现子密钥池的实施方式,可以在每次从子密钥池获取密钥序列后,更新首个待分发密钥比特的下标值、并记录可供分发的密钥比特的长度,本步骤根据上述信息即可以判断出子密钥池中是否存在符合所述请求长度的密钥序列。

如果采用以密钥块作为基本单元构建子密钥池的优选实施方式,那么本步骤则判断所述子密钥池中是否存在包含所述固定长度的密钥序列的密钥块。以采用队列实现所述子密钥池为例,本步骤可以根据读写指针的位置关系判断是否还有可供分发的密钥块,如果没有(即队列为空),或者虽不为空,但是仅剩余一个包含密钥序列长度小于所述固定长度的不完整密钥块(由于所述预设长度不是所述固定长度的整数倍造成的碎片),那么都说明子密钥池已经无法满足本次的量子密钥获取需求,可以执行步骤202-4,否则执行步骤202-5。

步骤202-4、从存储待分发密钥序列的指定密钥池中申请预设长度的密钥序列,并将申请的密钥序列添加到所述子密钥池中。

执行到本步骤,说明为所述请求方分配的子密钥池中已经没有符合请求长度的密钥序列,需要向子密钥池中添加密钥序列,因此本步骤可以从存储待分发密钥序列的指定密钥池中申请预设长度的密钥序列,并将申请的密钥序列添加到所述子密钥池中。其中所述指定密钥池通常是指:公共密钥池。

例如,对于采用比特数组实现子密钥池的实施方式,可以将从公共密钥池申请的密钥序列中的每个密钥比特分别存储在所述数组的各成员中,并相应更新首个待分发密钥比特的下标值、以及记录可供分发的密钥比特的长度。

如果采用以密钥块作为基本单元构建子密钥池的优选实施方式,那么本步骤可以根据所述固定长度将所述申请的密钥序列分割成相应长度的密钥块,并将分割得到的密钥块添加到所述子密钥池中。以采用队列实现所述子密钥池为例,本步骤可以根据写指针将分割好的密钥块依次添加到队列中,并相应调整写指针。

步骤202-5、从所述子密钥池中获取与请求长度相符的密钥序列。

本步骤从为所述请求方分配的子密钥池中获取与请求长度相符的密钥序列,对于采用密钥比特流的形式构建的子密钥池,可以从待分发的密钥比特流中截取所述请求长度的密钥序列。例如,如果采用比特数组实现子密钥池,那么可以从首个待分发密钥比特的下标值开始,根据所述请求长度依次读取相应数组成员存储的密钥比特,并将密钥比特组合成所述密钥序列。此后可以相应更新首个待分发密钥比特的下标值、以及可供分发的密钥比特的长度。

如果采用以密钥块作为基本单元构建子密钥池的优选实施方式,则可以直接从为所述请求方分配的子密钥池中获取一个密钥块,并将所述密钥块包含的密钥序列作为待返回给所述请求方的密钥序列。以采用队列实现所述子密钥池为例,本步骤可以读取读指针指向的密钥块中的密钥序列,作为待返回的密钥序列,然后将读指针指向队列中下一个密钥块,为下一次读取密钥块做好准备。由此可见,采用密钥块作为基本单元构建子密钥池的方式,由于采用了结构化的存储方式,在获取密钥序列时无需逐一读取密钥比特,而是直接以密钥块为单位读取即可,可以提高处理效率。

至此,通过步骤202-1至步骤202-5,详细描述了从子密钥池中获取密钥序列的实施过程。需要说明的是,在上面描述的实施过程中,都是以公共密钥池作为指定密钥池、并从中申请密钥序列,在此基础上,本实施例还提供在释放子密钥池时回收剩余密钥资源的实施方式(请参见步骤203中的相关文字说明),因此在步骤202-2和202-4需要从指定密钥池中申请密钥序列时,可以优先从回收密钥池中申请,这样可以使闲散密钥资源也能够得到有效的利用,避免浪费密钥资源。

具体实现可以为:在从存储待分发密钥序列的指定密钥池中申请预设长度的密钥序列之前,先判断所述回收密钥池中是否存在所述预设长度的密钥序列;若存在,将所述回收密钥池作为所述指定密钥池;否则,将公共密钥池作为所 述指定密钥池,然后再执行从指定密钥池中申请预设长度的密钥序列的操作。

步骤203、将所述密钥序列返回给所述请求方。

本步骤将在步骤202获取的密钥序列返回给所述请求方,在具体实施时,可以根据具体情况,通过ipc机制或者网络传输等方式将所述密钥序列返回给所述请求方。至此,完成了本次的请求响应过程,请求方也获取了所需的密钥序列。

在具体应用中,为了保障整个系统的长期稳定运行,在所述请求方停止获取密钥之后(即:密钥获取周期结束),还可以执行后处理操作,释放为所述请求方分配的子密钥池。

在具体实施时,可以采用不同的方式检测所述请求方是否停止获取密钥,下面列举两种可能的方式:

1)对于请求方与宿主程序运行于不同设备的应用场景,如果两者之间通过tcp数据连接进行交互,那么如果请求方通过tcp数据连接向宿主程序发送了断开所述数据连接的指令,宿主程序根据接收到的指令即可判断出所述请求方停止了获取密钥的操作。

2)宿主程序如果在预设时间段内没有接收到来自所述请求方的量子密钥获取请求,那么也可以判定所述请求方停止了获取密钥的操作。在具体实施时,可以根据所述预设时间段为所述子密钥池建立一个定时器,每当接收到来自所述请求方的量子密钥获取请求,就重置定时器,如果发生定时器超时的情况,则可以判定所述请求方停止了获取密钥的操作。

在检测到所述请求方停止获取密钥的情况下,可以释放为所述请求方分配的子密钥池。如果在分配子密钥池时采用的是预先创建好的子密钥池,那么可以将该子密钥池的状态设置为“未分配”,从而宿主程序可以为该子密钥池填充待分发的密钥序列并分配给其他请求方;如果在分配子密钥池时申请了额外的内存空间,那么此时可以释放子密钥池占据的内存空间,从而可以节省对内存的占用,避免出现内存溢出的情况;如果子密钥池是从公共密钥池分离出来的部分密钥池,那么可以将子密钥池归还到公共密钥池中,由宿主程序将子密钥池纳入公共密钥池统一进行管理,这样可以使公共密钥池规模保持相对平衡的状态,而不会一直缩小导致无法对外提供服务。

优选地,考虑到在释放子密钥池时,子密钥池中通常还有剩余的密钥序列, 即:尚未分发的密钥序列,为了避免浪费密钥资源,本实施例还提供回收剩余密钥序列的优选实施方式。具体实现可以为:宿主程序可以在启动或者初始化的过程中,申请一块内存空间作为回收密钥池,在检测到所述请求方停止获取密钥之后,首先将为所述请求方分配的子密钥池中的剩余密钥序列添加到回收密钥池中,然后再释放所述子密钥池。

例如,对于采用比特数组实现子密钥池的实施方式,可以从首个待分发密钥比特的下标值开始,根据记录的可供分发的密钥比特的长度,依次读取每个数组成员存储的密钥比特,从而得到剩余的密钥序列,并将其添加到回收密钥池中。

如果采用以密钥块作为基本单元构建子密钥池的优选实施方式,则可以将子密钥池中剩余密钥块包含的密钥序列添加到回收密钥池中。以采用队列实现所述子密钥池为例,可以依次读取位于读指针和写指针之间的各密钥块中的密钥序列,并将各密钥序列添加到回收密钥池中。

在实际应用中实施本方法时,可以为每个请求方分配子密钥池,而当每个请求方停止获取密钥时,为其分配的子密钥池中通常都会有剩余的密钥序列,因此采用上述回收剩余密钥序列的优选实施方式,可以将每个子密钥池中的剩余密钥序列集中起来,从而为充分利用密钥资源提供可能性。特别是,在前面描述的步骤202-2和202-4需要申请密钥序列时,可以先向回收密钥池申请,从而使得闲散的密钥资源依然可以得到有效的利用,避免了对密钥资源的浪费。

至此,通过步骤201-步骤203对本实施例提供的量子密钥分发方法的实施方式进行了详细说明。需要说明的是,上述实施例重点描述了在主动发起方对应的密钥管理程序中的实施方式,本申请提供的量子密钥分发方法也可以在被动发起方对应的密钥管理程序中实施,即:在接收来自所述被动发起方的量子密钥获取请求后,可以从为所述被动发起方分配的子密钥池中获取与请求长度相符的密钥序列,并将所述密钥序列返回给所述被动发起方。同样,当所述被动发起方请求固定长度的密钥序列时,为所述被动发起方分配的子密钥池也可以采用以密钥块为基本单元的优选实施方式,此处不再赘述。

在主动发起方或者被动发起方对应的密钥管理程序中实施本申请提供的方法,其不同之处在于,对于被动发起方对应的密钥管理程序来说,其为被动发起方分配的子密钥池,是根据主动发起方对应的密钥管理程序发送的同步请求 进行分配以及维护的。下面对同步过程作进一步说明。

从一个完整的量子密钥分发系统的角度来说,主动发起方和被动发起方获取的密钥序列应该是完全一致的,才能保证双方实现正确的加解密功能。为了保证这一点,在现有技术中,主动发起方对应的密钥管理程序在执行与密钥池相关的操作时,通常都需要与对方(即:被动发起方)的密钥管理程序进行必要的同步操作。

本申请提供的量子密钥分发方法在有效地减少对公共密钥池的竞争、提高响应速度的基础上,在具体实施过程中同样需要保持双方密钥池的同步,下面以密钥管理程序首次接收到主动发起方的量子密钥获取请求为例进行说明,为了简化描述,将主动发起方对应的密钥管理程序称为alice,将被动发起方对应的密钥管理程序称为bob。

alice接收到量子密钥获取请求后,可以为主动发起方分配子密钥池,并采用发送同步请求的方式与bob进行同步,即:bob也执行为被动发起方分配子密钥池的相同操作;alice从子密钥池中获取密钥序列的操作,也可以采用发送同步请求的方式与bob进行同步,即:bob也从子密钥池中选取相同的密钥序列,那么当bob接收到被动发起方的量子密钥获取请求后,就可以将子密钥池中的、已与alice一侧同步过的密钥序列返回给被动发起方,从而保证了主动发起方和被动发起方获取相同的密钥序列。

在具体实施时,也可以对上面给出的实施方式进行变更,可以将上面描述的两次同步操作进行更为细化的拆分或者合并为一次,例如:alice仅在从子密钥池中获取密钥序列时与bob进行一次同步操作,通知bob采用相同的方式分配子密钥池并选取密钥序列,这样处理也是可以的。此处列出的、以及其它可能的实施方式都属于同步过程的各种具体实现方式,只要能够保证双方的密钥池同步就都是可行的。

上面以alice首次接收到主动发起方的量子密钥获取请求为例对同步过程进行了说明,alice在执行其他与密钥池相关的操作时也都可以与bob采用类似的方式进行同步,例如,在从公共密钥池申请密钥序列添加到子密钥池时、释放子密钥池时、以及将子密钥池中的剩余密钥序列添加到回收密钥池时,都可以与bob进行同步,从而保证双方的密钥池始终处于同步的状态。

综上所述,本申请提供的量子密钥分发方法,由于为请求方分配了与之对 应的子密钥池,因此在接收到来自请求方的密钥获取请求后可以从所述子密钥池中获取密钥序列,而不必从公共密钥池中获取密钥序列,相当于将对公共资源的竞争转换为对私有资源的访问,在密钥获取请求大量并发的应用场景下,可以大大减少对公共密钥池的竞争,充分地利用多线程和/或异步处理的优势,提高密钥管理程序的并发处理能力,从而提升其服务能力和服务质量。

在上述的实施例中,提供了一种量子密钥分发方法,与之相对应的,本申请还提供一种量子密钥分发装置。请参看图4,其为本申请的一种量子密钥分发装置的实施例的示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。

本实施例的一种量子密钥分发装置,包括:请求接收单元401,用于接收来自请求方的量子密钥获取请求;密钥序列获取单元402,用于从为所述请求方分配的子密钥池中获取与请求长度相符的密钥序列;密钥序列返回单元403,用于将所述密钥序列获取单元获取的密钥序列返回给所述请求方。

可选的,所述请求接收单元接收到请求固定长度密钥序列的量子密钥获取请求;所述密钥序列获取单元所采用的子密钥池包括:以密钥块为基本单元的子密钥池,所述密钥块包含的密钥序列的长度与所述固定长度一致;

所述密钥序列获取单元,具体用于从为所述请求方分配的子密钥池中获取密钥块,并将所述密钥块包含的密钥序列作为待返回给所述请求方的密钥序列。

可选的,所述装置包括:

分配判断单元,用于在所述请求接收单元接收到量子密钥获取请求之后,判断是否已为请求方分配子密钥池,若是则触发所述密钥序列获取单元工作;

子密钥池分配单元,用于当所述分配判断单元的输出为否时,为所述请求方分配子密钥池,并触发所述密钥序列获取单元工作。

可选的,所述子密钥池分配单元,具体用于从存储待分发密钥序列的指定密钥池中申请预设长度的密钥序列,并利用申请的密钥序列为所述请求方构建子密钥池,其中,所述预设长度大于所述请求长度。

可选的,所述子密钥池分配单元,具体用于从存储待分发密钥序列的指定密钥池中申请预设长度的密钥序列,根据固定长度将所述申请的密钥序列分割 成相应长度的密钥块,并以分割得到的密钥块为基本单元构建所述子密钥池。

可选的,所述装置包括:

长度判断单元,用于判断所述子密钥池中是否存在符合所述请求长度的密钥序列,并在是时触发所述密钥序列获取单元工作;

密钥序列添加单元,用于当所述长度判断单元的输出为否时,从存储待分发密钥序列的指定密钥池中申请预设长度的密钥序列,并将申请的密钥序列添加到所述子密钥池中,随后触发所述密钥序列获取单元工作。

可选的,所述请求接收单元接收到请求固定长度密钥序列的量子密钥获取请求;所述密钥序列获取单元所采用的子密钥池包括:以密钥块为基本单元的子密钥池,所述密钥块包含的密钥序列的长度与所述固定长度一致;

所述长度判断单元,具体用于判断所述子密钥池中是否存在包含所述固定长度的密钥序列的密钥块,并在是时触发所述密钥序列获取单元工作;

所述密钥序列添加单元,具体用于当所述长度判断单元的输出为否时,从存储待分发密钥序列的指定密钥池中申请预设长度的密钥序列,根据所述固定长度将所述申请的密钥序列分割成相应长度的密钥块,并将分割得到的密钥块添加到所述子密钥池中,随后触发所述密钥序列获取单元工作。

可选的,所述装置包括:

停止获取检测单元,用于当所述密钥序列返回单元将密钥序列返回给请求方后,检测所述请求方是否停止获取密钥;

子密钥池释放单元,用于当所述停止获取检测单元检测到请求方停止获取密钥后,释放为所述请求方分配的子密钥池。

可选的,所述停止获取检测单元,具体用于若接收到所述请求方发送的断开数据连接的指令,则判定所述请求方停止获取密钥。

可选的,所述停止获取检测单元,具体用于如果在预设时间段内没有接收到来自所述请求方的量子密钥获取请求,则判定所述请求方停止获取密钥。

可选的,所述装置包括:

密钥序列回收单元,用于当所述停止获取检测单元检测到所述请求方停止获取密钥后,将所述子密钥池中剩余的密钥序列添加到回收密钥池中,并触发所述子密钥池释放单元工作。

可选的,所述装置包括:

停止获取检测单元,用于在所述密钥序列返回单元将密钥序列返回给请求方后,检测所述请求方是否停止获取密钥;

密钥序列回收单元,用于在所述停止获取检测单元检测到所述请求方停止获取密钥后,将所述子密钥池中剩余的密钥序列添加到回收密钥池中;

子密钥池释放单元,用于在所述密钥序列回收单元工作完毕后,释放为所述请求方分配的子密钥池;

所述装置还包括:

指定密钥池设置单元,用于在所述子密钥池分配单元或者所述密钥序列添加单元工作之前,判断所述回收密钥池中是否存在所述预设长度的密钥序列,若存在,将所述回收密钥池作为所述指定密钥池,否则,将公共密钥池作为所述指定密钥池。

本申请虽然以较佳实施例公开如上,但其并不是用来限定本申请,任何本领域技术人员在不脱离本申请的精神和范围内,都可以做出可能的变动和修改,因此本申请的保护范围应当以本申请权利要求所界定的范围为准。

在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。

1、计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒 体(transitorymedia),如调制的数据信号和载波。

2、本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1