Skip to content

Note

このドキュメントは2026-02-27 02:45PLaMo Translation Modelを使用して自動翻訳されました。

Actorオブジェクトは署名鍵をassertionMethodマルチキーとして表現しなければならない

背景

[FEP-521a][]では、Actorオブジェクトがその署名鍵の公開鍵をassertionMethodプロパティにおいて、所定の形式とid URI形式で構成されるMultikeyオブジェクトとして明示的に記述することを規定している。

本テストについて

このテストケースは、FEP-521aで定義された単一の動作仕様への準拠を検証するためのものである。

対象項目

本テストの対象となるのは、ActivityPub Actorオブジェクトの仕様およびFEP-521a拡張に準拠していると主張するあらゆるデータである。

なお、このテストは直接的にActivityPubサーバーには適用されない。 ActivityPubサーバーは0個以上のActorオブジェクトを提供することができる。 大規模なコミュニティ向けのActivityPubサーバーでは、数百ものActivityPub Actorオブジェクトを提供することがある。 単一の人間を対象としたActivityPubサーバーでは、その人物自身のActivityPub Actorオブジェクトのみを提供する場合もある。

本テストはActorオブジェクトに適用されるが、全てのActorオブジェクトがHTTPS URLで直接参照可能というわけではない。 Actorオブジェクトを指し示すURIは、実際のActorオブジェクトそのものとは異なる。 同一のURLが異なるコンテキストにおいて異なるActorオブジェクトを解決する場合があり、また特定のActorオブジェクトがどの文脈においても単一のURLで普遍的に参照可能とは限らない。

入力要件

本テストには以下の入力仕様が必要である:

  • actor - 検証対象のActorオブジェクト
  • データ型: バイナリデータ
  • 制約条件
    • JSONとして解釈される必要がある。
    • JSONとして解析できない場合、テスト結果はinapplicableとしなければならない。
    • ActivityPubコア仕様のテストe7ee491d-88d7-4e67-80c8-f74781bb247cで定義されたActorオブジェクトである必要がある。
    • すなわち、受信箱(inbox)と送信箱(outbox)を備えていること。
    • Actorオブジェクトでない場合、テスト結果はinapplicableとしなければならない。
    • assertionMethod配列を空以外で含む必要がある
    • この条件を満たさない場合、テスト結果はinapplicableとしなければならない。

適用範囲

本テストは入力パラメータactorに直接適用される。

  • actorがActorオブジェクトでない場合、結果は必ずinapplicableとなる。
  • actorがJSONオブジェクトでない場合、結果は必ずinapplicableとなる。
  • actor JSONにtypeプロパティがない場合、結果は必ずinapplicableとなる。
  • actor JSONにassertionMethodプロパティがない場合、結果は必ずinapplicableとなる。

テスト対象項目

  • assertionMethod配列内の各要素は独立したテスト対象であり、以下ではassertionMethod[x]と表記する
  • 各要素はJSONオブジェクトである必要があり、この条件を満たさない場合は警告対象となる(適用不可)
  • Multikeyとして型指定されていない要素は警告対象となる(適用不可)
  • Multikeyとして型指定された各要素は、そのマルチキーとしての有効性に関するテストに合格または不合格となる

期待される結果

  1. assertionMethod[x].id - 文字列でなければならない
  2. assertionMethod[x].controller - 存在する場合、assertionMethod配列の親オブジェクト(すなわちActorオブジェクト)のidプロパティと一致しなければならない
  3. assertionMethod[x].publicKeyMultibase - base58btcエンコード形式で表現され、適切なプレフィックス(この場合、先頭がz)が付いたバイナリ公開鍵の文字列表現である必要がある

前提条件

1. ActorオブジェクトがFEP定義通りの形式で鍵を表現しているか判定する方法

入力actorがFEPで規定された形式に従って鍵を表現しているかどうかを判定するにあたり、以下の条件を満たす必要がある。

  • 入力データは有効なJSONであること
  • JSONとして解析した後の入力データにおいて:
  • assertionMethodプロパティが存在し、0個以上のオブジェクト配列を含むこと
  • 存在する場合、各要素は以下の要件を満たすこと:
    • idプロパティを持ち、これが文字列であること
    • typeプロパティを持ち、これが文字列であること
    • controllerプロパティを持ち、これが文字列であること
    • ...さらにpublicKeyMultibaseプロパティを持ち、これが文字列であること

2. プロパティ値に関する期待値

入力actorが1つ以上の鍵を適切に表現しているかどうかを判定するにあたり、以下の全ての条件を満たさなければならない。

  • 入力データは有効なJSONであること
  • assertionMethod配列内の各要素をJSONとして解析した後:
  • idプロパティを持ち、これがURI形式であること
  • assertionMethod.idプロパティを持ち、これがActorオブジェクト内で一意な文字列であること
  • assertionMethod.typeプロパティを持ち、その値が"Multikey"という文字列か、"Multikey"を含む配列のいずれかであること
  • assertionMethod.controllerプロパティを持ち、その値が親オブジェクトのidプロパティ値と完全に一致すること
  • assertionMethod.publicKeyMultibaseプロパティを持ち、これがbase58btcアルファベットに準拠した文字列、すなわち正規表現[1-9A-HJ-NP-Za-km-z]+に一致する値であること

テストケース例

これらは本テストケースの具体的なテスト事例であり、この仕様を実装した場合に他の実装との一貫性が保たれることを確認するために使用できる。

assertionMethod要素の欠落

入力例

actor:

{
  "type": "Person",
  "inbox": "https://example.com/inbox",
  "outbox": "https://example.com/outbox"
}

テスト結果

  • 判定結果: inapplicable

assertionMethod配列の不正な形式

入力例

actor:

{
    "type": "Person",
    "inbox": "https://example.com/inbox",
    "outbox": "https://example.com/outbox",
    "assertionMethod": "z6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2"
}

テスト対象項目

  • 該当なし
  • 判定結果: inapplicable、警告(不正なassertionMethod配列)

assertionMethod要素の形式不備

入力例

actor:

{
    "type": "Person",
    "inbox": "https://example.com/inbox",
    "outbox": "https://example.com/outbox",
    "assertionMethod": [{
        "inappropriateKey": "z6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2"
    }]
}

テスト対象項目

  • 該当なし
  • 判定結果: inapplicable、警告(不正なassertionMethod要素)

publicKeyMultibase値の形式不備

入力例

actor:

{
    "type": "Person",
    "inbox": "https://example.com/inbox",
    "outbox": "https://example.com/outbox",
    "assertionMethod": {[
        "id": "https://example.com/#ed25519-key",
        "type": "Multikey",
        "controller": "https://example.com/",
        "publicKeyMultibase": "6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2"
    ]}
}

テスト対象項目

  • actor.assertionMethod[0]
  • 判定結果: inapplicable、警告(不正なassertionMethod要素)

有効なActorオブジェクト例

入力例

  • actor:

    {
    "type": "Person",
    "inbox": "https://example.com/inbox",
    "outbox": "https://example.com/outbox",
    "id": "https://example.com/",
    "assertionMethod": [
        {
            "id": "https://example.com/#ed25519-key",
            "type": "Multikey",
            "controller": "https://https://example.com/",  // 不正なURL形式に注意
            "publicKeyMultibase": "6MkrJVnaZkeFzdQyMZu1cgjg7k1pZZ6pvBQ7XJPt4swbTQ2"
        }
    ]
    }
    

テスト結果

  • 判定結果: passed

変更履歴

  • 2024年6月25日 00:00:00.000Z - 独立したパッケージとして実装し、FEPリポジトリに提出
  • 2024年4月11日 21:41:20.725Z - 最初のドラフト作成 by bumblefudge

課題一覧