文档
注册
评分
提单
论坛
小智

API接口简介

  • kunpengsecl开源库已实现了远程证明的整体流程,用户可直接使用该库熟悉远程证明的整体流程和组件。
  • 若有深度定制化需求,可通过如下介绍以及《iTrustee SDK开发者手册》了解底层开放的接口。《iTrustee SDK开发者手册》需向华为业务负责人申请获取。

为了实现远程证明,TEE OS底层对外提供两种类型的接口,一种是给特权QTA提供的特权级接口(Quoting System Interface, QSI),另一种是给其他TA提供的非特权级接口(Quoting Application Interface, QAI),其中TA调用QTA提供的接口,可以通过TA调用TA的方式实现。目前,特权级接口QSI共有1个,非特权级接口QAI共有3个。另外,QCA lib和QTA已封装好对TEE OS底层的接口调用,用户可使用QCA lib提供的接口完成TEE OS底层接口调用。以下为接口API的简单介绍。

TEE侧特权接口

struct ra_buffer_data {
    uint32_t length;
    uint8_t *buffer;
};
TEE_Result ra_qsi_invoke(struct ra_buffer_data *in, struct ra_buffer_data *out);

该接口只能由QTA调用,入参与出参的buffer都为格式化的json字符串。json的结构体大致如下,详情可参考《iTrustee SDK开发者手册》。

{
    "handler": "xxxxx",
    "payload": {....}
    ...
}

通过handler的值可实现如下操作:

  • Provision:生成AK密钥和AK证书,获取度量报告前需先执行此操作。入参的payload中可指定远程证明的场景。无AS场景下无出参,有AS场景下,出参的payload中包含QTA的度量、随机生成的AK公钥,还包括设备证书对payload的签名。
  • SaveAKCert:在有AS场景下需要调用此接口保存AS回的证书。入参中包含AS返回的证书,无DAA(Direct Anonymous Attestation)场景时无出参,有DAA场景时返回随机化后的AK证书。
  • ValidateAKCert:仅在有AS且有DAA模式下,调用SaveAKCert返回随机化的AK证书后,调用此接口验证AK证书并保存原证书。
  • Report:获取度量报告。入参的包括待度量的TA的uuid,出参包括待度量TA的基准度量等信息。

TEE侧非特权接口

# 获取度量报告,入参出参和特权接口获取度量报告时一致。
TEE_Result ra_local_report(struct ra_buffer_data *in, struct ra_buffer_data *out);
# 该接口与TA的度量值绑定,生成随机Key,对data进行加密和解密,只有该TA且度量值未变时,才能解密之前加密的数据
TEE_Result ra_seal(uint8_t *data, size_t in_size, uint8_t *cipher_data, size_t *cipher_size, uint32_t alg);
TEE_Result ra_unseal(uint8_t *cipher_data, size_t cipher_size, uint8_t *data, size_t *out_size, uint32_t alg);

该接口可由任意非特权TA调用。

REE侧接口

为方便用户迅速开发远程证明应用,QCA lib/QTA已对TEE OS底层接口调用完成了封装,用户只需在开发REE侧的应用,即可完成接口调用。

TEEC_Result RemoteAttest(struct ra_buffer_data *in, struct ra_buffer_data *out);
TEEC_Result RegisterContainer(struct ra_buffer_data *container_info, TEEC_Context *context, TEEC_Session *session, uint32_t *origin);
  • RemoteAttest:对ra_qsi_invoke接口的封装,入参同ra_qsi_invoke的入参,为序列化的json字符串。
  • RegisterContainer:从1.4.0起,为支持容器内远程证明,host上的QCA lib新增的接口,container_info为序列化的json结构体。
    {
        "container_id": 容器id,
        "nsid": 容器nsid
    }

libqca-report和QTA-report完成了容器内TEE OS接口调用的封装。libqca-report只有RemoteAttest接口,并只能用于获取report报告。若是容器调用libqca-report,其输入json结构体中需要增加如下容器信息。

{
    ......
    "payload": {
        .....
        "container_info": {
            "id": 容器id,
            "type": 容器类型
        }
    }
}
搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词