当 Agent 开始层层委托:如何证明“谁说了什么、谁授权了谁”
一个复杂任务交给 Agent 后,它可能先自己做规划,再把搜索任务交给另一个 Agent,把代码任务交给第三个 Agent,把数据分析交给第四个 Agent,后者甚至还可能继续调用外部工具、MCP 服务,或者再找新的 A
今天的 Agent,已经越来越不像一个单独工作的聊天机器人。
一个复杂任务交给 Agent 后,它可能先自己做规划,再把搜索任务交给另一个 Agent,把代码任务交给第三个 Agent,把数据分析交给第四个 Agent,后者甚至还可能继续调用外部工具、MCP 服务,或者再找新的 Agent 帮忙。
于是,一个原本简单的请求,很快就可能变成这样:
用户
↓
规划 Agent
↓
检索 Agent
↓
分析 Agent
↓
工具
↓
另一个 Agent
如果这些 Agent 全都属于同一个系统,问题还相对简单。但未来更现实的情况是,它们可能来自不同厂商、不同公司,甚至运行在完全不同的基础设施中。
这时候,一个非常现实的问题就出现了:
如果最后出了问题,我们怎么知道到底是谁干的?
比如,一份错误的投资分析报告,到底是哪个 Agent 输出的?一个 Agent 声称“这是上游 Agent 授权我做的”,这句话到底是真的,还是它自己编的?如果某个 Agent 的密钥已经被攻击者窃取,攻击者是否能够伪造一条看起来完全合法的调用链?
论文《Attesting Outputs and Delegation Ancestry in Multi-Agent AI Systems》讨论的,正是这个问题。

这篇论文没有发明新的密码学算法。它使用的 SHA-256、Ed25519、Merkle Tree 等技术,本身都已经存在很多年。
它真正有意思的地方在于,它重新提出了一个 Agent 安全领域正在变得越来越重要的问题:
未来的 Agent 系统,不仅要证明“你是谁”,还要证明“你做了什么,以及是谁让你这么做的”。
这其实意味着,Agent 安全正在从“身份认证”,进一步走向“责任证明”。
Agent 有身份,不等于出了事能找到责任人
今天的大部分互联网系统,已经非常擅长解决“你是谁”这个问题。
用户名、密码、证书、访问令牌、API Key、OAuth,本质上都在帮助系统确认:
当前请求来自谁,这个人或者这个程序有没有权限访问某项资源。
放到 Agent 场景里也是一样。
假设有两个 Agent:
规划 Agent A,把任务交给执行 Agent B。
系统可以通过身份认证确认:
- A 是谁
- B 是谁
- B 是否拥有访问某个工具的权限
但真正发生安全事故以后,我们想知道的问题往往更加具体:
最终这句话是不是 B 说的?
B 真的是 A 派来的吗?
这两个问题,传统身份认证其实都回答不了。
论文把它们分别称为两个缺失的证据。
第一个问题可以理解为:
输出到底是不是它产生的?
第二个问题可以理解为:
这层委托到底有没有经过上游授权?
这是整篇论文最重要的出发点。

“你是谁”和“这句话是你说的”,其实是两回事
先看第一个问题。
假设系统已经知道某个 Agent 的身份是:
财务分析 Agent B。
但 B 返回了一段内容:
“建议将 100 万美元转入账户 X。”
光知道“这个请求来自 B”,并不能充分证明:
这段具体内容,真的就是 B 的运行环境原样输出的。
原因并不复杂。
内容在网络上传输时可能被修改,日志可能被篡改,中间代理程序可能替换数据,甚至调用链中的某个系统本身就可能不可信。
因此,作者提出了一种“输出证明”。
它的思想其实非常像现实世界里的签字盖章。
假设 B 输出了一段文本:
“建议购买某公司股票。”
系统不会只把这句话保存下来,而是先对这句话计算一个“数字指纹”。
这里用到的是 SHA-256。
对不熟悉密码学的人来说,可以先把 SHA-256 理解成一种非常特殊的“内容指纹生成器”。
一段内容放进去,会得到一串固定长度的数字:
原始内容
↓
SHA-256
↓
数字指纹
比如:
“购买 A 公司股票”
可能会得到一串指纹。
如果把其中一个字改成:
“购买 B 公司股票”
重新计算后,得到的指纹就会完全不同。
因此,只要最终保存的内容发生变化,对应的数字指纹也会变化。
这就像给文件拍了一张几乎不可伪造的“指纹照片”。
但只有“指纹”还不够,还要有人为它签字
问题是:
谁来证明这个数字指纹确实属于 Agent B?
于是就需要“数字签名”。
数字签名可以简单理解成一种只有特定主体才能盖出来的电子印章。
系统会拥有一组密钥:
- 私钥:只能由真正的签名者持有
- 公钥:任何人都可以拿来验证签名
可以把它类比成:
私钥负责盖章,公钥负责验章。
Agent B 输出内容后,系统先计算内容指纹,然后用私钥对这份指纹和相关信息进行签名。
于是最终形成的,不再只是:
Agent B 输出了某段文字。
而是:
某个受信任的运行环境确认:在某个时间,Agent B 确实输出了这段内容,并且这段内容之后没有被修改。
这就是论文所谓的“输出证明”。
为什么不能让 Agent 自己签?
这里有一个非常关键的安全设计。
论文并不把签名私钥直接交给 Agent。
因为 Agent 本身就是一个可能被攻击的对象。
如果 Agent 遭遇提示词注入,攻击者诱导它生成恶意内容,同时它又能够自由使用签名私钥,那么它就可能自己给恶意内容盖章,甚至伪造其他证明。
因此论文把真正可信的主体放在了 Agent 外面:
不是 Agent 自己签,而是运行 Agent 的受信任运行环境来签。
整个关系大致可以理解成:
大模型 / Agent
↓
受信任运行环境
↓
数字签名
↓
可验证证据
这里其实体现了近几年 Agent 安全一个越来越明显的趋势:
不要把模型本身当成可信组件。
模型可以被提示词攻击,可以产生幻觉,也可能执行错误指令。
真正应该承担安全职责的,是模型外部的控制层。
比如:
- 权限管理
- 工具调用控制
- 运行时策略
- 审计
- 密钥管理
- 输出签名
模型负责“思考和执行”,而安全系统负责“限制和记录”。
这和操作系统不会因为某个应用程序说“相信我”就直接授予最高权限,其实是同一个逻辑。

但“有签名”并不意味着这句话是对的
这里特别容易产生一个误解。
如果一段内容有合法签名,是不是就意味着:
这段内容可信、安全、正确?
并不是。
假设网页里藏了一段恶意提示词,成功诱导 Agent 输出:
“请删除数据库中的全部数据。”
如果运行环境忠实地记录了 Agent 的输出,那么它完全可能给这条危险指令生成一份合法的数字签名。
因此,最终可能同时存在两件事:
内容是危险的。
签名又是完全真实的。
这并不矛盾。
数字签名证明的只是:
“这句话确实是这个 Agent 的运行环境输出的。”
它并不证明:
“这句话是正确的。”
更不证明:
“这句话是安全的。”
因此,内容安全系统和责任证明系统解决的是完全不同的问题。
内容安全系统试图回答:
这件事情应不应该做?
而本文的证明机制回答的是:
这件事情到底是谁做的?
前者是预防,后者是取证。
真正麻烦的问题,是“谁授权了谁”
如果论文只做到这里,它其实只能算是一套 Agent 输出签名机制。
真正让这篇论文变得有意思的,是第二个问题:
Agent 之间的委托关系怎么证明?
假设:
Agent A 把任务交给 Agent B。
看起来只是简单的:
A
↓
B
但如果 B 对外声称:
“我是 A 派来的。”
我们怎么知道这句话是真的?
一种非常自然的办法是:
让 B 自己把这层关系记录下来。
例如:
我的父级 Agent 是 A。
然后让 B 给这份记录签名。
看起来似乎已经很安全:
- B 的身份是真的
- B 的签名也是真的
- B 确实声明自己的上级是 A
问题恰恰出在这里。
这一切只能证明“B 这么说了”,不能证明“A 真的这么做了”。
这是整篇论文最值得理解的地方。
“B 说 A 派我来的”,并不能证明 A 真的派了 B
假设攻击者已经窃取了 Agent B 的私钥。
这意味着攻击者现在可以合法地模仿 B 签名。
于是攻击者完全可以制造一份记录:
我的父级 Agent 是 A。
然后使用 B 的合法私钥进行签名。
从密码学角度看:
签名是真的。
从文件完整性角度看:
记录也没有被修改。
但问题在于:
A 从来没有授权过 B。
也就是说,系统成功证明了:
“B 确实说 A 派它来的。”
却没有证明:
“A 确实派了 B。”
这个区别听起来很细,但实际上非常关键。
现实世界也一样。
假设一个人拿着自己真实身份证,对外说:
“我是公司董事长派来的。”
身份证是真的,不代表董事长真的授权过他。
甚至这个人自己的签名也是真的,仍然没有用。
因为这里真正缺失的是:
董事长的确认。
完整性不等于授权
作者比较了几种记录 Agent 委托链的方法,其中包括链式哈希、Merkle Tree 等传统技术。
这些技术都非常擅长解决一个问题:
数据有没有被偷偷修改。
比如原本的调用链是:
A
↓
B
↓
C
有人偷偷把 B 删掉,变成:
A
↓
C
通过哈希链等方式,可以很容易发现中间内容发生了变化。
但问题是,即使整条链一点都没有被修改,也不代表链本身就是合法的。
这就像:
一份合同从打印出来到今天完全没有被篡改。
这只能说明:
合同内容保持完整。
却不能说明:
合同双方真的都同意过这份合同。
因此,论文指出:
数据完整性和授权合法性,是两个完全不同的安全问题。
哈希、Merkle Tree 等技术主要解决的是“有没有被改”。
但它们无法单独回答:
这条委托关系到底有没有经过双方同意。
解题思路:父级 Agent 也必须签字
既然问题在于:
B 可以单方面声称 A 授权了它。
最直接的解决办法就是:
让 A 也签字。
于是:
A
↓
B
不再只是一个简单的调用关系,而变成了一份需要双方确认的“委托记录”。
A 要签一次:
“我确认把这个任务委托给 B。”
B 也要签一次:
“我确认接受 A 的委托。”
只有两边的签名都存在,这条委托关系才算成立。
这就是论文采用的核心设计:
双签名委托边。
如果把它放到现实世界里,其实很好理解。
过去的模式相当于:
员工 B 自己写了一张纸:“董事长 A 派我来的。”
现在则变成:
董事长 A 和员工 B 都在这张委托书上签字。
攻击者即使偷到了 B 的印章,也只能伪造 B 的签名。
它仍然无法伪造 A 的签名。
因此,单独攻破下级 Agent,不再足以伪造上级授权。

Agent 调用,正在从“函数调用”变成“委托交易”
这个设计背后,其实隐藏着一个比密码学更重要的变化。
今天我们很容易把 Agent 调用理解成普通程序之间的函数调用:
Agent A 调用 Agent B。
但未来真正的跨组织 Agent 网络里,这种理解可能已经不够了。
如果 Agent A 属于一家银行,Agent B 属于一家外部数据服务商,Agent C 又来自另一个第三方公司,那么 A 调用 B 就不再只是普通的程序跳转。
它实际上是一种:
权限委托。
也就是说:
A 不仅是在“调用 B”,而是在告诉整个系统:
“我允许 B 代表这次任务继续执行某些操作。”
从这个角度看,每一次 Agent 间的调用,都越来越像一笔需要记录的交易。
它应该至少包含:
- 谁把任务交给了谁
- 谁接受了任务
- 双方身份
- 授权发生的时间
- 授权的任务范围
- 最终产生了什么输出
- 是否继续向下委托
于是,一个 Agent 系统最终形成的就不是简单调用日志,而是一条完整的“责任链”。
为什么论文最终用的是 DAG,而不是普通链条
如果整个系统永远是:
A
↓
B
↓
C
↓
D
那用一条普通链记录下来似乎就够了。
但真实 Agent 系统通常不是这样。
一个规划 Agent 可能同时启动:
- 检索 Agent
- 财务 Agent
- 编程 Agent
- 法律 Agent
随后,这些 Agent 又可能继续调用其他 Agent。
最终结构更像一棵不断分叉、合流的任务图。
例如:
用户
↓
规划 Agent
然后同时分成:
检索 Agent
分析 Agent
编程 Agent
几个 Agent 完成以后,结果又汇总回报告 Agent。
这种结构并不是普通链,而是一张“有方向的无环图”,也就是论文使用的 DAG。
不需要过分纠结这个数学名称。
可以简单理解成:
一张记录“谁把任务交给谁”的任务关系图,而且任务只能向后传递,不能形成无限循环。
论文为这张图中的每一条委托关系都加入双方签名。
所以最终得到的,可以理解成一张:
每条边都有双方签字的 Agent 责任关系图。
这套设计能防什么?
为了验证方案,作者专门设计了多种针对 Agent 委托链的篡改方式。
其中最容易理解的有几类。
第一种是“凭空插入”。
原本系统里根本不存在某个上游 Agent,攻击者却试图伪造一条:
假 Agent X
↓
Agent B
如果 X 没有真的签名,这条关系就无法成立。
第二种是“删除中间人”。
原本调用链是:
A
↓
B
↓
C
攻击者想删除 B,伪造成:
A
↓
C
如果每个 Agent 只是给自己签名,那么 A 和 C 的签名仍然都是真的,系统可能发现不了问题。
但如果每条委托关系都需要双方签名,那么:
A
↓
C
必须拥有 A 和 C 针对这条具体关系共同生成的签名。
攻击者无法把原本:
A
↓
B
和:
B
↓
C
的签名直接拼成:
A
↓
C。
第三种是“移花接木”。
假设原本存在两条链:
A
↓
B
↓
C
以及:
X
↓
Y
攻击者试图把 C 接到另一条链后面:
X
↓
Y
↓
C
如果 C 和 Y 从来没有为这条新关系共同签名,验证就会失败。
这些攻击的共同点其实都是:
攻击者试图重新解释“谁授权了谁”。
而双签名设计的核心就是:
每一条授权关系都必须得到关系双方确认。
但有些事情,密码学永远解决不了
论文还讨论了一类非常有意思的问题。
假设 Agent A 合法地同时委托了三个 Agent:
A
↓
B
A
↓
C
A
↓
D
三条关系全部都有合法签名。
那系统应该接受吗?
这取决于业务规则。
如果系统规定:
一个 Agent 最多只能同时委托两个下级 Agent。
那么第三条委托就应该被拒绝。
但密码学无法替系统做这个判断。
因为从密码学角度看:
- A 的签名是真的
- B、C、D 的签名也都是真的
- 每条委托关系也确实发生过
密码学能证明:
发生了什么。
但它不能决定:
什么应该被允许发生。
后者依然需要策略系统。
这也是理解 Agent 安全架构一个非常重要的边界。
未来的 Agent 安全体系不可能只靠密码学,也不可能只靠模型护栏。
它需要很多层机制共同工作:
- 身份认证解决“你是谁”
- 权限系统解决“你能做什么”
- 内容安全解决“这个请求是否危险”
- 委托证明解决“是谁授权你的”
- 输出证明解决“你具体输出了什么”
- 审计系统解决“事情发生以后如何还原现场”
实验结果
很多人看到数字签名、哈希、双签名,第一反应可能是:
这样做会不会让 Agent 变得特别慢?
论文的实验结果表明,至少密码学操作本身并不是主要瓶颈。
作者在本地环境中测试了几种方案。
最安全的双签名 DAG 方案,完整验证大约需要不到 1 毫秒量级。
在 LangGraph 中集成后,单个节点的签名成本大约只有 0.17 毫秒,完整验证约 0.83 毫秒。
而一次真正的大模型推理通常需要数百毫秒,甚至几秒。
也就是说:
与模型推理相比,生成和验证这些安全证据本身的成本非常小。
作者还搭建了一个包含 A2A、MCP 和真实大模型调用的系统。
没有安全证明时,端到端延迟大约为 771 毫秒。
加入双签名责任链后,大约为 813 毫秒。
整体增加约 5.5%。
这里当然不能直接理解成:
“未来生产系统一定只增加 5.5% 成本。”
因为实验中还没有加入真实生产环境中的证书管理、密钥托管、TLS、复杂权限系统等。
但至少说明了一件事:
数字签名本身并不会成为 Agent 系统的主要性能瓶颈。
论文还把系统部署到了多个云节点
作者进一步在 AWS 的三个可用区之间部署了:
- 父级签名服务
- 子级签名服务
- 验证服务
然后进行了 1000 次实验。
正常调用全部能够成功验证。
同时作者还测试了:
- 重放旧请求
- 使用未注册的父级
- 使用已经撤销的子级密钥
- 父级拒绝签名
系统都能够拒绝相关请求。
这说明这套方案至少已经不是一个停留在纸面上的密码学设计,而是做到了真实多节点环境中的原型验证。
当然,它距离真正的生产系统仍然有明显距离。
局限性
理解这篇论文时,尤其不能把它夸大成:
“已经解决了多智能体安全问题。”
实际上,它解决的是非常明确的一小块:
责任证明。
它解决不了提示词注入。
也解决不了模型幻觉。
更不能判断 Agent 输出是否安全。
另外,这套系统还依赖一个非常重要的前提:
负责签名的运行环境本身必须可信。
如果攻击者已经控制了整个运行环境,甚至控制了签名密钥,那么它当然可以生成虚假证据。
这就像:
如果真正的公章已经被攻击者偷走,那么再精密的签章制度也无法完全解决问题。
因此,未来真正的系统很可能还需要结合:
- 硬件安全模块
- 密钥管理系统
- 可信执行环境
- 安全启动
- 远程证明
换句话说,这篇论文把“信任”从 Agent 本身移动到了底层安全基础设施。
它并没有让“信任”消失。
如果上下两级都被攻破,系统同样无能为力
双签名机制能够解决一种很重要的问题:
攻击者只偷到了下级 Agent B 的密钥。
此时攻击者仍然无法伪造:
A
↓
B
因为它没有 A 的签名。
但如果 A 和 B 的密钥同时被攻破,那么攻击者自然就可以生成双方签名。
这并不是论文方案的漏洞,而是密码学系统普遍存在的边界。
任何安全系统都需要一个最终的信任根。
如果所有信任根都已经被攻击者控制,系统自然无法继续区分真假。
所以真正部署时,密钥保护本身会成为非常重要的问题。
Agent 安全开始出现“责任基础设施”
如果只看论文表面,很容易觉得:
不就是给 Agent 加个数字签名吗?
但如果把它放到整个 Agent 产业的发展趋势中,意义就不一样了。
早期的大模型安全,大家主要关注:
- 越狱
- 提示词注入
- 有害内容
- 幻觉
后来 Agent 出现以后,安全问题开始逐渐向系统层移动:
- Agent 能调用什么工具
- Agent 能访问什么数据
- Agent 能不能继续委托其他 Agent
- Agent 的记忆是否可信
- 工具返回结果来自哪里
- 谁批准了一次高风险操作
而现在又进一步出现了一个新的问题:
发生事故以后,如何证明整条 Agent 行为链。
这和互联网安全的发展其实很像。
互联网早期也不是一开始就有今天成熟的:
- HTTPS
- 证书体系
- 代码签名
- 软件供应链证明
- 硬件可信根
这些能力都是随着互联网逐渐承载金融、政务、商业等高价值活动以后,一层层补出来的。
Agent 网络未来很可能也会经历类似过程。
当 Agent 只是在个人电脑上帮用户整理文档时,责任链可能并不重要。
但如果未来 Agent 能够:
- 代表企业采购
- 调用金融系统
- 修改生产环境
- 自动签署合同
- 操作工业设备
- 与其他公司的 Agent 协商业务
那么系统必须能够回答:
这个 Agent 是谁?
它有什么权限?
谁把权限委托给了它?
它具体做了什么?
最终输出了什么?
这条行为链有没有被修改?
这些问题最终很可能会变成 Agent 时代的基础设施。
从“Agent 身份”到“Agent 责任链”
如果把未来的 Agent 安全体系简单画成几层,大致可以理解成:
最上层是内容与行为安全:
这件事能不能做?
下面是运行时治理:
这个 Agent 有什么权限?
再往下是委托证明:
是谁授权它来做?
再往下是输出证明:
它最终到底说了什么、做了什么?
最底层则是:
身份、密钥、可信运行环境。
这几层解决的是完全不同的问题。
现在很多 Agent 安全方案仍然主要集中在前两层。
而这篇论文实际上是在补下面的:
委托证明 + 输出证明。
它们平时可能并不起眼。
但一旦 Agent 真正进入企业核心业务,这些能力的重要性会迅速上升。

未来的 Agent,可能需要像人一样“签字负责”
今天,当一个 Agent 调用另一个 Agent 时,我们很容易把它看成普通的软件接口调用。
但随着 Agent 开始跨公司、跨平台、跨系统自主协作,这种关系正在发生变化。
一次 Agent 调用,越来越像一次真正的“授权委托”。
一个 Agent 不仅需要证明:
“我是我。”
还需要证明:
“上级真的让我来。”
最终还要证明:
“我确实做了这些事。”
从这个角度看,这篇论文最重要的贡献并不是某一种签名结构,也不是 DAG 本身。
它真正提醒我们:
Agent 时代的安全,不能只关心模型有没有做错事,还必须建立一套能够追溯“谁授权、谁执行、谁输出”的责任基础设施。
因为未来真正复杂的 Agent 系统里,最麻烦的问题可能不再是:
“这个 Agent 有没有身份?”
而是:
“当所有 Agent 都说自己只是奉命行事时,我们到底拿什么证明,谁真的下过这个命令?”
同专题推荐
查看专题Agent 的长期记忆治理:ZoneClaw 的三层记忆分区与四角色安全架构
本文研究论文经「模安局·共研计划」推荐,由《模安局》独立完成解读。
Persona Guardrail:Uber 如何为每个 Agent 打造专属风控策略
例如,企业内部有一个财务 Agent、一个人事 Agent 和一个差旅 Agent。它们可能使用相同的基础模型,甚至接入相同的工具平台,但职责完全不同。
可信 Agent 开发生命周期:六个阶段、五道安全门
过去,大模型安全更多关注模型“输出了什么”:是否产生有害内容、是否泄露敏感信息、是否受到越狱攻击。但在 Agent 系统中,风险的基本单位正在从一次模型输出,扩展为一整条行为轨迹。