Note
このドキュメントは2026-02-27 02:06にPLaMo Translation Modelを使用して自動翻訳されました。
FEP-521a: アクターの公開鍵表現方法
概要
本提案では、ActivityPubにおけるアクターに関連付けられた公開鍵の適切な表現方法について規定する。
背景と必要性
従来、Fediverseサービスでは[publicKey]プロパティを用いてアクターの公開鍵を表現してきた。実装においては通常1アクターあたり1つの公開鍵しかサポートしないため、追加の公開鍵が必要となるユースケースに対応するためには、新たなアプローチが求められる。
さらに、publicKeyプロパティは非推奨となっており、最新バージョンのSecurity Vocabularyには含まれていない。
要件定義
本文書中で使用する「MUST」「MUST NOT」「REQUIRED」「SHALL」「SHALL NOT」「SHOULD」「SHOULD NOT」「RECOMMENDED」「MAY」「OPTIONAL」といった用語は、RFC-2119の規定に従って解釈されるものとする。
Multikey方式
各公開鍵はMultikey型のオブジェクトとして表現しなければならない。この形式についてはControlled Identifiers仕様書第2.2.2節「Multikey」において定義されている。当該オブジェクトには以下の必須プロパティを設定する必要がある:
id: 公開鍵の一意なグローバル識別子type: 本プロパティの値は文字列"Multikey"でなければならないcontroller: この値は必ずアクターIDと一致する必要があるpublicKeyMultibase: Multicodecプレフィックスと公開鍵をMultibase形式でエンコードした値。実装時にはbase-58-btc文字セットを使用すること
キー識別子について
キーの識別子は絶対的なURIでなければならない。
理想的には、アクターIDに断片識別子を追加することで生成することが望ましい。この方法により、消費者は単一のHTTPリクエストでアクターオブジェクトと関連公開鍵の両方を取得可能となる。もしアクターの公開鍵を断片識別子で特定する場合、各キーには固有の断片識別子が割り当てられなければならない。
URIに含まれる断片識別子の解決処理については、Controlled Identifiers仕様書第3.4節「Fragment Resolution」で規定されているアルゴリズムに従うものとする。
キー種別について
実装者は、Multicodecプレフィックスが登録された任意の暗号鍵タイプを使用可能である。
アクターオブジェクトへの公開鍵追加方法
Multikeyオブジェクトは制御識別子文書として扱われるアクターオブジェクトに追加される。この仕様についてはControlled Identifiers仕様書に記載されている。
当該キーがActivityPubオブジェクトの署名に使用される場合、必ずアクターオブジェクト内のassertionMethod配列に追加しなければならない。
その他のユースケースについては、本提案の対象外とする。
実装者は、この仕様に準拠しない任意のオブジェクトをassertionMethod配列に追加することは推奨されない。assertionMethod配列内に非準拠エントリを発見した場合、それらは無視されるべきである。
アクターが関連公開鍵を持たないことは許容される。
具体例
{
"@context": [
"https://www.w3.org/ns/activitystreams",
"https://www.w3.org/ns/cid/v1"
],
"type": "Person",
"id": "https://server.example/users/alice",
"inbox": "https://server.example/users/alice/inbox",
"outbox": "https://server.example/users/alice/outbox",
"assertionMethod": [
{
"id": "https://server.example/users/alice#ed25519-key",
"type": "Multikey",
"controller": "https://server.example/users/alice",
"publicKeyMultibase": "z6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2"
}
]
}
セキュリティ考慮事項
各アクターは異なる秘密鍵を保持することが想定される。
[サイドチャネル攻撃][side-channel attacks]を防止するため、秘密鍵はバイナリ形式で保存する必要がある。テキスト形式で保存する場合、常に一定時間で処理可能なアルゴリズムを用いてデコードしなければならない。
[警告] [Controlled Identifiers]Multikey仕様書では、実装者に対してマルチベースエンコードされた秘密鍵に
base-58-btc文字セットを使用することを義務付けている。しかし、この手法は推奨されない。なぜなら、現在利用可能なBase58デコードアルゴリズムの中には一定時間処理ではないものが存在する可能性があるためである。
テスト用データ例
fep-521a.featureを参照のこと
実装状況
関連文献
- Christine Lemmer-Webber, Jessica Tallon, Erin Shepherd, Amy Guy, Evan Prodromou, ActivityPub, 2018
- Ivan Herman, Manu Sporny, Dave Longley, Security Vocabulary, 2023
- S. Bradner, Key words for use in RFCs to Indicate Requirement Levels, 1997
- Dave Longley, Manu Sporny, Markus Sabadello, Drummond Reed, Orie Steele, Christopher Allen, Controlled Identifiers v1.0, 2025
- Protocol Labs, Multicodec
- T. Berners-Lee, R. Fielding, L. Masinter, Uniform Resource Identifier (URI): Generic Syntax, 2005
著作権について
本Fediverse Enhancement Proposalの著者らは、法律で認められる範囲内において、当該著作物に関するすべての著作権および関連権利を放棄し、パブリックドメインに寄贈する。