新闻中心

EEPW首页>消费电子>设计应用> 基于TMS320C6416T的IP视频电话加密引擎

基于TMS320C6416T的IP视频电话加密引擎

作者: 时间:2010-11-05 来源:网络 收藏

  AES算法有5种基本工作模式:ECB、CBC、OFB、CFB、CTR。考虑到数据包丢失问题,如采用反馈模式需考虑数据同步问题,因而降低了数据处理效率。而ECB模式简单易操作,不存在数据丢失产生的通信同步问题S信令中的会话描述符SDP和音数据都没有固定的格式,攻击者也难以通过统计特性分析密文,因而采用ECB模式是安全易行的。

  2.1.2 数据方式

  在网络中,和音频数据是分类打包、分段传输的,因而对它们的处理也需单独进行。目前针对数据主要有选择性和完全加密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);

  //密钥扩展



评论


相关推荐

技术专区

关闭