背景技术
在计算机信息技术迅速发展的背景下,信息技术对信息安全性的要求日益增加。其中,连续变量量子密钥分发因其具有物理的无条件安全性而成为通信技术的一个重要分支,进而,连续变量量子密钥分发技术引起了广泛关注,因为其既能在物理上保证通信的无条件安全性,又相比与离散变量量子密钥分发技术在理论上具有更高的通信速率和效率。目前连续变量量子密钥分发吸引了世界上许多研究机构对其理论和应用技术进行了深入的研究。
然而,CV-QKD系统的主要瓶颈在于数据后处理阶段:一方面数据协商时的协商效率限制了CV-QKD系统的通信距离,另一方面由于协商算法计算量巨大而计算缓慢从而限制了CV-QKD系统的密钥速率。
在连续变量量子密钥分发系统中,由于量子信号十分微弱,在经过长距离的传统光纤传输后,其信噪比通常处于很低的水平。为了在极低的信噪比环境中从原始信息中提取密钥,必须采用性能逼近香农限的译码算法。出于这种考虑,人们通常采用低密度奇偶校验码(LDPC)来进行数据协商。
在传统的LDPC码应用中,LDPC具有多种译码方式,如置信转播(BP,BeliefPropagation)算法、最小和(Min-Sum BP)算法、归一化最小和(Normalized Min-Sum)算法以及偏置最小和(Offset Min-Sum)算法。这些算法性能各异,复杂度也不同,BP算法具有较高的复杂度但性能最佳,而简化的BP算法则通过一些近似操作降低复杂度,但也牺牲了部分性能。而在CV-QKD系统中,用于协商的LDPC编译码方法与传统LDPC编译码原理并不完全一样:传统LDPC码在发送端使用生成矩阵在原始信息中增加校验节点,并在译码阶段根据变量节点和校验节点之间反复的信息传递实现纠错译码;而在CV-QKD系统中,发送端并不会对原始信息进行编码,即接收端的接收数据各点之间相互独立,并不存在校验节点。为实现纠错译码功能,发送端还需要发送一串用于校验的校验信息(Syndrome,通常由随机密钥串与校验矩阵相乘产生)。接收端根据接收到的连续变量,使用BP算法使接受信息的Syndrome根据发送端的Syndrome进行纠错,并最终提取密钥。
尽管编译码原理不同,译码器的译码结构确是类似的,传统LDPC译码是在校验节点和变量节点之间不断传递信息进而实现纠错,CV-QKD中的LDPC译码也是通过在接收数据的不同节点之间不断传递信息进而提取密钥,因此译码过程比较类似。
在传统的译码方式实现上,对于H矩阵的运算主要有两种方式:一种是不改变H矩阵的结构,每次运算均使用矩阵运算。另一种是先记录H矩阵中元素“1”的位置,在运算过程中只遍历元素“1”的位置。前一种方法实现简单,但是运算量大,因为H矩阵是稀疏矩阵,其中元素“1”所占的比例往往小于1%。而后一种方法虽然运算量小,但是每次根据所记录的元素“1”的位置来遍历参与运算的其它变量的值引入了更多循环操作,使得算法复杂度提高。
另一方面,传统的译码方式在译码过程中将H矩阵和其它中间变量都按照二维矩阵的形式来处理,两个维度不仅浪费存储空间,也不利于并行计算。
为了进一步减少译码过程中不必要的计算量和其它操作,我们将译码过程中的所有变量都使用一维数组表示,其中H矩阵用一个一维数组表示其中元素“1”的位置。进一步,将译码过程用一维数组实现后,可以很方便地将不同的译码过程并行处理,即:将不同的列重新组成一个矩阵,其中每一列代表一次译码,从而进一步提高译码速率。
发明内容
针对现有技术中的缺陷,本发明的目的是提供一种连续变量量子密钥分发系统中的高速数据协商方法,是一种通过优化现有的CV-QKD系统中数据协商阶段的LDPC译码算法从而大幅提高协商速率的方法。
根据本发明提供的一种适合连续变量量子密钥分发的高速秘密协商方法,包括:
步骤A:变量一维化处理步骤;
步骤B:多帧数据并行处理步骤;
其中:
所述变量一维化处理步骤,是指对译码过程中的二维矩阵一维化处理;
所述多帧数据并行处理步骤,是指在变量一维化处理的基础上,将多个数据帧并列后实现并行处理。
优选地,所述步骤A包括如下步骤:
步骤A1:在译码开始前对校验矩阵H、译码初始信息L(Ci)、校验子Syn进行一维化处理;
步骤A2:译码(指传统译码方法)中所涉及的矩阵运算均通过一维的下标调用实现;
其中,所述下标调用的过程为:根据当前运算所对应的原二维矩阵的行、列位置取出对应的操作数,并将运算结果根据下标值保存在一维向量的相应位置。
所述步骤B包括如下步骤:
步骤B1:通过步骤A一维化处理后通过将不同数据帧并排来实现并行译码,以提高译码速度。
优选地,在所述矩阵运算过程中的下标调用无需循环判断来确定位置,而是通过顺序存储使二维矩阵中的行列位置与一维数组中的保存位置一一对应。
优选地,通过各帧并排实现的并行计算为单线程并行计算,而非利用多线程实现的并行计算。
优选地,所述步骤A2包括如下步骤:
步骤A201:首先将H矩阵向量化,使用一维向量来记录H矩阵中元素1的位置,其中,一维向量第i位的数字k表示从H矩阵中的左上角开始按列顺序计数,数到第i个元素1时计数为k;同时用另外两个一维向量R和C分别记录H矩阵中对应的第i个元素1所在的行和列;
步骤A202:对于译码过程中所涉及的中间变量也用一维向量表示,其中,由于事先已经记录H矩阵中每个元素1的行列位置,这样在中间变量运算时,根据此次运算是与H矩阵行相关的运算或者是与H矩阵列相关的运算而分别调用坐标向量R和C进行运算。
优选地,为了实现多帧数据并行处理,所述适合连续变量量子密钥分发的高速秘密协商方法包括如下步骤:
首先将译码初始信息L(Ci)用一维向量表示(假设用行向量表示);
在开始译码前,连续读取S帧L(Ci)数据并按行并列,组成一个尺寸为S*N的矩阵,N为每帧L(Ci)数据的长度;
在译码过程中,由于H矩阵的结构对于每次译码过程是相同的,对一维向量第i位的操作能够扩展到对尺寸为S*N的矩阵第i列的操作,即每一个操作的操作对象由单帧译码时的一个元素变成多帧译码时的同一列元素;其中,H矩阵是指LDPC码的校验矩阵。
其次,在译码过程中,需要对每一个中间变量进行相同操作,即都使用S行的矩阵表示,每次操作也都以列为最小单位,由此即可实现多帧并行的译码操作。
与现有技术相比,本发明具有如下的有益效果:
1、变量一维化处理以及多帧数据并行化处理。其中变量一维化处理是指将校验矩阵、原始信息、译码中间变量等需要用二维矩阵表示的变量使用一维向量表示。多帧数据并行化处理是指在变量一维化处理的基础上对多帧数据同时处理。
2、本发明能够大幅度节省运算资源和存储资源,并最终大幅提高译码速度和系统密钥率。
具体实施方式
下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进。这些都属于本发明的保护范围。
本发明通过调整CV-QKD系统中数据后处理阶段LDPC译码器的译码结构实现了高速的LDPC译码,从而提高了系统的密钥率,在使用GPU(Graphic Processing Unit)做运算的情况下能够达到25Mbit/s的密钥率,所使用的译码算法为BP(Belief poporgation,置信传播)算法。
为实现上述目的,本发明采用的技术方案如下:
首先将H矩阵向量化,使用一维向量来记录H矩阵中元素“1”的位置,其中,一维向量第i位的数字k表示从H矩阵中的左上角开始按列顺序计数,数到第i个元素“1”时计数为k。因此表示H矩阵的一维数组中数字是递增的。同时用另外两个一维向量R和C记录H矩阵中对应的第i个“1”所在的行和列,如假设一个码率R=0.5的(6,3)LDPC码的H矩阵为:
则将其用一维向量H'表示为:
H'=[2,4,9,10,12,13,14,17,18] (2)
同时求得其行列信息为:
R=[2,1,3,1,3,1,2,2,3]
(3)
C=[1,2,3,4,4,5,5,6,6]
与H矩阵的“一维化”类似,译码过程中所涉及的其它中间变量也用一维向量表示,由于事先已经记录H矩阵中每个元素“1”的行列位置,这样在中间变量运算时,可以根据此次运算是与H矩阵行相关的运算或者是与H矩阵列相关的运算而分别调用坐标向量R和C进行运算。
对于初始信息L(Ci),若要将其与H矩阵的每行做乘法,则:
若按照传统全部遍历的算法,需要通过两层循环对每个元素进行乘法操作。
若按照传统的先记录行列位置的做法,其算法为通过K次循环(K为事先记录的H矩阵中元素“1”的个数),每次循环中调用事先记录的元素“1”的行、列位置计算结果,并根据行、列信息在相应位置上保存计算结果。
若按照本文一维向量化的方法,其算法同样需要K次循环,但由于变量已经经过向量化处理,每次循环中无需再查询行、列信息,而只要依次按照向量的下标对每个元素进行乘法操作即可,不仅节约了查询行列位置的时间,而且也大幅节约了存储空间。
与全部遍历的算法相比,向量化算法的循环次数不到全部遍历算法的1%(即H矩阵中元素“1”的比例)。
与行列遍历算法相比,向量化算法的循环次数虽然一样,但却只需要K个存储空间,而行列遍历算法则需要M*N个存储单元(未赋值的位置初始化为“0”)。表1列出了3种方法所需要进行的循环次数以及所需的存储空间大小,从中可以看出3种方法之间的差别:
表1.三种译码方案的资源开销
方法 |
循环次数 |
存储空间大小 |
全部遍历 |
M*N |
M*N |
行列遍历 |
K |
M*N |
向量遍历 |
K |
K |
另一方面,将H矩阵以及中间运算使用一维向量表示后,可以进一步实现不同数据帧的并行译码。
所述将不同数据帧并排来实现并行译码,具体过程为:
首先将初始译码信息L(Ci)用一维向量表示(假设用行向量表示)。
在开始译码前,连续读取多帧L(Ci)数据,若计划实现S帧数据的并行译码,则读取S帧L(Ci)并将其按行并列,组成一个S*N的矩阵:
在译码过程中,由于H矩阵的结构对于每次译码过程是相同的,对一维向量第i位的操作可以扩展到对S*N矩阵第i列的操作,即每一个操作的操作对象由单帧译码时的一个元素变成多帧译码时的同一列元素。
其次,在译码过程中,需要对每一个中间变量进行相同操作,即都使用S行的矩阵表示,每次操作也都以列为最小单位。由此即可实现多帧并行的译码操作。
表2列出了并行计算S帧数据时三种方法所需的资源开销:
表2.处理S帧数据时三种译码方案的资源开销
方法 |
循环次数 |
存储空间大小 |
全部遍历 |
M*N*S |
M*N*S |
行列遍历 |
K*S |
M*N*S |
向量遍历 |
K |
K*S |
进一步地,本实施例提供一种CV-QKD系统数据后处理阶段快速LDPC译码的算法实现方案,使用Matlab环境实现,具体步骤如下:
1)CV-QKD中一个标准的LDPC BP译码器需要三个输入矩阵:校验矩阵H、初始信息L(Ci)以及校验信息Syn。其中H矩阵的尺寸为M*N且M小于N。L(Ci)为根据接受码字y确定的初始译码信息:
其中,L(Ci)表示所确定的初始信息,yi表示接收符号,σ表示估计的信道噪声方差。
若将S帧数据并行译码,则可以组成一个S*N大小的矩阵(并行译码的详细流程在附图中给出,下面仅以单帧译码为例)。
2)译码第一步需要将H矩阵一维化:先确定H矩阵中元素“1”的数量,记为K,然后记录每个元素“1”所在的行位置和列位置,分别用变量R和C存储,两者均为长度是K的一维向量。同时初始译码信息L(Qij)为:
L(Qij)=L(Ci),i∈Rj
其中,L(Qij)表示初始译码信息,Rj表示H矩阵第j行中所有元素“1”的下标集合,即L(Qij)为H矩阵每行均乘以L(Ci)。由于H矩阵非0元素全为1,因此L(Qij)只是L(Ci)按照H矩阵中元素“1”所在的列信息重新排序,即一维化操作只需将L(Ci)的元素按照H矩阵的分布进行排列,运算完成后会得到长为K的L(Qij)向量。
3)接着开始迭代译码:第一步需要计算变量节点到校验节点的信息L(Rij),
其中,L(Rij)表示由变量节点到校验节点的信息,S(Zj)为校验信息Syn经BPSK编码后所得的序列,L(Qi'j)表示前面步骤所确定的译码信息(首次循环时为译码初始信息,后续迭代时为上一次迭代所计算得到的校验节点向变量节点传递的信息)。在一维化处理中,先对L(Qij)中每个元素做tanh(x/2)操作,再将每个元素替换为其所在行除自身外所有其余元素的乘积,再按照所在列乘以S(Zj)的对应位。最后做2·tanh-1(x)操作后即可得到L(Rij)。其中像计算tanh(x/2)这种行列无关的运算就免除了遍历操作,因为一维向量中记录的只有原H矩阵中的非0元素,因此无需坐标遍历或判断当前元素是否为非0元素。
4)译码第二步需要更新校验节点到变量节点传递的信息L(Qij),其元素为L(Rij)中每个元素所在行除该元素外所有信息求和后加上初始信息L(Ci)在该列的值:
其中,L(Qij)表示校验节点到变量节点的信息,L(Rij')表示前一步计算所得的变量节点到校验节点的信息;
再计算判决信息L(qi):
其中,L(qi)表示计算得到的判决信息;
5)至此便完成了一次迭代操作,对L(qi)进行0-1判决即可获得最新更新的密钥序列,将其与Syn进行比较后可以判断是否已经正确译码,否则返回步骤(3)继续进行迭代。
经过以上过程,便可以通过一维变量对一帧数据进行译码,或者将多帧数据帧并排成二维矩阵进行译码,并能够较传统的译码方式获得很大的速度提升。经测试,当每帧数据长度为N=10000,同时对500帧数据进行并行计算并使用GPU运算时可以使译码速度达到25Mbit/s。
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变形或修改,这并不影响本发明的实质内容。