全部产品

瑞芯微RK3288对接Link TEE

更新时间:2020-09-21 17:16:52

本文档说明了如何使用RK3288芯片对接阿里云Link TEE-Pro,开发者按照文档操作就可以在相应平台上成功部署TEE-Pro并运行SDK包中的示例:TA、CA程序。

注意:Link TEE激活之前有试用限制:只能使用100条命令,超出100条命令后将拒绝执行。Link TEE在部署到设备后,需要激活才能正常使用。

一、配套系统

Android版本:基于RK3288_ANDROID7.1_TABLET-SDK_V1.00_20170629-20190731。

Uoot版本:基于RK3288_ANDROID7.1_TABLET-SDK_V1.00中默认提供的uboot-2014-10版本。

Linux版本:基于RK3288_ANDROID7.1_TABLET-SDK_V1.00中默认提供的kernel-4.4.143版本。

二、Rockchip 系统TEE-Pro补丁

阿里云Link TEE 基于Rockchip RK3288的补丁包。

image.png

2.1 阿里云Link TEE SDK

alitee_rk3288_sdk-20200413目录是阿里云Link TEE的SDK包,在rk3288平台,请将该目录整体复制到rk3288_android71的代码仓库,并重命名目录名称为alitee。

如下:vendor/rockchip/common/security/alitee。

注意:阿里云Link TEE的SDK包内容的详细说明请参考第三章内容。

2.2 RK3288 Android7.1 patch

由于安卓相关的配置修改无法通过git完成,因此需要手动进行修改完成对阿里云TEE的支持

注意:需要修改的文件列表参考android71_patch目录,该目录文件是基于RK3288_ANDROID7.1_TABLET-SDK_V1.00修改,如果您的系统有出入,请参考以下文档说明完成修改。

2.2.1增加alitee的tstd tafsd

在device/rockchip/common/init.rockchip.rc中增加:

on post-fs-data

# for optee data storage

mkdir /data/tee 0700 root root

# for alitee storage

mkdir /data/tee/tas 0700 root root #增加TA目录

mkdir /data/tee/tst 0700 root root #增加安全存储目录

增加文件init.alitee.rc: 注意:该文件会通过alitee sdk自动导入编译系统:

service alitee-tstd /system/bin/tstd /data/tee/tst

class core

seclabel u:r:tee:s0

service alitee-tafsd /system/bin/tafsd /data/tee/tas

class core

seclabel u:r:tee:s0

on property:dev.bootcomplete=1

start alitee-act

service alitee-act /system/bin/sh /system/bin/aliteereg.sh

class main

user root

group root

oneshot

seclabel u:r:alitee_act:s0

在device/rockchip/common/init.rk30board.rc中增加:

import init.alitee.rc

2.2.2 增加alitee支持

在device/rockchip/common/device.mk中配置:

#for enable alitee support

ifeq ($(strip $(PRODUCT_HAVE_ALITEE)),true)

PRODUCT_COPY_FILES += \

device/rockchip/common/init.alitee.rc:root/init.alitee.rc

endif

在device/rockchip/rk3288/device.mk中配置:

PRODUCT_COPY_FILES += \

device/rockchip/rk3288/fstab.rk30board.bootmode.unknown.rk3288:root/fstab.rk30board.bootmode.unknown.rk3288 \

device/rockchip/rk3288/fstab.rk30board.bootmode.unknown.rk3288w:root/fstab.rk30board.bootmode.unknown.rk3288w \

device/rockchip/rk3288/fstab.rk30board.bootmode.emmc.rk3288:root/fstab.rk30board.bootmode.emmc.rk3288 \

device/rockchip/rk3288/fstab.rk30board.bootmode.emmc.rk3288w:root/fstab.rk30board.bootmode.emmc.rk3288w \

device/rockchip/common/init.alitee.rc:root/init.alitee.rc #修改增加alitee

# device/rockchip/common/init.optee.rc:root/init.optee.rc #修改删除optee

在device/rockchip/rk3288/BoardConfig.mk中配置:

# Enable optee service

PRODUCT_HAVE_OPTEE := false #关闭optee

# Enable alitee service

PRODUCT_HAVE_ALITEE := true #使能aitee

2.2.3 sepolicy增加阿里TEE的支持

在./device/rockchip/common/sepolicy/file_contexts增加:

#for alitee

/system/bin/tstd u:object_r:tee_exec:s0

/system/bin/tafsd u:object_r:tee_exec:s0

/system/bin/teerd u:object_r:tee_exec:s0

/system/bin/tee_act_app u:object_r:alitee_act_exec:s0

/system/bin/aliteereg.sh u:object_r:alitee_act_exec:s0

/dev/tzdd u:object_r:tee_device:s0

/data/tee/tst(/.*)? u:object_r:tee_data_file:s0

Alitee sdk会自动导入alitee_act.te sepolicy到/device/rockchip/common/sepolicy/目录中。

2.2.4 vendor目录增加alitee sdk

将alitee sdk目录置于./vendor/rockchip/common/security/ 目录,并命名为alitee。

同时在vendor/rockchip/common/device-vendor.mk增加如下脚本:

# ALI-TEE

ifeq ($(PRODUCT_HAVE_ALITEE),true)

$(call inherit-product-if-exists, vendor/rockchip/common/security/alitee/alitee.mk)

endif

2.3 Linux patch:

将 kernel_patch/ 0001-kernel-add-support-alitee.patch置于和rk3288_android7.1/kernel同级目录下。

$ patch -p1 < 0001-kernel-add-support-alitee.patch

由于需要修改dts文件,目前patch修改的是RK3288公版对应的rk3288-evb-android-rk808-edp.dts,因此为了适配您自己的dts文件,请在打入patch后,在您的dts文件增加如下代码:

dts:

#include "tzdd-rk3288.dtsi"

2.4 Uboot patch:

将 uboot_patch/0001-uboot-add-support-alitee.patch置于rk3288_android7.1/uboot根目录下$ git apply -p1 < 0001-uboot-add-support-alitee.patch

注意:Uboot patch会默认提供rk3288_alitee.img,但请不用使用默认版本,请按TEE SDK说明编译生成您自己的rk3288_alitee.img替换默认版本

三、TEE-Pro SDK发布包

Alibaba-cloud-link-tee-pro-sdk:

image.png

四、TEE-Pro的开发部署

在按第二章内容将RK3288的各个补丁包打入完成后,请按如下操作执行:

4.1 阿里云Link TEE镜像制作及编译

1、cd vendor/rockchip/common/security/alitee/tw/tools

2、openssl genrsa -out rsa_private.pem 2048生成您自己的TA签名私钥。

3、chmod +x *

4、./rel-rk3288.sh 此时生成的rk3288_alitee.bin将自动复制到u-boot/tools/rk_tools/bin/rk32目录。

5、单独编译u-boot,生成uboot.img及trust.img。

6、单独编译kernel,生成kernel.img。

7、编译安卓整体系统镜像。

8、烧录所有镜像,启动系统。应当看到如下串口日志:

**********************************************

* Alibaba Cloud Link TEE Pro

* This is a trial version!!!

* Version number: 1.0.7.

**********************************************

4.2 TA的开发编译运行

TEE-Pro支持TA的动态加载,编译生成的TA二进制程序可以单独的保存在系统的文件系统目录中,在需要该TA的服务时,被TEE加载运行。TA的签名需要独立的公私钥对进行认证。

注意:由于需要对TA进行RSA签名认证,因此需要开发者自行维护TA签名的公私钥对。

4.2.1 CA的编译:(以xor为例说明)

1. cd vendor/rockchip/common/security/alitee/ntw/lib

在安卓编译环境执行mm,将libtee_client.so导出编译依赖到out目录,后续CA编译需要使用。

2. cd vendor/rockchip/common/security/alitee/samples/xor/ntw

在安卓的编译环境中直接执行mm,将在out/target/product/rk3288/system/bin目录直接输出ca_xor可执行程。序。您也可以手动通过adb push置于/system/bin目录中。

4.2.2 TA的编译:(以xor为例说明)

1. cd vendor/rockchip/common/security/alitee/samples/xor/tw

2.请在该目录的Makefile中添加您安卓编译系统的arm-eabi-的路径。

CROSS_COMPILE ?= [path]/arm-eabi-

正常路径:……/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin/arm-eabi-

在当前目录生成68572413bdacdfce0112233445566778.bin TA文件。

请将68572413bdacdfce0112233445566778.bin文件通过adb push或其它方式置于开发板的/data/tee/tas目录。

4.2.3 示例程序测试

在开发板环境中已经置入了ca_xor及其对应的TA执行文件。

68572413bdacdfce0112233445566778.bin后,可以在开发板命令行中执行/system/bin/ca_xor验证TEE基本流程。

注意:SDK包中默认放置了一个rsa_private.pem用于TA的签名验证,请在您的ubuntu系统中使用[openssl genrsa -out rsa_private_key.pem 2048]命令重新生成一个用于产品TA的签名认证,该公私钥对关系您TA的安全,务必妥善保管。