Zero Trust 与对抗性完整都从“不应默认信任任何主体”出发,因此它们很容易被混在一起。

尤其是在 AI Agent、机器身份、持续授权和高风险自动化逐渐成为现实以后,很多安全体系都开始强调动态认证、最小权限、持续策略判断,这会让人产生一种直觉:只要 Zero Trust 做得足够彻底,执行安全问题似乎也应该随之得到解决。

但两者实际上处理的是两个不同层次的问题。

Zero Trust 解决的是:

一个主体在当前上下文中,是否应该获得访问某项资源或能力的资格。

对抗性完整进一步处理的是:

即使这个主体已经合法获得能力,甚至已经失陷,它是否仍然能够独立推动一个受保护动作真正发生。

因此,两者的真正差异并不在于谁“更不信任”,而在于它们控制的对象不同、安全模型不同,最终需要证明的东西也不同。

一、Zero Trust 控制访问资格,对抗性完整控制执行资格

Zero Trust 的基本模型仍然建立在主体与资源之间的访问关系上。

一个典型过程是:

主体身份 → 身份认证 → 设备与上下文验证 → 权限判断 → 资源访问

系统最终回答的是:

当前这个主体,是否有资格访问这个资源?

这种模型非常适合保护数据库、内部系统、API、云资源和企业应用,因为这些场景中最直接的安全风险就是:一个原本不应该访问资源的主体获得了访问能力。

但当 AI Agent 开始进入支付、交易、生产环境变更、云基础设施操作和现实设备控制以后,访问已经不再等于最终结果

例如,一个 Agent 已经合法拥有:

payments.execute

这只能说明它拥有调用支付能力的资格,却并不能回答:

  • 它这一次应该转多少钱;

  • 应该转给谁;

  • 当前状态是否还允许转账;

  • 审批对象与最终执行对象是否一致;

  • 当天累计金额是否已经超出边界;

  • 最终参数是否在执行前被修改。

因此,对抗性完整关注的对象不再只是:

Subject → Resource

而是一个完整执行结构:

Actor + Action + Target + State + Evidence + Boundary → Execution

这里安全系统最终判断的不是“你有没有调用这项能力的权限”,而是:

这一次具体动作,现在是否具备真正发生的完整条件。

所以,两者最基础的分界就是:

Zero Trust 控制谁可以获得能力;对抗性完整控制已经获得能力以后,什么动作可以真正发生。
二、Zero Trust 防未经授权访问,对抗性完整防合法身份下的错误执行

传统安全架构最熟悉的一类风险,是一个本来没有权限的人通过凭证泄露、身份冒用、权限提升或者横向移动获得了不属于自己的访问能力。

因此 Zero Trust 的设计天然围绕这种风险展开:持续验证身份、动态评估设备状态、缩短信任周期、限制 Session,并通过 Least Privilege 尽可能缩小攻击者一旦获得某个身份以后能够触碰的范围。

但 AI Agent 引入了一类完全不同的失败模式。

一个 Agent 可能满足所有传统安全条件:

  • Identity:Valid

  • Credential:Valid

  • Device:Valid

  • Permission:Valid

  • Session:Valid

  • API Call:Authorized

然后仍然执行了一件错误的事情。

它可能因为上下文理解错误,把 10,000 美元解释成 100,000 美元;可能调用了正确的部署接口,却选择了错误的 Production Cluster;也可能在合法的云管理权限范围内删除了错误的实例。

这里并不存在传统意义上的 Unauthorized Access。

真正发生的是:

**Authorized Actor

  • Authorized Capability

  • Incorrect Action**

也就是:

Authorized but Undesirable Execution。

这一点很重要,因为在这种事故里,IAM 甚至可能从头到尾都是正确的。

它正确识别了 Agent。

正确判断了 Credential。

正确确认了 Permission。

也正确允许了 API 调用。

错误发生在另外一个层面:

“允许这个主体使用某项能力”,并不能推出“这一次具体执行是正确的”。

因此:

Zero Trust 防的是不该拥有能力的人获得能力;对抗性完整防的是已经拥有合法能力的主体把事情做错。
三、Zero Trust 要求持续验证,对抗性完整直接从“假设失陷”开始

Zero Trust 最经典的原则是:

Never Trust, Always Verify.

它反对因为主体已经登录、设备来自企业网络、身份以前合法,或者过去行为正常,就持续给予默认信任。

因此 Zero Trust 的逻辑,本质上仍然是一种持续判断:

这个主体在当前时刻,是否仍然满足信任条件?

对抗性完整采用的是一个更强的安全假设。

它并不满足于继续问:

这个组件现在是否仍然可信?

而是直接进入:

假设它已经不可信,系统还能不能守住最终执行边界?

例如,一个高风险执行系统可以依次假设:

  • Agent 已失陷

  • SaaS 已失陷

  • Policy Engine 已失陷

  • Approval Service 已失陷

  • Execution Gateway 已失陷

然后逐个分析:

这个失陷主体现在掌握的 Authority,是否足以让它绕过其他约束,独立构造出一条完整执行路径?

这和 Zero Trust 有一个非常细微但重要的区别。

Zero Trust 的一个重要目标,是降低“系统继续信任一个已经失陷主体”的概率。

而对抗性完整进一步要求:

即使系统没有及时发现这个主体已经失陷,它也不应该因此直接获得最终执行权。

所以,对抗性完整开始把问题从“组件是否安全”推进到“架构是否安全”。

一个组件可以失败。

一个主体可以失陷。

一个 Credential 可以泄露。

但系统仍然不应该因为某一个单点失败,就直接失去最终执行边界。

因此:

Zero Trust 尽量避免继续相信已经失陷的主体;对抗性完整进一步要求,即使主体已经失陷,也不能因此直接获得最终执行权
四、Zero Trust 的核心抽象是 Identity,对抗性完整的核心抽象是 Authority

Zero Trust 极大强化了 Identity 在现代安全架构中的地位。

现代安全系统会区分:

  • Human Identity

  • Machine Identity

  • Service Account

  • Workload Identity

  • Agent Identity

然后围绕这些 Identity 配置:

Role → Permission → Policy → Resource

这一套模型非常成熟。

但当问题进入现实执行以后,仅仅知道“你是谁”已经不够了。

真正重要的问题开始变成:

你在整个执行过程中到底掌握了什么权力?

例如:

AI Agent 可能拥有提出动作的权力

Policy Engine 拥有判断规则是否满足的权力

Approval Service 拥有提供授权证明的权力

Execution Gateway 拥有组合条件并放行执行请求的权力

Executor 则可能掌握真正改变现实状态的能力

于是一个完整执行过程可以理解为:

Agent 提出 Intent → Policy 判断 Boundary → Approval 提供授权证明 → Arbiter 组合多个条件 → Executor 改变现实状态

从 Identity 角度看,这些只是几个不同主体。

但从 Authority 角度看,它们掌握的是完全不同的因果能力。

因此,执行安全必须进一步回答:

  • 谁能修改 Action?

  • 谁能修改 Target?

  • 谁能改变 Amount?

  • 谁能签署 Approval?

  • 谁能修改 Policy?

  • 谁持有最终 Credential?

  • 谁能够直接调用 External System?

  • 哪个主体失陷以后能够独立完成整条执行链?

这就是 Authority Decomposition

如果 Policy、Approval、Credential 和 Executor 虽然被拆成了四个服务,但最终都由同一个 SaaS Administrator 完全控制,那么表面看有四个组件,实际在 Authority 层仍然可能只有一个根权力中心。

一旦这个根 Authority 失陷,整个安全结构仍然可能同时失效。

因此,对抗性完整真正关心的不是“系统里有多少个 Identity”,而是:

最终执行权究竟被拆成了多少个真正独立的 Authority。

所以:

Zero Trust 识别“谁是你”;对抗性完整进一步识别“你究竟拥有多少让现实发生变化的权力”。
五、Zero Trust 追求 Least Privilege,对抗性完整追求 Least Execution Authority

Least Privilege 是 Zero Trust 中非常重要的原则。

它要求一个主体只能获得完成任务所必须的最小权限。

例如一个支付 Agent 只需要:

payment.execute

那么就不应该再给它数据库管理员权限、系统运维权限或者其他无关能力。

但现实执行中有一个问题:

API Permission 的粒度,往往远远大于一次现实动作需要的粒度。

即使 payment.execute 已经是非常小的 IAM Permission,它背后的真实能力仍然可能是:

  • 可以转 10 美元;

  • 也可以转 100,000 美元;

  • 可以转给 Account A;

  • 也可以转给 Account B;

  • 可以执行一次;

  • 也可能连续执行几百次。

因此:

Least API Privilege ≠ Least Execution Authority

这是 AI Agent 时代非常重要的一个区别。

因为 Agent 并不是偶尔点击一次按钮,而是可能持续、高频、自动地产生现实动作。

所以,对抗性完整需要继续把执行权压缩。

例如一次执行资格可能被具体限制为:

Actor:Agent-AAction:TransferTarget:Account Group XAmount:≤ 10,000 USDDaily Total:≤ 50,000 USDApproval:ValidState:FreshExecution Window:09:00–18:00

这时候系统给予 Agent 的,就不再是一个宽泛的“支付能力”,而是一段高度限定的现实执行空间。

因此:

Zero Trust 缩小主体能够调用的能力集合;对抗性完整进一步缩小每一次现实动作能够真正改变的范围。
六、Zero Trust 验证主体,对抗性完整验证整个动作

Zero Trust 的验证对象主要集中在主体与访问上下文。

它通常验证:

  • 身份;

  • Credential;

  • Device Posture;

  • Session;

  • Network Context;

  • Role;

  • Permission。

这些信息足以回答:

当前这个请求者是否符合访问条件?

但现实执行需要证明的内容更多。

因为“谁发起请求”只是一次动作的一部分。

真正决定这件事情是否应该发生的,至少还包括:

  • WHO:谁在参与

  • WHAT:要执行什么动作

  • OBJECT:动作作用于什么对象

  • STATE:当前现实状态是什么

  • PROOF:凭什么认为条件成立

  • BOUNDARY:执行不能越过什么边界

例如:

Agent-A is authorized

只能说明 Agent A 拥有参与资格。

而如果要证明一笔真实执行有资格发生,需要的是一组完整关系:

Agent-A 请求 Transfer → Target 是 Account-B → Amount 是 5,000 USD → Authority-C 对同一对象给出了 Approval → 当前 State 仍然满足要求 → Amount、Time、Frequency 仍然处于 Policy Boundary 内

只有这些事实被绑定以后,系统才可以从:

主体合法

继续推导到:

动作合法

因此,对抗性完整里的 ALLOW 并不是来自某一个 Identity 或某一个 Permission,而是来自多个相互绑定的事实同时成立。

所以:

Zero Trust 证明请求者有资格参与;对抗性完整证明这一次具体执行本身具备完整资格。
七、Zero Trust 保护访问路径,对抗性完整保护从意图到现实的因果路径

Zero Trust 的典型安全关系是:

Subject → Resource

因此它本质上保护的是一条 Access Path。

但现实执行不是在获得访问权限的瞬间就完成的。

一次 AI Agent 执行通常经历的是:

Intent → Interpretation → Policy Evaluation → Approval → Parameter Construction → Execution → External State Change

这是一条完整的因果路径。

而且真正危险的问题可能发生在任何一个环节。

例如:

原始 Intent 是正确的;

Policy 判断也是正确的;

Approval 批准的对象也是正确的;

但在 Parameter Construction 阶段,最终 Target 被换掉了。

此时前面的 Authentication、Authorization 和 Approval 全部可能是真的,但最终动作仍然是错误的。

因此,执行安全必须验证的是一种语义连续性

最终 Action 是否仍然是原始 Action?
最终 Target 是否仍然是被批准的 Target?
最终 Amount 是否仍然位于批准的 Boundary 内?
做出决策时使用的 State,在真正执行时是否仍然有效?

也就是说,安全对象从:

Access Path Security

进一步变成:

Causal Path Security

系统不能只证明:

Agent A 有资格访问执行接口。

还必须证明:

从最开始的 Intent 到最后真实发生的结果,中间没有任何一个 Authority 能够偷偷改变动作语义而不被发现。

因此:

Zero Trust 关注访问能力有没有被错误获得;对抗性完整关注从意图到现实改变之间,是否存在任何可以偷偷改变结果的因果路径。
八、Zero Trust 消除 Implicit Trust,对抗性完整消除 Implicit Execution Authority

从理论上看,这是两者最本质的区别之一。

Zero Trust 的一个重要贡献,就是系统性消除 Implicit Trust

传统系统中,一个主体可能因为位于企业内网、使用企业设备,或者已经成功登录一次,就在后续流程中获得持续性的隐式信任。

Zero Trust 把这种关系拆掉,要求信任不断重新建立。

但执行系统里还存在另一种更隐蔽的问题:

Implicit Execution Authority。

例如:

因为 SaaS 是管理员,所以它可以修改 Policy。
因为 Policy Engine 返回 Allow,所以后续 Executor 可以直接执行。
因为 Agent 拥有合法 Credential,所以它可以自己构造最终参数。
因为 Executor 是“内部可信服务”,所以来自内部的命令默认可信。

这些设计未必是漏洞。

很多时候它们甚至是正常的软件工程结构。

但从 Authority 的角度看,它们都隐含着一个假设:

某一个组件天然拥有足够的权力,可以让最终动作发生。

对抗性完整要求把这些隐藏 Authority 全部显式化。

然后逐个分析:

  • 这个 Authority 为什么存在?

  • 它是否真的必须拥有这么大的能力?

  • 它是否可以进一步拆分?

  • 它是否能够被另一个独立 Authority 制约?

  • 它失陷以后能否独立执行?

  • 它能否关闭系统固定安全底线?

因此,对抗性完整不是简单地“再多做一次验证”。

它实际上是在重新审计整个系统里的权力结构。

所以:

Zero Trust 消除默认信任;对抗性完整进一步消除默认执行权。
九、Zero Trust 问失陷以后还能访问什么,对抗性完整问失陷以后还能独立造成什么

当一个 Credential 或 Identity 被攻陷以后,传统 Zero Trust 分析最关心的通常是攻击面:

攻击者现在还能访问哪些资源?
可以横向移动到哪里?
当前 Role 还能调用什么 API?
如何进一步缩小其权限范围?

这些问题都非常重要。

但对抗性完整把问题推进到最终结果:

凭借当前已经失陷的 Authority,攻击者到底能够独立造成什么现实后果?

例如 Agent 被攻陷以后,如果它只能生成 Intent,而不能直接生成最终执行资格,那么 Agent 本身无法完成一次受保护执行。

SaaS 被攻陷以后,如果最终 Credential 位于独立执行边界中,而且执行边界仍然要求验证独立 Approval、Target Binding 和 State Evidence,那么 SaaS 也不能直接构造任意现实动作。

进一步,还需要分析组合失陷:

  • Agent + SaaS

  • Agent + Policy

  • Policy + Approval

  • SaaS + Approval

这样就形成一个 Compromise Matrix

这个矩阵真正分析的不是:

我们有几层安全系统?

而是:

在定义好的 Threat Model 下,当哪些主体已经失陷时,系统仍然缺少哪些不可绕过的执行条件?

如果某一个组件一旦失陷,就能够从头到尾独立完成整个执行过程,那么无论系统外围有多少 Zero Trust、IAM、Logging 或 Policy,它在最终执行权上仍然存在单点风险。

因此,对抗性完整最终问的是:

Compromised Authority → Can it independently cause protected execution?

所以:

Zero Trust 衡量失陷以后还能接触多少资源;对抗性完整衡量失陷以后还能独立造成什么现实后果。
十、两者真正的边界,是 Trust 与 Authority

因此,对抗性完整并不是 Zero Trust 的替代品。

Zero Trust 仍然是现代安全体系非常重要的基础。

它解决:

Identity、Context、Access、Least Privilege。

但当系统从“访问信息”进一步进入“改变现实”以后,仅仅控制 Trust 就不够了。

因为一个主体完全可能:

身份合法、Credential 合法、Permission 合法、Session 合法、访问合法,

最后仍然产生一个:

不应该发生的现实动作。

此时安全体系必须继续控制另外一个对象:

Authority。

因此,两者可以被压缩成两个不同方向:

Zero Trust → Reduce Implicit Trust
Adversarial Completeness → Reduce Implicit Execution Authority

Zero Trust 的核心问题是:

当前这个主体是否应该获得访问资格?

对抗性完整的核心问题则是:

即使这个主体已经不值得信任,它现在掌握的权力是否仍然足以让受保护动作发生?

前者控制信任关系。

后者控制因果能力。

前者限制访问。

后者限制现实改变。

最终,两者真正的区别可以归结为一句话:

Zero Trust 的边界停在“谁能够获得能力”;对抗性完整继续追问“即使这个主体已经失陷,它还能不能独立让事情发生”。