鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

特性使用

固件要求

表1 固件版本要求

固件

版本要求

TEE OS

>= 1.2.0

软件包获取

表2 软件包获取途径

软件名称

说明

获取途径

verify lib

鲲鹏安全库,提供远程证明报告校验API。

https://gitee.com/openeuler/kunpengsecl/tree/master/

QCA lib

提供证明密钥注册、远程证明API。

https://gitee.com/openeuler/itrustee_sdk.git

QTA

运行在TEE侧特权TA应用,可对目标TA发起证明挑战,配合QCA实现证明报告获取传递。

https://gitee.com/openeuler/itrustee_sdk.git

iTrustee SDK

iTrustee配套的开发者工具,要求版本不低于 6.1.1,支持编译TA自动生成TA基线度量值,用于TA远程/本地证明。

https://gitee.com/openeuler/itrustee_sdk.git

libboundscheck

安全函数库

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

    代码分支: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

    代码分支:master

    iTrustee SDK集成安全函数库

    cp -rf libboundscheck/ itrustee_sdk/thirdparty/open_source/  #请根据实际路径予以替换
  4. QCA lib、QTA编译部署。
    1. 在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";
    2. 编译、部署QCA lib。
      cd itrustee_sdk/test/CA/libqca   #请根据实际路径予以替换
      make
      cp output/libqca.so /usr/lib64 && ldconfig

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

    3. 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;
    1. 编译、部署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作为远程证明的特权TA,限定QTA的uuid为e08f7eca-e875-440e-9ab0-5f381136c600,QTA的service_name可予以替换。

  5. 下载鲲鹏安全库,获取远程证明Demo。

    下载地址:https://gitee.com/openeuler/kunpengsecl/tree/feature%2Fiot-support/

  6. 配置编译环境。
    1. 依赖一些头文件,可在如下文件中指定实际头文件的路径。
      vim kunpengsecl/attestation/rac/Makefile    # 路径根据实际情况修改
      vim kunpengsecl/attestation/rac/ka/katools/katools_arm64.go

      并将如下内容中头文件路径修改为实际路径,即将“/opt”修改为2中itrustee_sdk的实际路径。

    2. 依赖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/
    3. 依赖cjson动态库,可使用4下载的cjson源码进行安装。
      cd itrustee_sdk/test/TA/qta/src/cJSON
      make && make PREFIX=/usr install
    4. 编译依赖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

  7. 编译远程证明Demo。
    cd kunpengsecl
    make clean && make build

    编译成功后,会在各个文件夹下生成Demo涉及的程序,比如qcaserver、libteeverifier.so等。此外还生成了一些模拟器用到的so库,需删除,否则libqca会优先使用模拟器的so库。

    rm -rf attestation/tee/tverlib/simulator/*.so
  8. 部署程序:在步骤4 QTA源码中指定了qcaserver的执行路径,因此需要将qcaserver部署到对应目录下。
    cp kunpengsecl/attestation/tee/demo/pkg/qcaserver /vendor/bin/
  9. 若使用AS(Attestation Service)模式,则需要提前准备数据库。
    dnf install openldap-devel postgresql-server
    cd kunpengsecl/attestation/quick-scripts/
    bash prepare-database-env.sh

  10. 若使用AS模式,需要提前启动AS服务,可另启一个窗口,执行如下命令。
    1. 配置证书。
      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未设置。

    2. 配置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
    3. 启动AS服务。
      go run main.go -T; go run main.go

  11. 启动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服务。

  12. 启动测试CA/TA。可另起一个窗口,按照加载TA和CA应用 运行演示CA/TA程序或用户应用。
  13. 启动RA client,可另起一个窗口,发起远程证明调用请求。
    1. 进入RA client程序的目录下。
      cd kunpengsecl/attestation/tee/demo/attester_demo/cmd
    2. 配置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
    3. 配置测试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
    4. 若使用AS模式,可将AS服务的证书拷贝到当前目录。
      cp ../../../../tas/cmd/ascert.crt TAS\ Root\ Cert.pem
    5. 发起远程证明请求。
      go run main.go

    若tlogcat出现如下错误,可能原因为RA client发起请求时,测试TA已经退出了。

    解决办法:重新启动测试CA/TA,并重新发起请求即可。因此推荐延长测试CA/TA执行时间,为操作预留足够时间。