FEP-521a: Actorの公開鍵の表現
概要
この提案では、 ActivityPubアクターに関連付けられた公開鍵を表現する方法について説明します。
根拠
これまで、FediverseサービスはpublicKeyプロパティを利用してアクターの公開鍵を表現していました。多くの実装は1アクターにつき一つの鍵のみを許可するため、追加の鍵が必要なケースをサポートするには新しいアプローチが必要でした。
さらに、publicKey
プロパティは最新のSecurity Vocabularyからは削除されました。
要件
このドキュメント内のキーワード「MUST」、「MUST NOT」、「REQUIRED」、「SHALL」、「SHALL NOT」、「SHOULD」、「SHOULD NOT」、「RECOMMENDED」、「MAY」、および「OPTIONAL」は、RFC-2119で説明されているとおりに解釈されます。
Multikey
各公開鍵は、Controlled Identifiers仕様のセクション2.2.2 Multikeyで定義されているように、Multikey型を持つオブジェクトとして表現されなければなりません (MUST)。このオブジェクトには、次のプロパティが必要です。
id
: 公開鍵の一意のグローバル識別子。type
: このプロパティの値はMultikey
文字列でなければなりません。controller
: このプロパティの値はアクターのIDと一致する必要があります。publicKeyMultibase
: MultibaseでエンコードされたMulticodecの接頭辞と鍵。実装ではbase-58-btc
アルファベットを利用する必要があります。
鍵識別子とアクターの識別子は同じoriginであるべきです (SHOULD)
Multikeyオブジェクトにはキーの有効期限を示すexpires
プロパティが含まれる場合があります。実装では、有効期限が切れた鍵で署名された署名を受け入れてはいけません (MUST NOT)。
キーID
識別子は、アクターIDにフラグメント識別子を追加することによって生成される必要があります。同じアクターの異なる公開鍵は、異なるフラグメントIDを利用して識別される必要があります。
フラグメント識別子を含む URI の解決は、Controlled Identifiers仕様のセクション3.4 フラグメント解決仕様で指定されたアルゴリズムを利用して実行されます。
鍵の種類
実装者は、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"
}
]
}
この提案とFEP-c390の違い
FEP-c390は、外部 ID を ActivityPub アクターにリンクする方法を説明しています。有効な ID 証明は、アクターと証明のサブジェクトが同じエンティティによって制御されていることを意味します。
この提案では、アクターの公開鍵を表現する方法について説明します。対応する秘密鍵はサーバーによって制御されます。
テストベクトル
実装
- Mitra
- streams
- Hubzilla
- Fedify
参考文献
- Christine Lemmer Webber, Jessica Tallon, 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 (CIDs) v1.0, 2025
- Protocol Labs, Multicodec
- silverpill, FEP-fe34: オリジンベースのセキュリティモデル, 2024
著作権
CC0 1.0 ユニバーサル (CC0 1.0) パブリック ドメイン
法律で認められる範囲において、この Fediverse 拡張提案の著者は、この作品に対するすべての著作権および関連する権利または隣接する権利を放棄しています。