吳 貝,侯志龍,徐遙令
(深圳創維-RGB電子有限公司研發總部,廣東 深圳 518108)
基于國產高安芯片的電視方案設計與實現
吳 貝,侯志龍,徐遙令
(深圳創維-RGB電子有限公司研發總部,廣東 深圳 518108)
針對使用國產高安芯片的智能電視,結合海思V801高安芯片,在綜合考慮業務發展和運行商實際需求的基礎上,設計了一套應用于高安芯片電視的安卓操作系統。對系統的引導、內核以及升級等需要添加安全策略的地方做了詳細的闡述和源碼示意。提出的方案在歌華有線數字電視一體機上得到批量生產應用。結果表明,該系統具有良好的安全性,能夠進行快速推廣,具有廣泛的應用價值。關鍵詞: 國產;高安芯片;數字一體機
隨著數字電視業務的推廣,數字機頂盒和CA卡的安全性變得越來越重要。同樣基于有線數字功能的數字一體機,其對應的安全防護也比一般的智能電視要高。運營商為了保證自己的合法收益,防止被黑客破解CA或者被惡意刷機,對數字一體機提出使用高安芯片的要求[1]。
高安芯片,全稱高級安全芯片,是一種可以提供更安全保護措施的芯片方案。與傳統芯片相比,增加了安全信息處理模塊。以海思V801高安芯片為例,提供唯一標識符CHIPID,方便與CA卡綁定,支持BOOT安全啟動,提供BOOT簽名校驗和加密機制,支持密文控制字解擾,支持內容保護,支持高安全PVR,內置安全CPU,支持JTAG保護[2]。
考慮到未來有線數字的發展,數字一體機使用高安芯片將成為必然的趨勢[3],因此本文結合所開發的一款基于國產海思V801高安芯片的數字一體機,介紹如何定制基于國產高安芯片的電視機設計方案。
高安芯片啟動時會完成對BOOT鏡像的簽名校驗,確保BOOT安全。對于非BOOT鏡像,海思高安芯片提供特定簽名模式和通用簽名模式兩種方式對其進行校驗,確保分區安全。特定簽名模式用于鏡像需要加密的場景,其結構通常為簽名頭、鏡像和簽名尾。通用簽名模式用于安全性要求不高的場景,鏡像以明文存儲在Flash中,其結構通常為鏡像和簽名尾。
以海思高安芯片V801為例,如圖1所示,當開機上電后,系統會進行BOOT安全校驗,若校驗失敗,則復位重新開啟流程。校驗成功后判斷當前啟動模式,依據標志位不同,分別啟動Recovery或者Kernel分區。啟動前會校驗對應分區,若校驗Kernel分區失敗則會進入Recovery分區,若校驗Recovery分區失敗則復位。校驗Recovery分區成功后會進入Recovery升級模式,校驗Kernel分區成功則正常進入Android系統。

圖1 開機啟動流程圖
2.1 開機啟動
為了防止惡意刷機,基于高安芯片的系統會對開機啟動引導模塊進行簽名校驗。以海思V801高安芯片為例,當數字一體機上電啟動時,高安主芯片會首先執行固化在芯片內的BootRom代碼,通過校驗KeyArea區域簽名,獲取公鑰,用公鑰校驗Param區域簽名,然后用Param加載Boot區數據到DDR,繼續進行簽名校驗。校驗通過后,跳轉至Boot,也就是系統Bootloader,進行下一步啟動。整個過程由方案商的高安芯片完成,無需系統軟件處理。
2.2 Bootloader啟動kernel
與常規系統不同,Bootloader啟動kernel時需要對相應分區進行簽名校驗。因為高安芯片啟動時僅保證Bootloader安全,而其他分區不受校驗,此時需要由Bootloader來保證敏感區域的安全。以海思V801高安芯片為例,在Boot啟動過程中,會校驗bootargs、kernel以及其他敏感分區(由客戶定制,一般會包含CA部分)的簽名,如果校驗失敗,會自動進入recovery界面,等待系統重新升級。相關代碼如下:
int Android_Main(void)//Android入口
{
load_recovery();//加載recovery分區
}
void load_recovery(void)
{
if (!strcmp(boot_select(), "kernel"))//檢測bootloader啟動是否為kernel
{
run_command("verify_and_boot_app",0); //檢測bootargs、kernel及其他分區
}
}
int do_verify_and_boot_recovery(…)
{
…//校驗
if (failed)//如果校驗bootargs、kernel及其他分區失敗
{
run_command("verify_and_boot_recovery",0);//啟動Recovery
}
}
2.3 Bootloader啟動recovery
當觸發recovery mode時,Bootloader會引導系統啟動recovery。由于升級包驗證是安全環節的重要組成,通常recovery分區也要進行簽名校驗。常規分區簽名校驗在啟動kernel時完成,這里只需要簽名校驗recovery分區即可。驗證通過會進入recovery模式,等待升級。驗證失敗會reset機器,反復驗證recovery分區。此時需要重新燒錄recovery分區才能正常啟動。相關代碼如下:
void load_recovery(void)
{
//判斷啟動為recovery
run_command("verify_and_boot_recovery",0);
…
load_recovery_image();//加載recovery分區
}
int do_verify_and_boot_recovery(…)
{
…//校驗Recovery
if (failed)//如果校驗Revovery失敗
{
//返回值-1,上一層檢測返回值為-1后do_reset()
return -1;
}
…
}
2.4 Android系統安全
系統正常啟動kernel分區后,將會啟動syetem分區。system分區在init.rc里掛載為只讀分區,確保不會被人破壞。開發人員在對system分區進行修改時,會在shell里重新掛載system分區。因此shell命令需要做限制。Android系統通過串口或者adb進入shell,與系統交互,為了兼顧開發和安全,可以在init.rc里設置trigger,控制console和adbd服務開關,方便shell交互,后期將開關關閉。修改init.rc腳本如下:
將adbd服務disabled掉,由屬性persist.sys.openadb控制開關:
on property:persist.sys.openadb=1
start adbd
on property:persist.sys.openadb=0
stop adbd
將console服務disabled掉,由屬性persist.sys.openconsole控制開關:
on property:persist.sys.openconsole=1
start console
on property:persist.sys.openconsole=0
stop console
增加控制這2個屬性的入口,后期去掉。整機系統默認為這2個屬性為關,因此在系統配置文件build.prop中需添加persist.sys.openadb=0和persist.sys.openconsole=0。這樣保證出廠軟件默認關閉串口交互。
2.5 CA卡CHIPID綁定
出于對CA卡的保護,避免被盜版攻擊,高安芯片支持與CA卡一一對應的綁定措施。通常CHIPID會在生成的時候拿到,所以前期開發時需要留出接口,方便生產時及時快速地燒錄CHIPID。相關接口由方案商提供。
2.6 高安開關
當芯片開啟高安時,高安芯片將不再允許燒錄fastboot分區。由于前期開發工作中可能會對該分區做修改,所以一開始默認不會開啟高安,待開發穩定后再開啟高安。因此需要留出開啟高安和檢測高安是否開啟的接口,方便在出廠前打開高安。同時在recovery升級系統里添加檢測高安開啟的動作,防止未開啟高安的芯片被惡意刷機。相關接口由方案商提供,以海思V801為例,代碼如下:
在系統源碼revocery模塊的install.cpp中,函數really_install_package()添加檢驗代碼
if (校驗高安開啟標失敗)
{
ui->Print("return fail after check_has_sig/n");
return INSTALL_CORRUPT;
}
2.7 升級包定制
由于高安開啟后,fastboot分區不能進行升級,因此可以定制不含fastboot分區的升級包和包含簽名fastboot的升級包,方便升級。將已經編譯出的升級包(通常此時該升級包為非簽名fastboot)解壓,按需求拷貝簽名fastboot(或者其他簽名分區,比如recovery等),重新zip壓縮,然后打上Android簽名。以海思V801高安芯片為例,相關腳本命令如下(注意,該命令需要參考分區表和分區鏡像文件名修改參數):
unzip update.zip-d update_unsigned 將update.zip解壓到update_unsigned文件夾。
cp pre_bin/recovery.img update_unsigned/ 將簽名的recovery鏡像拷貝到update_unsigned文件夾。
cp pre_bin/fastboot.img update_unsigned/ 將簽名的fastboot鏡像拷貝到update_unsigned文件夾,若不需要,可以不加這句。此外需要修改升級腳本update_unsigned/META-INF/com/google/android/updater-script。視情況決定是否添加package_extract_file("fastboot.img", "/dev/block/fastboot")。
zip-r update_unsigned.zip * 將update_unsigned壓縮為zip包,然后利用對應平臺的簽名工具執行命令將update_unsigned.zip簽名成update_signed.zip,此時update_signed.zip即為最終簽名版升級包。
此設計方案已在歌華有線數字電視一體機上實現。如圖2所示,該機型基于海思Hi3751V801高安芯片研發,是歌華有線的首款4K超清寬帶電視,產品已經批量生產,安全性得到驗證。

圖2 歌華有線4K數字電視一體機(截圖)
本文系統性地介紹了基于國產高安芯片的數字一體機電視操作系統的定制流程和注意事項,方便開發者按部就班。高安項目開發和調試通常會比較繁瑣,在處理這類項目時,要盡早確定安全校驗相關功能。同時需芯片商及時提供對應的接口和簽名工具,方便調試。該方案在歌華有線數字電視一體機上得到批量生產應用,具有良好的安全性,能夠進行快速推廣,具有廣泛的應用價值。
[1] 金鋼.CA技術的發展及機頂盒高級安全芯片原理[J].中國有線電視,2014(7):818-823.
[2] 湯建忠,顧華江,沈瑾.CA安全認證系統自安全性的研究與實現[J].計算機工程與設計,2009,30(18):4231-4234.
[3] 毛澤杰,吳蔚華.Android智能機頂盒的安全分析與研究[J].電視技術,2016,40(3):79-82. DOI:10.16280/j.videoe.2016.03.017.
吳 貝,學士,工程師,主要從事電視的研究和開發工作;
侯志龍,高級工程師,主要從事電視的研究和開發工作,先后承擔過國家863、核高基、科技支撐等項目;
徐遙令,碩士,高級工程師,主要從事電視的研究和開發工作,先后核心參與國家863、核高基、科技支撐等項目。
責任編輯:閆雯雯
Implementation and design of TV system on domestic advanced security chip
WU Bei, HOU Zhilong, XU Yaoling
(ShenzhenChuangwei-RGBElectronicsCo.,Ltd.R&DHeadquarters,GuangdongShenzhen518108,China)
In view of the TV system run on domestic advanced security chip, together with the Hisilicon V801 advanced security chip, to cater to the requirement of the service evolution and the providers’ reality, the TV system run on domestic advanced security chip is designed in this paper. The codes of security policy which is added on system bootloader, kernel and update is described in detail. This Design is applied on a digital integrated machine of Beijing Gehua. The result proves that the design has good safety, ability of quick promotion and extensive application value.
domestic; advanced security chip; digital integrated machine
吳貝,侯志龍,徐遙令. 基于國產高安芯片的電視方案設計與實現[J].電視技術,2017,41(2):16-18. WU B, HOU Z L, XU Y L. Implementation and design of TV system on domestic advanced security chip [J]. Video engineering,2017,41(2):16-18.
TN949.197
A
10.16280/j.videoe.2017.02.004
國家科技重大專項(核高基)(2014ZX01033101)
2016-07-14