用CPLD实现Gollmann密钥流发生器
发布时间:2008/5/28 0:00:00 访问次数:707
关键词:gollmann ;vhdl ;cpld;伪随机序列
引言
对通信数据进行加密的方法可分为两大类:软加密和硬加密。其中硬加密具有加密强度大、可靠性高等特点。本文根据流密码发生器原理,用cpld设计出了gollmann流密码发生器。
原理
密码安全的伪随机序列发生器用于流密码时十分理想,这些发生器的输出与真正随机的位发生器难以区分,只需将发生器的输出与明文流异或就可以得到良好的流密码。
gollmann流密码发生器由一串lfsr(线性反馈移位寄存器)构成,每个lfsr的时钟由前一个lfsr控制,如果t-1时刻lfsr-1的输出为1,则lfsr-2在t时刻阶跃;如果t-1时刻lfsr-2的输出为1,则lfsr-3在t时刻阶跃,以此类推,最后一个lfsr的输出为发生器的输出。如果所有lfsr的长度都为l,则n个lfsr构成的系统的线性复杂度为:
l*(2l-1) n-1
流密码发生器的设计
根据gollmann流密码发生器的原理设计的发生器的原理框图可用max+plusii的电路图方式表示,如图1所示。
在gollmann流密码发生器中,lfsr是其重要的组成部分。本文只采用了3级lfsr,其中lfsr长度为4比特,其生成多项式为x4+x1+1;lfsr16长度为16比特,其生成多项式为x16+x5+x3+x2+1;lfsr32长度为32比特,其生成多项式为x32+x7+x6+x2+1。
其中lfsr的vhdl程序描述如下:
entity lfsr is
port(clk,en:in std_logic;
data:out std_logic);
end entity;
architecture bev of lfsr is
signal sh:std_logic_vector(0 to 3);
begin
process(clk,en)
begin
if en='0' then
sh<="1111";
elsif clk='1' and clk'event then
sh(3)<= sh(3) xor sh(0) ;
for i in 1 to 3 loop
sh(i-1)<=sh(i);
end loop;
data<=sh(0);
end if;
end process;
end bev;
gollmann流密码发生器的工作流程为:在初始时刻,使能信号en为1时将所有lfsr中的寄存器赋值为1。随着时钟clk下降沿的到来,将第一个lfsr的输出信号与输入信号1异或,再将其结果和clk进行与运算作为第二个lfsr的输入,同时该异或结果还将和第二个lfsr的输出进行异或。异或后的结果既同clk做与运算后作为第三个lfsr的输入,同时又与第三个lfsr的输出做异或运算。第三次异或后的结果即为gollmann流密码发生器的输出结果。
本文选用altera公司的max+plus ii 10 baseline对vhdl源程序编译,这个工具支持vhdl的编译和仿真。对gollmann流密码生成器的程序进行仿真,结果如图2所示。
图2中en为使能信号,clk为50mhz的时钟信号,dataout为输出信号。lfsr32sh,lfsr16sh,lfsrsh为各个lfsr寄存器值的变化过程。
在所有lfsr初始值都为1时(初始值不同,输出的结果就有所不同),gollmann流密码生成器所产生的输出类似于随机序列,如图2中dataout所示,可以满足一般的加密要求。
结语
本文设计的gollmann流密码生成器结构简单,加密能力较强,同时还可以继续扩充多个lfsr,以增强其加密功能。■
参考文献
1 冯晖,来凤琪,王绍银等. 计算机密码学.中国铁道出版社,1999
2 赵俊超等. 集成电路的vhdl教程. 北京希望电子出版社,2002
(收稿日期:2004-06-18)
关键词:gollmann ;vhdl ;cpld;伪随机序列
引言
对通信数据进行加密的方法可分为两大类:软加密和硬加密。其中硬加密具有加密强度大、可靠性高等特点。本文根据流密码发生器原理,用cpld设计出了gollmann流密码发生器。
原理
密码安全的伪随机序列发生器用于流密码时十分理想,这些发生器的输出与真正随机的位发生器难以区分,只需将发生器的输出与明文流异或就可以得到良好的流密码。
gollmann流密码发生器由一串lfsr(线性反馈移位寄存器)构成,每个lfsr的时钟由前一个lfsr控制,如果t-1时刻lfsr-1的输出为1,则lfsr-2在t时刻阶跃;如果t-1时刻lfsr-2的输出为1,则lfsr-3在t时刻阶跃,以此类推,最后一个lfsr的输出为发生器的输出。如果所有lfsr的长度都为l,则n个lfsr构成的系统的线性复杂度为:
l*(2l-1) n-1
流密码发生器的设计
根据gollmann流密码发生器的原理设计的发生器的原理框图可用max+plusii的电路图方式表示,如图1所示。
在gollmann流密码发生器中,lfsr是其重要的组成部分。本文只采用了3级lfsr,其中lfsr长度为4比特,其生成多项式为x4+x1+1;lfsr16长度为16比特,其生成多项式为x16+x5+x3+x2+1;lfsr32长度为32比特,其生成多项式为x32+x7+x6+x2+1。
其中lfsr的vhdl程序描述如下:
entity lfsr is
port(clk,en:in std_logic;
data:out std_logic);
end entity;
architecture bev of lfsr is
signal sh:std_logic_vector(0 to 3);
begin
process(clk,en)
begin
if en='0' then
sh<="1111";
elsif clk='1' and clk'event then
sh(3)<= sh(3) xor sh(0) ;
for i in 1 to 3 loop
sh(i-1)<=sh(i);
end loop;
data<=sh(0);
end if;
end process;
end bev;
gollmann流密码发生器的工作流程为:在初始时刻,使能信号en为1时将所有lfsr中的寄存器赋值为1。随着时钟clk下降沿的到来,将第一个lfsr的输出信号与输入信号1异或,再将其结果和clk进行与运算作为第二个lfsr的输入,同时该异或结果还将和第二个lfsr的输出进行异或。异或后的结果既同clk做与运算后作为第三个lfsr的输入,同时又与第三个lfsr的输出做异或运算。第三次异或后的结果即为gollmann流密码发生器的输出结果。
本文选用altera公司的max+plus ii 10 baseline对vhdl源程序编译,这个工具支持vhdl的编译和仿真。对gollmann流密码生成器的程序进行仿真,结果如图2所示。
图2中en为使能信号,clk为50mhz的时钟信号,dataout为输出信号。lfsr32sh,lfsr16sh,lfsrsh为各个lfsr寄存器值的变化过程。
在所有lfsr初始值都为1时(初始值不同,输出的结果就有所不同),gollmann流密码生成器所产生的输出类似于随机序列,如图2中dataout所示,可以满足一般的加密要求。
结语
本文设计的gollmann流密码生成器结构简单,加密能力较强,同时还可以继续扩充多个lfsr,以增强其加密功能。■
参考文献
1 冯晖,来凤琪,王绍银等. 计算机密码学.中国铁道出版社,1999
2 赵俊超等. 集成电路的vhdl教程. 北京希望电子出版社,2002
(收稿日期:2004-06-18)