深入理解tee-gp-proxy核心组件:gpproxy、gpworker与libteecc架构详解
深入理解tee-gp-proxy核心组件gpproxy、gpworker与libteecc架构详解【免费下载链接】tee-gp-proxyThis project aims to provide an implementation for RPC invoking TEE to facilitate the use of Kunpeng confidential computing in cloud scennarios.项目地址: https://gitcode.com/openeuler/tee-gp-proxy前往项目官网免费下载https://ar.openeuler.org/ar/tee-gp-proxy是openEuler社区推出的面向鲲鹏机密计算场景的关键项目旨在通过RPC调用可信执行环境TEE为云场景下的安全计算提供高效解决方案。本文将详细解析其三大核心组件——gpproxy、gpworker与libteecc的架构设计与协同工作机制帮助开发者快速掌握项目精髓。核心组件架构概览tee-gp-proxy采用分层架构设计三大组件各司其职又紧密协作共同构建起从用户态到TEE的安全通信桥梁。整体架构如下图1tee-gp-proxy核心组件架构示意图展示了gpproxy、gpworker与libteecc在TrustZone资源池中的位置与交互关系从架构图可见紫色模块为本项目实现的核心部件其中libteecc位于计算平台的用户CA层提供TEE客户端API接口gpproxy作为gRPC服务器运行在TrustZone资源池处理API请求与JWT认证gpworker通过DBus与gpproxy通信负责实际的TEE命令执行gpproxyTEE通信的中枢神经gpproxy作为整个系统的通信中枢负责接收客户端请求、管理会话生命周期并协调gpworker执行任务。其核心实现位于cc-resource-pooling/teeproxy/gpproxy/目录。核心数据结构gpproxy通过两个关键数据结构管理会话与工作进程// 会话节点结构定义 typedef struct sessionid_node { uint32_t session_id; // 会话唯一标识 struct timeval session_createtime; // 会话创建时间 struct sessionid_node *next; // 链表指针 struct sessionid_node *prev; } sin_t; // 工作进程记录结构 typedef struct worker_rec { uint8_t busy; // 工作状态标记 int32_t context_fd; // 上下文文件描述符 uint64_t context_addr; // 上下文内存地址 struct timeval context_createtime; // 上下文创建时间 int sessionid_count; // 关联会话数量 sin_t *first; // 会话链表头 sin_t *last; // 会话链表尾 } wr_t;这些结构定义在gpproxy.h中通过双向链表高效管理多个并发会话实现资源的动态分配与回收。主要功能gRPC服务器实现监听客户端请求提供GP API接口JWT认证集成通过JWT SVID验证客户端身份会话管理创建、跟踪和销毁TEE会话任务调度将请求分发到合适的gpworker进程处理gpworkerTEE命令的实际执行者gpworker作为后台工作进程负责与TEE内核交互执行具体命令。其源代码位于cc-resource-pooling/teeproxy/gpworker/目录核心实现为gpworker.c。工作流程gpworker的主函数实现了典型的服务端架构int main(int argc, char *argv[]) { threadpool_t pool; // 线程池 pthread_mutex_t mutex_tcl; // 线程安全锁 pthread_mutex_t mutex_tsl; tcl_t tcl; // 任务控制列表 tsl_t tsl; // 任务状态列表 // 参数检查 if (argc 2) { printf(There is no argument as a worker name. \n); return -1; } // 启动方法调用接收循环 receive_methodcall( pool, mutex_tcl, mutex_tsl, tcl, tsl, argv[1] // 工作进程名称 ); return 0; }核心特性线程池管理通过threadpool.c实现并发任务处理DBus通信通过tzcp_dbus.c与gpproxy通信TEE客户端API调用使用tee_client_api.h接口与TEE交互任务队列通过tcl_t和tsl_t结构管理任务生命周期libteeccTEE客户端开发库libteecc提供了完整的TEE客户端API位于cc-resource-pooling/teeproxy/libteecc/目录是用户态应用与TEE通信的标准接口。核心数据结构与接口libteecc定义了多个结构体用于封装TEE操作的输入输出参数例如// 初始化上下文返回结构 struct retstru_teec_inicont { uint32_t teecresult; // TEE操作结果码 int32_t context_fd; // 上下文文件描述符 uint8_t *context_tapath; // TA路径 uintptr_t context_tapath_outsize; // TA路径长度 // ... 省略其他字段 }; // 打开会话函数原型 struct retstru_teec_opensession externc_teec_opensession( int32_t in_context_fd, uint8_t *in_context_tapath, int32_t in_context_tapath_size, // ... 省略其他参数 );完整定义见teecc.h包含了从上下文初始化、会话管理到命令调用的全流程接口。主要功能上下文管理通过externc_teec_initializecontext和externc_teec_finalizecontext管理TEE上下文会话操作提供会话创建externc_teec_opensession和关闭externc_teec_closesession功能命令调用通过externc_teec_invokecommand执行TEE命令内存管理提供共享内存和缓冲区管理接口组件协同工作流程三大组件通过标准化接口协同工作实现从用户应用到TEE的安全通信初始化阶段用户应用通过libteecc的externc_teec_initializecontext创建TEE上下文libteecc通过gRPC客户端连接到gpproxy服务会话建立阶段调用externc_teec_opensession发起会话请求gpproxy验证JWT令牌创建新会话并分配gpworker处理命令执行阶段用户应用调用externc_teec_invokecommand发送命令gpproxy将请求转发给gpworkergpworker通过TEE Client API与TEE内核交互结果通过原路返回给用户应用资源释放阶段调用externc_teec_closesession关闭会话gpproxy回收会话资源更新worker状态跨平台架构设计tee-gp-proxy采用模块化设计支持多种部署场景。下图展示了在鲲鹏服务器上的虚拟化环境部署架构图2tee-gp-proxy在鲲鹏服务器上的虚拟化部署架构展示了跨VM的TEE资源共享机制该架构支持多租户VM共享TEE资源通过virtSerial和vTZDproxy实现跨VM通信内核态驱动与用户态服务协同工作快速上手与资源获取要开始使用tee-gp-proxy项目可通过以下步骤获取源码git clone https://gitcode.com/openeuler/tee-gp-proxy项目核心组件代码路径gpproxycc-resource-pooling/teeproxy/gpproxy/gpworkercc-resource-pooling/teeproxy/gpworker/libteecccc-resource-pooling/teeproxy/libteecc/详细部署指南请参考项目文档cc-resource-pooling/docs/deployment/deployment.docx总结tee-gp-proxy通过gpproxy、gpworker和libteecc三大核心组件构建了一个高效、安全的TEE RPC调用框架。其分层架构设计既保证了安全性又提供了良好的可扩展性特别适合云环境下的机密计算场景。开发者可以通过libteecc快速集成TEE功能而gpproxy和gpworker则处理了复杂的会话管理和任务调度大大降低了TEE应用开发门槛。随着鲲鹏机密计算技术的不断发展tee-gp-proxy将持续优化为用户提供更强大、更易用的TEE访问能力。无论是企业级应用还是开源项目都可以通过该框架轻松获得硬件级的安全计算保障。【免费下载链接】tee-gp-proxyThis project aims to provide an implementation for RPC invoking TEE to facilitate the use of Kunpeng confidential computing in cloud scennarios.项目地址: https://gitcode.com/openeuler/tee-gp-proxy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考