吳 貝,侯志龍,徐遙令
(深圳創(chuàng)維-RGB電子有限公司研發(fā)總部,廣東 深圳 518108)
基于國產(chǎn)高安芯片的電視方案設(shè)計(jì)與實(shí)現(xiàn)
吳 貝,侯志龍,徐遙令
(深圳創(chuàng)維-RGB電子有限公司研發(fā)總部,廣東 深圳 518108)
針對使用國產(chǎn)高安芯片的智能電視,結(jié)合海思V801高安芯片,在綜合考慮業(yè)務(wù)發(fā)展和運(yùn)行商實(shí)際需求的基礎(chǔ)上,設(shè)計(jì)了一套應(yīng)用于高安芯片電視的安卓操作系統(tǒng)。對系統(tǒng)的引導(dǎo)、內(nèi)核以及升級等需要添加安全策略的地方做了詳細(xì)的闡述和源碼示意。提出的方案在歌華有線數(shù)字電視一體機(jī)上得到批量生產(chǎn)應(yīng)用。結(jié)果表明,該系統(tǒng)具有良好的安全性,能夠進(jìn)行快速推廣,具有廣泛的應(yīng)用價(jià)值。關(guān)鍵詞: 國產(chǎn);高安芯片;數(shù)字一體機(jī)
隨著數(shù)字電視業(yè)務(wù)的推廣,數(shù)字機(jī)頂盒和CA卡的安全性變得越來越重要。同樣基于有線數(shù)字功能的數(shù)字一體機(jī),其對應(yīng)的安全防護(hù)也比一般的智能電視要高。運(yùn)營商為了保證自己的合法收益,防止被黑客破解CA或者被惡意刷機(jī),對數(shù)字一體機(jī)提出使用高安芯片的要求[1]。
高安芯片,全稱高級安全芯片,是一種可以提供更安全保護(hù)措施的芯片方案。與傳統(tǒng)芯片相比,增加了安全信息處理模塊。以海思V801高安芯片為例,提供唯一標(biāo)識符CHIPID,方便與CA卡綁定,支持BOOT安全啟動,提供BOOT簽名校驗(yàn)和加密機(jī)制,支持密文控制字解擾,支持內(nèi)容保護(hù),支持高安全PVR,內(nèi)置安全CPU,支持JTAG保護(hù)[2]。
考慮到未來有線數(shù)字的發(fā)展,數(shù)字一體機(jī)使用高安芯片將成為必然的趨勢[3],因此本文結(jié)合所開發(fā)的一款基于國產(chǎn)海思V801高安芯片的數(shù)字一體機(jī),介紹如何定制基于國產(chǎn)高安芯片的電視機(jī)設(shè)計(jì)方案。
高安芯片啟動時會完成對BOOT鏡像的簽名校驗(yàn),確保BOOT安全。對于非BOOT鏡像,海思高安芯片提供特定簽名模式和通用簽名模式兩種方式對其進(jìn)行校驗(yàn),確保分區(qū)安全。特定簽名模式用于鏡像需要加密的場景,其結(jié)構(gòu)通常為簽名頭、鏡像和簽名尾。通用簽名模式用于安全性要求不高的場景,鏡像以明文存儲在Flash中,其結(jié)構(gòu)通常為鏡像和簽名尾。
以海思高安芯片V801為例,如圖1所示,當(dāng)開機(jī)上電后,系統(tǒng)會進(jìn)行BOOT安全校驗(yàn),若校驗(yàn)失敗,則復(fù)位重新開啟流程。校驗(yàn)成功后判斷當(dāng)前啟動模式,依據(jù)標(biāo)志位不同,分別啟動Recovery或者Kernel分區(qū)。啟動前會校驗(yàn)對應(yīng)分區(qū),若校驗(yàn)Kernel分區(qū)失敗則會進(jìn)入Recovery分區(qū),若校驗(yàn)Recovery分區(qū)失敗則復(fù)位。校驗(yàn)Recovery分區(qū)成功后會進(jìn)入Recovery升級模式,校驗(yàn)Kernel分區(qū)成功則正常進(jìn)入Android系統(tǒng)。
圖1 開機(jī)啟動流程圖
2.1 開機(jī)啟動
為了防止惡意刷機(jī),基于高安芯片的系統(tǒng)會對開機(jī)啟動引導(dǎo)模塊進(jìn)行簽名校驗(yàn)。以海思V801高安芯片為例,當(dāng)數(shù)字一體機(jī)上電啟動時,高安主芯片會首先執(zhí)行固化在芯片內(nèi)的BootRom代碼,通過校驗(yàn)KeyArea區(qū)域簽名,獲取公鑰,用公鑰校驗(yàn)Param區(qū)域簽名,然后用Param加載Boot區(qū)數(shù)據(jù)到DDR,繼續(xù)進(jìn)行簽名校驗(yàn)。校驗(yàn)通過后,跳轉(zhuǎn)至Boot,也就是系統(tǒng)Bootloader,進(jìn)行下一步啟動。整個過程由方案商的高安芯片完成,無需系統(tǒng)軟件處理。
2.2 Bootloader啟動kernel
與常規(guī)系統(tǒng)不同,Bootloader啟動kernel時需要對相應(yīng)分區(qū)進(jìn)行簽名校驗(yàn)。因?yàn)楦甙残酒瑔訒r僅保證Bootloader安全,而其他分區(qū)不受校驗(yàn),此時需要由Bootloader來保證敏感區(qū)域的安全。以海思V801高安芯片為例,在Boot啟動過程中,會校驗(yàn)bootargs、kernel以及其他敏感分區(qū)(由客戶定制,一般會包含CA部分)的簽名,如果校驗(yàn)失敗,會自動進(jìn)入recovery界面,等待系統(tǒng)重新升級。相關(guān)代碼如下:
int Android_Main(void)//Android入口
{
load_recovery();//加載recovery分區(qū)
}
void load_recovery(void)
{
if (!strcmp(boot_select(), "kernel"))//檢測bootloader啟動是否為kernel
{
run_command("verify_and_boot_app",0); //檢測bootargs、kernel及其他分區(qū)
}
}
int do_verify_and_boot_recovery(…)
{
…//校驗(yàn)
if (failed)//如果校驗(yàn)bootargs、kernel及其他分區(qū)失敗
{
run_command("verify_and_boot_recovery",0);//啟動Recovery
}
}
2.3 Bootloader啟動recovery
當(dāng)觸發(fā)recovery mode時,Bootloader會引導(dǎo)系統(tǒng)啟動recovery。由于升級包驗(yàn)證是安全環(huán)節(jié)的重要組成,通常recovery分區(qū)也要進(jìn)行簽名校驗(yàn)。常規(guī)分區(qū)簽名校驗(yàn)在啟動kernel時完成,這里只需要簽名校驗(yàn)recovery分區(qū)即可。驗(yàn)證通過會進(jìn)入recovery模式,等待升級。驗(yàn)證失敗會reset機(jī)器,反復(fù)驗(yàn)證recovery分區(qū)。此時需要重新燒錄recovery分區(qū)才能正常啟動。相關(guān)代碼如下:
void load_recovery(void)
{
//判斷啟動為recovery
run_command("verify_and_boot_recovery",0);
…
load_recovery_image();//加載recovery分區(qū)
}
int do_verify_and_boot_recovery(…)
{
…//校驗(yàn)Recovery
if (failed)//如果校驗(yàn)Revovery失敗
{
//返回值-1,上一層檢測返回值為-1后do_reset()
return -1;
}
…
}
2.4 Android系統(tǒng)安全
系統(tǒng)正常啟動kernel分區(qū)后,將會啟動syetem分區(qū)。system分區(qū)在init.rc里掛載為只讀分區(qū),確保不會被人破壞。開發(fā)人員在對system分區(qū)進(jìn)行修改時,會在shell里重新掛載system分區(qū)。因此shell命令需要做限制。Android系統(tǒng)通過串口或者adb進(jìn)入shell,與系統(tǒng)交互,為了兼顧開發(fā)和安全,可以在init.rc里設(shè)置trigger,控制console和adbd服務(wù)開關(guān),方便shell交互,后期將開關(guān)關(guān)閉。修改init.rc腳本如下:
將adbd服務(wù)disabled掉,由屬性persist.sys.openadb控制開關(guān):
on property:persist.sys.openadb=1
start adbd
on property:persist.sys.openadb=0
stop adbd
將console服務(wù)disabled掉,由屬性persist.sys.openconsole控制開關(guān):
on property:persist.sys.openconsole=1
start console
on property:persist.sys.openconsole=0
stop console
增加控制這2個屬性的入口,后期去掉。整機(jī)系統(tǒng)默認(rèn)為這2個屬性為關(guān),因此在系統(tǒng)配置文件build.prop中需添加persist.sys.openadb=0和persist.sys.openconsole=0。這樣保證出廠軟件默認(rèn)關(guān)閉串口交互。
2.5 CA卡CHIPID綁定
出于對CA卡的保護(hù),避免被盜版攻擊,高安芯片支持與CA卡一一對應(yīng)的綁定措施。通常CHIPID會在生成的時候拿到,所以前期開發(fā)時需要留出接口,方便生產(chǎn)時及時快速地?zé)汣HIPID。相關(guān)接口由方案商提供。
2.6 高安開關(guān)
當(dāng)芯片開啟高安時,高安芯片將不再允許燒錄fastboot分區(qū)。由于前期開發(fā)工作中可能會對該分區(qū)做修改,所以一開始默認(rèn)不會開啟高安,待開發(fā)穩(wěn)定后再開啟高安。因此需要留出開啟高安和檢測高安是否開啟的接口,方便在出廠前打開高安。同時在recovery升級系統(tǒng)里添加檢測高安開啟的動作,防止未開啟高安的芯片被惡意刷機(jī)。相關(guān)接口由方案商提供,以海思V801為例,代碼如下:
在系統(tǒng)源碼revocery模塊的install.cpp中,函數(shù)really_install_package()添加檢驗(yàn)代碼
if (校驗(yàn)高安開啟標(biāo)失敗)
{
ui->Print("return fail after check_has_sig/n");
return INSTALL_CORRUPT;
}
2.7 升級包定制
由于高安開啟后,fastboot分區(qū)不能進(jìn)行升級,因此可以定制不含fastboot分區(qū)的升級包和包含簽名fastboot的升級包,方便升級。將已經(jīng)編譯出的升級包(通常此時該升級包為非簽名fastboot)解壓,按需求拷貝簽名fastboot(或者其他簽名分區(qū),比如recovery等),重新zip壓縮,然后打上Android簽名。以海思V801高安芯片為例,相關(guān)腳本命令如下(注意,該命令需要參考分區(qū)表和分區(qū)鏡像文件名修改參數(shù)):
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包,然后利用對應(yīng)平臺的簽名工具執(zhí)行命令將update_unsigned.zip簽名成update_signed.zip,此時update_signed.zip即為最終簽名版升級包。
此設(shè)計(jì)方案已在歌華有線數(shù)字電視一體機(jī)上實(shí)現(xiàn)。如圖2所示,該機(jī)型基于海思Hi3751V801高安芯片研發(fā),是歌華有線的首款4K超清寬帶電視,產(chǎn)品已經(jīng)批量生產(chǎn),安全性得到驗(yàn)證。
圖2 歌華有線4K數(shù)字電視一體機(jī)(截圖)
本文系統(tǒng)性地介紹了基于國產(chǎn)高安芯片的數(shù)字一體機(jī)電視操作系統(tǒng)的定制流程和注意事項(xiàng),方便開發(fā)者按部就班。高安項(xiàng)目開發(fā)和調(diào)試通常會比較繁瑣,在處理這類項(xiàng)目時,要盡早確定安全校驗(yàn)相關(guān)功能。同時需芯片商及時提供對應(yīng)的接口和簽名工具,方便調(diào)試。該方案在歌華有線數(shù)字電視一體機(jī)上得到批量生產(chǎn)應(yīng)用,具有良好的安全性,能夠進(jìn)行快速推廣,具有廣泛的應(yīng)用價(jià)值。
[1] 金鋼.CA技術(shù)的發(fā)展及機(jī)頂盒高級安全芯片原理[J].中國有線電視,2014(7):818-823.
[2] 湯建忠,顧華江,沈瑾.CA安全認(rèn)證系統(tǒng)自安全性的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2009,30(18):4231-4234.
[3] 毛澤杰,吳蔚華.Android智能機(jī)頂盒的安全分析與研究[J].電視技術(shù),2016,40(3):79-82. DOI:10.16280/j.videoe.2016.03.017.
吳 貝,學(xué)士,工程師,主要從事電視的研究和開發(fā)工作;
侯志龍,高級工程師,主要從事電視的研究和開發(fā)工作,先后承擔(dān)過國家863、核高基、科技支撐等項(xiàng)目;
徐遙令,碩士,高級工程師,主要從事電視的研究和開發(fā)工作,先后核心參與國家863、核高基、科技支撐等項(xiàng)目。
責(zé)任編輯:閆雯雯
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
吳貝,侯志龍,徐遙令. 基于國產(chǎn)高安芯片的電視方案設(shè)計(jì)與實(shí)現(xiàn)[J].電視技術(shù),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
國家科技重大專項(xiàng)(核高基)(2014ZX01033101)
2016-07-14