- ATプロトコルは分散型ソーシャルネットワークの基盤となるプロトコルで、すべてのデータはat:// URIで識別される
- at:// URIはデータの作成者(ユーザー)を authority として指定し、そのデータが実際にホスティングされている場所は別途見つける必要がある
- URIの解決手順は、ハンドルをアイデンティティ(DID)に変換し、DIDドキュメントを参照してホスティングサーバーを確認し、そのサーバーにJSONデータをリクエストする順序で進む
- 2種類のDID方式(did:web、did:plc)がサポートされ、それぞれ長所・短所とデータ保持方式に違いがある
- このアプローチはデータの所有権がユーザーにあることを強調し、ハンドルやホスティングが変わってもつながりが維持される永続性を保証する
ATプロトコル、at:// URI、そしてソーシャルデータのアイデンティティ解決プロセス
# ATプロトコルと at:// URI の基本構造
- ATプロトコルは分散した複数のサーバーが特定の標準に従って通信するようにし、それら全体を「atmosphere」と呼ぶ
- atmosphere 内の各データには固有の at:// で始まる URI が割り当てられ、この URI は一種の JSON データへのリンクの役割を果たす
- 従来の URI 構造と異なり、ATプロトコルでは**データの作成者(ユーザー)**が URI の authority に設定される
- たとえば、at://ruuuuu.de/app.bsky.feed.post/3lzy2ji4nms2z という形式では、ruuuuu.de がそのデータの所有者であることを示す
- 実際のデータがホスティングされている物理サーバーは URI に直接含まれず、これを見つけるには追加の解決手順が必要になる
# at:// URI 解決手順の3段階
- at:// URI を実際のデータ(JSON)にマッピングするには3段階が必要
- ハンドル(ruuuuu.de など)をアイデンティティ(DID: Decentralized Identifier)に変換
- ハンドルはユーザー識別のための別名であり、変更できる
- 不変のグローバル ID である DID に変換する必要がある
- 変換方法:
- DIDドキュメント(DID Document)を参照してデータのホスティング情報を確認
- ホスティングサーバーの API を通じて JSON データをリクエスト
- com.atproto.repo.getRecord エンドポイントに at:// の各部分をパラメータとして渡してデータをリクエスト
- 返される JSON が at:// URI に対応する実際のデータ
# 例を通じた解決プロセスの説明
- 例: at://ruuuuu.de/app.bsky.feed.post/3lzy2ji4nms2z
- ハンドルが変わっても、DID ベースの at:// URI(permalink)を使えば、アカウントとデータのつながりは維持される
# DID方式: did:web と did:plc の違い
- did:web:
- 自分のドメインを管理・認証できる
- ドメインを制御する権限を失うと、ID 全体を失う可能性がある
- did:plc:
- PLC(Public Ledger of Credentials)が ID の運用主体
- ドメインには帰属しないが、PLC 運営者が更新を拒否するなど、限定的な制御の可能性は存在する
- すべての変更履歴はハッシュで検証・追跡可能
# アイデンティティ、ホスティング、データの分離と永続性
- at:// はアイデンティティとデータホスティングを分離し、ユーザーデータのポータブル化と永続的リンクの生成を可能にする
- Handle(別名)はいつでも変更でき、ホスティングサーバーも同様に移転できる
- DID(アイデンティティ)は不変であり、これに基づく at:// URI は永続的なパーマリンクとして利用できる
- DIDドキュメントには、handle の所有証明、署名検証鍵、ホスティング情報がすべて含まれ、信頼性と柔軟性を保証する
# 実際の応用と開発に関する言及
- 現実には、大半の AT ベースのアプリは Websocket などでデータを push 受信し、内部 DB に集約している
- それでも at:// URI の解決方法を理解することは、ネットワーク特性の理解とデータ移植性の確保に不可欠
- at:// の仕組みは HTTP、DNS、JSON の上にソーシャルネットワークの抽象化を提供し、データ所有権がユーザーにあることを技術的に実装している
# 結論
- ATプロトコルと at:// URI は、ソーシャルデータのアイデンティティ、接続性、永続性を技術的にさらに進化させる
- 開発者は、ハンドル解決、DID の活用、DIDドキュメントの構造、実際のデータリクエスト方法など中核ワークフローの理解が必要
- この構造により、自分のコンテンツとアイデンティティ、そしてホスティング場所のあいだに柔軟性と所有権を得られる
1件のコメント
Hacker Newsの意見
最近のATProto関連の投稿に触発されてbskyに登録してみたが、見えるのは延々と続くアメリカ政治の話ばかりだった。"こういう投稿を減らす"を押し続けてもほとんど効果がなく、これがこのプラットフォームの本質なのか気になる。海外の妙な論争についてのありきたりな意見ばかり見せられるのは精神的につらい
このプロジェクトがアイデンティティやデータ所有権の問題を本当に意味のある形で解決しているのか、まだ分からない。アイデンティティの面では、自分のドメインを使うか、他人のドメイン(Blueskyなど)を使うかの違いしかない。ほとんどの人はドメインを持っていないので、結局その人のアイデンティティは第三者が握ることになる。データも同じで、Blueskyや他のサーバーでアカウントがブロックされればリポジトリも閉じられ、データを別の場所へ移す機会すら失う。これはメールと同じで、自分のドメインとサーバーがなければ実質的には何もコントロールできない
Danの説明は毎回すばらしい。最近のBlueskyがPLCの運営権を移管するというニュースとも重なってタイムリーだ。私たちのチームも fair.pm でWordPressプラグインの分散配布のために同じDIDシステムを採用した(いわばApp Storeのようなパッケージ管理)。Bluesky側(特にBryan)にはかなり助けてもらい、私たちはlibsodiumを使えるようEd25519鍵のサポートまで実現した。私たちのプロトコルはDIDとBlueskyのstackable moderationの上に設計中だが、atproto自体は直接使っていない。重要なのはDIDがW3C標準であり、PLCがatprotoに縛られていないことだ
at:// を解決するには plc.directory にGETリクエストを送る必要があり、この時点でシステムが100%中央集権モデルに変わってしまうように見える。少なくとも複数の信頼ディレクトリをプロトコルから分離して置けるようにしてほしかった(DNSルートやCAのように)
at:// リンクを保存するすべてのサーバーは、結局DNS/HTTPSを経由して正式な(permalink)表現を見つけなければならないように思える。DNSSECがきちんと機能しないと、この構造自体が少し脆弱に見える。まだ深く考えたわけではないが、すぐ思いつく懸念としては、DNSポイズニングのような問題で攻撃者が自分の名前で投稿できてしまうのではないか、ということだ(公開鍵がDNSから取得したDIDに含まれているので)
記事ではDID変更履歴に使われる鍵についての情報が不足している。例えば自分が foobar.bsky.social だとしても、自分で鍵をアップロードした記憶も、ダウンロードするよう案内された記憶もない。鍵が正確にどこにあり、誰が所有し、どういうタイミングで使われるのか気になる。またDIDが plc.directory にあるなら、そのサイトの運営者が私のDIDを勝手に上書きしてアイデンティティを乗っ取れないようにする仕組みは何なのかも知りたい
at:// というコンセプトは興味深いが、実際にデータ所有ベースのシステムで起こりうる問題も心配だ。例えばユーザーがデータを持っているなら、いつでも内容を好きに変更したり削除したりできる。最初はまともな文章を書いておいて、後から悪意を持って改変することもできる。昔の投稿ハッシュを保存して改変防止しても、新しいサービスはその記録を知らないかもしれない。また、いいね(upvote)のようなものの追跡も難しいし、みんながそれぞれオブジェクトとして保存するなら、誰がアップボートしたかを見つけるのも大変そうだ。偽アカウントを作って自分の投稿だけを延々と上げても制限がなさそうに見える。最後に、さまざまなプラットフォームから流入する膨大な数のアカウントがあると、スパムや悪意ある活動のモデレーションは不可能ではないか。各アカウントが自分のデータを自分で管理する前提で、透明性、責任、モデレーション、スパム対策など、システム設計として成立するのかよく分からない
さまざまな暗号系プロトコルが分散化を語りながら、結局は一つのプラットフォームに縛られる現実と似ているように感じる
"at:// URIでJSONをどう見つけるのか"という構造的な疑問がある。説明書を読んでも、なぜその『JSON』が必要なのかぴんと来ない。個人的にはこういうやり方はしっくりこない
このプロトコルは巨大なパブリックKafkaトピックのような役割を果たすのか気になる。例えば新しいウェブアプリを作るときにデータを自前で保存せず、すべてのユーザーが各自の空間にデータを保存し、それを聞くリスナーを置いて、プロトコルがデータ伝播を保証するのでアプリ側はそれを購読してキャッシュすればよい、というモデルではないかという質問だ。概念的には面白いが、更新取りこぼしを防ぐためのオフセットや、スケールのためのパーティションのようなKafkaの概念が適用されるのかも気になる