---
title: 特性使用
description: "固件要求："
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/2200/confidt/kunpengtrustzone_04_0035.html
sourcePath: /source/zh/kunpengboostkithistory/2200/confidt/kunpengtrustzone_04_0035.html
indexId: 64904740fbbaa7b1bb18e9da0c01d5d2212020d4fc8aa2f66ba41cf1179833d176
---
# 特性使用

固件要求：


**表1 固件版本要求**

| 固件 | 版本要求 |
| --- | --- |
| TEE OS | >= 1.2.0 |


软件包获取：


**表2 软件包获取途径**

| 软件名称 | 说明 | 获取途径 |
| --- | --- | --- |
| verify lib | 鲲鹏安全库，提供远程证明报告校验API。 | https://gitee.com/openeuler/kunpengsecl/tree/feature/tee\-phase1(https://gitee.com/openeuler/kunpengsecl/tree/feature/tee\-phase1) |
| QCA lib | 提供证明密钥注册、远程证明API。 | https://gitee.com/openeuler/itrustee\_sdk.git(https://gitee.com/openeuler/itrustee\_sdk.git) |
| QTA | 运行在TEE侧特权TA应用，可对目标TA发起证明挑战，配合QCA实现证明报告获取传递。 | https://gitee.com/openeuler/itrustee\_sdk.git(https://gitee.com/openeuler/itrustee\_sdk.git) |
| iTrustee SDK | iTrustee配套的开发者工具，要求版本不低于6.1.1，支持编译TA自动生成TA基线度量值，用于TA远程/本地证明。 | https://gitee.com/openeuler/itrustee\_sdk.git(https://gitee.com/openeuler/itrustee\_sdk.git) |
| libboundscheck | 安全函数库 | https://gitee.com/openeuler/libboundscheck.git(https://gitee.com/openeuler/libboundscheck.git) |


当前版本，远程证明中verify lib、QCA lib、QTA均开源至openEuler社区，并提供Demo示例展示如何使用远程证明相关API，开发者可参考Demo示例开发远程证明服务应用。远程证明Demo获取、编译使用可参考如下步骤。

1. 编译、部署libteec.so。
  可参考获取iTrustee patch包 获取、编译itrustee_client，并将libteec.so部署在“/usr/lib64”目录，并确认路径“/usr/lib64”已添加至系统动态库默认搜索路径。

2. 下载配套iTrustee SDK，已包含QCA lib、QTA源码。
  下载地址：https://gitee.com/openeuler/itrustee_sdk.git(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

3. 下载并集成安全函数库。
  下载地址：https://gitee.com/openeuler/libboundscheck.git(https://gitee.com/openeuler/libboundscheck.git)

  代码分支：master

  iTrustee SDK集成安全函数库

```
cp -rf libboundscheck/ itrustee_sdk/thirdparty/open_source/  #请根据实际路径予以替换
```


4. QCA lib、QTA编译部署。

  a. 编译、部署QCA lib。

```
cd itrustee_sdk/test/CA/libqca   #请根据实际路径予以替换
make
cp output/libqca.so /usr/lib64 && ldconfig
```


    编译成功后， 会生成output/libqca.so动态库，需将libqca.so部署到系统动态库默认搜素路径中，例如“/usr/lib64”。


  b. 编译、部署QTA。
    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 /vendor/bin
```


    QTA编译成功后，会生成e08f7eca-e875-440e-9ab0-5f381136c600.sec，需部署到“/vendor/bin”目录下。该目录由QCA lib代码指定，可根据实际情况予以修改。

QTA作为远程证明的特权TA，限定QTA的uuid为e08f7eca-e875-440e-9ab0-5f381136c600，QTA的service_name可予以替换。


5. 下载鲲鹏安全库，获取远程证明Demo。
  下载地址：https://gitee.com/openeuler/kunpengsecl/tree/feature/tee-phase1(https://gitee.com/openeuler/kunpengsecl/tree/feature/tee-phase1)

  代码分支：feature/tee-phase1

6. 设置RA Service的QCA lib引用路径。

```
vim kunpengsecl/attestation/tee/demo/qca_demo/qcatools/qcatools.go  #根据实际路径予以替换
```

需指定以下三个关键路径：

  - libqca对外API头文件搜索路径
  - itrustee sdk中CA应用头文件搜索路径
  - 链接libqca.so、libteec.so动态库
截图中文件修改点仅供参考，具体修改后路径需根据实际情况予以替换。
RA Service Demo需通过“#include <ra_client_api.h>”引用libqca对外API头文件，并额外新增"#include <stdbool.h>"和“#include <stdlib.h>”头文件。
7. 编译远程证明Demo。

  a. 编译环境准备。

```
yum install golang
cd kunpengsecl/attestation/quick-scripts  #根据实际路径予以替换
bash prepare-build-env.sh
```


  b. 编译libteeverifier动态库。

```
cd kunpengsecl/attestation/tee/tverlib/verifier #根据实际路径予以替换
make
cp -rf libteeverifier.so /usr/lib64
ldconfig
```


  c. 编译Demo。

```
cd kunpengsecl/attestation/tee/demo     #根据实际路径予以替换
make
cp pkg/qcaserver /vendor/bin/ra_client_test
```


    编译成功后会产生pkg目录，其中pkg/qcaserver即RA Service，需部署在“/vendor/bin”目录下并命名为ra_client_test。RA Service的部署路径和可执行文件名取决于QTA代码指定路径，QTA会检查远程证明请求发起CA（e.g RA Service）的加载路径，开发者可根据实际需要予以调整。

8. 运行远程证明Demo。

  a. 启动RA Service。

```
cd /vendor/bin
vim config.yaml    #参考如下config.yaml示例，根据实际需要予以内容替换
/vendor/bin/ra_client_test
```


    RA Service默认会从当前命令执行路径加载config.yaml配置文件，config.yaml指定了RA Service远程证明侦听的IP地址和端口信息、以及远程证明场景，当前版本仅支持无AS服务的远程证明，即scenario等于0。

    config.yaml示例如下：

```
qcaconfig:
server: 127.0.0.1:40007
scenario: 0
```


    RA Service服务正常启动后截图如下：

    提示RA Service成功加载配置文件，完成侦听IP、端口绑定，并主动通过QCA Lib api接口完成远程证明密钥注册。

  b. 启动attester，发起远程证明。

```
cd kunpengsecl/attestation/tee/demo/pkg/  #根据上述步骤6中产生的attester二进制实际路径予以替换
vim config.yaml      #参考如下config.yaml示例，根据实际需要予以内容替换
vim basevalue.txt    #指定TA应用远程基线度量值
./attester
```


    远程证明client attester通过RPC（Remote Procedure Call）实现与RA Service通信，需通过config.yaml指定RA Service服务IP和端口信息，并指定远程证明待度量目标TA uuid信息等信息。

    config.yaml示例如下：

```
attesterconfig:
server: 127.0.0.1:40007
basevalue: "./basevalue.txt"
mspolicy: 1
uuid: f68fd704-6eb1-4d14-b218-722850eb3ef0
```


    server：指定RA Service IP地址和端口。

    basevalue：TA基线度量值存储文件。

    mspolicy：远程度量策略，1为仅对比img-hash值，2为仅对比mem-hash值，3为同时对比img-hash和mem-hash两个值。

    uuid：待度量目标TA uuid信息，请根据实际情况予以替换。

    basevalue.txt示例如下：

```
f68fd704-6eb1-4d14-b218-722850eb3ef0 bda93201babc6ee96b60edd6b4104c0a5b2ab66f22b3e82a0fbe121c955755b2 319964db5bfad8ffd1b32abe7148f7681b1ef15f4bab8a20d377d9623feb3758
```


    basevalue文件以十六进制字符串的形式存储TA应用的基准值记录，每一条basevalue记录分为三项：uuid、image-hash、mem-hash，项与项之间用空格间隔，记录之间用换行间隔。

    启动远程证明client attester运行截图如下：

    其中RA Service提示获取TA远程证明报告失败：

    使用tlogcat可观察到QTA异常日志：

    这是由于待度量TA未加载运行，获取TA度量报告失败。加载待度量TA后， 重新运行atterster，运行结果截图如下：

    成功获取目标TA度量报告，报告有效性检查通过后， 提取报告中的TA实时度量值，并于basevalue中的基线度量值匹配成功。

    目标TA的基线度量值在用iTrustee sdk构建目标TA过程中会自动通过执行itrustee_sdk/build/signtools/get_ta_elf_hash.py计算出TA镜像和运行时内存（代码段、只读数据段）的度量值，结果记录在itrustee_sdk/build/signtools/hash_{TA-UUID}.txt文件中。 例如，hash_f68fd704-6eb1-4d14-b218-722850eb3ef0.txt内容如下：

    为确认AK（Attestation Key）的可信，鲲鹏安全库在校验端将使用华为的AIK二级公钥证书。 以上介绍了鲲鹏安全库无AS场景下远程Demo使用，AS场景下的远程证明Demo可参考鲲鹏安全库远程证明Demo介绍(https://gitee.com/lixiaomingg/kunpengsecl/blob/feature/tee-phase2.1/doc/TEE_DEMO_README.md)
