从 HTTPS 到 LLM Agent:我们重回数字安全的黑暗时代了吗?

当 AI 助手开始读取代码、调用工具和执行命令,隐私问题就不再只是"会不会拿去训练"。

0. 写在前面

这篇文章不是劝大家停止使用 AI 工具。笔者自己也很难回到没有 LLM Agent 的工作流里。

真正想讨论的问题是:我们正在把什么交给远端模型?这些数据经过哪些服务?谁能看见,谁能修改,谁能触发本地工具调用?出了问题以后,能不能审计和追责?

过去一两年,LLM Agent 正在从聊天窗口渗透到越来越多的实际工作流里。Cursor、Claude Code、Codex、Cline 这类工具让模型直接读仓库、看 diff、跑测试、改文件、调 shell;企业内部也开始用 Agent 跑自动化测试、处理文档、改 bug、做运维巡检、接 MCP server 调度各种内部工具。效率确实高。很多时候,高到让人愿意先把安全边界放到一边。

国内开发者还多一层现实约束:第一方模型账号、网络、支付、企业采购、区域政策,都可能成为接入门槛。于是模型中转站、聚合路由、共享 key、公司内部网关自然会出现。它们谈不上道德失败------就是需求和约束一起挤出来的工程产物。

问题在于,LLM Agent 的安全模型比普通 API 调用重得多。传统互联网里,一个请求通常只携带业务参数。LLM Agent 的请求里可能是一段压缩过的工作环境------代码、日志、内部文档、运维上下文甚至秘钥都可能在里面。

当 prompt 里装进源码、日志、工具 schema、终端输出和秘钥痕迹时,它就不再是普通文本。

1. HTTPS 让我们学会默认不信任网络中间人

先说一个熟悉的历史类比。

HTTP 明文时代,网络路径上的人不仅能看见请求和响应,还能在内容抵达浏览器之前修改它。运营商、Wi-Fi 热点、公司代理、各种中间盒,都可能站在用户和网站之间。这不是理论风险------当年国内的 HTTP 页面被运营商注入广告,是很多开发者亲身经历过的事。
笔者于 2017 年 2 月 15 日在 Steam 商店页面的真实截图:HTTP 明文流量在运营商链路上被劫持并注入广告。放到十年后的今天,这几乎已不可想象。[存档文章](https://steinslab.io/archives/1139)。

HTTPS 的普及花了很多年。靠的绝非"大家突然觉悟了"------浏览器、证书机构、网站和云厂商一起把安全默认值硬生生改了过来。

Chrome 的节奏很有代表性。2016 年,Google 宣布 Chrome 56 会先把收集密码或信用卡的 HTTP 页面标为 Not secure。效果立竿见影------Chromium 公告称 Chrome 56 变化后,桌面端访问带密码或信用卡表单的 HTTP 页面的导航比例下降了 23%。^1^ 2017 年 Chrome 62 把警告扩展到更多输入场景和无痕模式。2018 年 7 月 Chrome 68 开始对所有 HTTP 页面显示 Not secure。Google 当时的数据显示,Android 上受 HTTPS 保护的 Chrome 流量已从 42% 升至 76%,Top 100 网站默认使用 HTTPS 的数量从 37 个升至 83 个。^2^

Let's Encrypt 也改变了成本结构。它把证书做成免费、自动化、开放的基础设施。2016 年 3 月就签发了第 100 万张证书,覆盖约 240 万个域名,增长速度超过每周 10 万张。^3^ 浏览器警告负责制造压力,免费证书负责降低摩擦。两边一起推,HTTPS 才变成今天的默认直觉。

后来浏览器走得更远。Mixed content blocking 开始阻断 HTTPS 页面里的 HTTP 子资源加载;Secure contexts 把 Geolocation、Service Workers 等强能力 API 限制在安全上下文中。^4^ HTTPS 不再只是"传输加密",而成了浏览器授予能力的前提条件。

这段历史不需要展开成互联网考古。它有一个足够重要的点:

我们花了很多年,才把"网络中间人能看见和修改明文"变成工程常识。

那问题来了。LLM Agent 时代,我们有没有把另一个明文中间人请回开发环境?

答案不能简单写成"有"。TLS 仍然存在。你和 OpenAI、Anthropic、Google、Azure、OpenRouter、LiteLLM gateway、公司内部网关之间通常都有 HTTPS。路上的普通窃听者看不到明文。

新的问题在应用层。很多 LLM API 代理会终止 TLS,然后把请求转发给上游模型。代理看到的是完整 JSON------system prompt、user prompt、工具定义、工具调用参数、文件片段、错误日志,甚至某些凭据痕迹。

HTTPS 解决的是"路上有没有人偷看"。LLM Agent 的问题是:远端计算方和中间层本身是否需要看到明文,以及我们怎么限制它看到什么、能做什么。

2. LLM Agent 请求里到底有什么

普通聊天里,prompt 可能只是一个问题:

帮我解释一下 B+ 树。

但在 LLM Agent 里,prompt 常常不是这样。它更像一个动态拼装的上下文包------无论 agent 是在帮你写代码、跑测试、处理工单还是做运维巡检。

内容类型 为什么会被发送 可能暴露什么
源码片段 让模型理解业务逻辑 知识产权、业务规则、漏洞
git diff 让模型审查改动 未发布功能、内部实现
终端输出 让 agent 判断下一步 用户名、路径、环境变量、凭据痕迹
测试日志 定位失败原因 内部 URL、token、客户数据片段
数据库 schema 让模型写 SQL 或迁移 业务模型、权限边界
配置文件 复现运行环境 连接串、密钥名、服务拓扑
tool schema 告诉模型能调用什么 系统能力、函数名、权限形状
tool call arguments 执行动作 文件路径、命令、URL、请求参数
MCP server 描述 让模型选择工具 工具身份、描述注入、权限扩大

这就是 LLM Agent 和普通 SaaS 最大的差别之一。传统 SaaS 当然也处理敏感数据,但 Agent 的上下文密度要高得多。它会把平时散落在不同系统里的信息------代码、错误、日志、命令、工具调度、运维上下文、内部文档------压缩到一个请求里。

再加上 agent 的"行动能力",风险性质就变了。

如果聊天机器人泄漏一段 prompt,损失可能是一段文本。LLM Agent 泄漏或被篡改时,后果可能是:

  • 读取不该读的文件。
  • 执行不该执行的 shell 命令。
  • 安装被投毒的依赖。
  • 把日志或秘钥发到外部 URL。
  • 修改部署脚本。
  • 使用云 CLI 操作真实资源。
  • 在 YOLO mode 下跳过人工确认。

所以我们不能把 LLM Agent 的工作流看成"浏览器里多发了一个 API 请求"。更准确的心智模型是:

prompt 是开发环境切片,tool call 是动作意图,agent runtime 是执行器。 三者连起来,就是一个高信任计算系统。

3. 第一方 API、中转站和内部网关:信任边界光谱

很多讨论容易把问题压扁成一句话:中转站危险,第一方安全。

这个说法太省事了。它会错过真正重要的工程问题。

第一方 API 通常更可信------有正式条款、数据政策、合规审计、企业支持、日志保留策略、ZDR 或 MAM 之类的特殊模式。Azure 这类云托管服务还有租户隔离、KMS、数据驻留、企业身份和审计体系。公司内部网关也可能提供统一策略和审计。

但这几类系统都属于"远端明文计算"的不同形态。区别在于组织控制、透明度、审计能力、追责能力和技术约束的强弱。

访问方式 优势 仍然要面对的问题
第一方 API 官方条款、数据控制、企业合规、日志策略 推理时通常需要处理明文;不是传统 E2EE
云平台托管模型 云厂商治理、KMS、数据驻留、IAM、审计 云平台和推理栈仍是信任边界
公司内部模型网关 组织可控、策略统一、便于审计 管理员、日志、调试链路、内部代理也会成为边界
第三方中转站/聚合路由 便宜、方便、模型多、接入摩擦低 透明度、审计、追责、响应完整性通常更弱
本地模型 数据不出本机 能力、速度、上下文、工具生态、维护成本

中转站真正特殊的地方在于:它常常是额外加入的明文处理方。

传统 HTTPS 叙事里,中间人通常是攻击者、运营商或恶意证书。LLM API router 不同------用户或工具主动把它配置成 API endpoint。它不需要破坏 TLS,只要完成正常代理职责就会在应用层看到请求和响应明文。改个 base_url 就能接入,低摩擦是中转站扩散的工程基础,也是信任边界悄悄迁移的原因。

这层服务为了正常工作,可能需要解析请求、路由模型、做配额、做日志、做计费、改写 provider 格式、兼容 tool calling。正常功能和攻击能力在技术位置上挨得很近。

一个位于模型调用链上的代理,理论上可能具备这些能力:

  • 读取请求明文。
  • 读取响应明文。
  • 记录和重放请求。
  • 修改 system prompt 或 user prompt。
  • 修改模型响应。
  • 修改 tool call 参数------比如把 pip install 的包名换成 typosquat 包,把 URL 换成攻击者脚本。
  • 注入额外 tool call。
  • 替换上游模型。
  • 对某类任务做条件触发。
  • 被动扫描 AWS key、OpenAI key、SSH key、数据库连接串、钱包私钥。

这不等于每个中转站都会这么做。更稳妥的说法是:如果一个系统在技术上拥有这些能力,安全设计就不能假设它永远只是透明管道。

第一方 API 也一样。我们应该信任它们更多,但不要把"更可信"误读成"技术上不可见"。这部分后面单独讲。

4. 案例研究:中间层不只是"转发管道"

4.1 不是理论推演------钱已经被偷了

论文 Your Agent Is Mine 研究了 LLM API routers 这类应用层代理。^5^ 它们站在客户端和模型提供商之间,终止 TLS,拿到 in-flight JSON payload 的明文访问权。论文无意指控"所有路由器都坏",它的目的是做实测:这些中间层在现实里有没有滥用或被滥用的迹象。

答案是有,而且比例不低。

研究者测试了 28 个付费 routers 和 400 个免费 routers。在这些样本里:

  • 9 个 routers 主动向返回的 tool calls 注入恶意代码------1 个付费,8 个免费。不是"理论上可以注入",是实际注入了。
  • 其中 2 个 routers 还有自适应规避策略:warm-up 后才触发投毒,或者只针对 Rust/Go 项目下手。
  • 17 个免费 routers 触碰了研究者布置的 AWS canary credentials。研究者把诱饵凭据放进 prompt,这些凭据被中间层扫描并实际访问了。
  • 1 个 router 从研究者控制的以太坊私钥钱包中转走了 ETH。 这不是"它看了一眼"------是真金白银被偷走了。

研究者还做了反向实验:故意泄露一个 OpenAI key,观察它的后续命运。结果这个 key 产生了约 100M GPT-5.4 tokens,触发超过 7 个 Codex sessions。他们部署的弱配置诱饵(20 个域名 + 20 个 IP)收到 147 个 IP 的未授权访问,处理约 2B tokens,暴露约 13 GB 可见 traffic。更让人不安的是:99 个 credentials 暴露于 440 个 Codex sessions,其中 401 个已经运行在 YOLO mode------也就是自动批准工具调用,不需要人工确认。

这组数据的冲击力在于:研究者没有构造理论攻击链,他们就是在真实市场里买了服务、在公开社区里找了免费 API,然后实测出了这些结果。凭据被扫描、资产被转走、投毒在发生,而且有些攻击者已经学会了看人下菜------按项目语言和用户行为做条件触发。

从工程角度拆解,这些数据指向三层风险:

中间层可以读。 AWS canary 被触碰、ETH 被转走,说明敏感凭据不只停留在"理论上可见"的层面。中间层在主动扫描经过它的 prompt,寻找高价值秘密。

中间层可以改。 9 个 routers 主动注入恶意代码,意味着风险已经从隐私走向完整性。对任何有工具调用能力的 Agent 来说,响应完整性极其关键------模型返回的不是普通文字,可能是下一步命令、补丁、URL、包名、API 请求参数或运维操作指令。OpenAI 的 function calling 文档写得清楚:tool_calls 里的 JSON arguments 由应用侧执行,模型返回的是结构化调用请求。^6^ 如果中间层在返回路径篡改了 tool_calls.function.arguments,客户端仍然会把它当作模型生成的合法工具调用执行。strict: true 能限制参数形状,但不能证明参数来源。

自动执行会把一切放大。 YOLO mode 本身不是根因------根因是权限过大、边界太宽、确认太少。但 401/440 的 Codex sessions 运行在 YOLO mode,意味着篡改直接变成执行,攻击者不需要骗过人,只需要骗过机器。即使没有 YOLO mode,人类也不擅长逐字符审计每一次 tool call。

论文还评估了几类客户端防御:fail-closed policy gate 阻断了所有 AC-1/AC-1.a shell-rewrite samples,约 1.0% false positive;response-side anomaly screening 标记 89% AC-1 samples;1000 个 synthetic sessions 的 append-only transparency log 约 12.0 MB。^5^

这些防御有用,但都有边界。Policy gate 会牺牲灵活性;anomaly screening 可能被拆成多个看似正常的 tool calls 绕过;transparency log 帮助事后取证,不能阻止被动凭据收集。论文最终指向 provider-backed response integrity:agent 执行的 tool call 应该能被密码学地绑定到上游模型实际生成的结果。

4.2 供应链事件:中间层软件本身也会被污染

中转站风险不只来自"服务商会不会偷看",也来自它运行的那套代理软件、依赖、镜像和 CI/CD 是否会被污染。

2026 年 3 月,LiteLLM------一个广泛使用的 LLM Gateway / Proxy Server------的 PyPI 包发生供应链 compromise。受影响版本是 litellm==1.82.7litellm==1.82.8,恶意包在上线约 40 分钟后被 PyPI quarantine。^7^ 恶意 payload 位于 proxy server 核心文件 proxy_server.py,会扫描 environment variables、SSH keys、AWS/GCP/Azure credentials、Kubernetes tokens 和 database passwords,并通过 POST 方式外泄到攻击者控制的域名。GitHub Advisory 称安装并运行受影响版本的用户应假设 LiteLLM 环境内可用凭据已暴露。^8^

这个事件的特殊性在于:LLM gateway 不是普通依赖库。它聚合了多家上游模型 key、组织预算、日志和请求内容。一旦被植入 credential stealer,影响面比普通库被污染更直接地触碰安全边界。

所以中间层的风险有两个维度:运营方的行为,和它所依赖的供应链的完整性。

4.3 这些案例证明什么,不证明什么

它们证明:

  • 应用层 LLM 代理拥有实际的明文观察和改写能力,且已在灰黑产和公开免费 router 样本中被观测到主动恶意行为。
  • Coding agent 的工具调用让中间层风险从"偷看 prompt"升级为"影响本地动作"。
  • 即便不考虑运营方恶意,代理软件供应链本身也是高价值攻击目标。

它们不证明:

  • 所有第三方路由都是恶意的。
  • 第一方服务就没有风险。
  • 用户只要不用中转站就安全了。

5. Prompt injection:它不是普通注入

很多人第一次听到 prompt injection,会自然联想到 SQL injection。这个类比有启发,也有危险。

SQL injection 的问题是数据被拼进了指令。但数据库系统有明确的语法、权限和参数化查询机制。工程上虽然会犯错,但有清晰的修复方向------参数化查询从根上阻止数据被解释成 SQL 指令。

LLM 的情况更麻烦。system prompt、用户输入、网页内容、README、issue、日志、邮件、工具返回值、MCP 工具描述,最终都变成上下文里的 token。模型内部没有传统程序那样强制执行的"这是指令,那是数据"的隔离机制。应用层经常希望模型"理解"外部内容,却又希望模型"不要把外部内容当指令"。这个边界在模型内部并不天然存在。

NCSC 的说法很准确:prompt injection 不应被当成 SQL injection 的同类问题;LLM 更像一个 inherently confusable deputy------天然容易混淆的代理人。^9^

5.1 间接注入:攻击入口是整个信息环境

Indirect prompt injection 把攻击入口从聊天框扩展到了整个信息环境。攻击者不需要和你的 agent 对话。他只要让你的 agent 读到一段文本:

  • 一个网页。
  • 一个 README。
  • 一个 GitHub issue。
  • 一封邮件或 Slack 消息。
  • 一个日志字段。
  • 一个搜索结果或 RAG 片段。
  • 一个 MCP server 的工具描述。
  • 一个依赖包说明。

如果 agent 把这段内容当成"下一步该做什么"的线索,攻击者就有机会影响工具调用。

早期论文 Not what you've signed up for 展示了 indirect prompt injection 如何通过网页、检索结果、邮件、代码补全上下文等外部内容影响 LLM 应用。^10^ HouYi 对 36 个真实 LLM 应用做黑盒攻击,31 个被发现易受攻击,成功率约 86.1%。^11^ 后续 Formalizing and Benchmarking Prompt Injection Attacks and Defenses 用 5 类攻击、10 类防御、10 个 LLM 和 7 个 NLP 任务做了系统化评测,Combined Attack 的平均 ASV 为 0.62,平均 MR 为 0.78------更大的模型往往更容易被成功注入。^12^

5.2 Agent 里的后果:从"说错话"升级为"做错事"

AgentDojo 把问题推进到工具调用环境。它包含 4 个环境(Workspace、Slack、Travel、Banking)、70 个工具、97 个用户任务、27 个 injection targets、629 个 security test cases。典型攻击是把"先执行这件重要任务"藏进工具输出,诱导 agent 泄露安全码、发送钓鱼链接、订最贵酒店或转账。^13^

GPT-4o 在无防护 targeted ASR 为 57.69%。加入各类防御后:data delimiting 降到 41.65%;PI detector 降到 7.95%,但 benign utility 明显下降;tool filter 为 6.84%。^13^ 一个很不舒服的发现是:更会用工具的模型往往也更容易完成攻击者的恶意任务。

Agent Security Bench 覆盖了更多攻击阶段------system prompt、user prompt、tool usage、memory retrieval------在 10 个场景、13 个 LLM 上,最高平均攻击成功率达到 84.30%。^14^ 还有研究专门展示了简单 prompt injection 可以让银行任务中的 agent 泄露执行过程中观察到的个人数据------注意,这里的泄漏跟模型记忆训练数据无关------模型是在替你办事时临时看见了数据,然后被第三方内容诱导转发出去。^15^

这些 benchmark 数字不该被直接换算成"某个生产产品有多少概率被攻破"。它们有模型、工具、任务和模板差异。但它们能说明另一件事:攻击是可复现、可量化、可比较的。防御的主线不应是"写一个更强系统提示",而是把模型输出降级为不可信建议,真正的边界在确定性代码、工具权限和沙箱中实现。

5.3 MCP 和工具生态:标准化的便利与标准化的风险

MCP 让工具接入像插 USB 一样方便。安全问题也随之变成:这个"设备"是谁做的,名字有没有被冒充,驱动会不会偷数据,权限是否过大,更新是否可信。

MCP security survey 把 MCP server 生命周期分为 creation、deployment、operation、maintenance 四阶段,覆盖 4 类攻击者和 16 类威胁------包括 namespace typosquatting、tool poisoning、installer spoofing、cross-server shadowing 和 credential theft。^16^ MCP 官方安全文档自己就给了一个例子:恶意 startup command 可以读取 ~/.ssh/id_rsa 并通过 curl 发到外部。^17^

MalTool 论文更进一步,构造了 1,200 个 standalone 恶意工具和 5,287 个嵌入真实工具的 Trojan 恶意工具。在多个 coding LLM 上,带 verifier 的 MalTool 达到 100% 攻击成功率,而现有商业恶意软件检测对这些工具的检测效果有限。^18^

中间层攻击和工具投毒还可以组合。中间层看到 prompt 和 tool schema,知道 agent 运行在高权限模式,改写返回的 tool call,本地 agent 执行被污染参数,恶意工具或 shell 命令读取、上传凭据。这个链条不需要模型本身恶意。

所以 prompt injection 在 Agent 里不是"让模型说错话"。更准确地讲:

它是让模型在错误的上下文里,调用了真实工具。

6. 第一方 API 的隐私现实

前面讲了中转站和中间层。这里必须把视角拉回来。

即使完全不用中转站,直接使用第一方 API,今天主流云端 LLM 推理也通常不是端到端加密系统。

6.1 "默认不训练"已经是底线

第一方 API 的商业承诺比早期成熟很多:

  • OpenAI API 自 2023 年 3 月 1 日起默认不使用 API 数据训练或改进模型,除非客户明确 opt in。Abuse monitoring logs 默认最长 30 天。ZDR 和 MAM 需要审批。^19^
  • Anthropic API 和商业 Claude Code 默认不使用商业数据训练生成模型。API inputs/outputs 默认 30 天内从后端删除。ZDR 有覆盖条件和例外。^20^
  • Google Gemini API 的 paid services 不使用 prompts/responses 改进产品;但 unpaid services 可以用于改进产品并可能人工审核。Paid services 仍有 55 天 abuse monitoring。^21^
  • Azure OpenAI / Azure Direct Models 承诺 prompts、completions、embeddings、training data 不提供给 OpenAI 或其他 provider,不用于训练 foundation models。^22^

这些都是很重要的边界。它们说明第一方服务和不透明代理不能混为一谈。

6.2 "不训练"不等于"技术上看不见"

但隐私政策解决的是"服务商承诺如何使用和保留数据"。它不能自动推出"服务商技术上无法看到数据"。

云端模型要完成推理,必须在某个计算边界内处理 prompt、上下文和中间状态。TLS 保护传输链路。数据静态加密保护磁盘。SOC 2、权限控制、审计、KMS 约束组织访问。它们都重要,但它们不是 iMessage 或 Signal 那种端到端隐私模型。

Apple 在 Private Cloud Compute 的技术文章里直接承认了这个冲突:云端 AI 推理需要对用户请求和伴随个人数据进行计算,因此完整传统 E2EE 不适用。^23^ 这句话很关键。它把问题从"有没有 HTTPS"推进到"明文在哪个边界内出现"。

常见问题 更准确的说法
API 数据会默认训练模型吗 主流商业 API 多数默认不训练,具体看服务和账号类型
服务商能否在推理时处理明文 通常需要处理,除非使用特殊机密推理或私有推理架构
ZDR 是否等于任何数据都不存 不等于。滥用监控、安全、法律、状态化功能、文件、工具、第三方服务都有例外
数据驻留是否等于所有数据永不出区 不等于。要区分静态存储、推理处理、system data、第三方工具
MCP/第三方工具是否受模型厂商政策保护 通常不受。OpenAI 和 Anthropic 都明确把 MCP/第三方 integrations 划出自身 ZDR 或 retention 边界

这里最容易误解的是"不用于训练"。它很重要,但它不是完整隐私。免费/未付费 AI 服务的数据交换更像传统互联网广告时代:你得到免费额度,服务商获得可用于改进模型和产品的真实交互数据。Google Gemini API 的 unpaid services 明确说可以使用提交内容与生成响应来改进产品,且人工审核员可能读取 API 输入输出。^21^

对 LLM Agent 来说,这个差别会放大。因为同一条任务可能同时进入模型、provider-hosted tools、第三方 MCP server、搜索 grounding、代码解释器容器、本地缓存、企业知识库、运维监控平台、观测日志。

Agent 的隐私边界不是模型边界。它是执行图边界。

7. 从相信服务商,到验证计算环境

有没有更好的未来?有。

7.1 机密推理:短中期最现实的路线

Confidential AI 不承诺"明文永不出现"。它的目标更务实:让明文只在一个可远程证明、权限受限、可审计的计算环境里出现。前端、负载均衡、普通管理员、日志系统、调试 shell、第三方代理,都不应该拿到 prompt 明文。

Apple Private Cloud Compute 给了一个清晰范例。它提出五个要求:stateless computation、enforceable guarantees、no privileged runtime access、non-targetability、verifiable transparency。PCC node 使用 Apple silicon、Secure Enclave、Secure Boot 和专用 ML 栈;传统云运维里的 remote shell、通用调试和系统观察工具被排除。更重要的是,Apple 把生产软件镜像测量值写入追加式透明日志,公开二进制镜像,用户设备只向能证明运行已记录软件的节点发送数据。Apple 甚至为此开放了 VRE(Virtual Research Environment)和高达 100 万美元的 bounty,激励外部研究者找破绽。^23^ ^24^

Azure AI Confidential Inferencing 是另一条工程路线。它使用 Confidential GPU VM、OHTTP、HPKE、confidential KMS、key release policy、Microsoft Azure Attestation 和透明 ledger。客户端先从 KMS 获取 HPKE public key 和硬件证明,验证后再用 OHTTP/HPKE 封装推理请求。TLS 终止、负载均衡、认证、计费等非可信层只看到加密的 prompt 和 completion。TEE 内的 OHTTP gateway 解密请求后,如果需要私钥,向 KMS 提交 attestation token。KMS 只有在 VM 满足软件和硬件测量要求时才释放密钥,并把 policy 变更记录到透明 ledger。Azure 还计划通过 model receipts 告诉客户端哪个模型处理了请求。^25^

这两个系统的共同方向是:把信任从"厂商政策承诺"向"硬件根信任、可验证运行时、可审计发布流程"推进。

7.2 FHE/MPC:漂亮的终局候选

FHE/MPC 是更强的密码学方向:服务端在密文上计算,理论上不需要看到明文输入。

但 Transformer 对这些技术不友好。大矩阵乘、Softmax、GELU、LayerNorm、自回归解码、KV cache、长上下文,都会把成本放大。THOR 报告 BERT-base 单 GPU 安全推理延迟为 10.43 分钟。^26^ Cachemir 已经把 Llama-3-8B 的 FHE 解码推进到可以讨论 KV cache 和 GPU 的阶段------相比之前的方法有 48-67 倍加速------但每 token 仍低于 100 秒,离普通云推理的毫秒级体验差距很大。^27^ IBM PowerSoftmax 尝试的方向更有意思:干脆反过来,从训练阶段就采用 HE-friendly 的注意力和归一化结构,让模型天然适配密码学计算,做出了超过 10 亿参数的 polynomial LLM。^28^

ZKML 试图回答另一个问题:模型给你的输出是不是按承诺的计算产生的?它和 TEE 互补------TEE 证明运行环境,ZKP 证明计算结果。但大模型上的 proving cost 仍是主要瓶颈。^29^

路线 保护目标 优势 代价和限制
政策和合规 约束服务商如何使用数据 已经广泛可用,适合商业 API 仍然依赖组织信任
Confidential AI / TEE 限制运行时谁能看到明文 短中期可落地,可远程证明 仍信任硬件、TEE、证明链和部署策略
FHE / MPC 服务端理论上不看明文 密码学上更强 Transformer 推理开销仍大,系统复杂
ZKML 证明输出来自声明计算 可保护模型 IP 和计算完整性 证明成本高,需结合隐私协议
本地模型 数据不出设备 最直接的隐私保护 能力、速度、上下文、维护成本

笔者倾向于这样判断:

FHE/MPC 是漂亮的终局候选,TEE、远程证明、透明日志和数据最小化更像未来几年能落到开发者手里的东西。 终局大概率是混合路线:本地处理优先,敏感云端请求进 TEE,关键高价值场景逐步引入 FHE/MPC/ZK proof,模型架构也朝 encryption-friendly 方向演化。

8. 面向 LLM Agent 用户的风险分级

安全建议如果只写"不要做这个,不要做那个",读者很难用。现实里大家总要写代码、查资料、交付。

更有用的方式是任务分级。

8.1 低敏任务

适合使用任何稳定工具,包括中转站或聚合路由:

  • 学习框架。
  • 解释公开代码。
  • 写一次性脚本。
  • 生成测试样例。
  • 写 README 初稿。
  • 重构开源项目。
  • 问通用报错。
  • 生成非敏感 boilerplate。

这类任务的共同点是:上下文来自公开资料,或者泄漏后损失很低。

8.2 中敏任务

建议优先使用第一方 API、可信公司网关,或者先脱敏:

  • 私有业务代码。
  • 内部接口设计。
  • 非生产配置。
  • 代码审查。
  • 数据库 schema,但不含连接串和客户数据。
  • 脱敏后的日志。
  • 测试环境问题。

这里不是不能用 AI。关键在于不要把"便利路径"自动扩展成"所有上下文都能走"。能只给相关文件,就不要一口气给全仓库。能给脱敏日志,就不要给原始生产日志。

8.3 高敏任务

尽量本地、隔离、最小上下文:

  • 生产 .env
  • 钱包私钥、助记词。
  • SSH private key。
  • 云厂商高权限 key。
  • 数据库 root 密码。
  • 客户原始数据。
  • 未公开安全漏洞。
  • 公司核心算法。
  • 合规受限数据。
  • 生产事故全量日志。

这类内容的处理原则很简单:长期秘钥和原始高敏数据不要进入模型上下文。确实需要 agent 协助,可以给最小复现、脱敏片段、伪配置、短期 token、只读 token。

9. Sandbox、隔离、秘钥

最后落到工程动作。

9.1 Sandbox

Agent 应该在一个可承受犯错的环境里运行。

比较现实的做法:

  • 给 agent 单独 workspace。
  • 不让 agent 默认读全盘。
  • 在容器、虚拟机、远程开发环境或临时目录中运行。
  • 对删除文件、安装依赖、访问网络、执行 shell、部署、git push 加人工确认。
  • 对未知外发域名弹出提示。

如果 agent 犯错的代价是弄坏一个临时目录,那是工具问题。如果代价是读走生产凭据,那是系统边界问题。

9.2 隔离

隔离不是只靠一句 system prompt。

可以分几层:

做法
文件 agent 可读目录和秘钥目录分开
账号 agent 使用低权限系统用户
网络 出站 allowlist,限制随机 webhook 和短链接。对自动浏览网页的 agent 特别小心------网页本身可能含间接 prompt injection
云权限 单独 IAM role,默认只读或短期
数据 原始生产数据和脱敏样本分开
日志 给 agent 的日志先脱敏
工具 高风险工具需要人工确认

Prompt injection 很难靠"请忽略恶意指令"解决。权限系统才是硬边界。

9.3 秘钥

长期秘钥不要进入上下文。

笔者就曾经遇到过日志里带了 token,agent 读了日志,prompt 经过代理,代理记录了请求的情况。链条里每一环都"正常工作",最后结果却不正常。

可以做:

  • 使用短期 token、scoped token、只读 token。
  • 给 agent 单独低权限账号。
  • 使用 secret manager。
  • 不把 .env 放在 agent 默认可读目录。
  • 给 GitHub、npm、Docker registry、云 CLI 单独配置低权限凭据。
  • 布置 canary token,观察工具链是否会泄漏。

9.4 人工确认

人工确认不是怀疑模型不聪明。聪明系统也需要权限边界。

这些操作不适合默认自动批准:

  • 删除文件。
  • 修改大量文件。
  • 执行 shell。
  • 安装依赖。
  • 访问外网。
  • 调用云服务。
  • 读取 secret 目录。
  • git push。
  • 部署。
  • 数据迁移。

9.5 上下文最小化

给模型的上下文越大,泄漏半径越大,提示注入面也越大。

实用规则:

  • 先给相关文件,不要一开始给全仓库。
  • 先给错误和最小复现,不要给全量生产日志。
  • 能给接口描述,就不发真实数据。
  • 能给伪配置,就不发真实 .env
  • 能让 agent 生成补丁,就不要让它直接部署。

10. 给工具和平台开发者的建议

用户自保只能解决一部分。工具默认值更重要。

Coding agent 工具可以做这些事:

  • 默认 sandbox,而不是默认全盘读写。
  • 展示将发送到模型的上下文摘要。
  • 本地扫描 .env、私钥、token、cookie、数据库连接串。
  • 对 shell、网络、文件删除、部署默认要求确认。
  • 支持网络 allowlist。
  • 支持本地 secret vault,让模型只能请求能力,不能看到秘钥。
  • 记录 tool call 审计日志。
  • 区分不可信内容和用户指令,做 taint 标记。
  • 支持 response / tool-call verification。

模型提供商也有空间:

  • 更清晰的数据路径说明。
  • 面向个人开发者的低保留模式。
  • Response 或 tool call 签名------让客户端验证"这个 tool call 真是上游模型生成的,中间层没改过"。
  • 机密推理选项。
  • 透明日志和远程证明。
  • 更明确地说明第三方 MCP、搜索、代码容器、连接器的数据边界。

企业内部平台可以做:

  • 建统一模型网关。
  • 给不同项目配置不同数据策略。
  • 给 agent 单独 IAM role。
  • 记录 agent 工具调用。
  • 统一日志脱敏。
  • 给高敏团队提供本地模型或机密推理路径。

11. 结论

回到标题的问题:我们重回数字安全的黑暗时代了吗?

笔者更愿意给一个克制的答案:还没有。但我们确实站在一个容易重蹈覆辙的位置。

HTTP 时代的教训是:明文和中间人不会因为大家"通常是善意的"就消失。最后让 Web 变安全的,靠的是浏览器警告、证书基础设施、默认 HTTPS、mixed content blocking、secure contexts 和开发者工具一起推出来的系统变化------一句"请不要窃听用户"从来没管过用。

LLM Agent 也会走类似的路。今天我们已经看到了效率。下一步要补的是边界:

  • 哪些上下文可以进入模型。
  • 哪些工具可以自动执行。
  • 哪些秘钥永远不进 prompt。
  • 哪些中间层可以看到明文。
  • 哪些响应可以被验证未篡改。
  • 哪些云端推理环境可以被远程证明。

LLM Agent 不是聊天。无论它在帮你写代码、跑测试还是做运维,它都是代码、数据、工具和权限一起参与的工作流。

工具越强,边界越要清楚。Agent 越像同事,越不能默认坐在 root 权限的位置上。

受限于笔者的背景水平,这篇文章只覆盖了当前能看到的一部分资料。部分理论的认识确实是经过实践才能体会到,希望能和读者一同交流学习。

本文亦发布于 团子云技术 (Steins;Lab) ------ 专注分布式与前沿技术研究,相关讨论欢迎移步博客原文。

参考资料

Footnotes

  1. Google Online Security Blog, "Moving towards a more secure web", 2016-09-08. security.googleblog.com/2016/09/mov... ; Chromium Blog, "Next steps toward more connection security", 2017-04-27. blog.chromium.org/2017/04/nex...

  2. Chromium Blog, "A secure web is here to stay", 2018-02-08. blog.chromium.org/2018/02/a-s... ; Google Chrome Blog, "A milestone for Chrome security: marking HTTP as 'not secure'", 2018-07-24. blog.google/products-an...

  3. Let's Encrypt, "Our Millionth Certificate", 2016-03-08. letsencrypt.org/2016/03/08/... ; Let's Encrypt, "Entering Public Beta", 2015-12-03. letsencrypt.org/2015/12/03/...

  4. MDN, "Secure contexts". developer.mozilla.org/en-US/docs/... ; MDN, "Mixed content". developer.mozilla.org/en-US/docs/...

  5. Hanzhi Liu et al., "Your Agent Is Mine: Measuring Malicious Intermediary Attacks on the LLM Supply Chain", arXiv:2604.08407, submitted 2026-04-09. arxiv.org/abs/2604.08... 2

  6. OpenAI, "Function calling". platform.openai.com/docs/guides...

  7. LiteLLM team, "Security Update: Suspected Supply Chain Incident", 2026-03-24. docs.litellm.ai/blog/securi...

  8. GitHub Advisory Database, "GHSA-5mg7-485q-xm76: LiteLLM PyPI supply chain compromise". github.com/advisories/...

  9. Dave Chismon, NCSC, "Prompt injection is not SQL injection (it may be worse)", 2025-12-08. www.ncsc.gov.uk/blog-post/p...

  10. Kai Greshake et al., "Not what you've signed up for: Compromising Real-World LLM-Integrated Applications with Indirect Prompt Injection", arXiv:2302.12173. arxiv.org/abs/2302.12...

  11. Yi Liu et al., "Prompt Injection attack against LLM-integrated Applications", arXiv:2306.05499. arxiv.org/abs/2306.05...

  12. Yupei Liu et al., "Formalizing and Benchmarking Prompt Injection Attacks and Defenses", arXiv:2310.12815, USENIX Security 2024. arxiv.org/abs/2310.12...

  13. Edoardo Debenedetti et al., "AgentDojo: A Dynamic Environment to Evaluate Prompt Injection Attacks and Defenses for LLM Agents", NeurIPS 2024 / arXiv:2406.13352. arxiv.org/abs/2406.13... 2

  14. Hanrong Zhang et al., "Agent Security Bench (ASB): Formalizing and Benchmarking Attacks and Defenses in LLM-based Agents", arXiv:2410.02644, ICLR 2025. arxiv.org/abs/2410.02...

  15. Meysam Alizadeh et al., "Simple Prompt Injection Attacks Can Leak Personal Data Observed by LLM Agents During Task Execution", arXiv:2506.01055. arxiv.org/abs/2506.01...

  16. Xinyi Hou et al., "Model Context Protocol (MCP): Landscape, Security Threats, and Future Research Directions", arXiv:2503.23278. arxiv.org/abs/2503.23...

  17. Model Context Protocol, "Security Best Practices". modelcontextprotocol.io/specificati...

  18. Yuepeng Hu et al., "MalTool: Malicious Tool Attacks on LLM Agents", arXiv:2602.12194. arxiv.org/abs/2602.12...

  19. OpenAI, "Data controls in the OpenAI platform". developers.openai.com/api/docs/gu...

  20. Anthropic, "Claude Code: Data usage". code.claude.com/docs/en/dat... ; Anthropic, "Claude Code Zero data retention". code.claude.com/docs/en/zer...

  21. Google, "Gemini API Additional Terms of Service". ai.google.dev/gemini-api/... 2

  22. Microsoft Learn, "Data, privacy, and security for Azure Direct Models in Microsoft Foundry". learn.microsoft.com/en-us/azure...

  23. Apple Security Research, "Private Cloud Compute: A new frontier for AI privacy in the cloud", 2024-06-10. security.apple.com/com/blog/pr... 2

  24. Apple Security Research, "Security research on Private Cloud Compute", 2024-10-24. security.apple.com/blog/pcc-se...

  25. Mark Russinovich, "Azure AI Confidential Inferencing: Technical Deep-Dive", Microsoft Tech Community, 2024-09-24, updated 2025-12-16. techcommunity.microsoft.com/blog/azurec...

  26. "THOR: Secure Transformer Inference with Homomorphic Encryption", IACR ePrint 2024/1881. eprint.iacr.org/2024/1881

  27. "Cachemir: Fully Homomorphic Encrypted Inference of Generative Large Language Model with KV Cache", arXiv:2602.11470. arxiv.org/abs/2602.11...

  28. IBM Research, "PowerSoftmax: Towards secure LLM Inference Over FHE", FHE.org 2025. research.ibm.com/publication...

  29. "A Survey of Zero-Knowledge Proof Based Verifiable Machine Learning", arXiv:2502.18535, accepted by Artificial Intelligence Review. arxiv.org/abs/2502.18...

相关推荐
好运的阿财3 小时前
OpenClaw工具拆解之tts+web_search
前端·javascript·python·ai·ai编程·openclaw·openclaw工具
GISer_Jing4 小时前
《Claude Code Hooks:AI编程工具的高级控制指南》
前端·人工智能·microsoft·ai编程
空中海4 小时前
Redis 专家实战:生产架构设计 × 容量规划 × 安全治理 × 37道高频面试题全解
数据库·redis·安全
南村群童欺我老无力.4 小时前
鸿蒙PC开发的路由导航参数传递的类型安全陷阱
安全·华为·harmonyos
晓龙的Coding之路4 小时前
CLIProxyAPI + Claude Code 配置 ChatGPT 模型完整指南
ai编程·cli·clacude code
小虎AI生活4 小时前
他们不缺故事,缺的是一个让故事飞出去的出口——昨天,这个出口开了
ai编程
千里念行客2405 小时前
锚定AI赛道释放红利:安凯微2026年Q1业绩显成色
大数据·人工智能·科技·安全
桌面运维家5 小时前
基于vDisk的高校实验室IDV云桌面安全管理方案
人工智能·安全
小兵张健5 小时前
Codex 使用教程(1):基础页面操作
程序员·openai·ai编程