一种基于动态变长码的平台数据加密方法和装置与流程

文档序号:11234374阅读:607来源:国知局
一种基于动态变长码的平台数据加密方法和装置与流程

本发明涉及安全验证领域,具体涉及一种基于动态变长码的平台数据加密方法和装置。



背景技术:

随着计算机应用的普及和internet的迅速发展,社会机密和财富越来越高度地集中于计算机系统,使所有这些计算机互联成为一个全球的通信网络。由于internet的前身是以政府机关、研究所和大学等科研机构为主构成的局域网,它上面的应用程序在安全性方面考虑很少,所以这种建立在tcp/ip标准协议上的开放性网络在安全方面存在着先天不足。因为在网络中很容易进行信息的截取、监听和伪造,人们不愿意在网络中传输有关金融或者法律方面的敏感信息。随着www、java等技术的推动,internet越来越具有商业价值,越来越多的公司和个人希望能通过internet进行网上电子商务和电子金融,这也对网络的安全性提出了更高的要求,所以只有在技术上先解决了安全性问题,才有可能实现家中购物、无纸商贸等理想,internet本身也才能更加迅速、健康地发展。因此计算机系统和计算机网络成了犯罪分子进性破坏活动的主要目标之一。对数据进行加密处理使得犯罪分子无法理解和利用机密数据,是防止破坏活动的有效手段,因此,密码学近二十年获得迅速发展,成了计算机科学的一个重要分支。

密码学的发展历史大致可划分为三个阶段:

第一个阶段为从古代到1949年。这一时期可看作是密码学的前夜阶段,这段时期的密码技术可以说是一种艺术,而不是一种学科,密码学专家常常是凭借直觉和信念来进行密码设计和分析,而不是推理证明。

第二阶段为从1949年到1975年。1949年shannon发表的“保密系统的信息理论”一文为私钥密码系统建立了理论基础,从此密码学成为一门学科,但密码学直到今天仍具有艺术性,是具有艺术性的一门学科。

第三阶段为1976年到至今。1976年美国斯坦福大学的博士生w.diffie和他的导师m.e.hellman发表的论文“密码学的新方向”引起了密码学上的一场革命。他们首次证明了在发送端和接收端无密钥传输的保密通信是可能的,从而开创了公钥密码学的新纪元。由信息科学、计算机科学和量子力学结合而成的新的量子信息科学正在建立,量子技术在信息科学方面的应用导致了量子计算机、量子通信和量子密码研究热潮的兴起。量子密码的基本依据是量子力学的不确定性原理和量子态的不可克隆原理,它是基于非数学原理的密码。量子密码具有可证明的安全性,同时还能对窃听行为方便地进行检测。这些特性使得量子密码具有其他密码所没有的优势,因而量子密码引起国际密码学界和物理学界的高度重视。混沌“chaos”是一种复杂的非线性非平衡动力学过程。由于混沌序列是一种具有良好随机性的非线性序列,有可能构成新的序列密码,因此引起各国密码学者高度重视。

随着计算机硬件性能的不断提升,现有的密码体系将受到强大的冲击。因此,对加密算法的研究和改进,具有很重大的现实意义。



技术实现要素:

至少部分的解决现有技术中存在的问题,本发明提出一种基于动态变长码的平台数据加密方法,包括:

获取待加密的平台数据,作为明文m;

明文m经过预处理p后,生成待加密明文dm;

根据密钥k由加密指令产生器g生成动态加密算法的指令序列a;

指令序列a按照加密器r指定的规则对dm进行加密,得到最终的密文c;

其中,明文m经过预处理p后,生成待加密明文dm具体包括:

p1:用伪随机数发生器r_n,生成两段随机序列rs和s,r_n的随机种子的共同决定因素包括:密钥k、系统时间t和明文m;

其中rs的长度由m决定,是一个动态变长码;s是随机标志位,用作分界标识;

p2:将s追加到m;

p3:将带有标志位的明文与rs做异或运算,打乱明文的规律,运算后得到的随机明文rs_m;

p4:将rs_m、s、rs、s顺次连接,组成待加密明文dm,预处理过程结束。

其中,根据密钥k由加密指令产生器g生成动态加密算法的指令序列a具体包括:

g1:用密钥k初始化伪随机数发生器r_n,用所产生的伪随机序列1决定满秩矩阵集中每一个满秩矩阵的尺寸;

g2:重新用密钥k初始化r_n,得到随机序列2,根据步骤g1初始化的满秩矩阵尺寸,用随机序列2逐个地构造矩阵;每构造一个矩阵,先用密钥k对其做异或运算,然后对所得结果进行判定,如果不是满秩矩阵,则进行重新构造,重复这一过程,直到判定结果为真,将构造的满秩矩阵加入到动态加密算法的满秩矩阵集em_set中,继续构造下一个满秩矩阵;不断重复上述过程,直到em_set中的所有满秩矩阵都已经构造完毕;

g3:由密钥*k初始化伪随机数发生器r_n,得到随机序列3,由r_n产生的随机序列3、em_set和待加密明文共同作用,生成加密指令序列a。

所述生成加密指令序列a的具体方法包括:

对于指令序列a的第一条指令,首先由r_n产生的随机序列3在待加密明文的前f个字节中随机选择两个字节,由这两个字节的具体数值来决定选择em_set中的第几条指令;其中f是预定好的;

对于第n(n>1)条指令,则是根据r_n产生的随机序列3,从待加密明文的前l个字节中随机选取两个字节来决定;其中,l是由前n-1条指令来决定的。

指令序列a按照加密器r指定的规则对dm进行加密,得到最终的密文c具体包括:

r0:由密钥*k计算a中指令的变换规则,变换规则即进行多少次幂运算,按照变换规则对a中指令进行幂运算,运算后的指令序列就是真正用于加密的指令序列aj;

r1:将待加密明文dm按照指令序列aj中指令的大小进行分块;

r2:利用指令序列aj中加密指令对待加密明文dm进行加密。

加密方法具体包括:

将待加密明文dm按照指令序列aj一次所能加密的明文块长度分成不等的n块,每一块对应一条指令,因此加密一共使用了n块指令;当最后一块明文长度小于指令要求的大小时,用“0”补齐;

将每个指令对每个明文块加密后得到的密文块相连接,得到最终加密的密文c。

本发明还提出一种基于动态变长码的平台数据加密装置,包括:

明文获取单元,用于获取待加密的平台数据,作为明文m;

预处理单元,用于对明文m经过预处理p后,生成待加密明文dm;

指令产生器单元,用于根据密钥k由加密指令产生器g生成动态加密算法的指令序列a;

加密单元,用于由指令序列a按照加密器r指定的规则对dm进行加密,得到最终的密文c;

其中,预处理单元具体包括:

随机序列生成子单元p1:用伪随机数发生器r_n,生成两段随机序列rs和s,r_n的随机种子的共同决定因素包括:密钥k、系统时间t和明文m;

其中rs的长度由m决定,是一个动态变长码;s是随机标志位,用作分界标识;

标识子单元p2:将s追加到m;

随机明文子单元p3:将带有标志位的明文与rs做异或运算,打乱明文的规律,运算后得到的随机明文rs_m;

待加密明文生成子单元p4:将rs_m、s、rs、s顺次连接,组成待加密明文dm,预处理过程结束。

其中,指令产生器单元具体包括:

满秩矩阵尺寸决定子单元g1:用密钥k初始化伪随机数发生器r_n,用所产生的伪随机序列1决定满秩矩阵集中每一个满秩矩阵的尺寸;

满秩矩阵构造子单元g2:重新用密钥k初始化r_n,得到随机序列2,根据步骤g1初始化的满秩矩阵尺寸,用随机序列2逐个地构造矩阵;每构造一个矩阵,先用密钥k对其做异或运算,然后对所得结果进行判定,如果不是满秩矩阵,则进行重新构造,重复这一过程,直到判定结果为真,将构造的满秩矩阵加入到动态加密算法的满秩矩阵集em_set中,继续构造下一个满秩矩阵;不断重复上述过程,直到em_set中的所有满秩矩阵都已经构造完毕;

加密指令序列生成子单元g3:由密钥*k初始化伪随机数发生器r_n,得到随机序列3,由r_n产生的随机序列3、em_set和待加密明文共同作用,生成加密指令序列a。

加密指令序列生成子单元g3包括:

对于指令序列a的第一条指令,首先由r_n产生的随机序列3在待加密明文的前f个字节中随机选择两个字节,由这两个字节的具体数值来决定选择em_set中的第几条指令;其中f是预定好的;

对于第n(n>1)条指令,则是根据r_n产生的随机序列3,从待加密明文的前l个字节中随机选取两个字节来决定;其中,l是由前n-1条指令来决定的。

加密单元具体包括:

加密指令序列生成子单元r0:由密钥*k计算a中指令的变换规则,变换规则即进行多少次幂运算,按照变换规则对a中指令进行幂运算,运算后的指令序列就是真正用于加密的指令序列aj;

待加密明文分块子单元r1:将待加密明文dm按照指令序列aj中指令的大小进行分块;

加密子单元r2:利用指令序列aj中加密指令对待加密明文dm进行加密。

加密子单元r2具体包括:

将待加密明文dm按照指令序列aj一次所能加密的明文块长度分成不等的n块,每一块对应一条指令,因此加密一共使用了n块指令;当最后一块明文长度小于指令要求的大小时,用“0”补齐;

将每个指令对每个明文块加密后得到的密文块相连接,得到最终加密的密文c。

本发明提出的基于动态变长码的平台数据加密方法和装置,提高了平台数据的安全性。

附图说明

图1为本发明一种基于动态变长码的平台数据加密方法的流程图;

图2为本发明一种基于动态变长码的平台数据加密装置的框图。

具体实施方式

下面将结合本发明的附图,对本发明的技术方案进行清楚、完整地描述。这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。

本发明采用基于满秩矩阵的加密方案。

只有有限个元素的域称为有限域(为了纪念它的创始人、天才数学家e.galois而命名的),它是编码理论中最重要的代数理论基础。由于有限域的运算具有无进位、等比特、无舍入误差的特点,因而在纠错码(ecc),加密,开关理论以及数字信号处理等领域有着广泛的应用,gf(pn)是比较典型的有限域。有限域f中只有有限个元素,其特征不可能为0,否则f将包含有理域r0,其元素将有无穷多个。对于q=pn,特征是素数p的域zq是pn元有限域。任一有限域gf(pn)的特征必为素数p,并且它是素域zq的有限扩域。且有:

zq={0,1,…,p-1};

设f为有限域,g∈f*,f*是f的乘法群f*=f-{0}。并且对于任意正整数x,计算

gx是容易的;但是已知g和y求x使得y=gx,在计算上基本是不可能的。这一问题称为有限群上的离散对数问题。椭圆曲线密码体制(ecc),其依据便是定义在椭圆曲线点群上的离散对数问题的难解性。

为有限域fq上所有n×n矩阵的集合,为fq上非零的n维行向量的集合,为fq上非零的n维列向量的集合,且对定义映射fq:使对有fq(x)=qx,这里是将x看作fq上的一个n×1矩阵。易证fq是双射的,即fq为的一个置换。所以可将fq唯一地表示为如下不相杂的轮换之乘积(包括长度为1的轮换):

式(1)称为fq的分解式。可知:

做成的一个划分。显然有:

设q在群中的周期为d,则<q>={q,q2,…,qd=i}做成的子群。任取fq分解式中的一个轮换显然有nj≤d,且对恒有令:d=tnj+r(0≤r<nj),如果r≠0,则有从而有nj≤r,矛盾!故:

fq分解式中任一轮换的长度必整除q在中的周期。

易知fq为的恒等置换当且仅当q为单位阵e。故当q不是单位阵e时,fq分解式中必有长度大于1的轮换,且所有轮换长度之和为qn-1。如果q0=1,q1,q2,…,qn-1均落在fq分解式的同一个轮换中,则q在中的周期d必为nj。因为让x分别取q0=1,q1,q2,…,qn-1,由可知故有d|nj;又知nj|d,所以必有d=nj。

故当fq分解式只有一个长度为(qn-1)的轮换时,q在中的周期必为(qn-1)。对恒有恰好取遍可知q对每一个非零n位q进制数都具有良好的遍历性,称中具有这样性质的n阶满秩方阵q为“有限域fq上的n阶满秩方阵”,简称满秩方阵。

由上述分析可知,有限域上的满秩矩阵不仅具有良好的遍历性,而且数量众多,且满秩矩阵都可逆,用其可以方便的进行加密解密。

基于满秩矩阵构造加密指令集包括:

(1)任取一个m阶满秩矩阵x和一个n阶满秩矩阵y,(x,y)称作动态加密算法的一条指令,m×n称作指令的大小。

使用指令(x,y)可以对长度为m×n的明文块a进行加密,将a表示成m行n列矩阵,加密后的结果b=xay。因为x和y均可逆,所以a与b相似。

仅仅通过一组a和b是不可能计算出指令(x,y)的,而且由于x和y是动态随机选取的,大小、取值都是未知的,并且指令(x,y)被重复使用的几率很小,所以密码分析者很难得到多组使用同一条指令加密的明文块和对应的密文块,也就不可能计算出指令(x,y)。

(2)按一定顺序排列的一系列的指令称为动态加密算法的指令集is。

动态加密就是对明文进行预处理后,随机选取is中的指令,按照一定的规则对明文进行加密的过程。is是动态加密算法至关重要的一部分,is的动态随机性在一定程度上保证了算法的动态性。

由于is和指令的定义可知,is的取值空间远大于满秩矩阵的数量,也就是说,我们可以利用有限域上的满秩矩阵可以产生出一个非常大的指令选择空间。这就为我们构造动态算法提供了首要条件。

(3)根据密钥k选取一定数量的满秩矩阵组成的集合,称作动态加密算法的满秩矩阵集em_set。

为了保证算法的动态性又可以让解密者通过密钥k可以在合理的时间里恢复出明文,我们通过em_set来限定is的规模。em_set的大小要适中,如果太小会使得is过小,影响算法动态性,如果太大,又会使试探解密的时间复杂度过大。在加密时,可以使用以系统时间作种子的伪随机数发生器所产生的随机数来从is中选择指令。解密时,先根据k恢复出em_set,求em_set中所有矩阵的逆,得到解密算法的满秩矩阵集em_set-1,之后仿照加密算法,得到解密指令集is-1,然后使用is-1中的指令来试探解密算法。密码分析者在不知道k的情况下,由于无法推测出em_set,也就得不到is-1,因此要推测或者试探出解密算法是非常困难的。

因此,通过利用有限域上的满秩矩阵我们可以构造出满足当今通信需要并拥有足够强度的动态加密算法。

如图1,本发明的加密过程简要如下:

1、明文m经过预处理p后,变成了随机明文rs_m;

2、根据密钥k由加密指令产生器g生成为动态加密算法的指令集is,在is中随机选择出指令序列a;

3、使用a按照加密器r指定的规则对rs_m进行加密,就得到了最终的密文c。

对于长度较短的明文,本发明提出如下优选实施例一。

预处理部分(p):

p1:用密码学意义上安全的伪随机数发生器r_n,生成两段随机序列rs和s,r_n的真随机种子可以由密钥k、系统时间t和明文m等其他随机因素共同决定。其中rs的长度由m决定,当要求待加密明文的长度与加密指令大小一致时,rs由明文和加密指令共同决定;s是随机标志位,用作分界标识,有助于解密时将明文m与rs分离开,还可以用来判定解密是否正确。rs是一个动态变长码。

p2:将s追加到m之后。试探解密时,通过判断s正确与否可以确认解密算法的正确性。

p3:将带有标志位的明文与rs做异或运算,打乱明文的规律,如果rs是真随机的,则运算后得到的随机明文rs_m也必然是真随机的。

p4:将rs_m、s、rs、s顺次连接,组成待加密明文,预处理过程结束。解密时通过找出s,可以得到rs,让rs与rs_m做异或运算后可以恢复出带有标志位的明文,这时判断s与先前所求s是否一致,如果一致,则可断定解密成功。

加密算法产生部分(g):

g1:用密钥k初始化伪随机数发生器r_n,用所产生的伪随机序列1决定满秩矩阵集中每一个满秩矩阵的尺寸。

g2:重新用密钥k初始化r_n,根据步骤g1初始化的满秩矩阵尺寸,用随机序列2逐个地构造矩阵。每构造一个矩阵,先用密钥k对其做异或运算,然后对所得结果进行判定,如果不是满秩矩阵,则进行重新构造,重复这一过程,直到判定结果为真。这时,将该矩阵加入到em_set中,继续构造下一个满秩矩阵。不断重复上述过程,直到em_set中的所有满秩矩阵都已经构造完毕。因为伪随机数发生器r_n的种子空间有限,为了防止密码分析者对r_n种子的穷举攻击,让k与r_n所产生的序列做了异或运算,这就保证了即使密码分析者穷举r_n种子,也得不到满秩矩阵集。

g3:由密钥*k初始化r_n,由r_n产生的随机序列3、em_set和待加密明文共同作用,生成加密指令序列a。具体方法是:对于第一条指令,首先由r_n产生的随机数在待加密明文的前f(f是预定好的)个字节中随机选择两个字节,由这两个字节的具体数值来决定选择em_set中的第几条指令。对于第n(n>1)条指令,则是根据r_n产生的随机数,从待加密明文的前l(l是由前n-1条指令来决定的)个字节中随机选取两个字节来决定。这样做的目的是为了便于解密时对解密指令的试探,解密时可以根据f先试探第一条指令,然后再根据第一条指令试探下一条指令,依此类推,直到解密完成。

加密过程(r):

r0:由密钥*k计算指令的变换规则(进行多少次幂运算),按照规则对a中指令进行幂运算,运算后的指令序列就是真正用于加密的指令;

r1:对待加密明文按照加密指令的大小进行分块;

r2:利用加密指令对明文进行加密,加密方法具体包括:

将明文m按照指令一次所能加密的明文块长度分成不等的n块,每一块对应一条指令,因此加密一共使用了n块指令。当最后一块明文长度小于指令要求的大小时,可以用“0”补齐。即:第i条指令ii(qi1s,qi2t)对应于第i块明文mi;明文分块:m=m1,m2,m3,…,mn,其中mi的大小为sizeof(qi1s)×sizeof(qi2t);加密后的密文其中connect表示字符串的连接。

加密的公式描述如下:

其中n为分块数,(qn1,qn2)为第n条指令,(sn,tn)为第n条指令的变换规则。

中的满秩矩阵q在有限域fq中矩阵乘法下具有最大的生成集。且以q的所有幂左乘fq上任一非零n维列向量或者右乘fq上任一非零n维行向量的结果充分发散。令分别为fq上的n×n和m×m满秩矩阵,则对任意的可以知道q1smi(1≤s≤qn-1)是对m的每一列都做了相应的线性变换,而miq2t(1≤t≤qm-1)则对m的每一行都进行了线性变换。因此q可以打乱m中各元素的位置,并改变各元素的值。我们把(q1s,q2t)作为一条指令,把这种“打乱”过程称作对m的一次加密。动态加密算法的主要过程便是随机生成一系列的指令,并使用这些指令按照一定的方法对m进行加密。为此,我们让g部分负责生成一系列的随机指令,r部分负责使用这些指令对信息进行加密。

对于长度较长的明文,本发明提出如下优选实施例二。

预处理部分(p):这部分处理同实施例一。

p1:用密码学意义上安全的伪随机数发生器r_n,生成两段随机序列rs和s,r_n的真随机种子可以由密钥k、系统时间t和明文m等其他随机因素共同决定。其中rs的长度由m决定,当要求待加密明文的长度与加密指令大小一致时,rs由明文和加密指令共同决定;s是随机标志位,用作分界标识,有助于解密时将明文m与rs分离开,还可以用来判定解密是否正确。rs是一个动态变长码。

p2:将s追加到m之后。试探解密时,通过判断s正确与否可以确认解密算法的正确性。

p3:将带有标志位的明文与rs做异或运算,打乱明文的规律,如果rs是真随机的,则运算后得到的随机明文rs_m也必然是真随机的。

p4:将rs_m、s、rs、s顺次连接,组成待加密明文,预处理过程结束。解密时通过找出s,可以得到rs,让rs与rs_m做异或运算后可以恢复出带有标志位的明文,这时判断s与先前所求s是否一致,如果一致,则可断定解密成功。

加密算法产生部分(g):

g1:用密钥k初始化伪随机数发生器r_n,用所产生的伪随机序列1决定满秩矩阵集中每一个满秩矩阵的尺寸。

g2:重新用密钥k初始化r_n,根据步骤g1初始化的满秩矩阵尺寸,用随机序列2逐个地构造矩阵。每构造一个矩阵,先用密钥k对其做异或运算,然后对所得结果进行判定,如果不是满秩矩阵,则进行重新构造,重复这一过程,直到判定结果为真。这时,将该矩阵加入到em_set中,继续构造下一个满秩矩阵。不断重复上述过程,直到em_set中的所有满秩矩阵都已经构造完毕。因为伪随机数发生器r_n的种子空间有限,为了防止密码分析者对r_n种子的穷举攻击,让k与r_n所产生的序列做了异或运算,这就保证了即使密码分析者穷举r_n种子,也得不到满秩矩阵集。

g3:由密钥*k初始化r_n,由r_n产生的随机序列3、em_set和待加密明文共同作用,生成加密指令序列a。具体方法是:对于第一条指令,首先由r_n产生的随机数在待加密明文的前f(f是预定好的)个字节中随机选择两个字节,由这两个字节的具体数值来决定选择em_set中的第几条指令。对于第n(n>1)条指令,则是根据r_n产生的随机数,从待加密明文的前l(l是由前n-1条指令来决定的)个字节中随机选取两个字节来决定。这样做的目的是为了便于解密时对解密指令的试探,解密时可以根据f先试探第一条指令,然后再根据第一条指令试探下一条指令,依此类推,直到解密完成。

加密过程(r):

r0:由密钥*k计算指令的变换规则(进行多少次幂运算),按照规则对a中指令进行幂运算,运算后的指令序列aj(code.1,code.2,…,code.n)就是真正用于加密的指令。

r1:将预处理后的明文首尾相接形成环状,将首位置标记为head,明文排列方向标记为direction。

r2:按指令code.1的大小cl1将明文m进行分块。分块的起始位置标记为start1,start1的位置可以从head开始,也可以由k指定。分块时,从start1位置开始,沿着direction方向,以start1为目标,按照cl1的大小将明文进行等长分块。最后一块明文的首元素标记为end1,end1和start1之间沿direction方向上的明文段标记为remain1,长度为rl1,end1和start1之间反方向上的明文段标记为encrypt1,长度为el1,el1是cl1的整数倍,encrypt1是第一轮用于加密的明文段。当明文长度ml不是cl1的整数倍时,remain1作为明文的最后一块,长度小于cl1。当ml是cl1的整数倍时,remain1的长度等于cl1。因此有0<rl1≤cl1。

r3:使用k对remain1做异或运算,从所得结果中随机选择一个元素r1作为code.1的变换规则,具体方法是将r1、remain1和k通过一个映射,映射到code.1的周期空间中,然后用该映射值对code.1进行幂运算,所得结果为rc.1。对r1的随机选择方法是:用系统时间t初始化伪随机数发生器r_n,选取由r_n产生的第一个随机数n1,将n1按照rl1的大小进行模运算,按照所得结果对r1进行选择。(对于ri的选择,同样先用t初始化r_n,之后选取r_n产生的第i个随机数ni,将ni按照rli的大小进行模运算,按照所得结果选择ri。)

r4:为了便于解密对算法的试探,在remain1的后面添加一个指定值d1。d1的计算方法是用r1初始化r_n,按照r1在remain1中的位置rp,选择r_n所产生序列的第rp个元素d1,d1是d1与k进行异或运算后的结果。d1的随机性由r1来决定,只要r1是真随机的,d1便是真随机的。根据r1的计算方法,r1是由明文remain1段和k来决定的,并且r1的选择是真随机的,密码分析者在不知到k的情况下,仅仅通过密文无法计算出r1的值的,也就无法知道d1的值。密码分析者想通过r1和d1的关系来寻找d1也是行不通的,因为由r1变换到d1是经过k处理的,在不知道k的情况下,是计算不出r1和d1的关系的,更何况r1和d1的值以及位置也是密码分析者所不知道。因此,在r1后面添加便于解密的d1是安全的。

r5:使用rc1对已经分块的encrypt1进行加密(rc1的大小和code.1是相同的)。对于第i块明文mi加密后的结果为q11miq12(q11,q12∈rc1),第一轮加密结束。

r6:开始第二轮加密,加密的起始位置为start2。start2由start1和步长l共同决定,方法是从start1开始沿direction方向(反向也是可以的)向后移l个元素,该位置就是start2。确定start2之后,进行分块加密,方法和1~5步是相同的。

r7:不断重复上述过程,直到第n轮加密完成。之后将加密后的明文从head开始沿着direction方向展开,得到的就是加密后的密文c。

本发明又一实施例三如下。

对于许多的加密系统而言,其安全性完全取决于其使用的密钥以及协议中的一些参数等条件,尤其是对于使用了随机序列的密码系统而言,无论是真随机数还是伪随机数的质量的优劣直接影响了该系统的安全性能。

在自然界中,各种随机的物理过程如宇宙噪音、电路的热噪声和放射性衰变等均可用来产生随机的物理信号,而且计算机中也存在着不少的随机事件,如果能利用这些随机事件,结合经过精心设计的程序,就可以生成真随机数了。虽然随着电子技术的不断发展,各种集成电路的造价已经越来越低,但是目前市面上的随机数发生器的价格还是比较昂贵的。如果能利用计算机上现有的硬件设备来实现真随机数发生器的话,不但价格低廉,也使得计算机硬件设备的功能得到了更大的发挥。

本发明利用计算机中的声卡采集的环境噪声来实现真随机数。

(1)首先从声卡中采集环境噪声数据;

a、查找系统中可用的音频设备;

b、设置采集时所使用的音频格式;

c、如果存在音频设备,则打开音频设备;

d、申请缓存空间;

e、添加缓存空间数据头;

f、开始接收声音数据;

g、分析数据完毕后关闭设备;

h、释放缓存空间。

具体实现方式为:

a、利用waveingetnumdevs()函数判断系统中是否有可用的音频设备,该函数的返回值就是系统中目前拥有的可使用的音频设备的数量,如果返回o表示系统中不存在音频设备;

c、利用waveinopen()函数打开指定的音频设备,使用这个函数的时候需要传递几个参数:第一个参数为音频设备句柄,在使用该函数之前必须先定义一个音频设备;第二个参数为音频输入设备标识,如果指定该值为wave_mapper就是让操作系统自行选择可用的音频输入设备;第三个参数为声卡采集数据时所采用的音频格式,因此在使用该函数之前需要事先设定好所使用的音频格式;该函数返回的消息一共有三种,第一个是wim_open,如果函数返回这个消息表明该函数已经打开了指定的设备,我们可以在相应的回调函数中进行必要的操作或处理;第二个是win_data,函数返回这个消息表示返回的消息中包含声卡从外界采集回来的音频数据,收到这个消息以后我们可以在回调函数中对音频数据进行分析,生成我们所需要的真随机数;第三个是win_close,如果收到这个消息,可以在回调函数中关闭相关设备并释放内存;

d、利用waveinprepareheader函数为音频设备准备缓存空间数据头;

e、利用waveinaddbuffer()函数将缓存空间数据头添加到音频设备中;

f、利用waveinstart()函数控制声卡开始接收音频数据;

g、利用waveinstop()函数向声卡发送指令,控制声卡停止接收数据;利用waveinclose()函数关闭指定的音频设备;

h、利用waveinunprepareheader()函数释放掉刚才在内存中申请的缓存空间。

通过上述这些函数,我们可以很轻松地实现在不生成任何文件的情况下,利用声卡读取环境中的噪音,并将其转化为数字信号。剩下的工作就是分析这些数据,采用一种优良的方法利用这些数字信号生成真随机数了。

(2)对所采集的环境噪声数据进行分析处理;

方法一、对采集回来的数据进行统计分析,取多个音频采集点的平均值作为阀值,顺序取出缓存区中的数据与阀值进行比较,大于阀值的为1,小于等于阀值的为0;

方法二、直接取出保存在缓存中的数据,判断每一个幅值的奇偶性,奇数为1,偶数为0;这样我们只需要顺序取出缓存区中的每一个音频数据,直接将其模2,所得结果直接链入随机序列末尾。

(3)将分析处理结果作为随机数。

所述生成的随机数为8个字节的随机序列,

获取系统时间t,将系统时间分为年、月、日、小时、分五个部分;

将所述随机数的第一个字节与系统时间年作异或,异或结果作为索引在年密钥库中找出对应的年密钥;

将所述随机数的第二个字节与系统时间月作异或,异或结果作为索引在月密钥库中找出对应的月密钥;

将所述随机数的第三个字节与系统时间日作异或,异或结果作为索引在日密钥库中找出对应的日密钥;

将所述随机数的第四个字节与系统时间小时作异或,异或结果作为索引在小时密钥库中找出对应的小时密钥;

将所述随机数的第五个字节与系统时间分作异或,异或结果作为索引在年密钥库中找出对应的分密钥;

将所述随机数的第六、七、八个字节相加后作哈希运算,哈希运算结果作为索引在随机密钥库中找出对应的随机密钥;

将计算得到的年密钥、月密钥、日密钥、小时密钥、分密钥和随机密钥组合起来,生成一个三十二字节的字符串;

将生成的三十二字符串的前十六字节作为加密密钥k,后十六个字节作为加密密钥*k。

如图2,本发明还提出一种基于动态变长码的平台数据加密装置,包括:

明文获取单元,用于获取待加密的平台数据,作为明文m;

预处理单元,用于对明文m经过预处理p后,生成待加密明文dm;

指令产生器单元,用于根据密钥k由加密指令产生器g生成动态加密算法的指令序列a;

加密单元,用于由指令序列a按照加密器r指定的规则对dm进行加密,得到最终的密文c;

其中,预处理单元具体包括:

随机序列生成子单元p1:用伪随机数发生器r_n,生成两段随机序列rs和s,r_n的随机种子的共同决定因素包括:密钥k、系统时间t和明文m;

其中rs的长度由m决定,是一个动态变长码;s是随机标志位,用作分界标识;

标识子单元p2:将s追加到m;

随机明文子单元p3:将带有标志位的明文与rs做异或运算,打乱明文的规律,运算后得到的随机明文rs_m;

待加密明文生成子单元p4:将rs_m、s、rs、s顺次连接,组成待加密明文dm,预处理过程结束。

其中,指令产生器单元具体包括:

满秩矩阵尺寸决定子单元g1:用密钥k初始化伪随机数发生器r_n,用所产生的伪随机序列1决定满秩矩阵集中每一个满秩矩阵的尺寸;

满秩矩阵构造子单元g2:重新用密钥k初始化r_n,得到随机序列2,根据步骤g1初始化的满秩矩阵尺寸,用随机序列2逐个地构造矩阵;每构造一个矩阵,先用密钥k对其做异或运算,然后对所得结果进行判定,如果不是满秩矩阵,则进行重新构造,重复这一过程,直到判定结果为真,将构造的满秩矩阵加入到动态加密算法的满秩矩阵集em_set中,继续构造下一个满秩矩阵;不断重复上述过程,直到em_set中的所有满秩矩阵都已经构造完毕;

加密指令序列生成子单元g3:由密钥*k初始化伪随机数发生器r_n,得到随机序列3,由r_n产生的随机序列3、em_set和待加密明文共同作用,生成加密指令序列a。

加密指令序列生成子单元g3包括:

对于指令序列a的第一条指令,首先由r_n产生的随机序列3在待加密明文的前f个字节中随机选择两个字节,由这两个字节的具体数值来决定选择em_set中的第几条指令;其中f是预定好的;

对于第n(n>1)条指令,则是根据r_n产生的随机序列3,从待加密明文的前l个字节中随机选取两个字节来决定;其中,l是由前n-1条指令来决定的。

加密单元具体包括:

加密指令序列生成子单元r0:由密钥*k计算a中指令的变换规则,变换规则即进行多少次幂运算,按照变换规则对a中指令进行幂运算,运算后的指令序列就是真正用于加密的指令序列aj;

待加密明文分块子单元r1:将待加密明文dm按照指令序列aj中指令的大小进行分块;

加密子单元r2:利用指令序列aj中加密指令对待加密明文dm进行加密。

加密子单元r2具体包括:

将待加密明文dm按照指令序列aj一次所能加密的明文块长度分成不等的n块,每一块对应一条指令,因此加密一共使用了n块指令;当最后一块明文长度小于指令要求的大小时,用“0”补齐;

将每个指令对每个明文块加密后得到的密文块相连接,得到最终加密的密文c。

本发明提出了的基于动态变长码的平台数据加密方法和装置,提高了平台数据的安全性。

本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本申请旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本发明未公开的本技术领域中的公知常识或惯用技术手段。

应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。

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