Apache Teaclave 0.6.0 机密计算场景进阶实战详解

本文在 SGX 模拟模式下实测 Apache Teaclave 0.6.0 的任务执行模型与四类机密计算场景(Builtin 端到端回显、多方隐私集合求交、WASM 密态函数、GBDT 隐私训练),逐一给出真实命令回显与结果核验,并总结模拟模式的信任边界与生产差异。

Apache TeaclaveApache Teaclave2026/10/15

Apache Teaclave 0.6.0 机密计算场景进阶实战详解

目标:理解 Teaclave 的函数与任务执行模型,在模拟模式下实测多方隐私计算、WASM 密态函数与隐私训练四类场景,全部结果实测通过并附核验方法。

本文承接《Ubuntu 22.04 安装 Apache Teaclave 指南》的构建产物,在 Ubuntu 22.04 + SGX 模拟模式(SGX_MODE=SW)环境中,通过 Python SDK 驱动七个服务组成的完整平台,实测真实机密计算场景。

一、环境信息

项目值
操作系统Ubuntu 22.04(x86_64,12 vCPU / 39 GB)
源码版本legacy 分支 65886ec(2025-07-17),平台版本 0.6.0
构建模式SGX 模拟模式(-DSGX_SIM_MODE=ON -DTEST_MODE=ON)
启用执行器Builtin(Rust 原生)、WAMR(WASM 解释器);MesaPy 默认关闭
服务清单authentication、storage、access_control、management、scheduler、frontend、execution
Python SDK/root/teaclave/sdk/python/teaclave.py(PYTHONPATH 方式引入)
实测时间2026-10-15

💡 技术拓展:Teaclave 任务的执行链路为——用户经 frontend 服务注册函数并创建任务,任务元数据落 storage 服务,scheduler 服务按队列派发,execution 服务的执行器拉取任务后在 enclave 内加载数据、执行函数、加密输出。多方协作任务要求全部数据所有者 approve 后才会被调度执行,这是 Teaclave 区别于普通函数计算平台的核心安全设计。

二、任务执行模型与实测准备

2.1 核心对象

对象说明
Functionenclave 内可执行的函数模板(含参数、输入输出声明)
Task函数的一次执行实例,携带函数参数与数据映射
FunctionInput/Output函数的输入输出口径声明
DataMap任务中「输出口径 → 已注册数据」的绑定
OwnerList数据所有者(决定 approve 权限与输出可见性)

2.2 服务拉起与 SDK 连接

服务启动命令与端口清单见《Apache Teaclave 0.6.0 命令与 CLI 详解》第七章。Python SDK 侧连接方式(examples/python/utils.py 的封装):

from teaclave import AuthenticationService, FrontendService

with connect_authentication_service() as client:
    token = client.user_login(user_id, user_password)   # 返回访问令牌

with connect_frontend_service() as client:
    client.metadata = {"id": user_id, "token": token}   # 后续请求携带元数据

SDK 走 TLS 连接 7776(认证)与 7777(前端)端口。实测 Python 3.10 下需将 sdk/python/teaclave.py 第 129 行 set_npn_protocols 的异常捕获补上 AttributeError(NPN 接口在 OpenSSL 3 中已移除,SDK 原有 NotImplementedError 防护不含此情况):

try:
    ctx.set_npn_protocols(['h2'])
except (NotImplementedError, AttributeError):
    pass

2.3 任务数据的加密通道

任务输入输出文件通过 URL 引用(实测使用本地文件服务器模拟远端对象存储),由文件代理在 enclave 边界完成加解密:输入文件按注册时提供的密钥解密进 enclave,输出文件加密后回写 URL。密钥经过 frontend 通道下发,enclave 内使用 SGX 保护文件系统(teaclave-file-128 格式)落地,实测文件魔数为 ELIF_XGS。

三、场景实战一:Builtin 执行器端到端回显

最基础的机密计算闭环:函数在 enclave 内执行,明文消息只在飞地内部出现。

# examples/python/builtin_echo.py(节选实测逻辑)
function_id = client.register_function(
    name="builtin-echo",
    description="Native Echo Function",
    executor_type="builtin",
    arguments=[FunctionArgument("message")])

task_id = client.create_task(
    function_id=function_id,
    function_arguments={"message": message},
    executor="builtin")
client.invoke_task(task_id)
result = client.get_task_result(task_id)

实测执行:

$ cd /root/teaclave/examples/python
$ SGX_MODE=SW PYTHONPATH=/root/teaclave/sdk/python python3 builtin_echo.py "Hello from Ubuntu 22.04"
[+] login
[+] registering function
[+] creating task
[+] invoking task
[+] getting result
[+] done
[+] function return:  b'Hello from Ubuntu 22.04'

实测结果经认证、前端、管理、调度、执行五个服务返回,与输入完全一致。对应的功能测试用例 end_to_end::builtin_echo::test_echo_task_success 亦通过(enclave 日志实测输出 [INFO teaclave_function::echo] Hello From Teaclave!)。

四、场景实战二:多方隐私集合求交(PSI)

隐私集合求交(Private Set Intersection)是机密计算的代表场景:两方各持一份集合,只想知道交集,不泄露其余元素。Teaclave 内置 ordered_set_intersect 函数,实测完整多党协作流程。

4.1 数据准备

两方输入为 SHA256 哈希后的集合(隐私化处理),以加密保护文件形式托管在文件服务器:

文件内容
psi0.txt(user0)7 个哈希值
psi1.txt(user1)5 个哈希值

手工比对两份明文哈希:共同项为 3 个(3c2ef190…、6b51d431…、fa3cfb3f…)。

4.2 多方任务协作流

示例脚本 examples/python/builtin_ordered_set_intersect.py 实测输出的完整协作流:

[+] user0 login
[+] user1 login
[+] user0 registering function
[+] user0 creating task
[+] user0 registering input file
[+] user0 registering output file
[+] user0 assigning data to task
[+] user1 registering input file
[+] user1 registering output file
[+] user1 assigning data to task
[+] user0 approving task
[+] user1 approving task
[+] user0 invoking task
[+] user0 getting task result
[+] User 0 result: 3 common items
[+] User 1 result: 3 common items

要点实测确认:任务需 user0 与 user1 双方 approve 才能被 invoke(缺一方审批时调度器拒绝执行);双方各自只拿到「3 common items」的计数结果,彼此的原始集合不出域。

4.3 结果文件核验

每位用户的明细结果以其注册输出文件时的密钥加密,经文件代理回写到输出 URL。实测解密 user0 的输出(结果为逐元素位图,1 表示该位置元素在交集中):

$ teaclave_cli decrypt --algorithm teaclave-file-128 \
    --input-file output_psi0.enc \
    --key 00000000000000000000000000000000 \
    --output-file psi0.result
$ cat psi0.result
0101010

位图 0101010 表示 user0 七个元素中第 2、4、6 位命中交集,与 4.1 节手工比对完全一致;user1 输出实测为 01101(五个元素中第 2、3、5 位命中),同样吻合。注:本文 TEST_MODE=ON 构建下执行服务使用固定全零根密钥加密任务文件(源码 services/execution/enclave/src/service.rs:306),生产模式应使用各方自选密钥。

五、场景实战三:WASM 密态函数(WAMR 执行器)

WAMR 执行器允许用户上传 WASM 载荷在 enclave 内执行,实现不修改平台代码的定制密态计算。

5.1 载荷构建

C 载荷用 wasi-sdk-20.0 编译(实测 clang 16.0.0):

$ cd examples/python/wasm_c_simple_add_payload
$ make
/wasi-sdk-20.0/bin/clang -nostdlib -Wl,--export-all -Wl,--allow-undefined \
  -Wl,--no-entry -I../../../sdk/payload/wasm/ -o simple_add.wasm simple_add.c

Rust 载荷用固定工具链的 wasm32 目标编译:

$ rustup target add wasm32-unknown-unknown --toolchain nightly-2022-10-22
$ cd examples/python/wasm_rust_psi_payload
$ RUSTFLAGS= cargo build --target wasm32-unknown-unknown --release
   Compiling wasm_rust_psi_payload v0.1.0
   Finished release [optimized] target(s) in 1.27s

5.2 WASM 加法实测

$ SGX_MODE=SW PYTHONPATH=/root/teaclave/sdk/python python3 wasm_c_simple_add.py
[+] creating task
[+] invoking task
[+] getting result
[+] done
[+] function return:  b'7'

实测返回 b'7'(载荷计算 3+4):WASM 字节码在 enclave 内的 WAMR 解释器中执行,明文输入与输出均在飞地边界内加解密。

5.3 WASM 版 PSI(密态比较协议)

wasm_rust_psi.py 载荷调用 Teaclave 的 WASM 上下文接口(teaclave_context)做密态比较,实测:

[+] user0 invoking task
[+] user0 getting task result
[+] user1 getting task result
[+] User 0 result: 6
[+] User 1 result: 6

双方实测各得 6(两份示例集合的共同项数量),证明 WASM 载荷可以在不接入平台源码的情况下实现自定义多方协议。

六、场景实战四:GBDT 隐私训练

Teaclave 内置 gbdt_training 函数支持在 enclave 内训练梯度提升树(数据不出域)。该场景由功能测试套件端到端覆盖,实测(make run-functional-tests 输出节选):

127.0.0.1 - - "GET /fixtures/functions/gbdt_training/train.enc HTTP/1.1" 200 -
127.0.0.1 - - "PUT /fixtures/functions/gbdt_training/e2e_output_model.enc HTTP/1.1" 200 -
testing teaclave_functional_tests_enclave::end_to_end::builtin_gbdt_train::test_gbdt_training_task ... ok!
  Elapsed time: 8.759558523

实测流程确认:加密训练数据(train.enc)被文件代理取入 enclave,训练产出的模型加密回写(e2e_output_model.enc),用例校验通过。平台上同批通过的功能用例共 54 个(管理/访问控制/调度/认证/存储/前端六服务全部接口 + 端到端),0 失败。

七、模拟模式的信任边界与生产差异

模拟模式能完整验证功能链路,但安全语义与硬件模式存在本质差异,实测归纳如下:

维度模拟模式(SGX_MODE=SW)硬件模式(SGX_MODE=HW)
enclave 内存隔离SDK 模拟层模拟,无真实内存加密CPU 硬件隔离(MEE 内存加密)
远程认证禁用(AS_* 为占位值,attest 子命令不可用)EPID/DCAP 接入 Intel 认证服务
服务身份校验退化为 teaclave_cli verify 本地校验 enclave_info 签名本地校验 + 在线认证报告双重确认
任务数据密钥测试模式使用固定全零根密钥(源码实测)各方注册时提交的真实密钥
适用阶段功能验证、开发调试、CI生产部署

💡 技术拓展:远端认证链路上的 TEE 实现差异——Teaclave SGX SDK 面向 Intel SGX(EPID 与 DCAP/ECDSA 两种认证体系),TrustZone SDK 面向 Arm TrustZone(OP-TEE 环境,认证基于 RSA 签名的 TA 身份),两条路线的认证协议不同但 SDK 抽象一致。本文模拟模式实测的平台代码运行于 SGX 路线。

7.1 MesaPy 执行器状态

legacy 分支的 EXECUTOR_MESAPY 默认 OFF(CMakeLists.txt 实测),examples/python 中的 mesapy_* 系列示例需要 MesaPy 解释器(third_party/mesapy 子模块)单独编译后才能运行,本文未启用;需要 Python 密态函数时应显式配置 -DEXECUTOR_MESAPY=ON 并预留额外构建时间,或优先采用 WASM 路线(WAMR 默认启用,本文已实测)。

7.2 生产化检查清单

  1. 替换示例审计者:用自有密钥重新签名 enclave_info,并从产物中删除 auditors/ 目录下的示例私钥(实测构建产物中存在测试私钥)。
  2. 启用真实数据密钥:关闭 TEST_MODE 构建,确认执行服务的文件加密不再使用固定根密钥。
  3. 接入远程认证:硬件模式部署,配置 IAS/DCA 凭据后用 teaclave_cli attest 验证认证报告。
  4. 网络边界:仅向用户暴露 7776/7777 两个端口,storage、scheduler 等服务端口按仓库默认配置监听在服务间网络,部署时应置于内网并用防火墙限制来源。
  5. 项目维护状态评估:Teaclave FaaS 平台已停止活跃维护(legacy 分支,最后发布 v0.6.0,2023-06),生产采用需评估安全补丁的持续获取;活跃演进在 Teaclave SGX SDK(最新 tag v1.1.6)等子项目中进行。

八、FAQ

Q1:get_task_result 返回空字节,结果在哪里? 计算明细在输出文件中(按输出注册密钥加密),get_task_result 返回的是任务级汇总(如 PSI 的计数与状态)。实测通过解密输出文件拿到逐元素位图(第四章)。

Q2:任务 invoke 后一直无结果? 检查 execution 服务是否启动、scheduler 是否有执行器注册(/tmp/exec.log);多方任务还需确认全部 owner 已 approve。

Q3:示例连接服务报 _set_npn_protocols 属性错误? Python 3.10 + OpenSSL 3 环境的 NPN 移除问题,按 2.2 节为 teaclave.py 补充 AttributeError 捕获。

Q4:模拟模式下数据真的加密了吗? 文件格式与密钥链路是真实的(保护文件系统实测),但内存完整性保护是模拟的——这正是模式差异所在,见第七章对照表。

Q5:能否在生产直接用 legacy 平台? 功能链路完整可用,但项目已转向 SDK 生态、平台分支停止维护,生产部署需自行承担维护成本;建议评估后选择:以 0.6.0 为基线自维护,或改用 SGX SDK 自研 TEE 服务。

九、参考链接

  1. 平台示例代码:https://github.com/apache/incubator-teaclave/blob/legacy/examples/python/
  2. my-first-function 官方教程:https://github.com/apache/incubator-teaclave/blob/legacy/docs/my-first-function.md
  3. 多方任务与审批机制:https://github.com/apache/incubator-teaclave/blob/legacy/docs/terminology.md
  4. Teaclave SGX SDK(活跃子项目):https://github.com/apache/teaclave-sgx-sdk
  5. 本文配套文档:《Ubuntu 22.04 安装 Apache Teaclave 指南》《Apache Teaclave 0.6.0 命令与 CLI 详解》