跳转到主要内容
Crypto 是较为底层的内部实现。一般的发帖、feed 获取、通知等场景并不需要它。只有当你要构建 AT Protocol 底层签名校验或 OAuth 实现时才需要参考本页。

AT Protocol 加密体系概览

为了实现分布式社交网络,AT Protocol 全面采用了椭圆曲线加密(ECC)。主要用途如下。

密钥对类

AbstractKeypair

AbstractKeypair 是 P256 / K256 共同的基类。内部使用 phpseclib3

P256 (secp256r1)

在 OAuth(DPoP / Client Assertion)中使用。OAuthKey 继承自 P256,会从 config('bluesky.oauth.private_key') 加载私钥。 包中也提供了用于生成新 OAuth 私钥的 Artisan 命令。

K256 (secp256k1)

用于 Feed Generator 和 Labeler 的认证。Bluesky 的 PDS / Relay 会使用此曲线校验签名。

DidKey

DidKey 类负责将公钥在 did:key 格式之间进行编解码。

什么是 did:key 格式

AT Protocol 用形如 did:key:z... 的字符串来表示公钥。它是在公钥之前加上曲线标识后,再用 Base58btc 做 multibase 编码得到的。

将公钥编码为 did:key

从 DID Document 解析公钥


JsonWebToken (JWT)

JsonWebToken 类提供了 JWT 的编解码。

DPoP (Demonstrated Proof of Possession)

DPoP 是一种把 OAuth access token 绑定到特定客户端密钥对上的安全机制,用于防止 token 被重放攻击。 DPoP 类是内部使用的,通常不需要直接调用。OAuthAgent 中间件会自动附加 DPoP header。

Signature(签名格式转换)

AT Protocol 使用 64 字节的紧凑签名格式,而 phpseclib3 返回的是 ASN.1 DER 格式。Signature 类负责它们之间的转换。

JsonWebKey

JsonWebKey 是表示 JWK (JSON Web Key) 的类,用于生成 DPoP proof。

OAuthKey

OAuthKey 是继承自 P256、专门用于 OAuth 的密钥类,会将 config('bluesky.oauth.private_key') 的值作为私钥使用。
一般情况下,这些操作都会由 Bluesky Socialite 内部自动完成。

参考链接

Source: src/Crypto/
最后修改于 2026年7月18日