1、 海思 Android安全方案 使用指南 文档版本 02 发布日期 2014-03-12 海思专有和保密信息 版权所有 深圳市海思半导体有限公司 版权所有 深圳市海思半导体有限公司2014。保留一切权利。 非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传播。 商标声明 、 、海思和其他海思商标均为深圳市海思半导体有限公司的商标。 本文档提及的其他所有商标或注册商标,由各自的所有人拥有。 注意 您购买的产品、服务或特性等应受海思公司商业合同和条款的约束,本文档中描述的全部或部分产品、服务或特性可能不在您的购买或使用范围之内。除非合同另有约定,海思公司
2、对本文档内容不做任何明示或默示的声明或保证。 由于产品版本升级或其他原因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为使用指导,本文档中的所有陈述、信息和建议不构成任何明示或暗示的担保。 深圳市海思半导体有限公司 地址: 深圳市龙岗区坂田华为基地华为总部 邮编: 518129 网址: http:/ 客户服务邮箱: 海思 Android 安全方案 使用指南 前 言文档版本 02 (2014-03-12) 海思专有和保密信息 版权所有 深圳市海思半导体有限公司 iii前 言 概述 Android 是个开放的平台,且有大量第三方应用。在广电、电信领域应用时,引起运营商对安全问题的担忧。主
3、要包含:安全启动、 APK 管控、秘钥管理。 本文档详细描述海思 Android 平台安全方案的使用操作步骤,使海思 Android 平台的产品能够支撑硬件级别的安全能力。 安全芯片列表 满足本文档中安全方案的安全芯片类型如下。 芯片名称 芯片型号 Hi3716C V2xxHxx Hi3719C V1xxHxx Hi3719M V1xxHxx “ H”是海思公共高安芯片标志。 读者对象 本文档(本指南)主要适用于以下工程师: z 技术支持工程师 z 软件开发工程师 符号约定 在本文中可能出现下列标志,它们所代表的含义如下。 前 言 海思 Android 安全方案 使用指南 iv 海思专有和保密
4、信息 版权所有 深圳市海思半导体有限公司 文档版本 02 (2014-03-12)符号 说明 表示有高度潜在危险,如果不能避免,会导致人员死亡或严重伤害。 表示有中度或低度潜在危险,如果不能避免,可能导致人员轻微或中等伤害。 表示有潜在风险,如果忽视这些文本,可能导致设备损坏、数据丢失、设备性能降低或不可预知的结果。 表示能帮助您解决某个问题或节省您的时间。 表示是正文的附加信息,是对正文的强调和补充。 作者信息 章节号 章节名称 作者信息 全文 全文 L00176794 修订记录 修订记录累积了每次文档更新的说明。最新版本的文档包含以前所有文档版本的更新内容。 修订日期 版本 修订说明 20
5、14-03-12 02 修改 1.3 编译配置章节,增加 4.7 维修方案章节,删除第四章,修改第一章安全启动的描述。 2013-11-11 01 增加 1.4 小节编译配置说明和 2.0 章节升级说明,修改安全 boot 开发说明和补充中国电信开发提示。 2013-10-25 00B05 增加 emmc 支持,修改 init.rc 文件和 system_sign 分区改名为 systemsign 2013-09-29 00B04 修改适配 HiSTBAndroidV500R001C00SPC050 版本支持功能说明 2013-07-22 00B03 增加对 Hi3716MV300 支持说明
6、2013-03-29 00B02 增加 APK 管控方案 2013-01-22 00B01 第一次临时发布 海思 Android 安全方案 使用指南 目 录文档版本 02 (2014-03-12) 海思专有和保密信息 版权所有 深圳市海思半导体有限公司 v目 录 前 言 iii 1 安全启动 . 1-1 1.1 概述 1-1 1.2 高安方案软件设计 1-1 1.2.1 代码签名校验 . 1-1 1.2.2 概述 1-3 1.2.3 安全 boot 的开发流程 1-4 1.2.4 海思交付 1-5 1.3 配置编译 1-5 1.4 生成安全启动相关密钥 1-6 1.5 生成 DDR 参数配置文
7、件 cfg.bin . 1-8 1.6 签名 fastboot 等镜像 . 1-9 1.7 烧写安全启动密钥 1-12 2 安全升级 . 2-14 2.1 升级方案流程 2-14 2.2 如何制作升级包 2-14 2.2.1 升级包制作准备 . 2-14 2.2.2 签名升级包 2-15 3 APK 安装管控 3-1 海思 Android 安全方案 使用指南 插图目录文档版本 02 (2014-03-12) 海思专有和保密信息 版权所有 深圳市海思半导体有限公司 vii插图目录 图 1-1 机顶盒高安代码运行简单的流程 . 1-2 图 1-2 Key_for_signature.txt 数据格
8、式 . 1-7 图 1-3 Key_for_verify.txt 中的数据格式 . 1-7 图 1-4 密钥生成工具 GenSecureData-V2.1.exe 界面 1-8 图 1-5 DDR 参数配置文件生成工具 1-9 图 1-6 HiSigA 的用户界面 1-10 图 1-7 烧写安全启动数据过程图 . 1-13 图 2-1 升级流程示意图 2-14 图 2-2 升级包签名示意图 . 2-15 图 3-1 make_key 提示是否需要密码保护 3-2 图 3-2 make_key 生成最终密钥 3-2 海思 Android 安全方案 使用指南 表格目录文档版本 02 (2014-0
9、3-12) 海思专有和保密信息 版权所有 深圳市海思半导体有限公司 ix表格目录 表 1-1 分区校验表 1-3 表 1-2 3 种不同 boot 的适用范围。 1-4 表 1-3 工具描述 1-5 表 1-4 安全启动相关密钥列表 . 1-6 海思 Android 安全方案 使用指南 1 安全启动文档版本 02 (2014-03-12) 海思专有和保密信息 版权所有 深圳市海思半导体有限公司 1-11 安全启动 1.1 概述 安全启动是海思 Android 高级安全方案的关键环节,本章节主要介绍安全启动及开发过程。使用本文档前,客户请阅读: z 高安全 CA 开发指南 .pdf z CASi
10、gnTool 使用说明 .pdf 1.2 高安方案软件设计 1.2.1 代码签名校验 CA 公司或者运营商的安全规范中要求机顶盒中运行的软件是合法安全的。 为了保证这个需求,运行的程序在烧入 Flash 前需要进行签名。并且在运行前需要先校验代码的签名,确保执行代码不被修改。只有通过安全校验后才能运行,否则终止运行。 机顶盒高安代码运行简单的流程图如 图 1-1 所示。 表格目录 海思 Android 安全方案 使用指南 1-2 海思专有和保密信息 版权所有 深圳市海思半导体有限公司 文档版本 02 (2014-03-12)图1-1 机顶盒高安代码运行简单的流程 CPUBootRomRecov
11、erySecurity DataAPPBoot安全校验芯片上电安全校验安全校验Flash安全校验程序执行过程如下: 步骤 1 芯片上电启动,首先执行 BootRom, BootRom 会对 Flash 上的 boot(启动引导代码 )进行安全校验,校验通过后程序跳转到 boot 中执行,否则芯片挂死。 步骤 2 Boot 启动后,分别对 Recovery 区、 Security data 区、 APP 区进行安全校验,海思方案中, APP 包含了 kernel 和 FileSystem 等部分。 步骤 3 校验通过后,程序跳转到 APP 执行,启动系统,否则复位重启芯片。 -结束 终端的 bo
12、ot 程序在进行安全校验时。对 bootargs、 recovery、 kernel 分区采用全覆盖校验方法,而 system 分区由于分区数据很大,一般 500MB,为了提升系统启动速度,对文件系统采用随机抽样的方式进行合法性验证,将文件系统按照每 1M 计算一个签名值,校验时随机抽取一些数据块进行校验,保证每次启动时校验的数据不同,需要校验的分区如 表 1-1。 海思 Android 安全方案 使用指南 1 安全启动文档版本 02 (2014-03-12) 海思专有和保密信息 版权所有 深圳市海思半导体有限公司 1-3表1-1 分区校验表 分区名 是否校验 说明 fastboot 全校验
13、安全 boot,引导系统启动 bootargs 全校验 保存系统启动参数及分区信息 recovery 全校验 升级程序 deviceinfo 不校验 存放系统相关参数,开机分辨率、 MAC 等信息 baseparam 不校验 pqparam 不校验 logo 不校验 开机画面 fastplay 不校验 开机动画 Fastplaybak 开机动画备份区 misc 不校验 存放升级标志 kernel 全校验 Android 内核 systemsign 全校验 存放 System 分区签名信息 system 随机校验,随机抽取一些数据块进行校验。 Android 系统区 userdata 不校验 A
14、ndroid cache 不校验 Cache 分区,内部存储区 sdcard 不校验 Sdcard 目录,内部存储区 厂商开发中,如果有数据需要保护,可以增加检验分区,同样也可以减少校验分区。请首先咨询海思FAE并获得技术支持。 1.2.2 概述 高安全系列芯片不能直接使用普通的 boot( SDK 开发包中直接生成的,普通芯片用的boot),而需要高安全系列芯片的专用 boot(本文称这样的 boot 为安全 boot, 按照 1.3 配置编译 得到的 boot 是未签名的安全 boot)。 基于芯片对 boot 的要求来划分,芯片可分为 3 类: z 普通芯片。直接使用 SDK 包中生成的
15、普通 boot。 z 高安全系列(安全启动未使能)芯片。使用高安全芯片专用 boot,不用签名。 z 高安全系列(安全启动使能)芯片。使用高安全芯片专用 boot,必须签名(一般由 CA 厂商进行签名)。 表格目录 海思 Android 安全方案 使用指南 1-4 海思专有和保密信息 版权所有 深圳市海思半导体有限公司 文档版本 02 (2014-03-12)表1-2 3种不同boot的适用范围。 Boot类型 普通芯片 高安全芯片,安全启动未使能高安全芯片,安全启动使能 普通 boot 安全 boot,不带签名 安全 boot,带签名 1.2.3 安全boot的开发流程 在 SDK 工程中,
16、打开 device/hisilicon/bigfish/sdk/configs 中对应的配置文件,以Hi3716CV200 高安芯片为例,打开 hi3716cdmo2b_hi3716cv200_android_cfg.mak 文件,增加三个宏,如下: z CFG_HI_ADVCA_SUPPORT=y z CFG_ADVCA_OTHER=y z CFG_HI_ADVCA_TYPE=OTHER 其中: z CFG_HI_ADVCA_SUPPORT 宏表示高安支持 z CFG_HI_ADVCA_TYPE 表示高安支持类型。 国内非传统 CA(电信、广电等领域)或者 VerimatrixCA,请选择
17、OTHER。 其他传统 CA,如 nagra、 conax、 novel 等,请选择对应的 CA 类型,例如 conax: CFG_ADVCA_CONAX=y, CFG_HI_ADVCA_TYPE=CONAX。 但请注意,传统 CA 没有宣称支持 Android 的整体安全方案,机顶盒厂商需要同传统 CA 直接沟通整机解决方案。 安全 boot 的详细开发流程请参考发布包中文档高安全 CA 开发指南 .pdf。Android SDK 的编译开发等请参考工程根目录下的 install_notes.txt。编译生成未签名的安全boot。 安全方案开发配套工具在 devicehisiliconbig
18、fishsdktoolswindowsadvcaAndroidIPTV目录下。 表 1-3 描述各个工具的用途。 表1-3 工具描述 清单 用途及描述 ExtractPubKey.rar 提取 Android 数字证书公钥工具,在 windows 或者 linux 的命令行(带 java 环境)下执行如下命令: java -jar ./ExtractPubKey.jar xxx.x509.pem 在当前目录下生成一个 publickey.txt 的文件,内容是提取出来的公钥,用于 apk 管控。 海思 Android 安全方案 使用指南 1 安全启动文档版本 02 (2014-03-12) 海
19、思专有和保密信息 版权所有 深圳市海思半导体有限公司 1-5清单 用途及描述 GenSecureData-V2.1.exe 安全数据生成工具 V2.1 版本,双击打开工具后点击 OK 控件,可以生成密钥文件 Key_for_signature.txt 和 Key_for_verify.txt,其中私钥文件 Key_for_signature.txt 用于对 fastboot, kernel,system, recovery 和 bootargs 进行签名,另外一个Key_for_verify.txt 文件内容是公钥数据,需要写入 otp 区。 HiSigA.rar Android IPTV 安
20、全方案镜像签名工具,配套版本是 V1.5,用于对 fastboot, kernel, system 和 bootargs 进行签名。 make_key 制作 apk 签名密钥和证书脚本工具,用以对 apk 做数据签名 signapk.jar Android apk 签名工具,在 windows 或者 linux 系统(需带 java环境)的命令行下进入目录,执行以下命令: java -jar ./signapk.jar xxx.x509.pem xxx.pk8 sample.apk sample_sign.apk 具体使用方法请参考 3 apk 安装管控 章节。 1.2.4 海思交付 海思 A
21、ndroid 安全方案包含 3 部分 z 代码:代码和 sample 已经预集成进海思 Android SDK 中。按照海思 Android 版本支持的规格发布。 z 工具:对应的工具已经集成进海思 Android SDK 中。相关工具请参考 表 1-3 工具描述 。 z 文档:海思 Android 安全方案 使用指南 .pdf,即本文档,随海思 Android 版本发布。 1.3 配置编译 海思 Android IPTV 安全方案目前支持 SPI、 Nand 、 Emmc Flash。默认不打开安全选项。以 Hi3716CV200 为例,编译工程,参考以下命令: #source build/
22、envsetup.sh # lunch Hi3716CV200-eng # ./device/hisilicon/Hi3716CV200/build/ca.sh # make bigfish -j32 2 z 在方法 collectCertificates 中增加以下部分的代码,这部分代码主要功能是从 APK中提取签名该 APK 的公钥,并且跟电信提供的公钥进行对比,如果相同则进行APK 的安装,否则返回安装失败: if (certs != null String key; int begin = 0; int end = 0; PublicKey publickey = null; pkg.
23、mSignatures = new Signaturecerts.length; for (int i=0; iN; i+) pkg.mSignaturesi = new Signature(certsi.getEncoded(); publickey = certsi.getPublicKey(); begin = publickey.toString().indexOf(“modulus=“) + 8; end = publickey.toString().indexOf(“publicExponent“) - 1; key = publickey.toString().substring
24、(begin, end); if (0 != pareToIgnoreCase(mPublicKey) mParseError = PackageManager.INSTALL_FAILED_VERIFICATION_FAILURE; Slog.e(TAG, “Package “ + pkg.packageName + “ certificate failed!“); return false; 步骤 4 机顶盒厂商编译 Android 系统。 步骤 5 机顶盒厂商将系统编译出来后,需要将 $(PRODUCT_OUT)systemapp 目录下(例如Hi3716CV200 emmc 版本目录为
25、 out/target/product/Hi3716CV200/Emmc)自带的 APK发给运营商签名。 步骤 6 运营商使用 Android 的工具和步骤 1 中生成的密钥对机顶盒厂商的 APK 进行签名。签名的工具 signapk.jar 在 Android 编译后的 out/host/linux-x86/framework/ 目录。 windows或者 linux 系统(需带 java 环境)的命令行下进入目录,执行以下命令: java -jar ./signapk.jar xxx.x509.pem xxx.pk8 sample.apk sample_sign.apk z xxx.x50
26、9.pem 和 xxx.pk8:步骤 1 中产生的证书和私钥。运营商对 APK 签名时需要将其替换成实际生成的证书和私钥。 z sample.apk:需要签名的 APK 包。 z sample_sign.apk 签名后的 APK 名字。 步骤 7 机顶盒厂商将运营商签名后的 APK 放在 $(PRODUCT_OUT)systemapp 中。重新制作system 分区镜像。制作镜像的方法参考 Android 发布包文档。 表格目录 海思 Android 安全方案 使用指南 3-4 海思专有和保密信息 版权所有 深圳市海思半导体有限公司 文档版本 02 (2014-03-12)机顶盒厂商或者其他APK开发者开发的APK必须提供给运营商签名,否则在安装过程中将提示失败。 -结束