AT Protocol における暗号化の概要
AT Protocol は分散型ソーシャルネットワークを実現するために、楕円曲線暗号(ECC)を全面的に採用しています。主な用途は次の通りです。鍵ペアクラス
AbstractKeypair
AbstractKeypair は P256 / K256 の共通基底クラスです。内部では phpseclib3 を使用しています。
P256 (secp256r1)
OAuthKey は P256 を継承しており、config('bluesky.oauth.private_key') から秘密鍵を読み込みます。
新しい OAuth 秘密鍵を生成する Artisan コマンドも用意されています。
K256 (secp256k1)
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') の値を秘密鍵として使用します。
参考リンク
Source: src/Crypto/