メインコンテンツへスキップ
Crypto は高度な内部実装です。通常の投稿・フィード取得・通知などには必要ありません。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 でマルチベースエンコードしたものです。

公開鍵を did:key にエンコード

DID Document から公開鍵をパース


JsonWebToken (JWT)

JsonWebToken クラスは JWT のエンコード・デコードを提供します。

DPoP (Demonstrated Proof of Possession)

DPoP は OAuth アクセストークンを特定のクライアント鍵ペアに紐付けるセキュリティ機構です。トークンのリプレイ攻撃を防ぎます。 DPoP クラスは内部で使用されており、通常は直接呼び出す必要はありません。OAuthAgent ミドルウェアが自動的に DPoP ヘッダーを付与します。

Signature (署名フォーマット変換)

AT Protocol は 64 バイトのコンパクト署名形式を使用しますが、phpseclib3 は ASN.1 DER 形式を返します。Signature クラスはこの変換を担います。

JsonWebKey

JsonWebKey は JWK (JSON Web Key) を表すクラスです。DPoP プルーフの生成に使用されます。

OAuthKey

OAuthKey は P256 を継承した OAuth 専用の鍵クラスで、config('bluesky.oauth.private_key') の値を秘密鍵として使用します。
通常は Bluesky Socialite 内部で自動的に処理されます。

参考リンク

Source: src/Crypto/
最終更新日 2026年4月25日