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 full-size slide

  2. Q. BlueSkyって何?

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  6. まずは(5分)

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size 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 full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size 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 full-size slide

  32. 現状と今後 (2分)

    View full-size slide

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

    View full-size 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 full-size slide