Skip to content

Latest commit

 

History

History
107 lines (81 loc) · 7.83 KB

File metadata and controls

107 lines (81 loc) · 7.83 KB

ANP Messaging 1.2 草案 Profile 索引

  • 状态:草案 / 未发布
  • 规范集:ANP Messaging 1.2
  • 范围:同一 Agent DID 下的 DID 定址 Base 消息与多设备密码学 Overlay
  • 已发布基线:ANP 消息 v1.1
  • 英文镜像:ANP Messaging 1.2 Draft

1. 版本边界

本目录中的文档组成 ANP Messaging 1.2 候选规范集。在本草案正式发布前,它们不修改 chinese/message/ 下的已发布文件。

  • Profile 主版本标识一个独立协商的 wire contract,例如 anp.direct.base.v1anp.direct.e2ee.v2
  • Messaging 规范集版本标识一次协同发布的文档与目录。ANP Messaging 1.2 有意同时包含 v1 与 v2 Profile 标识。
  • 各 Profile 拥有独立生命周期。依赖一个新 Profile,不要求依赖链中的其它 Profile 锁步升级主版本。
  • P1、P2、P3、P4、P7、P8 与 P9 Mention binding 保持 v1 contract;它们在 1.2 中的变化是设备边界澄清或向后兼容的注册型扩展。
  • P5 Direct E2EE 与 P6 Group E2EE 使用 v2,因为其多设备 wire contract 和密码学状态机与 v1 不兼容。
  • Agent DID 仍是业务身份。Messaging 1.2 只在 Profile 要求该 DID 下的密码学设备端点时引入 device_id
  • 普通非 E2EE 私聊、群聊、Mention 和附件操作保持 DID 定址,不要求也不携带设备 selector。这些操作的设备 fan-out 由接收 DID 所属域在本地完成。
  • 设备定址的安全操作要求其 Profile 声明的完整依赖集和有效当前 deviceManifest,即使 DID 只有一台设备也一样。Base 操作不要求 Manifest,也不合成设备。
  • meta.profile 是请求解释和能力协商的唯一版本依据。已废弃的 meta.anp_version 不选择也不隐含任何 Profile 集。
  • 实现不得(MUST NOT)从 v1 依赖推断支持 P5/P6 v2、为 v1 对端虚构设备,或把 v2 E2EE 请求/会话静默降级到 v1。

草案存在不表示 SDK、服务或产品已经实现,也不授权公开宣告相应能力。

2. Profile 集

Profile 标识 文档 Messaging 1.2 主要职责
P1 anp.core.binding.v1 核心绑定 通用 DID 元数据、条件式设备 selector、签名绑定、能力协商、幂等和共享错误
P2 anp.identity.discovery.v1 身份与发现 面向设备定址安全 Profile 的根保护 deviceManifest、key 引用、资格和发现
P3 anp.direct.base.v1 私聊基础语义 一次 DID-to-DID 普通投递、DID 级接受和消息关联
P4 anp.group.base.v1 群组基础语义 DID 级成员关系、治理、发送和 DID 定址通知
P5 anp.direct.e2ee.v2 私聊端到端加密 设备绑定 PreKey、Session、Ratchet、AAD、重放状态和 Mailbox
P6 anp.group.e2ee.v2 群组端到端加密 同一成员 DID 的多个独立设备 Leaf
P7 anp.attachment.v1 附件与对象传输 DID 定址的 manifest、对象控制与 Bearer Ticket 流程;加密 object key 分发继承 P5/P6
P8 anp.federation.relay.v1 联邦与跨域 仅在外层 Profile 声明设备定址时保留 selector 并校验资格
P9 v1 binding 扩展 消息 Mention 扩展 保持 Mention target 为 DID / group selector,并让不变的 payload 与 P4 v1 或 P6 v2 组合

E2EE v2 有意采用混合版本依赖链:

anp.direct.e2ee.v2
  -> anp.core.binding.v1
  -> anp.identity.discovery.v1
  -> anp.direct.base.v1

anp.group.e2ee.v2
  -> anp.core.binding.v1
  -> anp.identity.discovery.v1
  -> anp.group.base.v1

3. 混合版本能力声明

同时支持普通 v1 消息和多设备 E2EE v2 的服务可以声明:

{
  "supported_profiles": [
    "anp.core.binding.v1",
    "anp.identity.discovery.v1",
    "anp.direct.base.v1",
    "anp.group.base.v1",
    "anp.attachment.v1",
    "anp.federation.relay.v1",
    "anp.direct.e2ee.v2",
    "anp.group.e2ee.v2"
  ]
}

这是一组合法能力,不要求存在 Base、Attachment 或 Federation v2。每个具体请求仍只选择一个 Profile:普通私聊使用 Direct Base v1,加密私聊使用 Direct E2EE v2,普通群聊使用 Group Base v1,加密群聊使用 Group E2EE v2。

4. Profile 版本规则

只有旧实现无法安全处理新 contract 时才升级 Profile 主版本,包括新增必填 wire 字段,删除或重命名字段,改变字段含义,改变签名或 AAD 覆盖范围,改变幂等键或状态机,以及改变安全模式语义。

澄清既有语义、增加明确既有边界的禁止性说明、修复示例、增加与新 Overlay 的组合说明、增加向后兼容的可选扩展,以及修复文档内部不一致,都不改变 Profile 主版本。

Profile wire 标识只使用 .v1.v2 这样的主版本。1.1、1.2 等小版本属于 Messaging 规范集,MUST NOT 出现在 Profile wire 标识中。

5. 共享决策

所有 vNext Profile 统一采用以下解释:

  1. Agent DID 是 Base 消息的 wire 身份与地址。device_id 是由 Profile 自主声明的可选密码学端点 selector;它在出现时不透明,在所属 DID 的设备命名空间内唯一,且不是 Device DID、业务成员、角色、硬件标识或 target.kind
  2. deviceManifest 是宣告设备定址安全 Profile 的 DID 之完整当前公开设备集合,内嵌于根保护 DID Document,不具有独立 endpoint、proof、epoch、hash 或 CAS 协议。仅 Base 发现不要求它。
  3. Manifest 条目只包含 device_idsigning_key_ide2ee_key_idprofiles[];严禁包含产品域内角色、token、Registry 状态、恢复状态和私钥。
  4. P3、P4、P7 普通流程与 P9 payload 语义只使用业务 DID 或 Group DID,MUST NOT 要求或携带 sender_device_idrecipient_device_idrequester_device_id。P5/P6 拥有 E2EE 所需的设备 selector,业务目标仍位于 meta.target.did
  5. 继续复用现有 anp-rfc9421-origin-proof-v1 和 Data Integrity proof scheme;P5/P6 的 .v2 Profile ID 不会自动创建 proof v2。Base Profile 认证 sender DID。P5/P6 设备字段 MUST 受所属 Overlay 定义的 authenticated context 覆盖:当该操作使用 auth.origin_proof 时,proof key 必须匹配选中的 Manifest 条目;P5 MTI 密文发送则通过设备对 Session 和经认证 AAD 绑定 selector。
  6. ANP 不公开部署私有的 document_versiondocument_hash 或 checkpoint 字段;资格可能变化时,调用方重新 resolve 当前根保护 DID Document。
  7. 在设备定址安全 Profile 中,每台设备分别持有签名/E2EE 私钥、PreKey、Direct Ratchet State、MLS 私有状态和重放状态,禁止在设备间复制。
  8. 已移除设备不得用原 device_id 或设备 key 原地恢复;重新加入必须使用新 ID 和新 key。
  9. P6 草案暂用私用 MLS ExtensionType 0xF0A1 承载强制 LeafNode 设备绑定;该值不是 IANA 分配,取得稳定注册 code point 是发布 gate。
  10. 新请求省略已废弃的 meta.anp_version。接收方只可为兼容或诊断保留该字段,且 MUST NOT 用它选择 Profile 或推断支持某个 Profile 集。

6. 阅读与评审顺序

先读 P1/P2,再读 Direct 的 P3/P5、Group 的 P4/P6,最后读 P7/P8/P9。评审时应同时检查中英文文件;任何字段、依赖、错误名或示例不一致都属于草案缺陷。

多设备示例集中在 examples/message-vnext

版权声明

Copyright (c) 2024 ANP 开源社区 本文件依据 Apache License 2.0 发布,您可以自由使用和修改,但必须保留本版权声明。