标签:隐私计算、可信执行环境、LLM、沙盒、内存加密、TEE、SGX、Gramine
----
1. 背景:甲方爸爸一句话,“数据不能出机房”
我们给某三甲医院做智能问诊助手,模型 70 B、知识库 300 GB。
甲方只给了两条铁律:
1. 患者原始对话永久不可见;
2. 运维人员也无法偷看日志。
传统做法:
• 私有化部署 → 运维 root 权限可拷日志;
• 联邦学习 → 推理延迟飙到 5 s+。
于是,我们把整个 LLM 关进“小黑屋”——基于 Intel SGX 的隐私沙盒。
----
2. 技术选型:为什么选 SGX 而不是 GPU?
维度 GPU TEE (H100) Intel SGX 结论
内存加密 128 GB HBM3 加密 ✅ 512 GB EPC ✅ SGX 够用
生态 CUDA TEE 刚起步 Gramine/OCCLUM 成熟 SGX 胜出
成本 40 万 / 卡 2.4 万 / 服务器 甲方钱包胜出
----
3. 系统架构:三层“黑盒”
┌────────────────────────┐
│ 用户明文请求 │ ← 医院内网
└────────────────────────┘
│
┌────────────────────────┐
│ 应用网关(TLS 终端) │ ← 日志脱敏
└────────────────────────┘
│
┌────────────────────────┐
│ SGX Enclave │
│ ┌────────────────────┐ │
│ │ LLM-70B INT4 │ │
│ │ KV-Cache Encrypted│ │
│ │ 无文件句柄 │ │
│ └────────────────────┘ │
└────────────────────────┘
----
4. 关键细节:让 70 B 模型“裸奔”在 256 GB 加密内存
4.1 模型切片
• 70 B INT4 → 35 GB
• Enclave 预留 40 GB EPC,剩余留给 KV-Cache
• 动态换页:冷 prompt 权重换入,热 prompt 常驻
4.2 Gramine 配置
[sgx]
enclave_size = "40G"
thread_num = 16
allow_file_creation = false # 禁止写盘
4.3 内存加密
• 权重 + KV-Cache 统一用 AES-GCM 128
• 每次推理随机 96-bit IV,存于 Enclave 寄存器
----
5. 零信任日志:运维也看不见
• 无文件日志:所有日志通过 密封通道(sealed channel)写到外部队列,内容仅含脱敏 hash
• 会话令牌:每次对话 256-bit 随机 token,用完即焚
• 远程证明:客户端 JavaScript 验证 Enclave 签名,防止中间人
----
6. 性能实测:加密 ≠ 龟速
指标 明文裸机 SGX 加密 损耗
首 token 延迟 620 ms 790 ms +27 %
吞吐 18 tokens/s 14 tokens/s -22 %
CPU 占用 85 % 90 % 可接受
----
7. 部署:一条命令起沙盒
# 构建加密镜像
gramine-sgx-gen-private-key
docker build -t llm-sgx:0.1 .
# 启动
docker run --device=/dev/sgx_enclave \-e ENCLAVE_SIZE=40G \llm-sgx:0.1
----
8. 踩坑 & 彩蛋
坑 解决
EPC 换页崩溃 把 KV-Cache 切分 256 MB block,按 LRU 换页
随机数熵不足 使用 RDRAND + 定时重播检测
彩蛋 在 Enclave 里跑 `cowsay` 显示“Hello from the black box”
----
9. 开源 & 下一步
GitHub:
https://github.com/blackbox-llm/sgx-guard
已放出:
• Gramine manifest 模板
• INT4 权重打包脚本
• 远程证明 Demo 前端
下一步:
• ☐ AMD SEV-SNP 适配
• ☐ GPU TEE 路线 (H100 CC)
• ☐ 支持联邦微调(Enclave ↔ Enclave)
----
10. 结语:隐私与性能可以兼得
当模型被关进 硬件级黑盒,
当运维 root 也拿不到明文日志,
你会发现 “零信任”不是口号,而是一行 manifest 配置。
如果这篇文章帮你把甲方爸爸哄开心了,欢迎去 GitHub 点个 Star ⭐;
也欢迎留言聊聊你把哪些大模型关进了小黑屋!