Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AT Protocol (BlueSky Social)仕様解説 ~ W3C DID仕様を添えて ~

Segment
March 17, 2023

AT Protocol (BlueSky Social)仕様解説 ~ W3C DID仕様を添えて ~

Bluesky/AT Protocol 勉強会 #0
https://428lab.connpass.com/event/277114/

Segment

March 17, 2023
Tweet

More Decks by Segment

Other Decks in Programming

Transcript

  1. AT Protocol (BlueSky Social)仕様解説
    ~ W3C DID仕様を添えて ~
    Bluesky/ATProtocol 勉強会#0
    Segment(gpsnmeajp)
    普段は電子工作したり、VR向けツール作ったりしてます

    View Slide

  2. Q. BlueSkyって何?

    View Slide

  3. Q. BlueSkyって何?
    A. 分散型SNSの問題点をいい塩梅で
    いいとこ取りしようと頑張ってる
    未完成品のSNSサービス & プロトコル

    View Slide

  4. Q. BlueSkyって何?
    A. 分散型SNSの問題点をいい塩梅で
    いいとこ取りしようと頑張ってる
    未完成品のSNSサービス & プロトコル
    まだ未完成!!いろいろ未整備!
    でもどんどん進化中!

    View Slide

  5. 今回文字が多いです、ゴメンナサイ
     説明には誤りがあることがあります
     開発者の方々に割と日々ツッコミを受けています
     公式ドキュメントも発展途上です
     ソースコード読みきれない~

    View Slide

  6. まずは(5分)

    View Slide

  7. 中央集権の問題点
     透明性のないサービス運営
     アルゴリズムの押し付け
     UIの押し付け
     モデレーションに対する不満
     APIの有料化・開発者冷遇
     広告
     凍結
     炎上
     その他見たくないものが目に入る
     人数と反応があんまり一致しない
    投稿 購読・
    配信
    購読・
    配信
    独自API

    View Slide

  8. 再確認: Twitterはすげえぞ
     国内ユーザー数: 約6千万人
     全世界ユーザー数: 約4億人 (地球人口: 約78億人=5%)
     利用料金: 基本無料 (一部機能のみ有料) + 広告
     公式スマートフォンアプリ(iOS, Android)、Webアプリあり
     API 無料開放していた
     各種政府機関や報道機関が使用するほどの高いサービス安定性
     日夜押し寄せるBot、通報、詐欺、DMCA、ヘイトその他への対応
     AIによる自動凍結システムなどによる治安維持
    出典: https://www.ownly.jp/sslab/sns-user-detail

    View Slide

  9. 再確認: Twitterはすげえぞ
     国内ユーザー数: 約6千万人
     全世界ユーザー数: 約4億人 (地球人口: 約78億人=5%)
     利用料金: 基本無料 (一部機能のみ有料) + 広告
     公式スマートフォンアプリ(iOS, Android)、Webアプリあり
     API 無料開放していた
     各種政府機関や報道機関が使用するほどの高いサービス安定性
     日夜押し寄せるBot、通報、詐欺、DMCA、ヘイトその他への対応
     AIによる自動凍結システムなどによる治安維持
    出典: https://www.ownly.jp/sslab/sns-user-detail
    これが無料、これが基準

    View Slide

  10. これが無料、これが基準
    再確認: Twitterはすげえぞ
     国内ユーザー数: 約6千万人
     全世界ユーザー数: 約4億人 (地球人口: 約78億人=5%)
     利用料金: 基本無料 (一部機能のみ有料) + 広告
     公式スマートフォンアプリ(iOS, Android)、Webアプリあり
     API 無料開放していた
     各種政府機関や報道機関が使用するほどの高いサービス安定性
     日夜押し寄せるBot、通報、詐欺、DMCA、ヘイトその他への対応
     AIによる自動凍結システムなどによる治安維持
    出典: https://www.ownly.jp/sslab/sns-user-detail

    View Slide

  11. インス
    タンス
    A
    投稿 購読・配信
    購読・配信
    インス
    タンス
    B
    リモートフォロー
    配信
    ActivityPub
    MastodonAPI
    MisskeyAPI
    連合
    Relay
    インス
    タンス
    D
    インス
    タンス
    C
    インス
    タンス
    E
    みんなで分担しよう
    選択の自由を得よう
    嫌なら引っ越せるように
    連合分散型(分権型) : 相互接続SNS

    View Slide

  12. 連合分散型(分権型) : 相互接続SNS
    インス
    タンス
    A
    投稿 購読・配信
    購読・配信
    インス
    タンス
    B
    リモートフォロー
    配信
    ActivityPub
    MastodonAPI
    MisskeyAPI
    連合
    Relay
    インス
    タンス
    D
    インス
    タンス
    C
    インス
    タンス
    E
    みんなで分担しよう
    選択の自由を得よう
    嫌なら引っ越せるように
    中央集権と
    同じ構造を内包
    ・モデレーションできる
    ・人が集中する
    ・ドメインブロック
    ・責任の集中

    View Slide

  13. インス
    タンス
    A
    投稿 購読・配信
    購読・配信
    インス
    タンス
    B
    リモートフォロー
    配信
    ActivityPub
    MastodonAPI
    MisskeyAPI
    連合
    Relay
    インス
    タンス
    D
    インス
    タンス
    C
    インス
    タンス
    E
    中央集権と
    同じ構造を内包
    ・モデレーションできる
    ・人が集中する
    ・ドメインブロック
    ・責任の集中
    引っ越しには
    元サーバーの協力が必要
    投稿は持っていけない
    みんなで分担しよう
    選択の自由を得よう
    嫌なら引っ越せるように
    連合分散型(分権型) : 相互接続SNS

    View Slide

  14. Relay
    Server
    投稿
    イベント中継
    フィルタ
    保持 & 過去投稿の再配信
    Websocket API
    フィルタ登録
    配信
    Nostr
    (Websocket)
    Relay
    Server
    Relay
    Server
    Relay
    Server
    フィルタ登録
    配信
    Relay
    Server
    Relay
    Server
    鍵ペア生成
    署名
    テキスト投稿
    メタ情報投稿
    フィルタ登録
    配信要求
    フォローリスト投稿
    表示(重複排除)
    フォロー=公開鍵リスト作る
    無責任分散(多重化) : 公開鍵が唯一我が身の証明
    所属なし(身軽)
    フォロワー引継ぎ
    多重化
    統制不可能

    View Slide

  15. Relay
    Server
    投稿
    イベント中継
    フィルタ
    保持 & 過去投稿の再配信
    Websocket API
    フィルタ登録
    配信
    Nostr
    (Websocket)
    Relay
    Server
    Relay
    Server
    Relay
    Server
    フィルタ登録
    配信
    Relay
    Server
    Relay
    Server
    鍵ペア生成
    署名
    テキスト投稿
    メタ情報投稿
    フィルタ登録
    配信要求
    フォローリスト投稿
    表示(重複排除)
    フォロー=公開鍵リスト作る
    無責任分散(多重化) : 公開鍵が唯一我が身の証明
    所属なし(身軽)
    フォロワー引継ぎ
    多重化
    統制不可能
    データ保証なし
    鍵漏洩救済なし
    なりすまし
    スパム
    ブロック不可

    View Slide

  16. トレードオフ
    集権にすると 縛られる & 利便性高い
    完全に分散すると 無法地帯 & 自己責任
    うまく組み合わせて両立できないか

    View Slide

  17. BlueSkyの目指すところ
    (5分)

    View Slide

  18. 理念
     スケーラブルな連合
     アルゴリズム選択
     アカウントポータビリティ
     オープンで拡張性のあるプロトコル
     WWWがATProtocol ブラウザがBlueSky
    既存の問題を解決
    ※ちなみにTwitter社が関わっており、Twitterの資金でスタートした、Twitterから独立したプロジェクト。
    Twitterそしてジャックが分散・自由・オープンを考えていたことがわかります。

    View Slide

  19. その他IPFSなど
    Repo
    Repo
    PDS
    Repo
    連合分散型(分権型) + 自己認証(🔑)
    PDS
    投稿 フォロー
    Feed取得
    XRPC
    ATProtocol
    XRPC
    ATProtocol
    DID PLC
    検索・おすすめ
    統計
    名前解決
    IPLD
    Repo
    🔑
    IPLD
    Repo
    🔑
    IPLD
    Repo
    🔑
    回復鍵
    回復鍵
    回復鍵
    🔑
    🔑
    🔑
    🔑
    署名鍵
    🔑
    🔑
    🔑
    🔑署名鍵
    🔒
    🔒
    🔒
    クローリング
    インデクサー
    クローリング
    インデクサー
    フォロー
    Feed取得
    IPLD
    Repo
    Repo
    Repo
    Repo
    Repo
    Repo

    View Slide

  20. 具体的になにができるのか?
     所属サーバーと、検索・おすすめシステムが分離
    → 好きに選べる・好きに見れる
     データを所属先の同意なく自分で所有・移動できる
    → そのための鍵とローカルリポジトリ
     名前(Handle)やIDを所属とは関係ない独立したものにできる
    → 引っ越してもフォローや関係が切れない
     AT Protocolベースのソーシャルアプリを自作できる
    → BlueSkyは実装のひとつ

    View Slide

  21. Mastodon等従来の連合との違いは?
     オフライン引っ越しができる
     (予めカスタムドメインを使用すると)名前を持ち運べる
     フォロー関係を(元のサーバーに頼らず)維持できる
     ローカルに依存せず横断的に閲覧・検索できる
     おすすめアルゴリズムなどを選択できる
    PDS
    IPLD
    Repo
    クローリング
    インデクサー
    DID PLC

    View Slide

  22. Nostrとの違いは?
     ユーザー名とパスワードでログインできる
     鍵の紛失に怯えなくて済む(ローテーション可)
     クライアント使用時に鍵の漏出に怯えなくて済む
     過去の発言や相互接続はPDS(サーバー)が保証してくれる
     通信量が爆発的に発生しない
     スパムなどへの対策が期待しやすい
    ❌モデレーションや凍結は発生する
    ❌PDSが単一障害点になる(not 多重化)
    PDS
    IPLD
    Repo
    🔑
    🔑
    Repo
    データ is You

    View Slide

  23. AT Protocol/Bskyの
    仕組みと用語(8分)

    View Slide

  24. 名前解決
    IPLD
    Repo
    PDS
    (個人データサーバー)
    参照
    保持
    DID PLC
    (名前解決サーバー)

    View Slide

  25. DID - Decentralized Identifier
    分散識別子/分権識別子/非中央集権型識別子
     W3Cの定義する識別子。
     ユーザーは1つの不変なIDで表します。
    did:plc:ma37ez4i3gmwkvwpytsqeepp
    これはデータリポジトリ(その人のすべての履歴)と
    紐づいている、所属によらない唯一無二の分散IDです。
    これにより、どこに居てもその人であることが決まります。
    (→フォロー関係などが持ち運べる) ※Nostrで言うところの秘密鍵に相当

    View Slide

  26. Handle
     ATProtocolで、その人を表す名前(いわゆるID)に相当
     @gpsnmeajp.bsky.social
     @gpsnmeajp.boobee.blue
     @gpsnmeajp.achetaria.com
    いつでも変えられ、いつでも変わりうる表示名です。
    人間が取り扱うための名前です。
    (ログインや名前解決にも使用する)
    所属サーバーから借りる
    自分のドメインの
    DNSレコードで証明する
    ※Nostrで言うところのNIP-05に相当

    View Slide

  27. DID Document と plc.directory
     DIDはIDですが、それだけだと紐づけができません。
    付随情報が記載されているのがDID Documentです。
    ・その人を証明する公開鍵
    ・その人はどのPDS(所属サーバー)に所属しているのか
    ・その人のHandle
    この情報はPDS(所属サーバー)にあっては意味がないため
    独立して運営される名前解決サーバー*に置かれます。
    現在運営されているのはplc.directory
    *DNSに相当
    ※Nostrで言うところの/.well-known/nostr.jsonに相当
    ※これにより鍵ローテーションが可能になります

    View Slide

  28. DID Placeholder (did:plc)
     DIDは生成・管理の方法はたくさんありますが
    ATProtocolとして提唱しているのがdid:plcです。
     データリポジトリの最初のハッシュと紐づいています。
     鍵ローテーションが可能で、2種類の鍵
    署名鍵と、回復鍵の2つでローテーションできます。
     ブロックチェーンではなくシンプルで堅牢な
    サーバーで管理されます。(plc.directoryなど)
    IPLD
    Repo
    did:plc
    zkxpsaopwdwddwpo
    edwpqaidfeaws

    View Slide

  29. データリポジトリ
     AT Protocolでは、ユーザーの投稿や操作の履歴は
    データリポジトリに保管されます
     署名鍵で署名しなければ書き込めません。
     すべての情報は連鎖的に記録され、検証可能です。
     サーバー上に置かれますが、誰でも取り出し可能で、
    ローカルに保存しておくことで引っ越し可能になります。
    ルート
    コミット
    ルート
    コミット
    ルート
    コミット
    CID: コンテンツID
    タイムスタンプ
    マークル検索ツリー
    署名 署名 署名
    Repo
    署名済み
    (個人)データ
    リポジトリ
    Re
    po
    Re
    po
    Re
    po
    Re
    po Re
    po
    Re
    po
    Re
    po
    Re
    po

    View Slide

  30. PDS(個人データサーバー)
    クローリングインデクサー
    PDS : スモールワールド
     データの保管・署名・通信を担うサーバーです。
     個人間のイベントを扱うためのシステムです。
     ユーザーの所属・認証・フィード・APIの提供などを行います。
     ここに署名鍵を預けます。(ユーザーは回復鍵を手元に持ちます)
    クローリングインデクサー : ビッグワールド
     検索・統計・おすすめなどの大規模処理を担当します。
     ユーザーは複数あるサービスを自由に選択できます。

    View Slide

  31. その他IPFSなど
    Repo
    Repo
    PDS
    Repo
    PDS
    投稿 フォロー
    Feed取得
    XRPC
    ATProtocol
    XRPC
    ATProtocol
    DID PLC
    検索・おすすめ
    統計
    名前解決
    IPLD
    Repo
    🔑
    IPLD
    Repo
    🔑
    IPLD
    Repo
    🔑
    回復鍵
    回復鍵
    回復鍵
    🔑
    🔑
    🔑
    🔑
    署名鍵
    🔑
    🔑
    🔑
    🔑署名鍵
    🔒
    🔒
    🔒
    クローリング
    インデクサー
    クローリング
    インデクサー
    フォロー
    Feed取得
    IPLD
    Repo
    Repo
    Repo
    Repo
    Repo
    Repo
    名前解決やデータの流れ

    View Slide

  32. 現状と今後 (2分)

    View Slide

  33. まだ未完成
     連合はない
     検索もない(もうすぐつく)
     Androidアプリもない(非公式はあるヨ)
     クローズドベータ
     モデレーション機能もない
     掲げている理想の機能の大半はない(が原型はある)
     仕様変更はある
    夢を語りながら楽しんでいきましょう
    とりあえず技術的に試したいだけの
    場合は有志サーバーの
    boobee.blue
    おすすめ

    View Slide

  34. もっと詳しく知りたい場合は
     AT Protocol (BlueSky Social)仕様解説
    ~ W3C DID仕様を添えて ~ Qiita
    https://qiita.com/gpsnmeajp/items/eb665d639f088b85454e
     The AT Protocol https://atproto.com/
     Bluesky公式ブログ https://blueskyweb.xyz/
     Github https://github.com/bluesky-social/atproto
     BlueSky Scrapbox https://scrapbox.io/Bluesky/
     MatrixのBluesky Devルーム

    View Slide