コンテンツにスキップ

委譲の構造

ARK に、保証を配る中央の権威は無い。あるのは受け渡される名前空間で、受け取った側が その都度、約束を引き受ける。arkhe の台帳は、その連鎖の記録である。

flowchart TD
    RA["NAAN の保有者<br/><small>例: 国の研究組織</small>"]
    RA -->|"/x9 を切り出す"| I1["組織 A"]
    RA -->|"/y2 を切り出す"| I2["組織 B"]
    RA -->|"/z1 は外部へ委譲"| EX["外部 minter"]
    I1 --> C1["リポジトリ"]
    I1 --> C2["一括投入バッチ"]
    I2 --> C3["リポジトリ"]

連鎖を降りていくものは 2 つあり、同じものではない。

  • 名前空間 — どの名前を作ってよいか
  • 約束 — 作ったものについて何を保つか

到達範囲

主体(ログインする人も、鍵を持つシステムも)は必ず到達範囲を持つ。これは 登録の属性であって、リクエストやトークンでは広がらない

system 全 NAAN。名前空間を配る側の運用者
naan 1 つの NAAN の配下すべて。その NAAN を預かる組織
manager 1 組織ぶん。1 つの shoulder に固定することもできる

配られた側が、配った側より広く届くことはない。 NAAN 管理者はシステム管理者を 作れないし、組織管理者は他組織の主体を作れない。

なぜ shoulder をリクエストで受け取らないか

arklet は {naan, shoulder} を本文で受けて NAAN 単位でしか認可しておらず、 設定ミスでも詐称でも他組織の名前空間に届いた。arkhe は shoulder を 主体から引く。これで越境が塞がり、同時に多数組織の振り分けも片づく。

shoulder の状態

一度配った名前空間は取り戻せない。だから「押さえてあるが使わせない」「もう新規は 採らない」を、削除ではなく状態として持つ必要がある。

stateDiagram-v2
    [*] --> reserved: --reserve で作成
    [*] --> active: 作成
    reserved --> active
    reserved --> delegated
    active --> delegated
    active --> retired
    delegated --> active
    delegated --> retired
    retired --> [*]: 既存の ARK は解決し続ける

retired からは戻れない。引退した名前空間を再開すると、その間に外部が同じ名前を 使った可能性を否定できない。他人が既に使った名前を配り直すことは、NR がまさに 禁じていることである。

delegated には行き先(minter)が要る。採番が外で行われるなら、採番要求には どこへ行けばよいかを返さなければならない。arkhe は 307 に行き先を添えて返し、 プロキシはしない——代理で呼ぶと、応答が失われたときに「向こうでは採番されたが こちらは知らない ARK」が生まれる。

組織は現れ、去る

  • 承継 — 組織が別の組織に統合される。shoulder が移り、ARK は何も変わらない。 変わるのは「今後誰が採番するか」だけ。
  • 離脱 — 組織は存続するが、この基盤を離れる。新規採番は止め、解決は永久に続ける。 転送先を組織自身のリゾルバへ向け直せば、以後こちらに作業を求めずに済む。

どちらも承継と離脱で扱う。