引言
對通信數(shù)據(jù)進行加密的方法可分為兩大類:軟加密和硬加密。其中硬加密具有加密強度大、可靠性高等特點。本文根據(jù)流密碼發(fā)生器原理,用CPLD設(shè)計出了Gollmann流密碼發(fā)生器。
原理
密碼安全的偽隨機序列發(fā)生器用于流密碼時十分理想,這些發(fā)生器的輸出與真正隨機的位發(fā)生器難以區(qū)分,只需將發(fā)生器的輸出與明文流異或就可以得到良好的流密碼。
Gollmann流密碼發(fā)生器由一串LFSR(線性反饋移位寄存器)構(gòu)成,每個LFSR的時鐘由前一個LFSR控制,如果t-1時刻LFSR-1的輸出為1,則LFSR-2在t時刻階躍;如果t-1時刻LFSR-2的輸出為1,則LFSR-3在t時刻階躍,以此類推,最后一個LFSR的輸出為發(fā)生器的輸出。如果所有LFSR的長度都為l,則n個LFSR構(gòu)成的系統(tǒng)的線性復(fù)雜度為:
l*(2l-1) n-1
流密碼發(fā)生器的設(shè)計
根據(jù)Gollmann流密碼發(fā)生器的原理設(shè)計的發(fā)生器的原理框圖可用MAX+plusII的電路圖方式表示,如圖1所示。
在Gollmann流密碼發(fā)生器中,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流密碼發(fā)生器的工作流程為:在初始時刻,使能信號en為1時將所有LFSR中的寄存器賦值為1。隨著時鐘clk下降沿的到來,將第一個LFSR的輸出信號與輸入信號1異或,再將其結(jié)果和clk進行與運算作為第二個LFSR的輸入,同時該異或結(jié)果還將和第二個LFSR的輸出進行異或。異或后的結(jié)果既同clk做與運算后作為第三個LFSR的輸入,同時又與第三個LFSR的輸出做異或運算。第三次異或后的結(jié)果即為Gollmann流密碼發(fā)生器的輸出結(jié)果。
本文選用Altera公司的MAX+plus II 10 Baseline對VHDL源程序編譯,這個工具支持VHDL的編譯和仿真。對Gollmann流密碼生成器的程序進行仿真,結(jié)果如圖2所示。
圖2中en為使能信號,clk為50MHz的時鐘信號,dataout為輸出信號。Lfsr32sh,lfsr16sh,lfsrsh為各個LFSR寄存器值的變化過程。
在所有LFSR初始值都為1時(初始值不同,輸出的結(jié)果就有所不同),Gollmann流密碼生成器所產(chǎn)生的輸出類似于隨機序列,如圖2中dataout所示,可以滿足一般的加密要求。
結(jié)語
本文設(shè)計的Gollmann流密碼生成器結(jié)構(gòu)簡單,加密能力較強,同時還可以繼續(xù)擴充多個LFSR,以增強其加密功能。
責任編輯:gt
-
cpld
+關(guān)注
關(guān)注
32文章
1246瀏覽量
169152 -
寄存器
+關(guān)注
關(guān)注
31文章
5295瀏覽量
119836 -
通信
+關(guān)注
關(guān)注
18文章
5950瀏覽量
135788
發(fā)布評論請先 登錄
相關(guān)推薦
評論