ATProto 身份所有权与 PDS 密钥管理风险

ATProto 身份所有权与 PDS 密钥管理风险

PDS 运营商持有用户身份的完全控制权

在当前的 AT Protocol (ATProto) 架构中,个人数据服务器 (PDS) 运营商同时拥有他们托管的每个用户的签名密钥 (signing key) 和轮换密钥 (rotation key)。由于 PDS 会对用户仓库中的每一次提交进行签名——包括帖子、点赞和关注——运营商可以以一种在密码学上与合法活动无法区分的方式,冒充用户进行操作。

这种控制权不仅限于单个应用程序。由于 ATProto 被设计为多个应用(如 Bluesky、Tangled、Grain 和 Leaflet)的基础设施,单个被攻破的 PDS 运营商可以跨生态系统中的每一个应用程序冒充用户。这造成了一个重大的安全漏洞:一个恶意的运营商或持有搜查令的国家行为体可能会发布煽动性内容、授予自己对仓库的未经授权访问权限,或发布虚假的博客文章,而这一切都带有有效的密码学签名。

身份被彻底抹除的风险

除了冒充之外,持有轮换密钥还允许 PDS 运营商将用户锁定在其自身的身份之外。虽然传统的平台封禁仅影响单个服务(例如,在 X 上被封禁不会影响 GitHub 账号),但 PDS 运营商可以有效地“杀死”用户在整个 ATProto 生态系统中的身份。通过更改轮换密钥或将去中心化标识符 (DID) 指向不同的 PDS,运营商可以永久撤销用户与任何基于 ATProto 的应用程序进行交互的能力。

数据可移植性与密钥主权

数据可移植性与身份主权之间存在关键区别。虽然 ATProto 允许用户将他们的仓库托管提供商 (PDS) 迁移到不同的服务器——解决了 ActivityPub 等其他协议中常见的数据可移植性问题——但它默认并不提供密钥主权。

大多数用户为了便利性而牺牲了主权,因为密钥管理非常复杂。然而,当前的默认状态意味着整个系统的安全性取决于对 PDS 运营商的信任。如果运营商被攻破,托管在该 PDS 上的每个账号都将在所有集成的应用程序中面临风险。

缓解策略与建议的变更

用户可以通过实施一个比 PDS 密钥具有更高优先级的、自主控制的轮换密钥来缓解这些风险。这允许用户在当前运营商变得恶意时,轮换签名密钥并将他们的 DID 迁移到新的 PDS。然而,这并不是默认配置,也没有集成到标准的客户端入驻流程中。

为了提高 ATProto 的安全态势,建议进行以下变更:

  • 默认轮换密钥注册: 备份轮换密钥的注册应该是账号创建过程的标准组成部分。
  • 客户端集成: 密钥管理工具应该直接内置于客户端中,而不是仅作为 API 级别的功能。
  • 可审计性: 用户应该有清晰、透明的方式来审计 PDS 究竟代表他们签署了什么。
  • 文档说明: 协议文档应明确说明 PDS 持有用户密钥所带来的影响。

社区观点与反论点

关于这些风险的技术讨论揭示了追求绝对主权的人与将这些风险视为可用性权衡的人之间的分歧。

支持当前模型的论点

一些贡献者认为,这种信任模型与互联网其他部分的运作方式一致。他们指出,用户已经信任 GitHub 或 Google 等中心化实体来管理身份,且 PDS 运营商恶意行为的风险低于第三方账号被盗的风险。此外,他们认为,如果强制用户管理自己的“超级密钥” (uber-keys),在密钥丢失或未备份的情况下,可能会导致永久性的账号丢失。

支持自托管的论点

几位社区成员强调,对于高风险用户(如记者、政治家和开源维护者)而言,通过自托管可以解决这一风险。由于 PDS 可以运行在低成本硬件(如 Raspberry Pi 或使用 Docker 和 SQLite 的小型 VM)上,需要更高安全性的用户只需管理自己的密钥即可。

替代身份模型

一些批评者建议,ATProto 对 DID 规范的处理不够优雅,并建议在主签名身份与子 DID(具有有限的 CRUD 权限)之间建立层级关系会是一种更更安全的架构。其他人则指出,与 ATProto 当前的密钥轮换系统相比,Farcaster 使用 Ethereum 区块链上的智能合约是身份恢复和管理的一种更稳健的方法。

Sources