- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
基于TMS320C6416T的IP视频电话加密引擎
2 软件设计
2.1 算法选择及加密方式
2.1.1 AES算法和工作模式
IP视频电话数据流量大,SIP信令和音视频数据采用UDP方式传输,不可避免地存在数据丢包问题,因而使用分组密码算法较为合适。考虑密码算法的速度和安全性等因素,本系统采用AES分组密码算法实现各种数据端到端加密。
AES算法作为迭代分组密码算法其分组长度和密钥长度均可改变,在使用上更加灵活安全。论证表明,它能够抵抗所有目前技术水平下的已知和潜在的密码攻击,是更加安全可靠的加密算法。AES使用长为32×Nk(Nk=4、6、8)的比特流作为密钥,每次对长为32×Nb(Nb=4、6、8)比特的明文组进行加密,得到的密文组长为32×Nb比特,迭代轮数Nr=Max(Nb,Nk)+6。
AES算法有5种基本工作模式:ECB、CBC、OFB、CFB、CTR。考虑到IP数据包丢失问题,如采用反馈模式需考虑数据同步问题,因而降低了数据处理效率。而ECB模式简单易操作,不存在数据丢失产生的通信同步问题SIP信令中的会话描述符SDP和音视频数据都没有固定的格式,攻击者也难以通过统计特性分析密文,因而采用ECB模式是安全易行的。
2.1.2 数据加密方式
在IP网络中,视频和音频数据是分类打包、分段传输的,因而对它们的加密处理也需单独进行。目前针对视频数据主要有选择性加密和完全加密2种方式[4]。选择性加密利用视频数据的数据结构,对视频流中的部分数据(如I帧)加密,这有利于减小系统开销,但安全性较差。而完全加密不考虑视频数据结构,加密所有视频码流,虽然系统开销较大,但安全性较高。本系统对视频、音频数据、SIP信令均采用完全加密方式。
2.2 通信机制和数据格式
2.2.1 通信机制
DSP和IP视频电话终端通过SPI总线通信,SPI作为一种串行同步通信方式,通信速率可达到4 Mb/s或者更高,适合音视频数据传输。在本系统中,将DSP的多通道缓冲串行口McBSP[2]配置为SPI模式,IP视频电话终端配置为主设备,DSP配置为从设备。
采用中断方式接收或发送数据会增加CPU的负担。将增强型存储器直接访问EDMA[3]与McBSP结合使用,使得CPU加解密数据与EDMA数据接收或发送并行进行,将大大提高DSP的运行效率。具体流程为:(1)DSP通过McBSP接收待处理数据,将数据保存在指定映射的存储器中,随后EDMA通道搬运数据至片内L2缓存以供CPU提取并处理;(2)CPU加解密处理完成后,通过相反的路径发送给IP视频电话终端。为确保CPU数据处理和EDMA数据传输同步,在L2缓存开辟一对乒乓缓存(Ping-Pong Buffer),分别用于接收和发送数据。
2.2.2 数据格式
为了便于处理器之间的数据交互,定义通信数据格式如下:
数据头标志:长度为2 B,表示一个数据包的起始。
数据类型:长度为2 B,定义0x0001为IP视频电话终端发送的待加密数据,0x0010表示IP视频电话终端发送的待解密数据,0x0100表示DSP回送给IP视频电话终端的已加密数据,0x1000表示DSP回送给IP视频电话终端的已解密数据,0x0101表示IP视频电话终端发送的种子密钥,0x1010表示其他控制数据。
数据长度:长度为2 B,表示待处理数据的有效字节数。以太网帧的最大长度是1 500 B,因此不能超过这个长度。
数据头校验和:长度为2 B,防止头部因传输错误而执行误操作。
RTP数据载荷:小于1 500 B,表示加/解密数据、种子密钥、控制数据等。
2.3 软件设计要点
根据DSP系统架构,考虑AES算法和通信数据的特点,充分发挥DSP的数据处理能力是软件设计的重点。
2.3.1 AES算法优化设计
AES的轮函数由字节变换、行位移、列混合、密钥加4个部件组成[5]。(1)字节变换是非线性变换,独立地对状态的每个字节进行变换,可用代换表(S盒)的方式实现;(2)行移位是将状态阵列的各行进行循环移位;(3)列混合使用有限域上的矩阵乘法,可以用查表操作实现;(4)密钥加可以通过执行一个32位"异或"运算来实现。通过算法优化,可将有限域矩阵乘法和S盒简化为查表和"异或"两种基本运算,并充分利用DSP处理器32位总线结构特点,大大降低了算法复杂度。
2.3.2 使用软件流水技术
AES是迭代分组密码,共Nr轮迭代,一般采用C循环程序实现,循环是影响系统实时性的一个重要因素。软件流水技术用于设置循环内指令的运行方式,使循环的多次迭代能够并行执行。程序应该考虑合理的循环迭代次数,以保证软件流水能够顺利进行。将循环展开可以增加及并行执行指令数,从而改进流水编排,提升循环性能。同时应该正确使用pragma指示和-ms、-mh等编译选项。
2.3.3 合理设置CCS编译器选项
使用const关键字定义变量可提高代码性能和稳定性;联合使用-pm与-o3选项可进行程序级优化并有效地消除相关性;-mt选项有利于消除存储器相关性;这些选项都能大大提升代码的执行速度[6]。测试表明,选择C代码优化选项,可使AES算法的执行速度提高近一倍。
系统关键代码如下:
void main()
{ //初始化CSL
CSL_init();
//SPI配置
McBSP_config(&McBSPConfig);
//乒乓方式EDMA配置
EDMA_config(hEDMAPing, &EDMAConfigRcv);
EDMA_config(hEDMAPong, &EDMAConfigSnd);
//密钥扩展
KeyExpansion(CipherKey,ExpandedKey);
while(1)
{ //EDMA传输完成后对数据加解密密处理
if(EDMAFlag)
DataProcessing();
}
}
来源:维库开发网
上一篇:利用DAC实现高精度、双极性电压输出数模转换
下一篇:锌锰干电池充电器电路