开发者学堂课程【阿里云物联网安全:开发第一个可信的应用】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/570/detail/7773
开发第一个可信的应用
内容介绍:
一、课程回顾
二、SDK 包结构
三、CA TA 样例流程
四、CA XOR 源码
五、TA XOR 源码
六、添加 TA
七、运行 CA_XOR
一、课程回顾
TEE CAP 是纯软件实现的,可以在通用的平台中使用,无需系统底层软件的修改,因此 TEE CAP 是学习 TEE 安全应用开发的最方便工具。我们提供 top6平台的试用版 SDK 供大家下载,运行环境为 open Ubuntu 16.04,只可以运行单个 TA,CA 和 TA 的单次运行数限制在200条以内。
二、SDK包结构
从网站上下在 Link_TEE_CAP_SDK,解压后有四个文件夹。
1、apps
apps 包含两个 CA、TA 示例源码和编译脚本,xor 是简单的 CA/TA 交互示例源码,sst 是安全存储的示例
2、ntws
ntw 包含 TEE Client api 文件的 dee 以及 CA 运行所需要的动态库之一 libtee_client.so;tw 包含 TEE Internal api 的头文件、编译脚本 libtee internal 静态库和用来添加 TA 的 tee_srv_table.c,
3、tw
tw 目录用来将 TA 和 tee os 联合编译为 libtee.os 动态库。
4、out
Out 目录用于存放编译后生成的两个动态库,litee_client.so 和 litee_internal.so
三、CA TA 样例流程
1、创建 Context
TEE_lnitializeContext(&context,…)
2、创建 CA/TA 会话
TEEC_OpenSession(&context,$session,…)
3、CA 发送命令
TEEC_InvokeCommand(&session,CommandId,operation,…)
4、返回结果
Result=TEEC_InvokeCommand
5、关闭 CA/TA 会话
TEEC-CloseSession(&session)
6、清空 Context
TEEC_Finalize(&context)
四、CA XOR 源码
//初始化 Context
result = TEEC_ _lnitializeContext(NULL, &context);
//初始化 Session
result = TEEC_ OpenSession(&context, &session,
&_ g_ _uuid_ xor, TEEC_ LOGIN_ USER, NULL, NULL, NULL);
//1设置 Operation 输入参数
operation.paramTypes = TEEC_ PARAM_ TYPES(
TEEC_ VALUE_ INPUT, TEEC_ _VALUE_ INPUT,
TEEC_ VALUE_ OUTPUT, TEEC_ _NONE);
operation.params[0].value.a = a;
operation.params[1].value.a= b;
operation.params[2].value.a = c;
//发送命令
result = TEEC__InvokeCommand(&session, CMD _XOR, &operation, NULL);
//获得结果
C = operation.params[2].value.a;
五、TA XOR 源码
//检查 operation 参数
if (TEE_ PARAM_ TYPES(
TEE PARAM_ TYPE_ VALUE INPUT,
TEE_ PARAM_ TYPE_ VALUE_ INPUT,
TEE_ PARAM_ TYPE_ VALUE_ OUTPUT,
TEE_ PARAM_ _TYPE_ NONE) != paramTypes){
return TEE_ ERROR_ BAD_ PARAMETERS;
}
if (CMD_ XOR != commandlD) {
return TEE_ ERROR_ BAD_ PARAMETERS;
}
//汁算 c=a^b
params[2].value.a = params[0].value.a л params[1].value.a;
TEE_ Print("xor result 0x%08xIn", params[2].value.a);
return TEE_ SUCCESS;
六、添加 TA
tee_ srv_ table.c
//添加 xor ta 头定义
/* TEE registered srv table */
tee_ srv_ head_ t* tee_ _srV_ table[TEE_ _MAX_ SRV_ _NUM]={
&xor_ srV_ head,
NULL,
};
tw/Makefile
//添加 ta 源文件
SRCS := ./src/tee_ srv_ table.c \
../apps/xor/tw/ta_ xor.c
编译 libtee_internal.so
运行 tw/build_ta.sh 生成 out/libtee_internal.so
七、运行 CA_XOR
编译运行 ca__xor
shell $ cd apps/xor/ntw
shell $ make
shell $ LD_ LIBRARY_ PATH= ../../out ./ca_ xor
运行日志
<TEE_ CLI> I Alibaba Cloud Link TEE-CAP
<TEE_ CLI> I Client API Version: 1.2.0
<TEE_ CLI> I Mode: trial
<TEE_ CLI> I Platform: GENERAL
<TEE_ SEC> I Alibaba Cloud Link TEE-CAP
<TEE SEC> I Internal API Version: 1.2.0_2019_2_2_17:10
<TEE_ SEC> I Mode: trial
<TEE_ SEC> I Platform: GENERAL
<TEE_ SRV> xor result 0x00000001
a= 0;b= 1; c= a^b: 1
注:
<TEE_CLI>为 CA,<TEE_SEC>为 TEE OS,<TEE_SRV>为 TA