特性使用
固件要求
固件 |
版本要求 |
---|---|
TEE OS |
>= 1.2.0 |
软件包获取
软件名称 |
说明 |
获取途径 |
---|---|---|
verify lib |
鲲鹏安全库,提供远程证明报告校验API。 |
|
QCA lib |
提供证明密钥注册、远程证明API。 |
|
QTA |
运行在TEE侧特权TA应用,可对目标TA发起证明挑战,配合QCA实现证明报告获取传递。 |
|
iTrustee SDK |
iTrustee配套的开发者工具,要求版本不低于 6.1.1,支持编译TA自动生成TA基线度量值,用于TA远程/本地证明。 |
|
libboundscheck |
安全函数库 |
操作步骤
当前版本,远程证明中verify lib、QCA lib、QTA均开源至openEuler社区,并提供Demo示例展示如何使用远程证明相关API,开发者可参考Demo示例开发远程证明服务应用。远程证明Demo获取、编译使用可参考如下步骤。
- 编译、部署libteec.so。
可参考获取iTrustee patch包 获取、编译itrustee_client,并将libteec.so部署在“/usr/lib64”目录,并确认路径“/usr/lib64”已添加至系统动态库默认搜索路径。
- 下载配套iTrustee SDK,已包含QCA lib、QTA源码。
下载地址:https://gitee.com/openeuler/itrustee_sdk.git
代码分支:master
iTrustee SDK已包含QCA lib、QTA源码,代码路径如下:
QCA lib:itrustee_sdk/test/CA/libqca
QTA:itrustee_sdk/test/TA/qta
- 下载并集成安全函数库。
下载地址:https://gitee.com/openeuler/libboundscheck.git
代码分支:master
iTrustee SDK集成安全函数库
cp -rf libboundscheck/ itrustee_sdk/thirdparty/open_source/ #请根据实际路径予以替换
- QCA lib、QTA编译部署。
- 在QCA lib源码中指定QTA的路径。
vim itrustee_sdk/test/CA/libqca/src/ra_operate_api.c
查找TEEC_OpenSession,并在TEEC_OpenSession上一行增加如下内容。
context.ta_path = (uint8_t *)"/data/e08f7eca-e875-440e-9ab0-5f381136c600.sec";
- 编译、部署QCA lib。
cd itrustee_sdk/test/CA/libqca #请根据实际路径予以替换 make cp output/libqca.so /usr/lib64 && ldconfig
编译成功后, 会生成output/libqca.so动态库,需将libqca.so部署到系统动态库默认搜素路径中,例如“/usr/lib64”。
- TEEOS增强了CA调TA的权限检查,因此需在QTA源码中指明能够调用QTA的CA程序。
vim itrustee_sdk/test/TA/qta/src/tee_qta.c
并在TA_CreateEntryPoint函数中/* TA auth CA */注释下添加如下内容。
ret = addcaller_ca_exec("/vendor/bin/qcaserver", "root"); if (ret != TEE_SUCCESS) return ret;
- 编译、部署QTA。
- QTA依赖cJSON,需下载cJSON源码,并放置到“itrustee_sdk/test/TA/qta/src”目录下。
wget https://github.com/DaveGamble/cJSON/archive/refs/tags/v1.7.15.tar.gz tar xvf v1.7.15.tar.gz mv cJSON-1.7.15/ itrustee_sdk/test/TA/qta/src/cJSON
- QTA同普通TA一样,需先获取华为颁发的TA开发者证书,请参考调测环境TA应用开发者证书申请。
获取QTA的TA开发者证书、签发的config二进制后,需将QTA的TA私钥、config二进制部署到以下路径:
“itrustee_sdk/build/signtools/signed_config/config”
“itrustee_sdk/build/signtools/TA_cert/private_key.pem”pip3 install pycryptodomex #安装iTrustee SDK TA签名工具依赖 cd itrustee_sdk/test/TA/qta #根据实际路径予以替换 make cp e08f7eca-e875-440e-9ab0-5f381136c600.sec /data
QTA编译成功后,会生成e08f7eca-e875-440e-9ab0-5f381136c600.sec,需部署到“/data”目录下。该目录由QCA lib代码指定,可根据实际情况予以修改。
- QTA依赖cJSON,需下载cJSON源码,并放置到“itrustee_sdk/test/TA/qta/src”目录下。
QTA作为远程证明的特权TA,限定QTA的uuid为e08f7eca-e875-440e-9ab0-5f381136c600,QTA的service_name可予以替换。
- 在QCA lib源码中指定QTA的路径。
- 下载鲲鹏安全库,获取远程证明Demo。
下载地址:https://gitee.com/openeuler/kunpengsecl/tree/feature%2Fiot-support/
- 配置编译环境。
- 依赖一些头文件,可在如下文件中指定实际头文件的路径。
vim kunpengsecl/attestation/rac/Makefile # 路径根据实际情况修改 vim kunpengsecl/attestation/rac/ka/katools/katools_arm64.go
并将如下内容中头文件路径修改为实际路径,即将“/opt”修改为2中itrustee_sdk的实际路径。
- 依赖libteec_adaptor.so库,可到2中itrustee_sdk的源码目录通过如下命令编译出动态库,并拷贝到系统路径下。
cd itrustee_sdk/src/CA # 路径根据实际情况修改。 gcc -fPIC -shared -o libteec_adaptor.so libteec_adaptor.c -I ../../include/CA/ cp libteec_adaptor.so /usr/lib64/
- 依赖cjson动态库,可使用4下载的cjson源码进行安装。
cd itrustee_sdk/test/TA/qta/src/cJSON make && make PREFIX=/usr install
- 编译依赖1.17版本的golang,可通过如下方式配置。
wget https://go.dev/dl/go1.17.13.linux-arm64.tar.gz tar xvf go1.17.13.linux-arm64.tar.gz export PATH=$PWD/go/bin/:$PATHv go version
- 依赖一些头文件,可在如下文件中指定实际头文件的路径。
- 编译远程证明Demo。
cd kunpengsecl make clean && make build
编译成功后,会在各个文件夹下生成Demo涉及的程序,比如qcaserver、libteeverifier.so等。此外还生成了一些模拟器用到的so库,需删除,否则libqca会优先使用模拟器的so库。
rm -rf attestation/tee/tverlib/simulator/*.so
- 部署程序:在步骤4 QTA源码中指定了qcaserver的执行路径,因此需要将qcaserver部署到对应目录下。
cp kunpengsecl/attestation/tee/demo/pkg/qcaserver /vendor/bin/
- 若使用AS(Attestation Service)模式,则需要提前准备数据库。
dnf install openldap-devel postgresql-server cd kunpengsecl/attestation/quick-scripts/ bash prepare-database-env.sh
- 若使用AS模式,需要提前启动AS服务,可另启一个窗口,执行如下命令。
- 配置证书。
cd kunpengsecl/attestation/tas/cmd/ # 启动AS服务需要先配置好私钥和证书。 openssl genrsa -out aspriv.key 4096 openssl req -new -x509 -days 365 -key aspriv.key -out ascert.crt
证书需要填写一些配置信息,可根据需求填写,演示Demo未设置。
- 配置config.yaml文件,该目录提供了AS服务默认的config.yaml配置文件。可根据如下注释信息和需求修改,演示只需修改basevalue即可。
tasconfig: # 默认开放的服务端口 port: 127.0.0.1:40008 rest: 127.0.0.1:40009 # 为AS配置的私钥和证书 akskeycertfile: ./ascert.crt aksprivkeyfile: ./aspriv.key huaweiitcafile: ./Huawei IT Product CA.pem # 如下配置仅用于测试,实际情况请更新内容以保证安全 DAA_GRP_KEY_SK_X: 65a9bf91ac8832379ff04dd2c6def16d48a56be244f6e19274e97881a776543c65a9bf91ac8832379ff04dd2c6def16d48a56be244f6e19274e97881a776543c DAA_GRP_KEY_SK_Y: 126f74258bb0ceca2ae7522c51825f980549ec1ef24f81d189d17e38f1773b56126f74258bb0ceca2ae7522c51825f980549ec1ef24f81d189d17e38f1773b56 # QTA的度量基准,可从步骤4编译QTA时的itrustee_sdk/build/signtools/hash_e08f7eca-e875-440e-9ab0-5f381136c600.txt文件中获取,basevalue的填写格式为【img_hash mem_hash】 basevalue: "8c6faf44d8d1fa9f83977e405caadd7d9b1194839d6034d5412fe00f5f294976 0f474ebc56dc5502f7fba2a26d983b3a6cf2da84ce44730f60d4c660d42634a6" authkeyfile: ./ecdsakey.pub
- 启动AS服务。
go run main.go -T; go run main.go
- 配置证书。
- 启动RA Service服务,接收远程证明请求。可另起一个窗口,执行如下命令启动服务。
cd kunpengsecl/attestation/tee/demo/qca_demo/cmd/
该目录提供了qcaserver默认的config.yaml配置文件,可根据需求修改。演示可使用默认值。
qcaconfig: server: 127.0.0.1:40007 # 默认开放的服务端口 akserver: 127.0.0.1:40008 # AS服务的端口配置 scenario: 0 nodaaacfile: ./nodaa-ac.crt # as no daa模式的证书路径 daaacfile: ./daa-ac.crt # as with daa模式的证书路径
启动RA Service服务。可根据需求选择合适的场景。
# 其中-C表示远程证明场景,0: no as; 1: as no daa; 2: as with daa /vendor/bin/qcaserver -C 1
启动后在AS模式下,qcaserver会主动连接AS服务获取证书。no AS模式则不会连接AS服务。
- 启动测试CA/TA。可另起一个窗口,按照加载TA和CA应用 运行演示CA/TA程序或用户应用。
- 启动RA client,可另起一个窗口,发起远程证明调用请求。
- 进入RA client程序的目录下。
cd kunpengsecl/attestation/tee/demo/attester_demo/cmd
- 配置config.yaml文件。该目录提供了RA client默认的config.yaml配置文件,可根据需求修改。演示需修改TA应用的UUID。
attesterconfig: server: 127.0.0.1:40007 # RA Service服务的端口配置 basevalue: "./basevalue.txt" # 待测试TA的基准度量 mspolicy: 2 # 验证策略,1为仅对比img-hash值,2为仅对比mem-hash值,3为同时对比img-hash和mem-hash两个值 uuid: 435dcafa-0029-4d53-97e8-a7a13a80c82e # 测试TA的uuid
- 配置测试TA的基准度量。config.yaml中指定了测试TA的基准度量配置文件。
vim basevalue.txt
基准度量可通过编译测试TA时生成的hash_{测试TA uuid}.txt获取,位于itrustee_sdk/build/signtools目录下。basevalue.txt的填写格式为:【uuid img_hash mem_hash】,示例为如下。
435dcafa-0029-4d53-97e8-a7a13a80c82e a1ef720498a93a36df8c3b1ea58058485de5b8146d399e837b0b709b53224542 ad36fdf631f1fdd6dc47c8d80bdf08fb752d1e93bd97ed534abbde797bf68b8b
- 若使用AS模式,可将AS服务的证书拷贝到当前目录。
cp ../../../../tas/cmd/ascert.crt TAS\ Root\ Cert.pem
- 发起远程证明请求。
go run main.go
若tlogcat出现如下错误,可能原因为RA client发起请求时,测试TA已经退出了。
解决办法:重新启动测试CA/TA,并重新发起请求即可。因此推荐延长测试CA/TA执行时间,为操作预留足够时间。
- 进入RA client程序的目录下。