多 Agent 生产环境下的安全清单:端到端加密、双向握手、身份验证及网络信任边界,与传统 web API 安全模型差异显著。
如果你在找安全的 AI Agent 通信最佳实践,大部分能看到的建议只到"用 TLS,再加个 API Key"为止。这些建议是给客户端-服务器流量写的,但你的 Agent 不是客户端。它们是长期运行的进程,会在奇怪的时间点重启,会在不同云之间迁移,会在你无法控制的网络上直接互相通信。传输层必须做更多工作。
过去几个月我一直在生产环境运行多 Agent 系统,真正遇到的安全问题从来不在架构图上。它们在 Agent B 开始和 Agent C 对话之后才浮出水面:这流量端到端加密了吗?我是在和我以为的那个 Agent 说话吗?以及那个没人问、直到出事才有人想起来的那个——加入这个网络意味着信任其中的每一个人吗?
以下是一份生产环境中保护 Agent 流量的实用清单:保护什么、按什么顺序、以及如何验证你真的做到了。
你的 Web API 躲在负载均衡器后面,在边缘终止 TLS,用身份提供商签发的 Token 认证每一个请求。你的 Agent 没有这种待遇。它们坐在家庭办公室和企业网络的 NAT 后面,保持长期状态,而且是由它们主动发起连接——不只是连到你的服务器。
失败模式也不同。API 调用是一个请求;Agent 对话是一个会话。会话会被中断,会从另一台机器恢复,会被重放。而且因为 Agent 具有自主性,一个被攻陷的 Agent 不只是泄露数据——它能代表你行事。这就提高了以下所有内容的门槛。
同数据中心里两个 VPS 之间的逐跳 TLS,不等于两个 Agent 之间的端到端加密。如果你的 Agent 通过第三方中转—— broker、relay、中心 hub——中转方不应该能读取对话内容。
"做到位"的样子:两个端点直接推导出会话密钥,所有在线路上传输的东西对中间人都是密文。对于基于 UDP 的传输,意味着每个数据包单独加密,而不是在上面套一层 TLS 会话。
签名一条消息只能证明是谁写的它,不能证明你在和谁说话。如果你只验证签名,中间人仍然可以把你的消息转发给另一个 Agent,而你永远不会发现。
"做到位"的样子:双向握手——在任意消息流动之前,双方互相证明身份。这相当于 Agent 界的 mutual TLS,当对端是自主实体时,这是不可妥协的。
这是关键的一条。传统 VPN 中,加入网络就等于信任网络——一旦连接上,你就能触达内部的一切。对于 Agent,成员资格和信任应该是两个独立的维度。一个 Agent 可以被网络所知,而不需要被授权和你通信。
"做到位"的样子:明确的、逐对端的信任决策。Agent A 可以发现 Agent B 存在,但流量只有在 A 和 B 互相批准之后才能流动——一次握手,而不是广播。
Agent 会重启。它们在云之间迁移,更换 IP,获得新的容器。如果你所谓的"安全通道"绑定在 IP:port 上,每次重新部署都会挂掉——更糟糕的是,它会让你懒得加密,因为"网络是私有的"。
"做到位"的样子:一个稳定的虚拟地址,能在重启和 IP 变更中存活下来,这样对端按名字而非临时端点来找到彼此。
传输层只是故事的一半。现代 Agent 不只是说话——它们安装并运行工具。Agent 加载的每个能力都应该携带明确的、作用域受限的权限,在安装时接受,而且工具代码在运行之前应该是可验证的。
我一直在回想这一点,因为真正的系统就是在这里被攻陷的。人们听到"覆盖网络"就假定它像 VPN 一样运作:加入一次,信任所有人。这个假设对 Agent 来说完全错误。
VPN 把两个本应分开的决策混为一谈:谁在网上,以及我信任谁。当这两个合并成一个,每一个被攻陷的端点都成了渗透其他一切的跳板。对于 Agent 流量,信任决策属于每一对对端,明确作出、可撤销。
有一个开源实现值得关注,如果你在评估方案的话:Pilot Protocol,一个专为 Agent 构建的覆盖网络。它是上面这份清单在可用代码中的具体参考,用 Go 编写,零外部依赖——只使用标准库,所以密码学实现可以在一个地方审计。
它的传输层一一对应清单上的每一条:加密 UDP 隧道(X25519 密钥交换配合 AES-GCM)、STUN + 穿洞,带 relay 后备,这样 NAT 后的 Agent 也可触达;以及 rendezvous registry,让 Agent 按名字找到彼此。每个 Agent 获得一个永久虚拟地址,跨越重启和云迁移而存活。信任是明确逐对端的:你发送握手,对方 Agent 批准,然后流量才开始流动。成员资格与信任解耦——加入网络不等于获得对网上任何人的访问权。
上手只需要两条命令。首先安装节点:
curl -fsSL https://pilotprotocol.network/install.sh | sh
然后发现对端并建立信任:
pilotctl send-message list-agents --data '{"search":"weather","limit":5}' --wait
pilotctl handshake <agent-address> "peer for agent comms testing"
完整的传输细节在上面的文档中。
要内化的模式:Agent 需要网络公民身份,而不是网络成员资格。加密、双向认证、逐对端信任是 Agent 流量在生产环境中的最低可行姿态——就像十年前 TLS 和 API Key 成为 Web API 的标配一样。
如果你想试水参考实现,一行安装命令是 curl -fsSL https://pilotprotocol.network/install.sh | sh,源码在 GitHub 上,采用 AGPL-3.0 许可证。无论你是否使用它,在发布之前用这份清单检验你的 Agent 流量——传输层不是你希望在这些教训中学习的地方。