1引 言
作为数字电视新的发展方向,基于硬盘的PVR机顶盒受到消费者的欢迎。同时,由于PVR将录制的能力赋予用户,使得对节目内容的非法复制、传播成为可能,这将给运营商造成巨大的经济损失。因此对硬盘中所存储节目内容进行持久保护的必要性逐渐被广播提供商所认识和要求。AES算法是由美国国家标准和技术研究所(NIST)用时3年,历经2轮评估,选出的高级加密算法。AES的所有设计原则都是公开的,没有专利权方面的问题,任何人都可以通过正常渠道得到并使用这种算法。作为新一代的数据加密标准,AES汇聚了强安全性、高性能、高效率、易用和灵活等优点,加密速度快,对内存要求低,非常适合应用在嵌入式平台上。本文在分析AES加密算法原理的基础上,着重说明算法的实现步骤,用C语言完整地实现了AES算法的加/解密操作,并在PVR机顶盒中实现应用。
2 AES加密/解密算法原理简介
AES算法属于分组密码算法,它的输入分组、输出分组及加/解密的中间分组长度都是128 b。密钥长度有3种:128,192和256 b。
AES算法基于置换和代换运算。置换是对数据重新进行排列,代换是将一个数据单元替换为另一个。本文采用的AES-128算法输入为128位数据,密钥长度也是128位。每一轮都需要1个与输入分组具有相同长度的扩展密钥参与。
AES算法主要由3部分组成:轮变化、圈数和密钥扩展。本文详细介绍AES加/解密算法中各部分的实现步骤;结合C语言,实现高级加密算法AES在PVR数字电视机顶盒中的应用。所采用的AES-128算法的加/解密模块程序流程图如图1所示。
2.1 加密变换
AES加密算法的每一轮加密都使用代替和混叠并行地处理整个数据分组状态。主要是通过对5个子模块SubBytes,ShiftRows,MixColumns,AddRounke和GetNewEncrypt的循环调用实现。
Subbyte变换即s盒置换,是AES算法中是惟一的非线性变换。它对状态中的每个字节用S-box做一个置换。每个字节的前4位指定s盒的行值,后4位指定了S盒的列值,然后取出S盒中对应行和列的元素作为输出代替该字节。
ShiftRow完成基于行的循环移位操作。它将状态中的行按照不同的偏移量进行循环移位,一般情况下,第0行不动,第1行循环左移1个字节,第2行循环左移2个字节,第3行循环左移3个字节。
MixColumn对状态列进行混淆变换。将ShiftRow的变换结果看作GF(28)域上的多项式,乘以c(x)=03x3+01x2+01x+02,然后模上不可约多项式x8+x4+x3+x+1。本文根据GF(28)有限域的运算规则,将列变换改进为简单的移位和异或操作。设1个字节为(b7b6b5b4b3b2b1b0),则:
AddRounkey是将列混合后的结果与子密钥进行简单的按字节异或逻辑运算。
GetNewEncrypt生成下一轮变换所需密钥,它是按矩阵的列进行分组的,产生方法如下:如果第i列不是4的倍数,即(i%4==1),那么i列由如下等式确定:
W(i)=W(i-4)XORW(i-1)。
如果第i列是4的倍数,即(i%4==0),则i列由如下等式确定:
W(i)=W(i-+4)XOR T[W(i-1)]
其中T[W(i-1)]是w(i-1)的一种转换形式,设W(i-1)=[a,b,c,d]。实现方式如下:
将W(i-1)的元素左移一位,即[b,C,d,a]。将这4个字节输入到S盒,得到新的4个字节[e,f,g,h]。计算新一轮的常量r(i)=2(i-4)/4。生成转换后的列[e XOR r(i),f,g,h]。
第i轮的密钥生成列W(4i),W(4i+1),W(4i+2),W(4i+3),于是得到第i+1轮的密钥矩阵。
在计算轮常量时,当加密轮数大于或等于9时,8位不足以表示其值,此时将mod(x8+x4+x3+x+1),值为0x1b,之后的值就是0x1b得倍数。即r(i)大于等于256时,r(i)的值为0x1b*(turn-8)。
AddRounkey变换将MixColumn变换的结果和GetNewEncrypt变换的结果按对应字节异或,所得结果作为下一轮变换的输入。
上述的5个步骤完成了一轮AES加密变换,根据加密轮数重复上述过程,直到最后一轮变换。最后一轮变换的不同之处在于没有进行列混叠变换MixCol-umn,AddRounkey变换直接将ShiftRow变换后的结果和GetNewEncrypt变换的结果按对应字节异或,结果作为AES变换的输出,即得到密文。
2.2 解密变换
AES解密变换是加密变换的逆变换,它们结构类似,只需将操作逆序进行。操作SubBytes,ShiftRows和Mixcolumns均需使用它们的逆操作InvSubBytes,InvShiftRows和InvMixcolumns代替,而操作AddRounkey的逆操作就是其本身。
解密变换的第一步只需进行AddRounkey,Inv-ShiftRows和InvSubBytes变换得到下一级输入。最后一轮仅需AddRounkey即可得到明文,完成解密。中间的解密操作重复以下步骤:
(1)InvGetNewEncrypt:生成新的解密密钥;
(2)AddRounkey:将该轮的密文同该轮的密钥相异或;
(3)InvMixcolumns:逆列变换;
(4)InvShiftRows:逆行移位变换;
(5)InvSubBytes:逆S-盒变换。
AES算法是一个非对称密码体制,所以尽管解密算法与加密算法结构相近,但是它的解密过程要比加密过程复杂和费时。主要原因在于InvMixcolumns变换中运算的固定多项式变为C(x)=0Bx3+0Dx2+09x+0E。同样将逆列变换改进为简单的移位和异或操作。设1个字节为(b7b6b5b4b3b2b1b0),则:
3 PVR功能介绍及内容保护关键技术
具有PVR功能的机顶盒除具有收看数字电视等的基本功能外,还具有增强的手动录放像功能、时移播放、智能录像、边看边录、画中画等新功能,是数字电视新的发展趋势。
本文采用ST公司的单片信源解码芯片STi7109实现高清晰度数字电视解码,其内嵌的ATAPI接口实现了与SATA硬盘的无缝连接,为机顶盒实现PVR功能提供了条件。机顶盒PVR功能的原理框图如图2所示。信号下TUNER经过QAM解调后,以TS流的形式传人STi7109,通过PID滤波器选出指定的一路节目。由于硬盘的读写速度较慢,在系统中开辟一个BUFFER来缓冲数据。当BUFFER中的数据达到门限时,将其所存的数据写入硬盘。
记录方式有2种:可以只使用1个TS缓存器,将缓存器中的数据存入硬盘,并反馈回STi7109,经过解复用将其分解为音、视频PES包,PES包即可以被送往音/视频解码器解码;也可以使用2个不同的缓存器,一个存放将要存入硬盘的TS数据,一个存放即将被解码的PES包。
PVR机顶盒将高清的节目流存储在通用硬盘中,将录制的能力赋予用户,这就使得对节目的非法复制、传播成为可能。由此,对于节目著作权的保护形成挑战。而且节目是以数字格式被录制于硬盘之上。而硬盘有可能并且很容易被拆下来,连接到通用PC机上,节目就很容易被复制并广泛传播,而且还保持原来的高清晰质量。无疑,这将给提供商带来巨大的经济损失。
本文所采用的方法是在TS缓存器和硬盘之间增加AES模块。对即将存储的节目流先进行AES加密再保存。相应的,在播放存储节目时,先对节目流进行解密,再送人下一级操作。
数字电视系统中视音频数据流的比特传输率要比其他的数据类型高出许多,而且在传输时要求较高的实时性,对延时、抖动极其敏感。这意味着对视音频数据进行加密时,应该考虑加密算法的速度问题,以保证加解密所耗费的时间较少,满足观众对所收看节目的同步性要求。为了平衡多方面的性能,并且考虑到实际系统的需要,这里选择AES-128作为实际使用的算法。
在完成AES分组加/解密算法的基础上,将其应用到PVR机顶盒硬盘文件管理的加/解密模块中,操作步骤如下:
(1)读取待处理数据存放到大小为64 kB的TS缓存器1中;
(2)根据用户操作对TS缓存器中的数据进行加密或解密;
(3)用密钥扩展程序对密钥加以扩展;
(4)从缓存器中取出16个字节作为中间变量STATE;
(5)对STATE中的数据进行加密/解密。并写入缓存器2;
(6)如果读取到TS缓存器1中最后一个数据,将缓存器2中的全部内容存入硬盘并回到操作(1),否则回到操作(4);
(7)如果等待加/解密的TS流或文件已经结束,则关闭文件。
上述步骤实现对录制视音频数据流的加密/解密操作。
4 AES加密/解密算法在PVR机顶盒上的实验仿真
本设计使用的是ST公司的Sti7109芯片,基于ST21嵌入式操作系统完成。下表是AES模块分别在ST21和Windows XP两个平台下对视音频数据流进行加/解密操作所使用的时间。
由上表可以求出在资源相对有限的嵌入式环境中,本设计的加密速率约为6.0 Mb/s,解密速率约为5.2 Mb/s。可以满足视音频数据流的应用需求。
5 结语
AES高级数据加密算法不管是从安全性、灵活性还是效率等方面都优于传统数据加密算法,而且AES算法对内存的要求低,很适合应用于计算资源有限的领域,比如嵌入式产品和手持设备,具有很高的应用潜力。