数据模型

SDK 包含以下数据模型:

MYTFProfile

MYTFProfile 是可验证的 MYTF 身份信息。Profile的概念是指可信计算引擎中的某个独立组件的身份和状态信息。该组件持有自己的签名密钥和加密密钥,签名密钥可以用于向外证明该组件在可信计算引擎中的行为,加密密钥可以用于该组件和外界进行端到端的加密通信。

在 MYTF 计算节点初始化时,首先通过 Intel SGX 提供的 Local Attestation 本地认证功能,Enclave 会生成代表自身身份的自荐信息 Quote。然后,通过 Intel SGX 提供的 Remote Attestation 远程认证功能,MYTF 会将自荐信息发送给 Intel 远程认证服务IAS。IAS 会对 MYTF 所在的可信执行硬件和 MYTF 中运行的 Enclave 代码进行核身校验。其中,具有唯一性的 MYTF 身份信息数据profileData的哈希会作为自荐信息中的一部分,一起被 IAS 进行完整性校验。

使用 MYTF SDK 的用户,可以向任意一个 MYTF 实例获取被IAS服务认证过的 MYTF 身份信息MYTFProfile并验证该 MYTF 实例是否安全可信。

参数

类型

说明

report

String

IAS 验证自荐信息的正确性报告

xIasreportSignature

String

IAS 对该报告的签名

xIasreportSigningCertificate

String

IAS 证书链

profileData

String

MYTF 身份信息数据

SGXReport

Intel SGX 认证报告,IAS 对 MYTF 身份信息和所在硬件信息的验证报告。

参数

类型

说明

id

String

报告唯一标识

timestamp

timestamp

报告生成时间戳

epidPseudonym

String

epid 相关信息

isvEnclaveQuoteStatus

String

ISV 远程认证报告的状态,”OK” 表示 ISV 认证通过

platformInfoBlob

String

平台信息 Blob

isvEnclaveQuoteBody

IsvEnclaveQuoteBody

远程认证报告的详细信息

ProfileData

ProfileData是具有唯一性的 MYTF 身份信息数据,其中包括MYTFInfoMYTF 身份信息和CounterInfo计数信息。在 MYTF 生成自荐信息Quote时,ProfileData的哈希会作为自定义数据,由 MYTF 自己注入在 Quote 中,一起被 IAS 进行完整性校验。

参数

类型

说明

MYTFInfo

byte[]

MYTF身份信息

CounterInfo

byte[]

用于防重放,确保用户每次请求的 MYTFInfo 具有唯一性。

MYTFInfo

MYTFInfo是 MYTF 的身份信息。MYTFProfile 是被 IAS 校验过的MYTF身份信息,其中包括 MYTFInfo 和 IAS 的校验证明。在 MYTFInfo 中,Encryption Keys是 MYTF 的加密公钥,Signing Keys是 MYTF 的签名公钥,公钥根据不同算法有多个。

参数

类型

说明

version

Int

MYTF 当前版本

domainName

String

MYTF 所在域名

regionName

String

MYTF 所在分区名

MREnclave

byte[]

MYTF 实例代码的度量值

MRSigner

byte[]

MYTF 实例签发者公钥的度量值

IASCACert

String

Intel Attestation Service CA 根证书

property

Map< String, String>

其他附加属性

encryptionKeys

Map< KeyType, byte[]>

MYTF 的加密公钥,包含多把加密公钥

signingKeys

Map< KeyType, byte[]>

MYTF 的签名公钥,包含多把签名公钥

TAPPProfile

TAPPProfile是可验证的 TAPP 身份信息。包括TAPPInfo和 MYTF 对TAPPInfo的签名。

参数

类型

说明

TAPPInfo

byte[]

TAPP 信息

signature

byte[]

MYTF 对 TAPP 信息的签名

signingPK

byte[]

MYTF 签名公钥

TAPPInfo

TAPPInfo是 TAPP 的身份信息。其中Encryption Keys是该 TAPP 的加密公钥。Signing Keys是 TAPP 的签名公钥,公钥根据不同加密算法有多个。

参数

类型

说明

tappId

String

TAPP 名称

version

Int

TAPP 版本号

execEngine

String

执行引擎类型

codeHash

byte[]

TAPP 可执行字节码的哈希

description

String

TAPP 描述

property

Map< String, String>

附加属性

encryptionKeys

Map< KeyType, byte[]>

TAPP 的加密公钥

signingKeys

Map< KeyType, byte[]>

TAPP 的签名公钥

TAPPInstallRequest

参数

类型

说明

tappId

String

TAPP 名称

tappVersion

Int

TAPP 版本号

tappExecEngine

ExecEngineType

TAPP 的执行引擎类型,默认为 MYVM

bytecode

byte[]

TAPP 的字节码,编写TAPP代码后通过 MYCDT 编译的字节码

description

String

TAPP 的描述

property

Map< String, String>

TAPP 的附加属性

构造安装 TAPP 请求示例:

// 构造安装 TAPP 请求
TappInstallRequest tappInstallRequest = TappInstallRequest.builder()
    .newTapp(tappId, tappVersion, bytecodes)
    .setTappDescription(tappDesc)
    .build();

TAPPInstallResponse

参数

类型

说明

isSuccess

boolean

安装是否成功

errorCode

Int

错误码

errorMessage

String

错误信息

解析安装 TAPP 响应示例:

// 解析安装 TAPP 响应
TappInstallResponse tappInstallResponse = restClient.installTapp(tappInstallRequest);
boolean ifSuccess = tappInstallResponse.isSuccess();
int errorCode = tappInstallResponse.getErrorCode();
String errorMsg = tappInstallResponse.getErrorMessage();

TAPPRemoveRequest

参数

类型

说明

tappId

String

TAPP 名称

tappVersion

int

TAPP 版本号

构造删除 TAPP 请求示例:

// 构造删除 TAPP 请求
TappRemoveRequest tappRemoveRequest = TappRemoveRequest.builder()
  .defaultRequest(tappId, tappVersion)
  .build();

TAPPRemoveResponse

参数

类型

说明

isSuccess

boolean

安装是否成功

errorCode

Int

错误码

errorMessage

String

错误信息

解析删除 TAPP 响应示例:

// 解析删除 TAPP 响应
TappRemoveResponse tappRemoveResponse = restClient.removeTapp(tappRemoveRequest);
Assert.assertTrue(tappRemoveResponse.isSuccess());

TAPPExecuteRequest

参数

类型

说明

tappId

String

TAPP 名称

tappVersion

Int

TAPP 版本号

method

String

要执行的方法

args

byte[]

方法参数

构造执行 TAPP 请求示例:

// 构造执行 TAPP 请求
TappExecuteRequest tappExecuteRequest = TappExecuteRequest.builder()
    .defaultRequest(tappId, tappVersion, testReqMethod)
    .build();

TAPPExecuteResponse

参数

类型

说明

requestHash

byte[]

执行请求的 Hash

responseCode

Int

错误码

responseMessage

String

错误信息

returnValue

byte[]

在 MYVM 中执行代码返回的结果

output

byte[]

用户规定的输出值或执行失败后的日志

解析执行 TAPP 响应示例:

// 发送执行 TAPP 请求
TappExecuteResponse tappExecuteResponse = restClient.executeTapp(tappExecuteRequest);

// 可信计算任务请求是否合法
boolean ifReqSuccess = tappExecuteResponse.isRequestSuccess();

// 可信计算任务执行是否成功
boolean ifExeSuccess = tappExecuteResponse.isExecuteSuccess();

// 查看计算任务请求是否合法及错误码
int responseCode = tappExecuteResponse.getResponseCode();
String responseMessage = tappExecuteResponse.getResponseMessage();

// 查看计算任务执行过程中用户自定义输出或执行失败后计算引擎抛出的错误信息
byte[] returnValue = tappExecuteResponse.getOutput();

// 获取执行结果
byte[] returnValue = tappExecuteResponse.getReturnValue().getRawReturnValues();

// 获取 TAPP 签名
byte[] sig = tappExecuteResponse.getSignature();

TAPPAuthorizeRequest

参数

类型

说明

tappId

String

TAPP 的身份标识

tappVersion

Int

TAPP 的版本

authData

UserIdentityData

授权数据

构造授权 TAPP 请求示例:

// 构造授权TAPP请求
UserIdentityData authorizeeData = new UserIdentityData(UserDomainEnum.BAASREST, "user_id","", AccessTypeEnum.EXECUTE);

TappAuthorizeRequest tappAuthorizeRequest = TappAuthorizeRequest.builder()
  .defaultRequest(tappId, tappVersion, authorizeeData)
  .build();

TAPPAuthorizeResponse

参数

类型

说明

isSuccess

boolean

是否成功

errorCode

Int

错误码

errorMessage

String

错误信息

解析授权 TAPP 响应示例:

// 解析授权 TAPP 响应
TappAuthorizeResponse tappAuthorizeResponse = restClient.authorizeTapp(tappAuthorizeRequest);
Assert.assertTrue(tappAuthorizeResponse.isSuccess());