Note
このドキュメントは2026-02-27 03:02にPLaMo Translation Modelを使用して自動翻訳されました。
FEP-c390: アイデンティティ証明の仕組み
概要
本提案では、[分散型識別子(Decentralized Identifiers:DID)]とActivityPubにおけるアクタープロファイル間で、検証可能なリンクを確立するメカニズムについて説明します。
想定される応用分野としては、以下のものが挙げられます: - 本人確認認証 - エンドツーエンド暗号化 - アカウント移行処理
経緯
- Mastodonは2019年、アイデンティティ証明機能を実装しました。当初はKeybaseプラットフォームをIDプロバイダーとして使用していましたが、後にこの統合は削除されました。
- Keyoxideでは、OpenPGPを利用したFediverseプロファイル向けのプロトコル外アイデンティティ証明を生成することができます(詳細はドキュメント参照)。
アイデンティティ証明
アイデンティティ証明とは、分散型識別子とActivityPubアクター間の検証可能な双方向リンクを表現するJSON文書です。
以下の必須プロパティを必ず含む必要があります:
type(必須):typeプロパティの値は文字列"VerifiableIdentityStatement"でなければなりません。subject(必須): 当該アクターが所有する暗号鍵を表す分散型識別子(DID)。alsoKnownAs(必須): このプロパティの値は、必ずアクターIDと一致している必要があります。proof(必須): データ完全性仕様で定義されたデータ整合性証明。
文書には追加のプロパティを含めることも可能です。
アイデンティティ証明は原則として、アクターオブジェクトのattachmentプロパティ内に添付する必要があります。
証明生成方法
アイデンティティ証明文書には、以下を含むデータ完全性証明を必ず含めなければなりません:
- 暗号学的証明とその検証に必要なパラメータ
- [Data Integrity]仕様第4.2節「Proofの追加」に準拠して作成すること
- データ完全性証明のverificationMethodプロパティ値は、アイデンティティ証明文書のsubjectプロパティ値と完全に一致している必要があります
生成されたデータ完全性証明は、アイデンティティ証明文書内のproofキーの下に配置しなければなりません。
以下に、did:key識別子にリンクされたアクターオブジェクトの具体例を示します:
{
"@context": [
"https://www.w3.org/ns/activitystreams",
"https://www.w3.org/ns/did/v1",
"https://w3id.org/security/data-integrity/v1",
"https://w3id.org/fep/c390"
],
"type": "Person",
"id": "https://server.example/users/alice",
"inbox": "https://server.example/users/alice/inbox",
"outbox": "https://server.example/users/alice/outbox",
"attachment": [
{
"type": "VerifiableIdentityStatement",
"subject": "did:key:z6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2",
"alsoKnownAs": "https://server.example/users/alice",
"proof": {
"type": "DataIntegrityProof",
"cryptosuite": "eddsa-jcs-2022",
"created": "2023-02-24T23:36:38Z",
"verificationMethod": "did:key:z6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2",
"proofPurpose": "assertionMethod",
"proofValue": "..."
}
}
]
}
注意:上記の例ではeddsa-jcs-2022暗号スイートを使用していますが、この仕様は現時点で安定版ではありません
証明検証方法
処理側実装では、アイデンティティ証明文書のデータ完全性証明を検証することで、その真正性を確認しなければなりません。もし以下のいずれかの条件に該当する場合、当該アイデンティティ証明は無効とみなされます:
- データ完全性証明が検証できない場合
- データ完全性証明のverificationMethodプロパティ値がアイデンティティ証明文書のsubjectプロパティ値と一致しない場合
- アイデンティティ証明のalsoKnownAsプロパティ値がアクターIDと一致しない場合
検証プロセスは[Data Integrity]仕様第4.4節「Proofの検証」に準拠して実施する必要があります。
アイデンティティ間リンク処理
処理側実装では、アイデンティティ証明文書のsubjectプロパティおよびalsoKnownAsプロパティで示される識別子を、同一エンティティに属するものとして扱うべきです。
2つのアクターが同一のsubjectプロパティを持つアイデンティティ証明を持っている場合、それらは同じエンティティの異なるアイデンティティとして扱われるべきです。
実装上の注意点
サーバーはクライアントに対し、常にオリジナル形式でアイデンティティ証明を提供する必要があります。クライアント側で必要に応じて独立した検証を行うことも可能です。
テスト用データセット
fep-c390.featureを参照してください
実装例
参考文献
- Christine Lemmer Webber、Jessica Tallon、ActivityPub、2018年
- Manu Sporny、Dave Longley、Markus Sabadell、Drummond Reed、Orie Steele、Christopher Allen、[分散型識別子(DIDs)v1.0]、2022年
- Dave Longley、Manu Sporny、[検証可能なクレデンシャルデータ完全性 1.0]、2025年
著作権
CC0 1.0 Universal(パブリックドメイン献呈)
法律で許容される範囲内において、本Fediverse Enhancement Proposalの著者らは、当該著作物に関するすべての著作権および関連権利を放棄しています。