一、Tee介紹
TEE (Trusted Execution Environment) 被定義為運行於一個信任環境中的小型操作系統,它採用硬件安全模塊 (HSM) 來增強其安全性能。TEE 專註於安全,支持安全的數據和代碼處理,允許保存和共享客戶數據,確保其完整性,防止其被篡改或泄漏。
TEE 在 Android 平台上被廣泛應用,它的主要功能之一是實現加密安全方案。TEE 作為 CPU 的一個副本運行,只分配少量的 RAM 和存儲空間。該技術的目的是提供一種安全的執行環境,同時保證代碼和數據安全,這對於需要進行敏感操作和數據的應用程序非常重要。
二、Tee的實現方式
在 Android 平台上,有兩種 Tee 的實現方式,分別是 Global Platform Tee 和 Trusty Tee。
1. Global Platform Tee
Global Platform Tee 是由硬件廠商實現的 TEE,它通過硬件提供安全保證,比如 ARM Trustzone 或高通 QSEE 等。全球範圍內,許多廠商已經生產了支持 ARM Trustzone 的處理器,這使得它成為實現 Global Platform Tee 的理想選擇。
// 示例代碼
int open_session()
{
uint32_t ret = 0;
TEEC_Result result = TEEC_ERROR_GENERIC;
TEEC_UUID uid = GP_TEE_UUID;
result = TEEC_InitializeContext(NULL, &ctx);
if (result != TEEC_SUCCESS) {
LOGD("TEEC_InitializeContext failed with code 0x%x", result);
return -1;
}
memset(&sess, 0, sizeof(sess));
result = TEEC_OpenSession(&ctx, &sess, &uid,
TEEC_LOGIN_PUBLIC, NULL, NULL, &ret);
if (result != TEEC_SUCCESS) {
LOGD("TEEC_OpenSession failed with code 0x%x", result);
goto out;
}
out:
TEEC_FinalizeContext(&ctx);
return ret;
}
2. Trusty Tee
Trusty Tee 是 Android 平台上的TEE,它是通過軟件實現的,可以在不同的處理器上以用戶應用程序的形式運行,不需要獨立芯片,使得 TEE 的實現更加簡單和靈活。
與硬件實現TEE相比,Trusty Tee 不依賴於芯片硬件支持,因此它可以在許多不支持硬件 TEE 的設備上運行。另一方面,它的安全性可能會受到威脅。
// 示例代碼
int open_session()
{
int fd;
fd = open("/dev/trusty-ipc-dev0", O_RDWR);
if (fd < 0) {
LOGD("failed to open trusty device.\n");
return -1;
}
return fd;
}
三、基本操作
在使用 TEE 前,需要進行一些常見操作,包括初始化 TEE 環境、打開會話等。下面示例代碼中的 GP_TEE_UUID 指的是 Global Platform Tee 上的 TEE UUID,這裡通過它來打開會話。對於 Trusty Tee,可以通過 /dev/trusty-ipc-dev0 這個設備節點來打開會話。
// 示例代碼
int open_session()
{
uint32_t ret = 0;
TEEC_Result result = TEEC_ERROR_GENERIC;
TEEC_UUID uid = GP_TEE_UUID;
// 初始化 TEE 上下文
result = TEEC_InitializeContext(NULL, &ctx);
if (result != TEEC_SUCCESS) {
LOGD("TEEC_InitializeContext failed with code 0x%x", result);
return -1;
}
memset(&sess, 0, sizeof(sess));
// 打開會話
result = TEEC_OpenSession(&ctx, &sess, &uid,
TEEC_LOGIN_PUBLIC, NULL, NULL, &ret);
if (result != TEEC_SUCCESS) {
LOGD("TEEC_OpenSession failed with code 0x%x", result);
goto out;
}
out:
// 結束 TEE 上下文
TEEC_FinalizeContext(&ctx);
return ret;
}
四、Tee的數據讀寫
TEE 可以使用共享內存機制,在 TEE 和 Android 應用程序之間進行數據讀寫,實現數據的保護。共享內存可以通過類似 mmap 的調用來實現,在 Android 系統中,這個過程可以通過 C++ 接口分別在客戶端和 TEE 中完成。
// 示例代碼
int read_data()
{
uint32_t ret;
TEEC_Result result = TEEC_ERROR_GENERIC;
TEEC_Operation operation;
// 共享內存
TEEC_SharedMemory shared_mem;
// 分配共享內存空間
int mem_size = 1024;
char* mem = new char[mem_size];
shared_mem.buffer = mem;
shared_mem.size = mem_size;
// 進行讀操作
memset(&operation, 0, sizeof(operation));
operation.paramTypes = TEEC_PARAM_TYPES(
TEEC_MEMREF_WHOLE,
TEEC_NONE,
TEEC_NONE,
TEEC_NONE);
operation.params[0].memref.parent = &shared_mem;
result = TEEC_InvokeCommand(&sess, CMD_READ_DATA, &operation, &ret);
if (result != TEEC_SUCCESS) {
LOGD("TEEC_InvokeCommand failed with code 0x%x", result);
goto out;
}
// 讀取共享內存數據
char* buffer = (char *)shared_mem.buffer;
int buffer_size = get_buffer_size(buffer);
char* buffer_data = get_buffer_data(buffer);
...
// 操作完成,釋放內存
out:
delete[] mem;
return ret;
}
五、TEE與Android應用程序的交互
TEE 通過執行非安全 TAs(Trust Applications)來處理應用程序發起的請求。TA 是一個無法直接調用的庫文件,它可以加載到 TEE 並訪問 TEE 的安全功能。Android 應用程序可以通過 TEE 的 IPC 機制與 TA 進行交互。
在 Android 系統中,TA 可以是一個動態鏈接庫(.so 文件),它可以被 Android 應用程序調用。如果需要訪問諸如加解密之類的安全功能,需要使用 TEE 來實現。
// 示例代碼
#include
#include
int ta_send_cmd(uint32_t cmd, void *in_buf, uint32_t in_size, void *out_buf, uint32_t out_size)
{
ipc_msg_t msg = { 0 };
ipc_msg_info_t msg_info = { 0 };
int rc = -1;
/* send message */
msg.hdr.cmd = cmd;
msg.hdr.num_out_objs = (out_size > 0) ? 1 : 0;
msg.hdr.num_in_objs = (in_size > 0) ? 1 : 0;
msg.data = in_buf;
msg.len = in_size;
if (ipc_send(trusty_channel, &msg) < 0) {
LOGD("failed to send ipc message to %s\n", TA_NAME);
return rc;
}
......
}
六、總結
通過 TEE,可以實現安全的數據和代碼處理,允許保存和共享客戶數據,確保其完整性和防止其被篡改或泄漏。Android 平台上的 TEE 有兩種實現方式,分別是 Global Platform Tee 和Trusty Tee。TEE 可以使用共享內存機制,實現客戶端和TEE之間的數據讀寫。此外,TEE 還支持通過 TA 和 Android 應用程序進行交互操作,進行安全保障。Tee 使得安全敏感的應用程序在 Android 平台上更加安全,讓企業和用戶能夠放心地使用。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/243081.html
微信掃一掃
支付寶掃一掃