基于国产高安芯片的电视方案设计与实现

2017-03-18 06:33侯志龙徐遥令
电视技术 2017年2期

吴 贝,侯志龙,徐遥令

(深圳创维-RGB电子有限公司研发总部,广东 深圳 518108)

基于国产高安芯片的电视方案设计与实现

吴 贝,侯志龙,徐遥令

(深圳创维-RGB电子有限公司研发总部,广东 深圳 518108)

针对使用国产高安芯片的智能电视,结合海思V801高安芯片,在综合考虑业务发展和运行商实际需求的基础上,设计了一套应用于高安芯片电视的安卓操作系统。对系统的引导、内核以及升级等需要添加安全策略的地方做了详细的阐述和源码示意。提出的方案在歌华有线数字电视一体机上得到批量生产应用。结果表明,该系统具有良好的安全性,能够进行快速推广,具有广泛的应用价值。关键词: 国产;高安芯片;数字一体机

随着数字电视业务的推广,数字机顶盒和CA卡的安全性变得越来越重要。同样基于有线数字功能的数字一体机,其对应的安全防护也比一般的智能电视要高。运营商为了保证自己的合法收益,防止被黑客破解CA或者被恶意刷机,对数字一体机提出使用高安芯片的要求[1]。

高安芯片,全称高级安全芯片,是一种可以提供更安全保护措施的芯片方案。与传统芯片相比,增加了安全信息处理模块。以海思V801高安芯片为例,提供唯一标识符CHIPID,方便与CA卡绑定,支持BOOT安全启动,提供BOOT签名校验和加密机制,支持密文控制字解扰,支持内容保护,支持高安全PVR,内置安全CPU,支持JTAG保护[2]。

考虑到未来有线数字的发展,数字一体机使用高安芯片将成为必然的趋势[3],因此本文结合所开发的一款基于国产海思V801高安芯片的数字一体机,介绍如何定制基于国产高安芯片的电视机设计方案。

1 实现原理

高安芯片启动时会完成对BOOT镜像的签名校验,确保BOOT安全。对于非BOOT镜像,海思高安芯片提供特定签名模式和通用签名模式两种方式对其进行校验,确保分区安全。特定签名模式用于镜像需要加密的场景,其结构通常为签名头、镜像和签名尾。通用签名模式用于安全性要求不高的场景,镜像以明文存储在Flash中,其结构通常为镜像和签名尾。

以海思高安芯片V801为例,如图1所示,当开机上电后,系统会进行BOOT安全校验,若校验失败,则复位重新开启流程。校验成功后判断当前启动模式,依据标志位不同,分别启动Recovery或者Kernel分区。启动前会校验对应分区,若校验Kernel分区失败则会进入Recovery分区,若校验Recovery分区失败则复位。校验Recovery分区成功后会进入Recovery升级模式,校验Kernel分区成功则正常进入Android系统。

图1 开机启动流程图

2 关键技术实现

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即为最终签名版升级包。

3 应用情况

此设计方案已在歌华有线数字电视一体机上实现。如图2所示,该机型基于海思Hi3751V801高安芯片研发,是歌华有线的首款4K超清宽带电视,产品已经批量生产,安全性得到验证。

图2 歌华有线4K数字电视一体机(截图)

4 小结

本文系统性地介绍了基于国产高安芯片的数字一体机电视操作系统的定制流程和注意事项,方便开发者按部就班。高安项目开发和调试通常会比较繁琐,在处理这类项目时,要尽早确定安全校验相关功能。同时需芯片商及时提供对应的接口和签名工具,方便调试。该方案在歌华有线数字电视一体机上得到批量生产应用,具有良好的安全性,能够进行快速推广,具有广泛的应用价值。

[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