基于TMS320C6416T的IP視頻電話(huà)加密引擎
AES算法有5種基本工作模式:ECB、CBC、OFB、CFB、CTR??紤]到IP數據包丟失問(wèn)題,如采用反饋模式需考慮數據同步問(wèn)題,因而降低了數據處理效率。而ECB模式簡(jiǎn)單易操作,不存在數據丟失產(chǎn)生的通信同步問(wèn)題SIP信令中的會(huì )話(huà)描述符SDP和音視頻數據都沒(méi)有固定的格式,攻擊者也難以通過(guò)統計特性分析密文,因而采用ECB模式是安全易行的。
2.1.2 數據加密方式
在IP網(wǎng)絡(luò )中,視頻和音頻數據是分類(lèi)打包、分段傳輸的,因而對它們的加密處理也需單獨進(jìn)行。目前針對視頻數據主要有選擇性加密和完全加密2種方式[4]。選擇性加密利用視頻數據的數據結構,對視頻流中的部分數據(如I幀)加密,這有利于減小系統開(kāi)銷(xiāo),但安全性較差。而完全加密不考慮視頻數據結構,加密所有視頻碼流,雖然系統開(kāi)銷(xiāo)較大,但安全性較高。本系統對視頻、音頻數據、SIP信令均采用完全加密方式。
2.2 通信機制和數據格式
2.2.1 通信機制
DSP和IP視頻電話(huà)終端通過(guò)SPI總線(xiàn)通信,SPI作為一種串行同步通信方式,通信速率可達到4 Mb/s或者更高,適合音視頻數據傳輸。在本系統中,將DSP的多通道緩沖串行口McBSP[2]配置為SPI模式,IP視頻電話(huà)終端配置為主設備,DSP配置為從設備。
采用中斷方式接收或發(fā)送數據會(huì )增加CPU的負擔。將增強型存儲器直接訪(fǎng)問(wèn)EDMA[3]與McBSP結合使用,使得CPU加解密數據與EDMA數據接收或發(fā)送并行進(jìn)行,將大大提高DSP的運行效率。具體流程為:(1)DSP通過(guò)McBSP接收待處理數據,將數據保存在指定映射的存儲器中,隨后EDMA通道搬運數據至片內L2緩存以供CPU提取并處理;(2)CPU加解密處理完成后,通過(guò)相反的路徑發(fā)送給IP視頻電話(huà)終端。為確保CPU數據處理和EDMA數據傳輸同步,在L2緩存開(kāi)辟一對乒乓緩存(Ping-Pong Buffer),分別用于接收和發(fā)送數據。
2.2.2 數據格式
為了便于處理器之間的數據交互,定義通信數據格式如下:
數據頭標志:長(cháng)度為2 B,表示一個(gè)數據包的起始。
數據類(lèi)型:長(cháng)度為2 B,定義0x0001為IP視頻電話(huà)終端發(fā)送的待加密數據,0x0010表示IP視頻電話(huà)終端發(fā)送的待解密數據,0x0100表示DSP回送給IP視頻電話(huà)終端的已加密數據,0x1000表示DSP回送給IP視頻電話(huà)終端的已解密數據,0x0101表示IP視頻電話(huà)終端發(fā)送的種子密鑰,0x1010表示其他控制數據。
數據長(cháng)度:長(cháng)度為2 B,表示待處理數據的有效字節數。以太網(wǎng)幀的最大長(cháng)度是1 500 B,因此不能超過(guò)這個(gè)長(cháng)度。
數據頭校驗和:長(cháng)度為2 B,防止頭部因傳輸錯誤而執行誤操作。
RTP數據載荷:小于1 500 B,表示加/解密數據、種子密鑰、控制數據等。
2.3 軟件設計要點(diǎn)
根據DSP系統架構,考慮AES算法和通信數據的特點(diǎn),充分發(fā)揮DSP的數據處理能力是軟件設計的重點(diǎn)。
2.3.1 AES算法優(yōu)化設計
AES的輪函數由字節變換、行位移、列混合、密鑰加4個(gè)部件組成[5]。(1)字節變換是非線(xiàn)性變換,獨立地對狀態(tài)的每個(gè)字節進(jìn)行變換,可用代換表(S盒)的方式實(shí)現;(2)行移位是將狀態(tài)陣列的各行進(jìn)行循環(huán)移位;(3)列混合使用有限域上的矩陣乘法,可以用查表操作實(shí)現;(4)密鑰加可以通過(guò)執行一個(gè)32位“異或”運算來(lái)實(shí)現。通過(guò)算法優(yōu)化,可將有限域矩陣乘法和S盒簡(jiǎn)化為查表和“異或”兩種基本運算,并充分利用DSP處理器32位總線(xiàn)結構特點(diǎn),大大降低了算法復雜度。
2.3.2 使用軟件流水技術(shù)
AES是迭代分組密碼,共Nr輪迭代,一般采用C循環(huán)程序實(shí)現,循環(huán)是影響系統實(shí)時(shí)性的一個(gè)重要因素。軟件流水技術(shù)用于設置循環(huán)內指令的運行方式,使循環(huán)的多次迭代能夠并行執行。程序應該考慮合理的循環(huán)迭代次數,以保證軟件流水能夠順利進(jìn)行。將循環(huán)展開(kāi)可以增加及并行執行指令數,從而改進(jìn)流水編排,提升循環(huán)性能。同時(shí)應該正確使用pragma指示和-ms、-mh等編譯選項。
2.3.3 合理設置CCS編譯器選項
使用const關(guān)鍵字定義變量可提高代碼性能和穩定性;聯(lián)合使用-pm與-o3選項可進(jìn)行程序級優(yōu)化并有效地消除相關(guān)性;-mt選項有利于消除存儲器相關(guān)性;這些選項都能大大提升代碼的執行速度[6]。測試表明,選擇C代碼優(yōu)化選項,可使AES算法的執行速度提高近一倍。
系統關(guān)鍵代碼如下:
void main()
{ //初始化CSL
CSL_init();
//SPI配置
McBSP_config(McBSPConfig);
//乒乓方式EDMA配置
EDMA_config(hEDMAPing, EDMAConfigRcv);
EDMA_config(hEDMAPong, EDMAConfigSnd);
//密鑰擴展
評論