鲲鹏机密计算TrustZone应用容器化开发和部署指导
发表于 2023/09/13
0
尊敬的鲲鹏开发者你好,鲲鹏机密计算TrustZone套件是基于ARM TrustZone技术的一个机密计算软件套件,旨在帮助伙伴更便捷地为行业客户构建机密计算解决方案,从而为客户的关键数据提供完整性、机密性保护和可信使用。您可以阅读本篇内容进行鲲鹏机密计算TrustZone套件的快速入门。
本章节主要介绍了以下知识:
(1)了解鲲鹏机密计算TrustZone套件概念
(2) 如何安装和使用机密计算TrustZone套件
(3)容器化场景下如何部署、运行高级语言应用程序至TEE安全侧
基础技能:
(1)具备基础的Python/Java语言编程能力
(2)了解常用的Linux操作命令
什么是鲲鹏机密计算TrustZone套件
1. 什么是机密计算
在国际机密计算联盟CCC中,将机密计算定义为:“通过在基于硬件的可信执行环境中执行计算来保护使用中的数据的一种技术”,并将机密计算与隐私增强计算(基于算法协议)作为两类技术。
国内金融行业,各大银行发布的技术白皮书中,则将所有保证数据机密性的可能的技术都归为“隐私计算”的范畴。当前国内对于“机密计算”的具体的定义和划分,还没有普识性的共识,但我们仍然可以将其理解为基于硬件可信执行环境(Trusted Execution Environment, TEE)的数据保护技术。
2. 鲲鹏机密计算TrustZone套件概述
鲲鹏机密计算是基于TrustZone技术的TEE方案,TrustZone是一种基于ARM标准架构进行的安全扩展,新引入了一个额外的可信执行环境即TEE,而原有的执行环境相对于TEE则被称为REE(Rich Execution Environment)。这两个环境从芯片架构上进行了隔离,确保运行在TEE内的应用的安全可信,解决用户的“数据在使用中”的安全问题。
鲲鹏机密计算套件中的核心组件“可信操作系统”(Trusted OS)采用的是华为自研的iTrustee,它的主要特点包括:
(1)稳定可靠:基于华为自研的微内核安全OS,已在手机侧商用近10年,支持过亿级用户。
(2)权威第三方认证:获得CC EAL4+认证。
(3)规格灵活:TEE侧安全内存支持按需配置,最大可配128G。
相对于“隐私计算”其它技术而言,部署在TEE内计算可免去复杂的算法协议,可大大提升机密数据的处理效率。尤其适合需要处理大量机密数据的业务场景,比如:
(1)金融大数据数据挖掘,保证数据处理过程中的机密性。
(2)一体化大数据中心数据可信流通和交易。
(3)联邦计算场景中的模型和参数的迭代计算。
利用它高特权级别和隔离性,也适用于实现TPM(Trusted Platform Module)、硬件密码机等场景。
鲲鹏机密计算套件是基于TrustZone技术,结合鲲鹏产品定位,与芯片深度适配、针对数据中心服务器场景扩充必要功能。提供了如:特性开关、内存资源可配、远程证明等功能。
开始鲲鹏机密计算TrustZone的应用实践
本小节我们将基于鲲鹏TEE环境完成高级语言应用创建、部署运行至鲲鹏TEE安全侧。
为符合当前应用部署的主流方式,TEE OS支持容器化部署高级语言应用,我们需要进行以下几项工作:
准备工作:
(1)申请鲲鹏远程实验室资源
(2)部署容器,在容器内运行高级语言Python/Java应用
a. 安装docker
b. 构建容器,根据客户自定义镜像构建运行环境
c. 验证容器内运行高级语言应用
1. 准备工作
步骤一:申请鲲鹏远程实验室资源
TEE内运行高级语言应用需要在鲲鹏平台上完成,为了方便开发者在鲲鹏环境上进行开发,我们提供了鲲鹏远程实验室资源供大家免费申请。
为了兼顾所有鲲鹏开发者的开发体验,我们在鲲鹏远程实验室中提供了云开发环境(开发态模式)和远程服务器(黑框模式)。接下来的体验过程我们会在云开发环境上进行,开发者在申请云开发环境后可以直接通过在线IDE的方式打开页面进行操作。降低了开发者在鲲鹏上的开发门槛。
首先我们访问鲲鹏社区的远程实验室页面https://www.hikunpeng.com/zh/developer/cloud-lab,申请云开发环境:
之后我们输入自己的邮箱地址,选择openEuler 20.03 LTS-SP1(TEE环境)系统,申请成功后可以参考远程实验室环境登录指导书登录远程服务器环境。
2. 容器内运行高级语言应用
步骤一:部署TEE OS 环境
(1)现在就可以开始部署机密OS环境了,我们首先获取tzdriver源码,编译出加载机密OS的内核模块: tzdriver.ko (该章节已提前编译出该模块,开发者可直接加载,路径为:/home/HC/itrustee_sdk/test/CA/tzdriver/tzdriver.ko)
加载tzdriver.ko内核模块:
cd /home/HC/itrustee_sdk/test/CA/tzdriver/
insmod tzdriver.ko && lsmod | grep tzdriver
(2)获取itrustee_client, 编译完成后,会生成dist目录,存放生成的可执行二进制和动态库。该章节已将可执行二进制和动态库部署到对应路径,开发者无需再操作此步骤。
部署itrustee_client。
cp -rf dist/*.so /usr/lib64
cp -rf dist/teecd /usr/bin
cp -rf dist/tlogcat /usr/bin
cp -rf dist/tee_teleport /usr/bin
cp -rf dist/agentd /usr/bin
(3)加载teecd守护进程。
nohup /usr/bin/teecd &
ps aux | grep teecd
(4)查看当前iTrustee版本信息。
tlogcat -v
(5)下载itrustee_sdk源码,编译出tee_upgrade.ko模块,该步骤已完成,该模块路径为/home/HC/itrustee_sdk/test/CA/tee_upgrade/,开发者可直接按步骤(6)操作。
部署升级的TA(9ab6f960-54f3-4317-a8f7-e92ed12b6ae2.sec)和机密OS镜像(trustedcore.img),已部署至路径var/itrustee/image/,开发者无需再做此操作。
(6)加载tee_upgrade.ko模块,完成机密OS升级。
insmod tee_upgrade.ko
(7)升级完毕后会终止teecd,需要重新启动teecd。
nohup /usr/bin/teecd &
a. 查询当前TEE OS版本,此时显示为CCOS(机密OS)
tlogcat -v
步骤二:容器化部署
(1) 在服务器上安装Docker应用。
yum install docker
(2)下载并导入openEuler镜像,镜像已下载至目录/home/HC/test/,可直接入镜像。
docker load -i openEuler-docker.aarch64.tar.xz
(3)将高级语言应用程序java_demo.sec/python_demo.sec(具体获取方式见说明)及其运行的依赖文件拷贝到build目录下,用于构建镜像。该步骤部署完成,路径为: /home/HC/test/build/,可直接进入步骤(4)。
Java开发程序签名打包见鲲鹏社区:https://www.hikunpeng.com/document/detail/zh/kunpengcctrustzone/devpg-java/kunpengtrustzonejava_16_0001.html “部署应用”章节。
Python开发程序签名打包见:https://www.hikunpeng.com/document/detail/zh/kunpengcctrustzone/fg-tz/kunpengtrustzone_20_0002.html中“部署应用”章节。
(4)执行如下命令完成镜像的构建。
cd build && docker build -t demo_hello .
(5)根据镜像启动容器。
docker run -it --mount type=bind,source=/var/itrustee/teecd,target=/var/itrustee/teecd,readonly -v /xxx/build/shared_folders:/vendor/bin --device /dev/teelog:/dev/teelog:wr --device /dev/tc_ns_cvm:/dev/tc_ns_cvm:rw -d demo_hello
步骤三:验证容器内运行高级语言Python/Java
以Java为例,以下为容器内运行高级语言的具体步骤:
(1) 根据步骤一已将环境从普通侧加载升级到机密OS。
(2)在host侧安装Java jdk,获取方式见说明,该文档中直接给出jdk.sec,路径为(/home/HC/test/jdk.sec)。
tee_teleport -s jdk.sec -t java
jdk.sec获取方式可参考:鲲鹏社区文档https://www.hikunpeng.com/document/detail/zh/kunpengcctrustzone/devpg-java/kunpengtrustzonejava_16_0001.html中“编译Java源码”章节。
(3) 构建java样例镜像,将需要运行的java_demo.sec文件上传到shared_folders文件夹下(该文档中已将java_demo.sec上传),可直接构建镜像:
docker build -t demo1 .
(4)运行容器。
docker run -it --mount type=bind,source=/var/itrustee/teecd,target=/var/itrustee/teecd,readonly -v /home/HC/test/build/shared_folders:/vendor/bin --device /dev/teelog:/dev/teelog:wr --device /dev/tc_ns_cvm:/dev/tc_ns_cvm:rw -d demo1
(5)进入容器。
docker exec -it 1fe /bin/bash
(6)进入共享目录。
cd /vendor/bin
(7)创建tee侧运行目录
tee_teleport -c chen_test.sec
(8)运行java样例。
tee_teleport -r main.jar -i sessionID.txt
(9)从tee侧拉取数据到ree侧。
tee_teleport -o output/tee.log -i sessionID.txt
(10)查看运行结果日志。
cat tee.log
恭喜
到这里整个实验流程就已经结束了,通过上面的动作我们快速熟悉机密计算的可信应用容器化部署和运行过程。各位鲲鹏开发者也可以接着探索安全计算应用、高性能计算应用、等其他应用功能,成为更加优秀的鲲鹏开发者。
除了上述学习内容,我们还提供了很多辅助学习资源(课程/实验/文档/文章),希望能帮助到您更好的使用鲲鹏机密计算TrustZone套件:
(1)手把手带你体验鲲鹏BoostKit机密计算TrustZone开发框架Demo:体验Demo
(2)鲲鹏BoostKit机密计算在线课程:在线课程-鲲鹏社区 (hikunpeng.com)
(3)鲲鹏BoostKit机密计算TrustZone-介绍(文档):机密计算TrustZone套件-鲲鹏社区 (hikunpeng.com)