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());