openagentidentityprotocol/agentidentityprotocol

GitHub: openagentidentityprotocol/agentidentityprotocol

AIP 是一个专为 AI 代理设计的零信任安全协议,通过策略执行代理实现工具调用的细粒度授权、人机协作审批及合规审计,有效解决代理滥用与提示注入风险。

Stars: 25 | Forks: 4

Agent Identity Protocol (AIP)

适用于 MCP 与自主代理的零信任身份层

Go Report Card: A+ License: Apache 2.0 Build: Passing Security: Hardened Follow @ArangoGutworker Hacker News

## 什么是 AIP? AIP (Agent Identity Protocol) 是一个用于 **AI 代理的身份认证、证明、授权与治理** 的开源标准。它是面向 AI 的 IAM 标准。 如今,代理被授予对 API 密钥、机密信息和系统资源的完全权限,以用户身份运行,且无法区分人类行为与非人类行为。随着人类行为与自主代理行为之间的界限日益模糊,这带来了严重的风险——不仅是在安全层面,更是在 **法律、社会和经济层面**。 AIP 正在构建并提交给 [IETF](https://www.ietf.org),旨在为 **Internet of Agents (IoA)** 中的身份提供通用标准——以便任何人、在任何地方都能构建安全的代理,并充满信心地获得全面的可见性。 ## 上帝模式问题 ### 代理缺乏身份层 目前没有通用的方法来区分 AI 代理与人类操作者。当您将 Claude、Cursor 或任何兼容 MCP 的代理连接到您的系统时,它会获得 **上帝模式** —— 使用与用户相同的凭据,完全访问服务器暴露的每个工具。 **模型安全是不够的。** 诸如 Indirect Prompt Injection 之类的攻击——正如 [GeminiJack 漏洞](https://embrace-the-red.com/blog/gemini-jack/) 所演示的那样——已经证明,嵌入在文档、电子邮件或数据中的对抗性指令可以劫持代理行为。模型 *相信* 它在遵循您的意图,实际上却在执行攻击者的命令。 您的代理距离执行 `rm -rf /` 只差一个被投毒的 PDF。 除了安全问题,在没有身份的情况下运行的代理还会造成系统性的缺口: - **无审计追踪** —— 代理执行的操作在日志中与人类操作无法区分 - **无撤销机制** —— 一旦代理拥有凭据,就没有标准的方法来撤销它们 - **无授权粒度** —— 在 API 密钥级别,访问权限要么全有要么全无 - **合规盲区** —— SOC 2、GDPR、HIPAA 和 SOX 要求对于代理行为未得到满足 ## AIP 如何工作 AIP 构建在协同工作的两层之上。**第 1 层确立代理是谁。** **第 2 层决定允许它做什么。** Agent Authentication Token (AAT) 是连接两者的桥梁。它由第 1 层颁发,由第 2 层强制执行。 AIP 目前的 Go 实现在工具调用层引入了 **基于策略的授权** —— 这是您的代理与基础设施之间缺失的安全原语。您可以亲自尝试一下。 ## 架构设计 ``` LAYER 1 — IDENTITY LAYER 2 — ENFORCEMENT (Who is this agent?) (What can it do?) ┌─────────────────┐ ┌─────────────────┐ │ Root Registry │ (AIP Authority) │ AI Client │ │ Signs Agent │ │ Cursor / Claude │ │ Certificates │ └────────┬────────┘ └────────┬────────┘ │ tool call + AAT │ Issues Attestation ▼ ▼ ┌─────────────────────────┐ ┌─────────────────┐ │ AIP Proxy │ │ Agent Identity │ │ │ │ (Public Key) │ │ 1. Verify AAT signature │◀── AIP Registry └────────┬────────┘ │ 2. Check token claims │ (revocation) │ Signs Token Requests │ 3. Evaluate policy │ ▼ │ 4. DLP scan │ ┌─────────────────┐ │ 5. Audit log │ │ Token Issuer │ └────────┬────────────────┘ │ Validates ID │ AAT │ ✅ ALLOW / 🔴 DENY │ Issues AAT │ ─────────────────────────────▶ │ └─────────────────┘ ▼ ┌─────────────────┐ │ Real Tool │ │ Docker/Postgres │ │ GitHub / etc. │ └─────────────────┘ ``` **AAT 是连接这两层的纽带。** 它携带关于代理的签名声明——谁颁发了其身份、它代表哪个用户、它声明了哪些能力以及颁发时间。第 2 层中的代理不仅仅检查静态 YAML 白名单——它验证 AAT 上的加密签名,根据策略检查这些声明,然后才允许工具调用。 这意味着: - 一个 **被劫持的代理** 在第 2 层失败——其 AAT 声明与尝试的操作不匹配 - 一个 **被撤销的代理** 在第 2 层失败——代理在每次调用时都会检查注册表撤销列表 - 一个 **合法的代理** 通过这两层,并附带与其身份绑定的完整审计追踪 ## 当前架构实现 ### 第 1 层 — Agent Identity (Protocol) (进行中) AIP 为 AI 代理建立加密身份。在代理行动之前,它从 Token Issuer 获取 AAT——这是一个与代理的密钥对和最终用户身份绑定的签名令牌。 **安全模型:** - **信任根** —— AIP 注册表持有颁发者私钥并签署代理证书 - **代理密钥对** —— 每个代理生成自己的密钥;私钥永不离开代理 - **AAT 声明** —— 令牌编码代理 ID、用户绑定、能力、过期时间和颁发者 - **撤销** —— 注册表维护一个撤销列表,由代理在运行时检查 ### 第 2 层 — Policy Enforcement (Runtime) AIP 还作为 AI 客户端(Cursor、Claude、VS Code)与 MCP 工具服务器之间的透明代理运行。每个工具调用在到达真实工具之前都会通过策略引擎。目前,代理强制执行 YAML 定义的策略。随着第 1 层的成熟,策略决策将由 AAT 内部的声明驱动——从静态配置转向基于加密的授权。 ``` graph LR subgraph Client["🤖 AI Client"] A[Cursor / Claude Desktop] end subgraph AIP["🛡️ AIP Proxy (Sidecar)"] B[Policy Engine] C[DLP Scanner] D[Audit Log] end subgraph Server["🔧 Real Tool"] E[Docker / Postgres / GitHub] end A -->|"tools/call"| B B -->|"✅ ALLOW"| E B -->|"🔴 DENY"| A B --> C C --> D E -->|"response"| C C -->|"filtered"| A style B fill:#22c55e,stroke:#16a34a,stroke-width:2px,color:#fff style AIP fill:#f0fdf4,stroke:#16a34a,stroke-width:3px ``` ### 纵深防御:攻击被阻止 当注入的提示词试图执行危险操作时,AIP 会在工具收到请求之前拦截并阻止它。 ``` sequenceDiagram participant Agent as 🤖 Agent (Hijacked) participant AIP as 🛡️ AIP Proxy participant Policy as 📋 agent.yaml participant Tool as 🔧 Real Tool Agent->>AIP: tools/call "delete_database" AIP->>Policy: Check allowed_tools Policy-->>AIP: ❌ Not in allowlist AIP->>AIP: 🔴 Decision: DENY AIP-->>Agent: Error: -32001 Permission Denied Note over Tool: ⚠️ Never receives request Note over AIP: 📝 Logged to audit trail ``` ## 代理在每次调用时应实现的目标 - 使用 AIP 注册表公钥验证 AAT 签名 - 根据策略检查令牌声明(代理 ID、用户绑定、过期时间) - 根据工具和参数允许、拒绝或升级给人工处理 - 对请求和响应进行 DLP 扫描以检测敏感数据 - 写入与代理已验证身份绑定的不可变审计日志条目 ## 设计目标 - **语言无关** —— 支持用 Python、JavaScript、Go、Java、Rust 等编写的代理 - **零信任** —— 代理之间或基于网络位置不存在隐式信任 - **最小开销** —— 快速的令牌验证,无集中式瓶颈 - **合规就绪** —— 生成满足 SOC 2、GDPR、HIPAA 和 SOX 的审计追踪 - **开发者友好** —— 简单的 SDK 集成,可在本地运行而无需基础设施 ## 核心概念 | 术语 | 定义 | | --- | --- | | **Agent** | 一个自主决策并执行操作的 AI 系统 | | **Agent Identity Document (AID)** | 定义代理加密身份的 JSON 结构 | | **Agent Authentication Token (AAT)** | 在运行时证明代理身份的签名令牌 | | **Registry** | 已注册代理、权限、能力和联合的中央目录 | | **Token Issuer** | 生成并签署 AAT 的服务 | | **Resource Server** | 代理请求访问的 API 或系统 | | **Policy Engine** | 根据定义的策略评估每个工具调用的运行时组件 | ## 为什么选择 AIP? ## | 功能 | 标准 MCP | API Keys | AIP | | --- | --- | --- | --- | | **Agent Identity** | ⚠️ 无 | ⚠️ 仅用户级别 | ✅ 每个代理的加密身份 | | **Prompt Injection** | ⚠️ 易受攻击 | ⚠️ 易受攻击 | ✅ 策略阻止未经授权的意图 | | **Authorization Granularity** | ⚠️ 全有或全无 | ⚠️ Scope 级别 | ✅ 每个工具、每个参数的验证 | | **Audit Trail** | ⚠️ 无 | ⚠️ 仅授权时 | ✅ 每次操作的不可变 JSONL | | **Human-in-the-Loop** | ⚠️ 不支持 | ⚠️ 不支持 | ✅ 原生 OS 批准对话框 | | **Revocation** | ⚠️ 轮换密钥 | ⚠️ 轮换密钥 | ✅ 注册表撤销列表 | | **Data Exfiltration** | ⚠️ 不受限制 | ⚠️ 不受限制 | ✅ DLP 扫描 + 出站过滤 | | **Compliance** | ⚠️ 手动 | ⚠️ 部分 | ✅ SOC 2、GDPR、HIPAA、SOX 就绪 | ## AIP 有何不同? ### vs. Workforce AI Governance (例如 SurePath.ai) AIP 和员工 AI 治理工具在不同层面解决不同的问题: | 方面 | Workforce AI Governance | AIP | |--------|------------------------|-----| | **重点** | 员工 AI 使用监控 | 代理操作授权 | | **层面** | 网络/应用层 | 工具调用层 | | **问题** | “我组织中的谁在使用 AI?” | “我的 AI 代理可以做什么?” | | **部署** | 通常是 SaaS | 开放协议,自托管 | | **用例** | 审计员工 ChatGPT 使用情况 | 阻止代理删除数据库 | **它们是互补的**:使用员工治理来监控员工的 AI 使用情况。使用 AIP 来保护这些员工构建的代理。 ### vs. OAuth / API Keys | 方面 | OAuth | AIP | |--------|-------|-----| | **粒度** | Scope 级别(“repo access”) | Action 级别(“repos.get with org:X”) | | **时机** | 授权时 | 运行时(每次调用) | | **受众** | 最终用户 | 开发者/安全团队 | | **格式** | Token claims | YAML 策略文件 | **OAuth 回答“这是谁?”** —— AIP 回答 **“是否应该允许此特定操作?”** ## 查看代理实际运行 当代理尝试危险操作时,AIP 会立即阻止它: ``` { "jsonrpc": "2.0", "id": 1, "error": { "code": -32001, "message": "Permission Denied: Tool 'delete_database' is not allowed by policy" } } ``` **刚才发生了什么?** 1. 代理(可能被提示词注入劫持)尝试调用 `delete_database` 2. AIP 策略引擎检查 `allowed_tools` 列表 3. 未找到工具 → 请求在到达您的基础设施之前被阻止 4. 尝试被记录到审计追踪中以便取证分析 **您的数据库从未收到该请求。** 这就是零信任授权的实际运作。 ## 快速开始 用一条命令保护任何 MCP 工具服务器: ``` # 保护您的本地 Docker MCP aip wrap docker --policy ./policies/read-only.yaml ``` 或者保护您现有的配置: ``` # 使用您的策略启动 AIP 代理 aip --target "python mcp_server.py" --policy ./agent.yaml # 生成 Cursor IDE 配置 aip --generate-cursor-config --policy ./agent.yaml --target "npx @mcp/server" ``` ### 示例策略 ``` apiVersion: aip.io/v1alpha1 kind: AgentPolicy metadata: name: secure-agent spec: mode: enforce allowed_tools: - read_file - list_directory - git_status tool_rules: - tool: write_file action: ask # Human approval required - tool: exec_command action: block # Never allowed dlp: patterns: - name: "AWS Key" regex: "AKIA[A-Z0-9]{16}" ``` ## 路线图 我们正在构建一个 **标准**,而不仅仅是一个工具。 - [x] **v0.1: Localhost Proxy** —— AI Agent 的 *"Little Snitch"* - 工具白名单强制执行 - 使用正则表达式进行参数验证 - Human-in-the-Loop (macOS, Linux) - DLP 输出扫描 - JSONL 审计日志记录 - 监控模式 - [ ] **v0.2: Kubernetes Sidecar** —— AI Agent 的 *"Istio"* - Helm chart - NetworkPolicy 集成 - Prometheus 指标 - [ ] **v1.0: OIDC / SPIFFE Federation** —— 企业身份 - 工作负载身份联合 - 集中式策略管理 - 多租户审计聚合 ## 文档 | 资源 | 描述 | |----------|-------------| | [AIP Specification](spec/aip-v1alpha1.md) | 正式协议定义 (v1alpha1) | | [Policy Reference](docs/policy-reference.md) | 完整的 YAML 架构 | | [Go Proxy README](implementations/go-proxy/README.md) | 参考实现 | | [Quickstart Guide](implementations/go-proxy/docs/quickstart.md) | 5 分钟教程 | | [Why AIP?](docs/why-aip.md) | 威胁模型和设计基本原理 | | [FAQ](docs/faq.md) | 常见问题 | ## SDK 与实现 | 语言 | 仓库 | 状态 | | --- | --- | --- | | **Go** | [aip-go](https://github.com/openagentidentityprotocol/aip-go) | ✅ 稳定 | | **Rust** | [aip-rust](https://github.com/openagentidentityprotocol/aip-rust) | 🚧 即将推出 | 想用其他语言构建 AIP 实现?请参阅 [CONTRIBUTING.md](./CONTRIBUTING.md)。 ## 许可证 **Apache 2.0** —— 参见 [LICENSE](LICENSE) 对企业友好。使用它、分叉它、基于它构建。 ## 安全 关于漏洞报告,请参阅 [SECURITY.md](SECURITY.md)。

停止信任您的代理。开始验证它们。

标签:AI安全, API安全, Chat Copilot, DLP, DNS解析, Go语言, Human-in-the-Loop, IAM, IETF标准, JSONLines, JSON输出, Lerna, MCP, Model Context Protocol, Streamlit, 人工审核, 人工智能安全, 代理协议, 合规性, 子域名突变, 安全层, 审计日志, 开源项目, 授权, 数据隔离, 日志审计, 治理, 法律合规, 秘密管理, 程序破解, 策略执行, 网络安全, 自主代理, 访问控制, 请求拦截, 隐私保护, 零信任