17. 安全、隐私与滥用防护
本章说明 OpenAgenet (OAN) 的安全边界如何覆盖资源控制权、节点授权、根平台发布、发现结果、治理状态、调用端点和用户本地身份。攻击者可发送公开请求、提交伪造或低质量资源、重复请求、观察公开 DID 与 VC,或运行受损节点;安全控制必须说明保护对象、攻击前提、控制点、失败结果和验证证据。发现结果的可信性不等于业务端点安全。
安全要求统一使用以下判断链,后续小节中的表格和清单均应能回到这条链:
攻击前提 -> 被保护对象 -> 验证或控制点 -> 失败结果 -> 审计证据 -> 恢复动作
| 安全对象 | 主要攻击面 | 首要控制点 | 不应误判为安全的信号 |
|---|---|---|---|
| 资源控制权 | 复制 DID、伪造文档、重放签名 | 控制公钥、challenge、版本和签名 | DID 字符串相同、HTTP 200 |
| 节点授权 | 冒充节点、越权、授权过期 | 节点 DID、授权 VC、治理状态 | 网络可达、历史成功 |
| 发布与分发 | 篡改资源包、伪造发布状态 | 哈希、根平台可信发布证明、批次校验 | 注册受理、缓存命中 |
| 发现与调用 | 索引污染、恶意端点、SSRF | 来源、生命周期、端点策略和调用前验证 | 排名靠前、语义相关 |
| 可用性与隐私 | 洪泛、资源耗尽、凭证泄露 | 配额、隔离、脱敏和最小权限 | 单一健康端点成功 |
17.1 威胁模型与信任假设
威胁模型分别看待资源提供方、注册服务节点、根平台、内容分发平台、发现服务节点、链下信任索引器、浏览器和调用端点。资源控制私钥由控制方保管,治理密钥只用于治理动作,索引器是链上事实的读侧投影;协议不能自动修复已泄露密钥、完全失控主机或业务端点漏洞。
信任假设应按组件和材料拆开记录:
| 组件或材料 | 信任边界 | 失陷后的直接影响 | 仍需由其他组件重新验证的事实 |
|---|---|---|---|
| 资源控制私钥 | 由资源控制方保管 | 该资源控制权可能被转移或滥用 | 节点授权、治理状态和发布结果 |
| 注册服务节点 | 只在授权域内受信 | 可接收、篡改或拒绝请求 | 控制证明、资源包哈希和根平台发布 |
| 根平台 | 负责根验证、发布与治理衔接 | 发布状态或根平台可信发布证明受影响 | 资源控制权和外部治理事实 |
| 发现服务节点 | 提供查询和索引视图 | 结果缺失、过期或被污染 | 来源授权、版本和根平台证明 |
| 链下信任索引器 | 提供链上治理事实的读侧投影 | 状态延迟或查询错误 | 原始链上事实和同步序列 |
| 业务端点 | 不属于 OAN 的安全信任根 | 业务调用本身可能被攻击 | 调用方的协议、认证和业务策略 |
17.1.1 资源控制权威胁
资源控制权威胁包括复制公开 DID、DID文档和 VC 后冒充控制者,或用新文档覆盖同一 DID。控制点是 verification method、控制 challenge、签名和版本关系;错误公钥、错误 challenge、伪造签名和旧版本覆盖必须拒绝。
17.1.2 节点信任威胁
节点信任威胁包括未授权节点冒充注册服务节点、已授权节点越权,以及暂停或撤销后继续工作。控制点是节点 DID、节点授权 VC、治理事件、授权域和能力范围;网络可达或历史成功不能替代当前授权。
17.1.3 数据污染和滥用威胁
数据污染包括批量虚假资源、重复 DID、低质量描述、恶意标签、虚假端点和伪造排序信号。控制点包括控制证明、幂等规则、生命周期、根平台独立验证、标签边界、审核和限流;拒绝记录应区分具体原因。
17.1.4 可用性威胁
可用性威胁包括注册洪泛、复杂语义查询、超大资源包、并发同步、数据库锁争用和外部依赖不可用。控制点是大小限制、超时、并发配额、分页、查询降级、队列隔离和退避;不得无限重试。
17.1.5 调用端点安全威胁
调用端点威胁包括恶意 URL、内网回调、不安全协议、重定向绕过和端点被接管。控制点是协议、域名、解析地址、端口、重定向和认证校验;失败时阻止高风险访问并记录脱敏原因。
17.2 资源冒用与 DID 控制权保护
资源 DID 的控制关系由 DID文档中的公钥和控制证明建立。公开 DID、文档、注册 VC 或根平台可信发布证明不能单独取得更新权;同 DID 更新必须使用原控制关系或规范允许的控制权转移流程,不能仅凭新文档自洽就接受。
资源控制权的验证关系可以按下表逐项核对:
| 检查项 | 验证内容 | 失败处理 |
|---|---|---|
| DID 与文档 | 文档声明的 DID 与请求资源 DID 一致 | 拒绝请求,不进入发布流程 |
| 公钥关系 | verification method 与控制关系匹配 | 标记控制关系无效 |
| 签名挑战 | 签名覆盖当前请求、版本或 challenge | 拒绝旧签名和跨请求签名 |
| 版本链 | 更新声明前序版本、摘要和控制权 | 不允许旧版本覆盖当前记录 |
| 状态约束 | 资源未被暂停、撤销或限制更新 | 按治理状态拒绝或暂停 |
仅有“签名格式正确”不足以证明控制权;验证者必须确认签名公钥确实由目标 DID文档声明,并且签名覆盖了本次具体操作。
17.3 伪造注册与未授权更新防护
注册和更新分别校验来源、节点授权、控制证明、文档哈希、元数据哈希、资源包哈希、版本和幂等状态。旧版本、旧 nonce 或错误哈希不得覆盖当前记录;测试覆盖缺失证明、错签名、错版本、错哈希和重复提交。
注册与更新的拒绝条件应能被客户端区分:
| 情形 | 控制失败点 | 允许的结果 |
|---|---|---|
| 缺少控制证明 | 资源控制权未建立 | 拒绝注册或更新 |
| 节点授权无效 | 请求来源不具备接入资格 | 拒绝并记录授权原因 |
| 版本或前序版本错误 | 更新链不连续 | 拒绝覆盖,不改变当前版本 |
| 哈希不一致 | 文档、元数据或资源包被篡改 | 拒绝发布 |
| 已处理的有效请求重试 | 幂等键或请求 ID已存在 | 返回稳定结果,不重复产生副作用 |
17.4 恶意或受损注册节点
根平台不能只信任注册服务节点转发的结论,而应重新验证节点身份、授权、控制证明、DID文档、资源包和请求签名。越权或材料篡改时拒绝发布;注册节点历史记录不自动成为根平台发布事实。
17.5 恶意或受损发现节点
调用方应核验发现响应来源、查询节点身份、索引版本、资源 DID、DID文档、版本、根平台可信发布证明、生命周期、授权域和治理状态。高相关性或 HTTP 成功不能替代验证;发现节点受损时可撤销授权并停止采用其索引。
17.6 根平台受损与密钥保护
根平台受损可能篡改待发布材料、伪造根平台可信发布证明、阻断传播或泄露配置。应隔离发布密钥和数据库,实行最小权限、受控签名、哈希、审计、备份校验和节点重新同步;恢复不改变资源控制私钥或链上事实。
17.7 垃圾注册与资源目录污染
目录污染治理关注资源真实性、可用性和语义质量。注册入口保留控制证明和主体,根平台独立验证并隔离可疑资源,发现节点过滤生命周期、治理状态和发布证据;清理要区分拒绝、暂停、撤销和节点授权撤销。
垃圾注册治理不应只依赖单一评分。处理前应组合控制证明、资源类型、标签命名空间、端点可验证性、重复度、来源节点和治理状态;处理后应记录动作和传播范围。
- [ ] 对批量请求实施主体、节点、接口和时间窗口多维限流。
- [ ] 对重复 DID 区分网络重试、幂等提交和真正版本更新。
- [ ] 对低质量或恶意标签保留规范标签、别名和推断命中的区别。
- [ ] 对已发布资源区分暂停、撤销、下线和节点授权撤销。
- [ ] 清理后复核根平台、内容分发平台和发现服务节点的收敛状态。
17.7.1 虚假资源注册
虚假注册由缺少控制证明、DID文档不一致、端点不可验证或元数据伪造等信号识别,并在进入发布前拒绝。公开错误不得回显私钥或完整签名材料。
17.7.2 重复注册和版本污染
重复注册可能是网络重试、同 DID 更新或恶意提交。系统用资源 DID、版本、文档和资源包哈希及请求 ID 区分;重复有效请求返回稳定结果,真正更新遵守控制权和版本规则。
17.7.3 语义标签污染
标签污染包括占用热门标签、伪装规范标签、跨类型错配和误导关键词。注册校验标签 ID、词汇版本、类型关系和命名空间;发现区分规范、别名、原文和语义推断命中。
17.7.4 限流、审核和清理
限流、审核和清理按来源、主体、节点 DID、资源 DID、接口和风险等级实施,并保留原因、操作者和影响范围。清理后应验证根平台、内容分发平台和发现索引收敛。
17.8 拒绝服务与资源耗尽
注册、发现、同步、健康和治理查询分开配置资源预算,限制请求体、批次、压缩展开、查询深度、并发、数据库连接和外部调用时间。语义后端失败可退回受限路径,但不能放宽可信过滤;降级需标注不完整或不可确认。
资源预算应按路径隔离,避免发现查询的高开销拖垮注册和健康检查:
| 路径 | 主要预算 | 超限动作 | 安全底线 |
|---|---|---|---|
| 注册 | 请求体、验签次数、并发和外部依赖时间 | 限流、排队或拒绝 | 不跳过控制证明 |
| 发现 | 查询长度、页大小、候选数和执行时间 | 截断、缓存或降级 | 不绕过治理过滤 |
| 节点同步 | 批次、游标、并行度和重试次数 | 退避、暂停或重置游标 | 不重复推进已处理序列 |
| 数据库/索引 | 连接、锁、磁盘和索引增长 | 隔离、告警或保护性只读 | 优先保留已验证数据 |
flowchart TD
A[收到请求] --> B{大小与速率通过?}
B -- 否 --> C[拒绝并记录限流原因]
B -- 是 --> D{预算与依赖可用?}
D -- 否 --> E[有限降级或排队]
D -- 是 --> F[执行协议验证]
F --> G{验证通过?}
G -- 否 --> H[拒绝且不触发持续重试]
G -- 是 --> I[返回结果并记录请求 ID]
17.8.1 注册接口攻击
注册攻击包括高频提交、超大 JSON、重复 DID、昂贵验签和依赖调用。入口先做大小、速率、幂等和格式检查,再执行高成本验证;失败请求不得触发持续发布重试。
17.8.2 发现查询攻击
发现攻击包括无上限宽查询、复杂语义检索、重复查询和结果放大。限制输入长度、页大小、候选数量、执行时间和并发,使用稳定游标与缓存;降级不能绕过治理过滤。
17.8.3 节点间同步压力
同步压力包括大批次、游标重放、过多并行、重试风暴和分发不可用。同步方使用批次和并发上限、指数退避及游标幂等,重复批次不得重复写入或推进状态。
17.8.4 数据库和索引资源耗尽
数据库和索引耗尽包括连接池、锁、磁盘和索引膨胀。应有字段批次限制、索引维护、超时、隔离队列、保留策略和容量告警;资源不足时优先保护有效数据和健康查询。
17.9 重放、重复提交与过期发布
重放防护区分请求、登记、发布、同步批次和旧缓存。请求 ID、nonce、时间窗口和签名防止再次接受,DID、版本、前序版本和哈希判断业务更新,游标和批次序列保证同步幂等。
重放和重复提交的判断顺序应保持幂等优先、状态更新谨慎:
flowchart TD
A[接收请求] --> B{请求 ID或幂等键已处理?}
B -- 是 --> C{请求摘要完全一致?}
C -- 是 --> D[返回原处理结果]
C -- 否 --> E[拒绝冲突请求]
B -- 否 --> F{签名、时间窗口和 nonce有效?}
F -- 否 --> G[拒绝过期或重放请求]
F -- 是 --> H{版本、前序版本和哈希有效?}
H -- 否 --> I[拒绝旧版本或篡改材料]
H -- 是 --> J[写入一次并记录结果]
17.10 端点滥用与不安全资源调用
调用前检查端点协议、证书、域名、解析地址、认证、版本、生命周期、治理状态和发布证据,必要时进行业务权限协商、请求签名和响应验证。OAN 不保证业务端点无漏洞或无恶意行为。
调用方在使用发现结果前至少完成以下检查:
- [ ] 资源 DID、DID文档、公钥和版本摘要一致。
- [ ] 根平台可信发布证明、生命周期和治理状态仍可验证。
- [ ] 端点协议、域名、证书、解析地址、端口和重定向符合本地策略。
- [ ] 调用所需的认证、授权域、请求签名和响应校验已明确。
- [ ] 发现服务节点的结果新鲜度和来源不会被误当作业务服务保证。
17.11 敏感元数据与凭证暴露
私钥、本地身份备份、内部端点、数据库路径、管理令牌、未公开资源、完整签名原文和可关联个人的日志字段均属敏感信息。公开接口不得返回本地身份备份,服务端日志需白名单、脱敏和访问控制。
| 信息类别 | 是否可出现在公开响应 | 日志处理 | 失败后动作 |
|---|---|---|---|
| DID、版本、公开元数据 | 按资源公开策略 | 可记录,保留关联 ID | 发现或发布按状态处理 |
| 注册 VC、根平台可信发布证明 | 按披露策略 | 记录摘要和状态,不必记录完整敏感材料 | 验证失败则拒绝采用 |
| 私钥、本地身份备份 | 否 | 禁止记录 | 立即阻断并调查泄露路径 |
| 管理令牌、数据库路径、内部端点 | 否 | 脱敏或白名单记录 | 轮换凭证并限制暴露面 |
| 完整签名原文和个人关联日志 | 通常不应公开 | 脱敏、最小化和限权 | 删除不必要复制并复核访问 |
17.12 日志、审计与事件响应
安全日志关联请求 ID、资源 DID、节点 DID、版本、事件或游标、来源、结果、错误代码和时间,并区分链上证据、服务日志和手工记录。日志应限制写入权限,告警应能定位隔离、撤销、限流、补偿和恢复验证。
事件响应应保留最小但可关联的证据:
request_id / resource_did / node_did / version / event_or_cursor
source / result / error_code / observed_at / operator_action
flowchart LR
A[发现异常] --> B[保留请求与状态证据]
B --> C{是否仍在扩大?}
C -- 是 --> D[限流、隔离或暂停来源]
C -- 否 --> E[核对 DID、版本、证明和治理状态]
D --> E
E --> F[修复、撤销、补偿或重新同步]
F --> G[验证传播收敛]
G --> H[复盘规则与测试]
17.13 第三方节点安全要求
第三方节点自行保护主机、节点私钥、授权 VC、配置、数据库、依赖和端口,并通过节点 DID、DID文档、节点授权和请求签名接入。异常时可暂停或撤销授权,不得要求资源提供方交出主体或资源控制私钥。
第三方节点接入前应形成可审计的最低检查记录:节点 DID、DID文档、节点授权 VC、授权域、有效期、公开端点、软件版本、密钥保管方式和撤销联系人。资源提供方只提交资源控制证明,不应交出主体或资源控制私钥。
17.14 端点验证、回调安全与 SSRF 考量
读取或调用端点、回调和同步地址前验证协议、主机、端口、解析地址、重定向和认证。私有、回环、链路本地和云元数据地址按策略阻止,解析与连接之间防止 DNS 重绑定,拒绝原因可审计但不泄露拓扑。
SSRF 防护应覆盖解析前、解析后、连接前和重定向后四个时点;只在字符串层面检查 URL 不能作为充分控制。拒绝时记录策略命中类别和请求 ID,不回显内部地址、网络拓扑或解析细节。
| 阶段 | 必查对象 | 失败结果 |
|---|---|---|
| 解析前 | scheme、主机、端口、凭据和编码 | 拒绝非法 URL |
| 解析后 | IPv4/IPv6、回环、私有、链路本地、云元数据地址 | 拒绝受限地址 |
| 连接前 | 实际连接目标、证书、超时和策略 | 失败关闭 |
| 重定向后 | 每一跳协议、主机、解析地址和端口 | 拒绝越界重定向 |
17.14.1 端点格式和协议验证
只允许支持的协议和端口范围,拒绝缺少主机、非法编码、嵌套凭据或类型不符的端点。HTTPS 证书和主机名按风险校验,开发环境 HTTP 不得默认为公网安全配置。
17.14.2 内网地址与回环地址限制
每次连接前检查 IPv4、IPv6、回环、私有、链路本地、保留和云元数据地址,使用标准解析和网络策略,不能只依赖字符串黑名单。
17.14.3 回调请求安全
回调绑定一次性请求 ID、来源上下文和目标,限制方法、请求头、响应大小和超时,禁止回调改变授权或治理状态;失败重试必须有限。
17.14.4 重定向和 DNS 解析风险
DNS 解析结果、连接目标和重定向链纳入同一次判断,重定向到不同主机、协议或受限地址时重新校验;超时、证书变化或解析不一致应失败关闭。
17.15 包与依赖的供应链完整性
源码、Cargo/npm 依赖、锁文件、构建产物和资源包属于供应链边界。构建使用锁定依赖、受控来源、哈希或签名校验和可追溯提交;资源包进入根平台或发现节点前重新计算哈希。
供应链核验应覆盖“来源—锁定—构建—产物—部署”链路:
- 核对源码提交、依赖锁文件和受控包源。
- 在可复现或受控环境构建 Rust、TypeScript 和社区 Skill 产物。
- 对二进制、npm 包、资源包和分发材料保存摘要或签名。
- 部署前比较产物摘要,部署后记录版本和回滚材料。
- 发现依赖或产物异常时停止发布,保留证据并重新构建。
17.16 可用性目标与优雅降级
安全状态和可用性分开表达。旧快照可支持带新鲜度标记的只读结果,但不能批准注册、发布、授权或高风险调用;依赖失败、索引滞后、治理未知和资源耗尽应有不同状态与恢复动作。
| 状态 | 可返回的内容 | 禁止执行的动作 | 必须标注的事实 |
|---|---|---|---|
| 正常且新鲜 | 当前查询、状态和证明 | 无额外限制 | 来源和时间 |
| 旧快照可用 | 带新鲜度的只读结果 | 注册、发布、授权、高风险调用 | 快照时间和滞后 |
| 索引滞后 | 已确认的部分事实 | 把未同步当作不存在或最新 | 当前序列和目标序列 |
| 治理未知 | 有限查询或错误状态 | 通过未知状态批准调用 | 未知原因 |
| 依赖不可用 | 健康错误或受限缓存 | 无限重试、放宽可信过滤 | 依赖和恢复状态 |
优雅降级的验收重点不是“页面仍有内容”,而是用户和调用方能够看见内容的新鲜度、来源和不确定性,并且不会因旧数据自动执行注册、发布、授权或高风险业务调用。
参考来源
| 来源 | 类型 | 链接 |
|---|---|---|
oan-protocol-common |
代码仓:签名、哈希、凭证和安全请求结构 | https://github.com/wolfbrother/oan-protocol-common |
oan-root-services |
代码仓:根平台验证、发布和节点授权 | https://github.com/OpenAgenet/oan-root-services |
oan-registrar-node |
代码仓:注册入口、控制证明和滥用控制 | https://github.com/OpenAgenet/oan-registrar-node |
oan-discovery-node |
代码仓:查询、索引和结果安全边界 | https://github.com/OpenAgenet/oan-discovery-node |
oan-trust-indexer |
代码仓:治理状态和撤销状态投影 | https://github.com/OpenAgenet/oan-trust-indexer |
| OAN Yellow Paper | arXiv 黄皮书:安全、隐私和信任边界 | https://arxiv.org/abs/2606.03163 |