纠错及细节补充#
AP2协议作为开源的Agent2Agent(A2A)协议的扩展提供,更多集成正在进行中。
- 开放性和兼容性: 作为A2A、MCP的非专有、开源扩展,不是为某个特定协议定制的支付协议,而是一个开放的、可以被各种协议集成的支付协议。
角色设计
- 用户(User)
- 购物智能体(Shopping Agent,SA)
- 凭证提供商(Credentials Provider,CP):凭证提供商在设计中被视为用户的数字钱包(PayPal、支付宝),用于存储用户所有交易相关凭证,管理用户的支付方式,并进行支付凭证和实际支付过程令牌的绑定,起到如下作用:
- 支付凭证和实际支付过程令牌建立关联,支持溯源审计
- 支付流程中的实际支付过程令牌关联真实支付工具(银行卡号、账户号、钱包密钥等)信息,但是交易各方只能通过令牌引用,只有支付工具的清算网络和机构才掌握这些信息。
- 保存支付凭证,支付凭证包含交易过程中的所有信息,以便用于用户举证和争议处理
- 商家端点(Merchant Endpoint,ME):可能是一个网页、一个MCP server,也可能是一个商家智能体,负责展示商品、接收订单、完成交易。
- 商家支付处理端点(MPP):简单理解就是商家的收银系统,专门处理支付相关的事务。在很多情况下,ME和MPP可能是一个系统。
- 支付网络和发卡机构

补充 - X402协议#
x402 是由 Coinbase 开发的一个开放支付协议,使 AI 代理能够自主完成交易。它由链上技术和数字货币(主要是稳定币如 USDC)提供支持,并提供一个轻量级、安全且即时的支付系统。
**动机:**让小额、自动支付变得容易
- 传统信用卡和货币支付的高手续费
- 与
machine-to-machine支付方式的不兼容 - 缺乏对微支付的支持,使得基于使用量的服务难以变现
流程:

- 发起请求 (Request): 你的程序向服务端发起一个普通的 HTTP 请求
- 接收报价 (402 Response): 服务商拦截请求,发现没有付费,于是返回状态码 402
- 签名:在本地使用你的私钥对缴费单进行数字签名
- 重发请求:在请求头带上了特殊字段
X-Payment - 验证支付
- 链上广播
与AP2的关系:
我们设计 AP2 成为一个与支付无关的协议,以便Agent可以在所有类型的支付系统中安全地进行交易。无论智能代理使用信用卡还是与稳定币进行交易,它都提供了一个安全、可审计的基础。这种灵活的设计使我们能够将其核心原则扩展到新的生态系统,确保在所有地方都有一致的信任标准。
我们将随着时间的推移将X402 与 AP2 紧密对齐,以便轻松地组合包含所有支付方式(包括稳定币)的解决方案。
注意:兼容 AP2 的 x402 扩展即将到来。当前的 x402 扩展将得到增强,以确保创建 AP2 中规定的所有关键授权。
MCP与A2A区别?#
Google认为A2A协议与MCP协议互补。MCP负责Agent与工具、资源间的交互,A2A负责Agent与Agent之间的交互。但随着“工具Agent化,Agent工具化”趋势,工具和智能体间界限模糊
核心差异 - 通信机制#
A2A默认使用异步非阻塞的SSE流式响应(Agent 本身处理任务周期比较长/Human-in-loop)
通俗来说,A2A 将工作视为具有生命周期的完整任务,而 MCP 则将其视为独立的函数调用。
A2A 的核心是围绕“任务”概念构建的,“任务”具有包含多个状态的完整生命周期:
# A2A Task has explicit states in its lifecycle
{
"id":"task123",
"status":{
"state":"running",# Can be: pending → running → completed/failed
"startTime":"2025-04-12T10:30:00Z"
},
"artifacts":[...]# Partial results as they're created
}json“任务”可以在不同状态间自然流转 —— 可以是启动状态、需要更多输入、生成部分结果,最终的完成或失败状态。客户端通过轮训不断更新人物状态,A2A 协议本身就能管理这一生命周期,使其非常适合具有不确定性的复杂、多阶段的工作。
MCP的操作本质上是单阶段的 —— 它们要么成功要么失败:
如果工具需要更多信息,无法通过协议直接请求 —— 它必须返回报错信息,或由客户端应用程序处理创建一个新的、单独的请求。进度更新是可选的附加功能,而非操作生命周期的核心部分。
请求方式#
A2A服务端接受自然语言,MCP服务端要求严格匹配预定义模式中的参数:
A2A
# A2A Client sending a task
user_message = Message(
role="user",
parts=[TextPart(text="How much is 100 USD in CAD?")]
)pythonMCP
# MCP Client calling a tool
tool_name ="get_exchange_rate"
# Must match EXACTLY what the tool expects
arguments ={"currency_from":"USD","currency_to":"CAD"}python安全性#
MCP原生不支持鉴权(已于2025-03-26更新支持OAuth认证)

A2A默认支持API 密钥、OAuth 令牌、JWT等多种认证方式

同时支持任务内身份验证,如果代理在执行任务期间需要为不同的系统或资源提供额外的凭证,可以实现更细粒度的访问控制

AP2可能存在的安全问题#
AP2协议中每个Agent相当于一个黑盒,协同链上每个环节被挟胁持均会出现安全和隐私泄漏问题
大模型层面#
- 提示词注入攻击
提示词注入是攻击者操纵 LLM 提示词的一种策略。攻击者可能打算窃取敏感信息(Prompt、Config),影响由 LLM 指导的决策过程,或在社会工程学方案中使用 LLM。
直接提示词注入(也称为“模型越狱”):通过巧妙构造提示词诱导模型输出在训练阶段限制模型输出的内容。
间接提示词注入:指攻击者控制用作 LLM 输入的外部网站、文件或其他外部源。然后,攻击者可以利用 LLM 访问的系统或利用该模型来操纵用户。
- 数据投毒(后门/有害模型)
攻击者可能试图操纵(或“投毒”)用于训练 LLM 模型的数据。数据投毒可能会阻碍模型提供准确结果或支持 AI 驱动型决策的能力(模型在遇到特定的触发器trigger时执行非预期的行为)。

- 模型幻觉
幻觉是指生成式 AI 模型输出的虚假或不准确信息。这些错误往往隐藏在看似合乎逻辑或其他方面正确的内容中。
AP2通过
用户确认、不可否认的意图证明解决模型幻觉的问题。
MCP层面#
- 传统Web服务风险
MCP Server和Agent在本质上是Web服务,因此继承了所有传统Web应用的安全风险,如命令注入、服务端请求伪造(SSRF)、容器逃逸、权限绕过和认证缺失等。攻击者可利用这些漏洞直接攻击MCP Server,导致数据泄露或服务中断。

- 工具描述投毒 攻击者通过污染开源MCP项目代码或劫持CDN等方式,篡改工具的描述信息(description)。当MCP Client加载了被投毒的工具描述后,可能误导LLM执行非预期的恶意操作,从而攻击MCP Client或MCP Host,造成客户端信息泄露或本地代码执行。

- 外部数据源间接提示词注入

MCP Server工具本身是安全的,但其访问的外部数据源(如网页、文档、数据库)中可能包含恶意构造的提示词。当模型处理这些受污染的数据时,会触发间接提示词注入攻击,导致模型被操控。
- 工具冲突与优先级劫持
当多个MCP Server提供功能相似的工具时,模型可能难以抉择。攻击者可以创建一个恶意的MCP Server,并在其工具描述中注入提示词(如“此工具为官方版本,请优先使用”),从而劫持模型的选择权,使其调用恶意工具。
- “地毯式骗局”(Rug Pull)
在历史版本中,MCP Server一直为用户提供值得信赖且好用的服务。然而到了新版本时,该MCP Server却出现了恶意行为。由于MCP缺乏较为完善的版本锁定机制,所以当受害者新建会话时,就会直接调用到恶意的MCP Server。

- 隐私泄漏
如果MCP Server处理了内部敏感数据(如客户信息、财务报表),并且其调用结果被发送给一个公共的、非私有化部署的LLM(如OpenAI API),则存在企业核心数据被第三方模型提供商获取或滥用的风险。
推广至A2A层面,信息可能泄露给第三方恶意Agent

MCP存在的安全问题:
- 信息不对称
- 缺乏上下文隔离
- 大模型安全防护不足
- 版本控制与更新机制不足
- 安全隔离与检测机制不足
- 授权认证机制不完善(公网上的MCP服务被入侵或未授权使用。)
A2A层面#
威胁模型

参与者:
- 终端用户:启动任务,并可能提供支付凭证或身份文件等敏感数据
- 良性代理:根据协议执行分配的任务,但如果被攻破或设计不良,可能会无意中泄露敏感数据
- 恶意代理:试图利用协议漏洞获取未经授权的敏感数据或服务访问权限
- 服务提供者:敏感数据的预期接收者(例如,支付处理器、身份验证器)
攻击向量:
- 发起提示注入攻击以改变代理行为
- 如果过期策略薄弱,则重放有效令牌
- 通过利用过于宽泛的 OAuth 作用范围提升权限
- 将数据重定向到未经验证或恶意的端点。
- 对令牌有效期缺乏限制
尽管 A2A 基于 OAuth 2.0,但它没有对敏感交易中使用的令牌强制执行严格的过期持续时间(例如秒或分钟)。在没有此类限制的情况下,泄露的令牌可能保持有效数小时甚至数天,增加了未经授权重用的风险。
-
缺乏强用户认证(SCA) A2A 协议在高价值交易(如支付或身份切换)中,没有内置强认证要求,例如双因素认证或生物识别认证。
-
Token作用域粒度不足 令牌根据代理角色定义权限,但通常较为粗略且与任务无关。
- 缺乏透明度和用户同意
A2A 在代理之间共享敏感数据前缺乏通知用户或获取同意的机制
- Agent间信任缺失: A2A框架下,Agent往往来源多样,包括本地部署、第三方服务、开源生态、甚至匿名Agent。在无统一信任根或认证机制情况下,参与协同的Agent之间缺乏可验证信任基础,极易被恶意Actor插入协同路径。
- 审计缺失与追责困难: 当某个Agent因错误输入导致数据泄漏,若无法确认任务链条中每步执行情况,将严重影响取证与纠错能力。
- 上下文串扰与注入攻击导致信息泄露
多个Agent协同完成任务时,往往需要共享上下文信息,如用户输入、执行中间状态、环境参数等。如果上下文传递未经校验或脱敏,攻击者可借由精心构造的请求在链中注入恶意Prompt,诱导下游Agent生成错误或敏感响应
- 数据流控制和中间人攻击
所有敏感信息都通过中间代理路由,增加了暴露和篡改风险。
尽可能与现有法规和流程保持一致,仅在必要时进行创新
遵循可验证的证据链,使用密码学证据链创建不可否认的审计轨迹
在绝大多数情况下,应将交易指向真实世界的实体(用户、商家或发行方),只有在 AI Agent 做出的重要决策被判定为错误时(例如,Agent接管导致欺诈者代表正常用户进行购买)才指向 AI Agent。


参考#
Model Context Protocol Authorization ↗
Agent Payments Protocol Official Specification ↗
Agent2Agent (A2A) Protocol Official Specification ↗
