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算法對內存的要求低,很適合應用于計算資源有限的領域,比如嵌入式產品和手持設備,具有很高的應用潛力.
參考鏈接:http://www.picavr.com/news/2009-10/1502.htm |