专利名称:基于线性反馈移位寄存器的序列流密码算法硬件实现方法
技术领域:
本发明涉及多媒体领域,特别是涉及一种基于线性反馈移位寄存器(LFSR linear feedback shift register)的序列流密码算法硬件实现方法。
背景技术:
中国的统一数字保护协议,简称UCPS协议,是我国提出的具有自主知识产权的数字保护协议,该协议可以用于便携式多媒体设备到高清数字电视的各种多媒体设备上。它的提出一方面为绕开HDCP(High-bandwidthDigital Content Protection高带宽数字内容保护规范)的专利壁垒,另一方面也是为适应中国这个庞大的数字多媒体市场而开发的适合中国国情的数字保护协议。
序列流密码也称为流密码(Stream Cipher),是对称密码算法的一种,序列流密码具有实现简单、便于硬件实现、加解密处理速度快、没有或只有有限的错误传播等特点,因此在实际应用中,特别是专用或机密机构中保持着优势。
发明内容
本发明要解决的技术问题是提供一种基于线性反馈移位寄存器的序列流密码算法硬件实现方法,能够有效解决UCPS系统中大数据流的实时加解密问题,实现加密数据的高安全性,而且硬件实现简单,可移植性好。
为解决上述技术问题,本发明的基于线性反馈移位寄存器的序列流密码算法硬件实现方法是采用一个128位的线性反馈移位寄存器产生抽头序列,该抽头序列作为密钥流生成器的输入,并由所述密钥流生成器生成密钥流,采用该密钥流对音视频数据流进行实时加解密。
采用本发明的方法,由于算法实现简单,因此运算速度很高,可以满足UCPS系统中音视频大数据流的实时加解密速度的要求,而且具有很高的安全性,极大降低了UCPS系统的被攻击性,实现加密数据的高安全性;同时采用本发明的方法硬件易于实现,可移植性好;最后完成硬件实现并用FPGA进行了验证,验证结果说明本发明的方法是正确且快速的。
下面结合附图与具体实施方式
对本发明作进一步详细的说明 图1是线性反馈移位寄存器的基本结构图; 图2是长度为n的线性反馈移位寄存器基本结构图; 图3是基于LFSR的序列流密码加密基本结构图; 图4是基于LFSR的序列流密码解密基本结构图; 图5是本发明中采用的序列流算法结构图; 图6是序列流算法中加密算法抽头结构图; 图7是序列流算法中解密算法抽头结构图; 图8是本发明中密钥生成器的组合逻辑函数Combin1的抽头组成图; 图9是本发明中密钥生成器的组合逻辑函数Combin2的抽头组成图; 图10本发明中密钥生成器的组合逻辑函数Combin3的抽头组成图; 图11序列流算法仿真波形图。
具体实施例方式 序列流密码算法在统一内容保护体系UCPS协议中实时对音视频数据流进行加解密算法处理,是整个协议中速度和使用频率最高的部分。
所述序列流密码的基本思路是以一种方式产生一随机序列,即密钥流,这一序列由密钥所确定,利用这样的序列进行加解密,即将密钥、明文表示呈连续的符号或二进制流,对应的进行加解密。
设明文流为M=m1m2…mn,密钥流为K=k1k2…kn(密钥流由密钥或种子密钥通过密钥流生成器得到),则 加密过程可表示为 C=c1c2…cn公式(1) 其中 解密过程可表示为 M=m1m2…mn公式(2) 其中 当前使用的序列流密码大多都使用二元序列密码,在这种序列密码中,密钥流、明文流都被编码成0、1序列,即加、解密算法都是模2加(即异或),此时加解密过程即为 加密过程为公式(3) 解密过程为公式(4) 二元序列密码的安全强度取决于密钥生成器所产生的密钥流的性质,如果密钥流是无周期的无限长随机序列,则此时序列密码是一次一密的密码体制,是绝对安全的。在实际应用时,密钥流都是用有限存储和有限复杂逻辑的电路来产生的,此时密钥流生成器只有有限个状态,密钥流生成器迟早要回到初始状态而使其状态呈现出一定长度的周期,其输出也就是周期序列。总之,序列流密码的设计核心在于密钥流生成器的设计,序列密码的安全强度取决于密钥流生成器生成的密钥流的周期、复杂度、随机(伪随机)特性等。
产生密钥流最重要的部件是线性反馈移位寄存器(LFSR)。主要是由于LFSR很适合硬件实现;LFSR能产生大的周期序列;LFSR能产生好的统计特性的序列;LFSR的结构能应用代数方法进行分析研究。
线性反馈移位寄存器的基本结构如图1所示(该算法的基本结构图来源于标准线性反馈移位寄存器原理)。其中ai表示二值(0,1)存储单元,ai的个数n称为线性反馈移位寄存器的级,在某一时刻,这些级的内容构成该线性反馈移位寄存器的一个状态,共有2n个可能的状态,每个状态对应于域GF(2)上的一个n维向量,用(a1,a2,...,an)表示。
在主时钟确定的周期区间上,每一级存储单元ai都将其内容向下一级存储单元ai-1传递,并根据线性反馈移位寄存器当前的状态计算f(a1,a2,...,an)作为存储单元ai的下一时间的内容,即从一个状态转移到下一个状态。
如果反馈函数为 公式(5) 其中系数ki∈
,(i=1,2,...,n),所有ki的取值由种子密钥k确定,这里的加法是模2加,则反馈函数是a1,a2,...,an的线性函数,对应的线性反馈移位寄存器用LFSR表示,参见图2所示(该算法基本结构图来源于标准线性反馈移位寄存器原理)。
令ai(t)表示t时刻第i级的内容,ai(t+1)表示ai(t)的下一时刻的内容,则有 移位ai(t+1)=ai+1(t),(i=1,2,...,n-1)公式(6) 反馈公式(7) 经过前面对序列流密码和LFSR,以及基于LFSR的序列密码体制的原理分析可以推导如下 设种子密钥为k=k1k2…kn,其中ki∈
,(i=1,2,...,n)a1,a2,...,an的初态为s1,s2,...,sn,设明文为m=m1m2…mn,密文为c=c1c2…cn,则有 加密公式(8) 解密公式(9) 对应的基于LFSR的加、解密过程如图3、4所示(该算法结构图来源于标准线性反馈移位寄存器原理)。图中线框内部分代表基于LFSR生成密钥流。
由公式(8)可见左边第三项说明第i位密文ci与前i-1个密文c1,c2,…,ci-1有关;左边第二项中的s为初态,表明该项只在i=1时存在,i≥2时式中只存在第一、第三项;式中的“+”为mod2加。由公式(8)、公式(9)可以看出它们左边的第二和第三项相同,它们实际上代表的是密钥ki。由图3、4可以看出公式(8)、公式(9)可以简化为 加密ci=mi+ki(l≤i≤n)公式(10) 解密mi=ci+ki(l≤i≤n)公式(11) 在UCPS协议中,源端和接收端都需要调用序列流密码对音视频数据流进行实时加解密,源端用加密算法进行数据加密,解密端用解密算法进行数据解密。它们都在认证完成时被调用使用,对算法速度的要求很高,基本上要求每个像素时钟运行产生一次密文数据。
本发明的算法中采用了一个128位的LFSR及一系列的前馈组合逻辑函数。如图5所示,128位的LFSR在每个时钟周期中会运算一次,它的变化经过一系列组合函数,就产生变化的密钥流encryption。
从前面的算法原理得知序列流密码加密和解码的过程是相逆的,密钥流的产生也是相同的,只是线性反馈移位寄存器值的回填不一样。在加密过程中,每次移位后空出的高位回填的是用输出密文产生的反馈值,而在解密时回填的是直接用输入的需解密密文来产生要回填的反馈值。具体的区别见图6、7所示的序列流算法中加解密算法结构图。
如图5所示,128位的LFSR通过一些抽头序列来作为密钥流生成器的输入,这些抽头分别按照一定的顺序进入三种不同的组合逻辑,产生加密用的二十四位的加密密钥流。这些抽头序列有104个,分别是 lfsr127、lfsr126、lfsr125、lfsr124、lfsr123、lfsr121、lfsr120、lfsr119、 lfsr118、lfsr117、lfsr115、lfsr114、lfsr113、lfsr112、lfsr111、lfsr109、 lfsr108、lfsr107、lfsr106、lfsr105、lfsr103、lfsr102、lfsr101、lfsr100、 lfsr99、lfsr97、lfsr96、lfsr95、lfsr94、lfsr93、lfsr91、lfsr90、 lfsr89、lfsr88、lfsr87、lfsr85、lfsr84、lfsr83、lfsr82、lfsr81、 lfsr79、lfsr78、lfsr77、lfsr76、lfsr74、lfsr73、lfsr72、lfsr71、 lfsr69、lfsr68、lfsr67、lfsr66、lfsr64、lfsr63、lfsr62、lfsr61、 lfsr59、lfsr58、lfsr57、lfsr56、lfsr54、lfsr53、lfsr52、lfsr51、 lfsr49、lfsr48、lfsr47、lfsr46、lfsr44、lfsr43、lfsr42、lfsr41、 lfsr39、lfsr38、lfsr37、lfsr36、lfsr34、lfsr33、lfsr32、lfsr31、 lfsr29、lfsr28、lfsr27、lfsr26、lfsr24、lfsr23、lfsr22、lfsr21、 lfsr19、lfsr18、lfsr17、lfsr16、lfsr14、lfsr13、lfsr12、lfsr11、 lfsr9、lfsr8、lfsr7、lfsr6、lfsr4、lfsr3、lfsr2、lfsr1。
密钥生成器的组合逻辑函数一共有三种,组合逻辑函数Combin1被调用八次,只是每次的输入是LFSR中不同的抽头序列;组合逻辑函数Cmbin2被调用八次,同样每次的输入是LFSR中不同的抽头序列;组合逻辑函数Combin3也被调用八次,每次的输入也是LFSR中不同的抽头序列。三种组合逻辑函数的输出就产生了密钥流encryption。它与24位的被加密数据进行加密异或后,产生24位的密文,再将密文的所有位按位异或缩减运算后生成的一位结果存于LFSR移位后空出的最高位。这三种组合逻辑函数的抽头序列组成如图8-10所示。
组合逻辑函数combin1的算法伪代码描述如下(用verilog语言描述) module combin1(y,a,b,c,d); assign y=~f1(a,b,c,d); endmodule 参见图8所示,组合逻辑函数combin1的连接方式如下取每一抽头组的最低位,连续的四个抽头组的最低位组成新的一个抽头组,即抽头组分别为 lfsr[1]、lfsr[6]、lfsr[11]、lfsr[16]组成第一组Combin1 U11, lfsr[2]、lfsr[7]、lfsr[12]、lfsr[17]组成第二组Combin1 U12, lfsr[3]、lfsr[8]、lfsr[13]、lfsr[18]组成第三组Combin1 U13, lfsr[4]、lfsr[9]、lfsr[14]、lfsr[19]组成第四组Combin1 U14, lfsr[21]、lfsr[26]、lfsr[31]、lfsr[36]组成第五组Combin1 U15, lfsr[22]、lfsr[27]、lfsr[32]、lfsr[37]组成第六组Combin1 U16, lfsr[23]、lfsr[28]、lfsr[33]、lfsr[38]组成第七组Combin1 U17, lfsr[24]、lfsr[29]、lfsr[34]、lfsr[39]组成第八组Combin1 U18, 每一组被调用一次。
组合逻辑函数combin2的算法伪代码描述如下(用verilog语言描述) module combin2(y,a,b,c,d); assign y=~f2(a,b,c,d); endmodule 参见图9所示,组合逻辑函数combin2的连接方式如下同combin1的抽头抽取方式,接组合逻辑函数combin1抽头抽取位处,即抽头组分别为 lfsr[41]、lfsr[46]、lfsr[51]、lfsr[56]组成第一组U21, lfsr[42]、lfsr[47]、lfsr[52]、lfsr[57]组成第二组U22, lfsr[43]、lfsr[48]、lfsr[53]、lfsr[58]组成第三组U23, lfsr[44]、lfsr[49]、lfsr[54]、lfsr[59]组成第四组U24, lfsr[61]、lfsr[66]、lfsr[71]、lfsr[76]组成第五组U25, lfsr[62]、lfsr[67]、lfsr[72]、lfsr[77]组成第六组U26, lfsr[63]、lfsr[68]、lfsr[73]、lfsr[78]组成第七组U27, lfsr[64]、lfsr[69]、lfsr[74]、lfsr[79]组成第八组U28, 每一组被调用一次。
组合逻辑函数combin3的算法伪代码描述如下(用verilog语言描述) module combin3(y,a,b,c,d,e); assign y=~f3(a,b,c,d,e); endmodule 参见图10所示,组合函数combin3的连接方式如下同组合逻辑函数combin2的抽头抽取方式,但是以连续的五位组合为一个抽头组,接组合逻辑函数combin2抽头抽取位处,即抽头组分别为 lfsr[81]、lfsr[90]、lfsr[99]、lfsr[108]、lfsr[117]组成第一组U31, lfsr[82]、lfsr[91]、lfsr[100]、lfsr[109]、lfsr[118]组成第二组U32, lfsr[83]、lfsr[92]、lfsr[101]、lfsr[110]、lfsr[119]组成第三组U33, lfsr[84]、lfsr[93]、lfsr[102]、lfsr[111]、lfsr[120]组成第四组U34, lfsr[85]、lfsr[94]、lfsr[103]、lfsr[112]、lfsr[121]组成第五组U35, lfsr[86]、lfsr[95]、lfsr[104]、lfsr[113]、lfsr[122]组成第六组U36, lfsr[87]、lfsr[96]、lfsr[105]、lfsr[114]、lfsr[123]组成第七组U37, lfsr[88]、lfsr[97]、lfsr[106]、lfsr[115]、lfsr[124]组成第八组U38, 每一组被调用一次。
本发明的算法经过前面的分析和设计,采用Verilog硬件语言实现,可以做到每个时钟输出一组24位的加/解密数据,也就是说可以做到音视频数据实时加解密;而且,由于本发明的算法设计只利用了一个密钥流发生器,所以整个算法所耗资源少、易于实现、可移植性好,再利用率高。
在本发明的整个算法中加密算法的伪代码描述如下(用Verilog语言描述) module LFSR(LFSR_enable,key,data_enable,data,LFSR_out,cryptograph); always@(posedge clk)//128位移位寄存器 beginif(LFSR_enable==1) lfsr<=key;else if(data_enable==1) lfsr[127] <=^cryptograph1; lfsr[126:0] <=lfsr[127:1];else lfsr<=lfsr; end assign cryptograph1={data[23:16]^encry_data3,data[15:8]^encry_data2,data[7:0]^encry_data1}; //高位移处位回填值 always@(posedge clk) if(data_enable==1) cryptograph <=cryptograph1;//加密密文输出 LFSR_out<=1′b1; else cryptograph <=cryptograph; LFSR_out<=1′b0; //*组合逻辑函数combin1产生低8位密钥流 combin1 u11(.y(encry_data1
),.a(lfsr[1]),.b(lfsr[6]),.c(lfsr[11]),.d(lfsr[16]));//组合逻辑函数 combin1 combin1 u12(.y(encry_data1[1]),.a(lfsr[2]),.b(lfsr[7]),.c(lfsr[12]),.d(lfsr[17]));//组合逻辑函数 combin1 combin1 u13(.y(encry_data1[2]),.a(lfsr[3]),.b(lfsr[8]),.c(lfsr[13]),.d(lfsr[18]));//组合逻辑函数 combin1 combin1 u14(.y(encry_data1[3]),.a(lfsr[4]),.b(lfsr[9]),.c(lfsr[14]),.d(lfsr[19]));//组合逻辑函数 combin1 combin1 u15(.y(encry_data1[4]),.a(lfsr[21]),.b(lfsr[26]),.c(lfsr[31]),.d(lfsr[36]));//组合逻辑函数 combin1 combin1 u16(.y(encry_data1[5]),.a(lfsr[22]),.b(lfsr[27]),.c(lfsr[32]),.d(lfsr[37]));//组合逻辑函数 combin1 combin1 u17(.y(encry_data1[6]),.a(lfsr[23]),.b(lfsr[28]),.c(lfsr[33]),.d(lfsr[38]));//组合逻辑函数 combin1 combin1 u18(.y(encry_data1[7]),.a(lfsr[24]),.b(lfsr[29]),.c(lfsr[34]),.d(lfsr[39]));//组合逻辑函数 combin1 //*组合逻辑函数combin2产生中间8位密钥流 combin2 u21(.y(encry_data2
),.a(lfsr[41]),.b(lfsr[46]),.c(lfsr[51]),.d(lfsr[56]));//组合逻辑函数 combin2 combin2 u22(.y(encry_data2[1]),.a(lfsr[42]),.b(lfsr[47]),.c(lfsr[52]),.d(lfsr[57]));//组合逻辑函数 combin2 combin2 u23(.y(encry_data2[2]),.a(lfsr[43]),.b(lfsr[48]),.c(lfsr[53]),.d(lfsr[58]));//组合逻辑函数 combin2 combin2 u24(.y(encry_data2[3]),.a(lfsr[44]),.b(lfsr[49]),.c(lfsr[54]),.d(lfsr[59]));/组合逻辑函数 combin2 combin2 u25(.y(encry_data2[4]),.a(lfsr[61]),.b(lfsr[66]),.c(lfsr[71]),.d(lfsr[76]));//组合逻辑函数 combin2 combin2 u26(.y(encry_data2[5]),.a(lfsr[62]),.b(lfsr[67]),.c(lfsr[72]),.d(lfsr[77]));/组合逻辑函数 combin2 combin2 u27(.y(encry_data2[6]),.a(lfsr[63]),.b(lfsr[68]),.c(lfsr[73]),.d(lfsr[78]));//组合逻辑函数 combin2 combin2 u28(.y(encry_data2[7]),.a(lfsr[64]),.b(lfsr[69]),.c(lfsr[74]),.d(lfsr[79]));//组合逻辑函数 combin2 //*组合逻辑函数combin3产生高8位密钥流 combin3 u31(.y(encry_data3
),.a(lfsr[81]),.b(lfsr[90]),.c(lfsr[99]),.d(lfsr[108]),.e(lfsr[117])); combin3 u32(.y(encry_data3[1]),.a(lfsr[82]),.b(lfsr[91]),.c(lfsr[100]),.d(lfsr[109]),.e(lfsr[118])); combin3 u33(.y(encry data3[2]),.a(lfsr[83]),.b(lfsr[92]),.c(lfsr[101]),.d(lfsr[110]),.e(lfsr[119])); combin3 u34(.y(encry_data3[3]),.a(lfsr[84]),.b(lfsr[93]),.c(lfsr[102]),.d(lfsr[111]),.e(lfsr[120])); combin3 u35(.y(encry_data3[4]),.a(lfsr[85]),.b(lfsr[94]),.c(lfsr[103]),.d(lfsr[112]),.e(lfsr[121])); combin3 u36(.y(encry_data3[5]),.a(lfsr[86]),.b(lfsr[95]),.c(lfsr[104]),.d(lfsr[113]),.e(lfsr[122])); combin3 u37(.y(encry_data3[6]),.a(lfsr[87]),.b(lfsr[96]),.c(lfsr[105]),.d(lfsr[114]),.e(lfsr[123])); combin3 u38(.y(encry_data3[7]),.a(lfsr[88]),.b(lfsr[97]),.c(lfsr[106]),.d(lfsr[115]),.e(lfsr[124])); endmodule 解密算法的伪代码描述如下(用Verilog语言描述) module LFSR_uncrypt(LFSR_enable,key,data_enable,data,LFSR_out,cryptograph); always@(posedge clk) //128位移位寄存器 if(LFSR_enable==1) lfsr <=key; else if(data_enable==1) lfsr[127] <=^data; //高位移处位回填 lfsr[126:0] <=lfsr[127:1]; else lfsr <=lfsr; always@(posedge clk)//加密密文输出 if(data_enable==1) cryptograph<={data[23:16]^encry_data3,data[15:8]^encry_data2,data[7:0]^encry_data1}; LFSR_out <=1′b1; else cryptograph <=cryptograph; LFSR_out <=1′b0; //*组合逻辑函数combin1产生低8位密钥流 combin1 u11(.y(encry_data1
),.a(lfsr[1]),.b(lfsr[6]),.c(lfsr[11]),.d(lfsr[16])); combin1 u12(.y(encry_data1[1]),.a(lfsr[2]),.b(lfsr[7]),.c(lfsr[12]),.d(lfsr[17])); combin1 u13(.y(encry_data1[2]),.a(lfsr[3]),.b(lfsr[8]),.c(lfsr[13]),.d(lfsr[18])); combin1 u14(.y(encry_data1[3]),.a(lfsr[4]),.b(lfsr[9]),.c(lfsr[14]),.d(lfsr[19])); combin1 u15(.y(encry_data1[4]),.a(lfsr[21]),.b(lfsr[26]),.c(lfsr[31]),.d(lfsr[36])); combin1 u16(.y(encry_data1[5]),.a(lfsr[22]),.b(lfsr[27]),.c(lfsr[32]),.d(lfsr[37])); combin1 u17(.y(encry data1[6]),.a(lfsr[23]),.b(lfsr[28]),.c(lfsr[33]),.d(lfsr[38])); combin1 u18(.y(encry_data1[7]),.a(lfsr[24]),.b(lfsr[29]),.c(lfsr[34]),.d(lfsr[39])); //*组合逻辑函数combin2产生中间8位密钥流 combin2 u21(.y(encry_data2
),.a(lfsr[41]),.b(lfsr[46]),.c(lfsr[51]),.d(lfsr[56])); combin2 u22(.y(encry_data2[1]),.a(lfsr[42]),.b(lfsr[47]),.c(lfsr[52]),.d(lfsr[57])); combin2 u23(.y(encry_data2[2]),.a(lfsr[43]),.b(lfsr[48]),.c(lfsr[53]),.d(lfsr[58])); combin2 u24(.y(encry_data2[3]),.a(lfsr[44]),.b(lfsr[49]),.c(lfsr[54]),.d(lfsr[59])); combin2 u25(.y(encry_data2[4]),.a(lfsr[61]),.b(lfsr[66]),.c(lfsr[71]),.d(lfsr[76])); combin2 u26(.y(encry_data2[5]),.a(lfsr[62]),.b(lfsr[67]),.c(lfsr[72]),.d(lfsr[77])); combin2 u27(.y(encry_data2[6]),.a(lfsr[63]),.b(lfsr[68]),.c(lfsr[73]),.d(lfsr[78])); combin2 u28(.y(encry_data2[7]),.a(lfsr[64]),.b(lfsr[69]),.c(lfsr[74]),.d(lfsr[79])); //*组合逻辑函数combin3产生高8位密钥流 combin3 u31(.y(encry_data3
),.a(lfsr[81]),.b(lfsr[90]),.c(lfsr[99]),.d(lfsr[108]),.e(lfsr[117])); combin3 u32(.y(encry_data3[1]),.a(lfsr[82]),.b(lfsr[91]),.c(lfsr[100]),.d(lfsr[109]),.e(lfsr[118])); combin3 u33(.y(encry_data3[2]),.a(lfsr[83]),.b(lfsr[92]),.c(lfsr[101]),.d(lfsr[110]),.e(lfsr[119])); combin3 u34(.y(encry_data3[3]),.a(lfsr[84]),.b(lfsr[93]),.c(lfsr[102]),.d(lfsr[111]),.e(lfsr[120])); combin3 u35(.y(encry_data3[4]),.a(lfsr[85]),.b(lfsr[94]),.c(lfsr[103]),.d(lfsr[112]),.e(lfsr[121])); combin3 u36(.y(encry_data3[5]),.a(lfsr[86]),.b(lfsr[95]),.c(lfsr[104]),.d(lfsr[113]),.e(lfsr[122])); combin3 u37(.y(encry_data3[6]),.a(lfsr[87]),.b(lfsr[96]),.c(lfsr[105]),.d(lfsr[114]),.e(lfsr[123])); combin3 u38(.y(encry_data3[7]),.a(lfsr[88]),.b(lfsr[97]),.c(lfsr[106]),.d(lfsr[115]),.e(lfsr[124])); endmodule 本发明的方法进行了试验测试,在试验测试过程中,通过使用Xilinx公司XC3S5000-5 FG900的FPGA(Field Programmeble Gate Array现场可编程门阵列)芯片,建立测试验证平台电路系统,使用Modelsim6.1SE软件进行仿真。仿真环境采用P4、1GM内存,联想启天M4880计算机。仿真波形如图11所示。采用加密算法和解密算进行验证对比,先把密钥和加密数据送入加密模块,进行加密,然后把相同的密钥和密文再输入解密模块进行解密,来验证加解密的过程是否正确;第二个方面验证计算加解密算法运行加解密一组数据所耗时间,结果证明是在一个时钟内出一组数据。
加解密数据对比如下(AES-128算法) 第一组 加密key=128’h0123456789ABCDEF0123456789ABCDEF; data=24’h070809; cryptograph=24’h05370b; 解密key=128’h0123456789ABCDEF0123456789ABCDEF; data=24’h05370b; cryptograph=24’h070809; 第二组 加密key=128’h0123456789ABCDEF0123456789ABCDEF; data=24’h010203; cryptograph=24’h033d01; 解密key=128’h0123456789ABCDEF0123456789ABCDEF; data=24’h033d01; cryptograph=24’h010203; 第三组 加密key=128’h0123456789ABCDEF0123456789ABCDEF; data=24’hffffff; cryptograph=24’hfdc0fd; 解密key=128’h0123456789ABCDEF0123456789ABCDEF; data=24’hfdc0fd; cryptograph=24’hffffff; 第四组 加密key=128’hFFFFFFFFFFFFFFFF1111111111111111; data=24’h101010; cryptograph=24’h101cab; 解密key=128’h FFFFFFFFFFFFFFFF1111111111111111; data=24’h101cab; cryptograph=24’h101010; 第五组 加密key=128’h2b7e151628aed2a6abf7158809cf4f3c; data=24’h329abc; cryptograph=24’h557ce8; 解密key=128’h2b7e151628aed2a6abf7158809cf4f3c; data=24’h557ce8; cryptograph=24’h329abc; 根据上述数据对比测试可以看出,本发明所提出的序列流密码算法是正确并能实现的;通过数据的加解密验证得知加解密算法是的过程是相逆的,硬件实现正确,算法设计正确;而且可以保证数据加解密数据运行一次只需要一个时钟周期时间。本发明所提出的序列流密码算法有严格的数学证明,并且从测试结果也证明了算法实现是正确的。
序列流算法仿真波形图参见图11所示。
以上结合具体实施方式
对本发明进行了详细的说明,这些并非构成对本发明的限制。在不脱离本发明原理的情况下,本领域的技术人员还可作出许多变形和改进,这些也应属于本发明的保护范围。
权利要求
1.一种基于线性反馈移位寄存器的序列流密码算法硬件实现方法,其特征在于采用一个128位的线性反馈移位寄存器产生抽头序列,该抽头序列作为密钥流生成器的输入,并由所述密钥流生成器生成密钥流,采用该密钥流对音视频数据流进行实时加解密。
2.如权利要求1所述的方法,其特征在于所述线性反馈移位寄存器每个时钟周期运算一次。
3.如权利要求1或2所述的方法,其特征在于所述抽头序列共有104个抽头,所述密钥生成器的组合逻辑共有三种,加密过程是所述抽头序列按照一定的顺序进入密钥生成器的三种组合逻辑,产生加密用的二十四位的加密密钥流;将加密密钥流与24位的被加密数据进行加密异或后,产生24位的密文,再将密文的所有位按位异或缩减运算后生成的一位结果存于线性反馈移位寄存器移位后空出的最高位。
4.如权利要求3所述的方法,其特征在于所述三种组合逻辑分别被调用八次,每次的输入是线性反馈移位寄存器不同的抽头序列;
组合逻辑1产生低八位密钥流,组合逻辑2产生中间八位密钥流,组合逻辑3产生高八位密钥流。
5.如权利要求3所述的方法,其特征在于进入组合逻辑1的抽头组为,取每一抽头组的最低位,连续的四个抽头组的最低位组成新的一个抽头组,即抽头组分别为
lfsr[1]、lfsr[6]、lfsr[11]、lfsr[16]组成第一组Combin1 U11,
lfsr[2]、lfsr[7]、lfsr[12]、lfsr[17]组成第二组Combin1 U12,
lfsr[3]、lfsr[8]、lfsr[13]、lfsr[18]组成第三组Combin1 U13,
lfsr[4]、lfsr[9]、lfsr[14]、lfsr[19]组成第四组Combin1 U14,
lfsr[21]、lfsr[26]、lfsr[31]、lfsr[36]组成第五组Combin1 U15,
lfsr[22]、lfsr[27]、lfsr[32]、lfsr[37]组成第六组Combin1 U16,
lfsr[23]、lfsr[28]、lfsr[33]、lfsr[38]组成第七组Combin1 U17,
lfsr[24]、lfsr[29]、lfsr[34]、lfsr[39]组成第八组Combin1 U18,每一组被调用一次。
6.如权利要求3所述的方法,其特征在于进入组合逻辑2的抽头组为,接续组合逻辑1的抽头抽取位处,取每一抽头组的最低位,连续的四个抽头组的最低位组成新的一个抽头组,即抽头组分别为
lfsr[41]、lfsr[46]、lfsr[51]、lfsr[56]组成第一组U21,
lfsr[42]、lfsr[47]、lfsr[52]、lfsr[57]组成第二组U22,
lfsr[43]、lfsr[48]、lfsr[53]、lfsr[58]组成第三组U23,
lfsr[44]、lfsr[49]、lfsr[54]、lfsr[59]组成第四组U24,
lfsr[61]、lfsr[66]、lfsr[71]、lfsr[76]组成第五组U25,
lfsr[62]、lfsr[67]、lfsr[72]、lfsr[77]组成第六组U26,
lfsr[63]、lfsr[68]、lfsr[73]、lfsr[78]组成第七组U27,
lfsr[64]、lfsr[69]、lfsr[74]、lfsr[79]组成第八组U28,每一组被调用一次。
7.如权利要求3所述的方法,其特征在于进入组合逻辑3的抽头组为,接续组合逻辑2的抽头抽取位处,取每一抽头组的最低位,连续的五个抽头组的最低位组成新的一个抽头组,即抽头组分别为
lfsr[81]、lfsr[90]、lfsr[99]、lfsr[108]、lfsr[117]组成第一组U31,
lfsr[82]、lfsr[91]、lfsr[100]、lfsr[109]、lfsr[118]组成第二组U32,
lfsr[83]、lfsr[92]、lfsr[101]、lfsr[110]、lfsr[119]组成第三组U33,
lfsr[84]、lfsr[93]、lfsr[102]、lfsr[111]、lfsr[120]组成第四组U34,
lfsr[85]、lfsr[94]、lfsr[103]、lfsr[112]、lfsr[121]组成第五组U35,
lfsr[86]、lfsr[95]、lfsr[104]、lfsr[113]、lfsr[122]组成第六组U36,
lfsr[87]、lfsr[96]、lfsr[105]、lfsr[114]、lfsr[123]组成第七组U37,
lfsr[88]、lfsr[97]、lfsr[106]、lfsr[115]、lfsr[124]组成第八组U38,
每一组被调用一次。
全文摘要
本发明公开了一种基于线性反馈移位寄存器的序列流密码算法硬件实现方法,采用一个128位的线性反馈移位寄存器产生抽头序列,该抽头序列作为密钥流生成器的输入,并由所述密钥流生成器生成密钥流,采用该密钥流对音视频数据流进行实时加解密。本发明能够有效解决UCPS系统中大数据流的实时加解密问题,实现加密数据的高安全性,而且硬件实现简单,可移植性好。
文档编号H04L9/22GK101771533SQ200810208248
公开日2010年7月7日 申请日期2008年12月30日 优先权日2008年12月30日
发明者罗佳明, 袁世强 申请人:上海华虹集成电路有限责任公司