如何用FPGA實(shí)現(xiàn)基于3DES加密算法的電話加密

針對(duì)通信安全性問題,我們?cè)O(shè)計(jì)了一種3DES加密算法的電話加密方案,該方案將算法模塊移植到現(xiàn)場(chǎng)可編程門陣列中,其加密功能模塊可用于點(diǎn)對(duì)點(diǎn)的語音通信和其他低速率數(shù)據(jù)通信模型,并在公用電話網(wǎng)上試驗(yàn)成功。

一、3DES加密算法

1、DES總體流程

DES( Data Encryption Standard)是早期比較實(shí)用的一種分組加密標(biāo)準(zhǔn),明文分組長(zhǎng)度為64位,密文分組長(zhǎng)度也是64位,由非線性盒(S盒)、置換運(yùn)算盒(P盒)、輪函數(shù)和密鑰發(fā)生器,經(jīng)過16輪迭代實(shí)現(xiàn)在密鑰作用下明文到密文的映射。

算法由三個(gè)階段構(gòu)成:首先,64位的明文Di在一個(gè)初始置換IP(Initial Placement)后生成Do:

明文組分成左半部分Lo和右半部分Ro;接下來明文在16輪子密鑰的作用下經(jīng)過16輪同樣的變換(每輪變換包括替代函數(shù),非線性查表及和異或運(yùn)算)將數(shù)據(jù)和密鑰結(jié)合起來,最后一輪輸出64位,其左邊和右邊兩部分交換得到預(yù)輸出D0;最后階段,預(yù)輸出經(jīng)過一個(gè)逆置換運(yùn)算IP'1算法生成了 64位密文結(jié)果DE。

其中初始置換IP的作用是把比特序列的次序打亂其函數(shù)功能:

其中IP是一個(gè)初等64階方陣經(jīng)過初等變換得到的,每行每列中只有一個(gè)1元素,起到對(duì)原序列抽樣重排作用,同理,初始逆置換可用(5)式表達(dá):

2、輪變換形

每輪運(yùn)算的詳細(xì)運(yùn)算每個(gè)64位中間結(jié)果的左右兩部分當(dāng)成兩個(gè)獨(dú)立的32位數(shù)據(jù)完成如下的邏輯關(guān)系:

在這個(gè)輪運(yùn)算中輸入的32位Ri-1,先被擴(kuò)展到48位,這種擴(kuò)展運(yùn)算是把原序列中的一些位上的碼元復(fù)制后加在序列后增加了序列長(zhǎng)度,再整體重排順序得到48位數(shù)據(jù)4,其函數(shù)功能可以數(shù)學(xué)表達(dá)為:

E是一個(gè)32×48階擴(kuò)展矩陣,保證其每列只有一個(gè)1完成對(duì)原比特流的采樣擴(kuò)展運(yùn)算。

擴(kuò)展后的Ri-1與48位密鑰K。進(jìn)行逐位異或運(yùn)算,得到48位結(jié)果:

而后得到的結(jié)果再壓縮成32位,其數(shù)學(xué)表述為乘以擴(kuò)展矩陣E的廣義逆矩陣:

再以8位為單位進(jìn)行非線性查表映射(S盒變換),這里的非線性映射是指有限集(2的8次方=256個(gè)元素)自身到自身的非線性一一映射,在編程中可記錄下所產(chǎn)生的無重復(fù)隨機(jī)數(shù),再以輸入為地址查表得到。

最后進(jìn)行置換運(yùn)算打亂比特序列順序:

置換矩陣P同樣是一個(gè)初等單位陣經(jīng)過初等變換得到的。生成32位數(shù)據(jù)D與Li-l異或生成Ri:

3、輪密鑰生成

64位初始密鑰先經(jīng)過篩選得到56位數(shù)據(jù),56位數(shù)據(jù)經(jīng)過置換選擇重新排列后分成左右各28位,分別經(jīng)過循環(huán)移位運(yùn)算后合并,重新排序并篩選出48位作為第一輪密鑰,而后進(jìn)行相同的運(yùn)算產(chǎn)生出每輪的密鑰,分別參與每輪的加密運(yùn)算。其中的置換運(yùn)算和循環(huán)運(yùn)算與輪變換類似,都可以用矩陣乘法表示;篩選運(yùn)算可以用篩選抽樣矩陣完成,即每行每列中至多有一個(gè)0元素的矩陣;移位運(yùn)算可以表示成為左乘一個(gè)經(jīng)過初等行變換的單位矩陣。

4、3DES加密算法

經(jīng)過實(shí)踐證明,DES算法密鑰太短,抗攻擊能力不強(qiáng),在它基礎(chǔ)上的3DES算法,密碼鑰匙足夠長(zhǎng)(64 x3),有很好的抵抗攻擊的能力,本設(shè)計(jì)采用了DES-EDE3模式,使用3個(gè)不同的密鑰依次執(zhí)行:Ki密鑰作用下的加密運(yùn)算;K密鑰作用下的解密運(yùn)算;匠密鑰作用下的加密運(yùn)算,生成密文。

其中,表示明文,E為加密運(yùn)算處理,D為解密運(yùn)算處理。

5、加密算法的改進(jìn)優(yōu)化

現(xiàn)場(chǎng)可編程門陣列(Field Programmable Gate Array,F(xiàn)PGA)是一種可以實(shí)現(xiàn)數(shù)字邏輯運(yùn)算的可配置芯片。多數(shù)FPGA芯片的基本邏輯單元( LES)以查找表算法實(shí)現(xiàn)數(shù)字信號(hào)處理,在實(shí)現(xiàn)加密算法的非線性映射單元上具有很強(qiáng)的可移植性,算法的關(guān)鍵數(shù)據(jù)存放在配置FPGA的EPROMEsJ中,系統(tǒng)上電后自動(dòng)加載。

(1)利用ROM實(shí)現(xiàn)組合邏輯

加密算法主要由三種基本運(yùn)算構(gòu)成:一種是置換運(yùn)算和逆置換運(yùn)算,其實(shí)現(xiàn)方法是乘以初等變換的矩陣或廣義矩陣,逆置換乘以廣義逆矩陣;第二種就是有限集自身到自身元素間的非線性映射;還有一些異或運(yùn)算。上述三種運(yùn)算都是可逆的,所以解密運(yùn)算也就是上述運(yùn)算過程的逆過程。

針對(duì)算法的硬件開發(fā)平臺(tái)FPGA,對(duì)算法進(jìn)行改進(jìn):鑒于FPGA內(nèi)部的查找表邏輯結(jié)構(gòu),還有部分可配置的ROM,如果把這些可以初始化的ROM與算法中組合邏輯的真值表建立起映射關(guān)系就可以用ROM實(shí)現(xiàn)組合邏輯,最典型的就是非線性S盒替代運(yùn)算。這樣就節(jié)省了FPGA內(nèi)部寶貴的邏輯單元,降低了使用芯片的容量和系統(tǒng)的成本。其配置方法可以用如下的硬件描述語言結(jié)合芯片公司開發(fā)軟件的使用方法來設(shè)置。

COMPONENT lpm_rom

GENERIC(

intended_device_family:STRING;

lpm_type: STRING);

PORT(

address: IN STD_LOGIC_VECTOR(7DOYVNT0 0);

q:OUT STD_LOGIC_VECTOR(7 DOWNTO O));

END COMPONENT;

case n is

when 00000000=>result:= 00010101;

when 00000001=>result:= 10010010;

when others=>result:= 10010011;

其中先指定配置對(duì)象lpm_rom,而后用語言對(duì)其配置,不占用邏輯單元實(shí)現(xiàn)了組合邏輯。

(2)雙向信號(hào)處理單元復(fù)用

根據(jù)3DES算法的處理流程來看,不論加密運(yùn)算還是解密運(yùn)算都要用到DES加密運(yùn)算盒D和DES解密運(yùn)算盒E,由此可以想到,在硬件電路中可以只做加密硬件單元D和解密硬件單元E,由控制單元完成控制加密和解密數(shù)據(jù)流的入口順序,也就是說,在加密過程中進(jìn)入順序是EDE,相應(yīng)的密鑰是K1,K2,K3,解密數(shù)據(jù)流進(jìn)入的順序DED,相應(yīng)的密鑰是K3,k2,k1。而控制時(shí)鐘主頻一定要選擇的足夠高,以免發(fā)生同一功能模塊入口處的數(shù)據(jù)擁塞。本設(shè)計(jì)采用的處理時(shí)鐘為2.048Mhz,由外接16. 384Mhz晶振8分頻得到,消耗14個(gè)時(shí)鐘周期完成一個(gè)分組的加密/解密處理功能,用掉時(shí)間不足0.4ms,而16K的數(shù)據(jù)流(64K語音信號(hào)經(jīng)過壓縮芯片以后的速率)經(jīng)過64分組后幀速率為4ms,以幀速度10倍以上的速度進(jìn)行處理足夠能使在加密解密兩路雙向信號(hào)復(fù)用硬件電路時(shí),上級(jí)緩存收集滿下一幀數(shù)據(jù)前完成對(duì)這幀數(shù)據(jù)的處理,而不發(fā)生數(shù)據(jù)擁塞覆蓋現(xiàn)象。

需要說明經(jīng)過雙向數(shù)據(jù)處理復(fù)用,電路中雖然少了一路信號(hào)的處理單元,但是多出了一個(gè)接受處理完成中斷的協(xié)調(diào)控制單元,這個(gè)控制單元需要接收雙向信號(hào)緩存的寫滿中斷,處理單元的閑/忙信號(hào),并發(fā)出相應(yīng)的操作使能信號(hào),邏輯比較復(fù)雜,但因?yàn)檩斎胼敵鲂盘?hào)都是串行一路信號(hào),占用的邏輯單元并不多。

通過把算法中的S盒映射,異或等組合邏輯放入可初始化的ROM單元;并通過增加控制模塊的方法把加密解密處理單元復(fù)用,減少了邏輯單元的消耗,降低了生產(chǎn)制造成本。經(jīng)過編譯仿真后,改進(jìn)前后算法消耗資源對(duì)比表明,改進(jìn)后的算法為以后批量生產(chǎn)ASIC帶來了可觀的經(jīng)濟(jì)效益。

二、電話加密系統(tǒng)設(shè)計(jì)

3DES加密算法提高安全性的代價(jià)是3倍的運(yùn)算量和大量用于存儲(chǔ)運(yùn)算中間結(jié)果的存儲(chǔ)空間,這使得將其移植到電話平臺(tái)上存在一定困難。一方面,語音通信的全雙工模式要求加密解密運(yùn)算保證實(shí)時(shí)性,系統(tǒng)必須有較高處理速度和數(shù)據(jù)存儲(chǔ)能力;另一方面,電話加密從撥號(hào)到握手建立鏈路必須經(jīng)歷電話協(xié)議規(guī)定的雙向信令交換過程,系統(tǒng)還應(yīng)具備把用戶自定義的密鑰寫入加密解密運(yùn)算模塊等控制功能。

系統(tǒng)部分原理針對(duì)加密電話的功能需要,本設(shè)計(jì)采用FPGA作為數(shù)據(jù)處理單元,單片機(jī)完成系統(tǒng)控制功能。FPGA用硬件邏輯電路實(shí)現(xiàn)了以往程序指令處理完成的運(yùn)算模塊,保證了足夠的運(yùn)算速度,能達(dá)到運(yùn)算實(shí)時(shí)性的要求。單片機(jī)完成從PC接收密鑰寫入FPGA,使能FPGA工作,傳輸交換信令等控制功能。

工作前,先將用戶在PC上輸入的密鑰通過串口寫入單片機(jī),再在芯片的軟件開發(fā)環(huán)境中,把仿真通過的FPGA配置數(shù)據(jù)通過程序下載口(JTAG)下載到配置芯片中去。系統(tǒng)上電后,配置芯片與FPGA之間在接口時(shí)序的控制下自動(dòng)對(duì)FPGA進(jìn)行配置,在FPGA內(nèi)生成實(shí)現(xiàn)加密/解密算法的硬件邏輯電路,同時(shí)單片機(jī)禁用FPGA的處理功能,使FPGA工作于被寫入的狀態(tài),在單片機(jī)采樣時(shí)鐘控制下從單片機(jī)讀入初始密碼鑰匙,而后單片機(jī)控制信令交換、撥號(hào)和建立鏈路。待加密的語音信號(hào)8K采樣,8bit量化后生成64K數(shù)據(jù)流,經(jīng)過數(shù)據(jù)壓縮芯片后數(shù)據(jù)速度降為16K,F(xiàn)PGA對(duì)其加密由單片機(jī)將其調(diào)制發(fā)送出去,反向數(shù)據(jù)流經(jīng)過上面的逆過程完成解密。加密解密在兩個(gè)數(shù)據(jù)通道中傳輸,同時(shí)進(jìn)行完成全雙工通信。

系統(tǒng)采用了一塊異步專用PCM數(shù)據(jù)壓縮芯片(Dallas公司生產(chǎn)),目的在于減輕加密算法的壓力。從另一個(gè)角度說,壓縮也增加了加密算法的復(fù)雜性。這是一款雙通道的芯片,可以同時(shí)提供兩個(gè)信道完成壓縮和解壓縮。需要異步1OMhz的處理時(shí)鐘,在給定信號(hào)滿足接口時(shí)序時(shí)進(jìn)行加密/解密雙向處理。本設(shè)計(jì)采用Altera公司Acexlk系列的FPGA芯片和Epc2配置芯片組成處理平臺(tái),在外接16. 384Mhz的晶振時(shí)鐘下完成數(shù)據(jù)處理。

三、系統(tǒng)軟件設(shè)計(jì)

FPGA內(nèi)的邏輯電路是選用硬件描述語言VHDLE7J在Altera公司提供Qutuars軟件開發(fā)環(huán)境下編寫、調(diào)試和仿真的。

串并轉(zhuǎn)換數(shù)據(jù)緩存模塊

將數(shù)據(jù)壓縮芯片串行輸入的數(shù)據(jù)流緩存后,按64比特進(jìn)行分組生成待加密的明文,在控制信號(hào)的控制下進(jìn)入加密處理模塊。它接收64K語音信號(hào)經(jīng)過數(shù)據(jù)壓縮處理后產(chǎn)生的16K串行數(shù)據(jù)流,緩存成64位一組的幀格式發(fā)出中斷,等待處理部分采樣。

加密,解密處理模塊

接收密鑰存儲(chǔ)生成模塊送入的密鑰數(shù)據(jù),對(duì)來回兩路的明文和密文,按DES-EDE3算法進(jìn)行加密運(yùn)算和解密運(yùn)算并送往下一級(jí)的處理單元,其中加密解密是在控制模塊作用下復(fù)用D單元和E單元處理完成的。

加密后數(shù)據(jù)緩存模塊

將加密后的分組密文暫存,發(fā)出寫滿中斷,等待單片機(jī)的采樣時(shí)鐘采集密文數(shù)據(jù)。

待解密數(shù)據(jù)模塊

將待解密的分組數(shù)據(jù)模塊暫存,發(fā)出寫滿信號(hào),等待處理模塊閑時(shí)將數(shù)據(jù)采出解密。

并串轉(zhuǎn)換數(shù)據(jù)采集模塊

將解密后的64位明文數(shù)據(jù)進(jìn)行并串轉(zhuǎn)換,并在解壓縮的接口時(shí)序要求下串行送出數(shù)據(jù)進(jìn)行解壓縮。

密鑰存儲(chǔ)生成模塊

將單片機(jī)寫入的初始密鑰保存,并生成輪密鑰供處理模塊進(jìn)行運(yùn)算。

控制模塊和時(shí)鐘模塊

提供處理時(shí)鐘和語音壓縮/解壓縮的接口時(shí)序,以及從壓縮芯片采集明文和從單片機(jī)采集密文的采樣時(shí)鐘;協(xié)調(diào)各模塊之間的完成中斷請(qǐng)求,并發(fā)出控制信號(hào)進(jìn)行流程操作。

小知識(shí)之FPGA

FPGA(Field-Programmable Gate Array),即現(xiàn)場(chǎng)可編程門陣列,它是在PAL、GAL、CPLD等可編程器件的基礎(chǔ)上進(jìn)一步發(fā)展的產(chǎn)物。它是作為專用集成電路(ASIC)領(lǐng)域中的一種半定制電路而出現(xiàn)的,既解決了定制電路的不足,又克服了原有可編程器件門電路數(shù)有限的缺點(diǎn)。