数据模型
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 身份信息数据,其中包括MYTFInfo
MYTF 身份信息和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());