$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
AT Protocol (BlueSky Social)仕様解説 ~ W3C DID仕様を添えて ~
Search
Segment
March 17, 2023
Programming
3
3.5k
AT Protocol (BlueSky Social)仕様解説 ~ W3C DID仕様を添えて ~
Bluesky/AT Protocol 勉強会 #0
https://428lab.connpass.com/event/277114/
Segment
March 17, 2023
Tweet
Share
More Decks by Segment
See All by Segment
Nostr(ノスター)を始めよう
gpsnmeajp
0
260
mocopiを簡易ジェスチャー認識音楽プレイヤーに使ってみた
gpsnmeajp
0
220
分散型SNS nostr 仕組み解説
gpsnmeajp
2
2.1k
クライアントを作ってみてわかったこと
gpsnmeajp
0
280
Nostr概説
gpsnmeajp
0
920
Other Decks in Programming
See All in Programming
CSC305 Lecture 25
javiergs
PRO
0
110
複雑な仕様に立ち向かうアーキテクチャ
myohei
0
130
かんたんデザイン編集やってみた~「完全に理解した」までの道のり~
morit4ryo
1
120
Modular Monolith Monorepo ~シンプルさを保ちながらmonorepoのメリットを最大化する~
yuisakamoto
11
4k
Haze - Real time background blurring
chrisbanes
1
440
ソフトウェアの振る舞いに着目し 複雑な要件の開発に立ち向かう
rickyban
0
810
Serverless苦闘史
mosh_inc
0
140
DevFest Tokyo 2025 - Flutter のアプリアーキテクチャ現在地点
wasabeef
4
590
PipeCDの歩き方
kuro_kurorrr
4
140
Cursorでアプリケーションの追加開発や保守をどこまでできるか試したら得るものが多かった話
drumnistnakano
0
280
MoQとか勉強会#2 発表資料
yuki_uchida
2
620
React + Tauriでデスクトップアプリ開発に入門してみた
ynishimura0922
0
210
Featured
See All Featured
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
169
50k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
Writing Fast Ruby
sferik
627
61k
GraphQLとの向き合い方2022年版
quramy
44
13k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.9k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
27
2.1k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
Agile that works and the tools we love
rasmusluckow
328
21k
A better future with KSS
kneath
238
17k
GitHub's CSS Performance
jonrohan
1030
460k
Transcript
AT Protocol (BlueSky Social)仕様解説 ~ W3C DID仕様を添えて ~ Bluesky/ATProtocol 勉強会#0
Segment(gpsnmeajp) 普段は電子工作したり、VR向けツール作ったりしてます
Q. BlueSkyって何?
Q. BlueSkyって何? A. 分散型SNSの問題点をいい塩梅で いいとこ取りしようと頑張ってる 未完成品のSNSサービス & プロトコル
Q. BlueSkyって何? A. 分散型SNSの問題点をいい塩梅で いいとこ取りしようと頑張ってる 未完成品のSNSサービス & プロトコル まだ未完成!!いろいろ未整備! でもどんどん進化中!
今回文字が多いです、ゴメンナサイ 説明には誤りがあることがあります 開発者の方々に割と日々ツッコミを受けています 公式ドキュメントも発展途上です ソースコード読みきれない~
まずは(5分)
中央集権の問題点 透明性のないサービス運営 アルゴリズムの押し付け UIの押し付け モデレーションに対する不満
APIの有料化・開発者冷遇 広告 凍結 炎上 その他見たくないものが目に入る 人数と反応があんまり一致しない 投稿 購読・ 配信 購読・ 配信 独自API
再確認: Twitterはすげえぞ 国内ユーザー数: 約6千万人 全世界ユーザー数: 約4億人 (地球人口: 約78億人=5%)
利用料金: 基本無料 (一部機能のみ有料) + 広告 公式スマートフォンアプリ(iOS, Android)、Webアプリあり API 無料開放していた 各種政府機関や報道機関が使用するほどの高いサービス安定性 日夜押し寄せるBot、通報、詐欺、DMCA、ヘイトその他への対応 AIによる自動凍結システムなどによる治安維持 出典: https://www.ownly.jp/sslab/sns-user-detail
再確認: Twitterはすげえぞ 国内ユーザー数: 約6千万人 全世界ユーザー数: 約4億人 (地球人口: 約78億人=5%)
利用料金: 基本無料 (一部機能のみ有料) + 広告 公式スマートフォンアプリ(iOS, Android)、Webアプリあり API 無料開放していた 各種政府機関や報道機関が使用するほどの高いサービス安定性 日夜押し寄せるBot、通報、詐欺、DMCA、ヘイトその他への対応 AIによる自動凍結システムなどによる治安維持 出典: https://www.ownly.jp/sslab/sns-user-detail これが無料、これが基準
これが無料、これが基準 再確認: Twitterはすげえぞ 国内ユーザー数: 約6千万人 全世界ユーザー数: 約4億人 (地球人口:
約78億人=5%) 利用料金: 基本無料 (一部機能のみ有料) + 広告 公式スマートフォンアプリ(iOS, Android)、Webアプリあり API 無料開放していた 各種政府機関や報道機関が使用するほどの高いサービス安定性 日夜押し寄せるBot、通報、詐欺、DMCA、ヘイトその他への対応 AIによる自動凍結システムなどによる治安維持 出典: https://www.ownly.jp/sslab/sns-user-detail
インス タンス A 投稿 購読・配信 購読・配信 インス タンス B リモートフォロー
配信 ActivityPub MastodonAPI MisskeyAPI 連合 Relay インス タンス D インス タンス C インス タンス E みんなで分担しよう 選択の自由を得よう 嫌なら引っ越せるように 連合分散型(分権型) : 相互接続SNS
連合分散型(分権型) : 相互接続SNS インス タンス A 投稿 購読・配信 購読・配信 インス
タンス B リモートフォロー 配信 ActivityPub MastodonAPI MisskeyAPI 連合 Relay インス タンス D インス タンス C インス タンス E みんなで分担しよう 選択の自由を得よう 嫌なら引っ越せるように 中央集権と 同じ構造を内包 ・モデレーションできる ・人が集中する ・ドメインブロック ・責任の集中
インス タンス A 投稿 購読・配信 購読・配信 インス タンス B リモートフォロー
配信 ActivityPub MastodonAPI MisskeyAPI 連合 Relay インス タンス D インス タンス C インス タンス E 中央集権と 同じ構造を内包 ・モデレーションできる ・人が集中する ・ドメインブロック ・責任の集中 引っ越しには 元サーバーの協力が必要 投稿は持っていけない みんなで分担しよう 選択の自由を得よう 嫌なら引っ越せるように 連合分散型(分権型) : 相互接続SNS
Relay Server 投稿 イベント中継 フィルタ 保持 & 過去投稿の再配信 Websocket API
フィルタ登録 配信 Nostr (Websocket) Relay Server Relay Server Relay Server フィルタ登録 配信 Relay Server Relay Server 鍵ペア生成 署名 テキスト投稿 メタ情報投稿 フィルタ登録 配信要求 フォローリスト投稿 表示(重複排除) フォロー=公開鍵リスト作る 無責任分散(多重化) : 公開鍵が唯一我が身の証明 所属なし(身軽) フォロワー引継ぎ 多重化 統制不可能
Relay Server 投稿 イベント中継 フィルタ 保持 & 過去投稿の再配信 Websocket API
フィルタ登録 配信 Nostr (Websocket) Relay Server Relay Server Relay Server フィルタ登録 配信 Relay Server Relay Server 鍵ペア生成 署名 テキスト投稿 メタ情報投稿 フィルタ登録 配信要求 フォローリスト投稿 表示(重複排除) フォロー=公開鍵リスト作る 無責任分散(多重化) : 公開鍵が唯一我が身の証明 所属なし(身軽) フォロワー引継ぎ 多重化 統制不可能 データ保証なし 鍵漏洩救済なし なりすまし スパム ブロック不可
トレードオフ 集権にすると 縛られる & 利便性高い 完全に分散すると 無法地帯 & 自己責任 うまく組み合わせて両立できないか
BlueSkyの目指すところ (5分)
理念 スケーラブルな連合 アルゴリズム選択 アカウントポータビリティ オープンで拡張性のあるプロトコル
WWWがATProtocol ブラウザがBlueSky 既存の問題を解決 ※ちなみにTwitter社が関わっており、Twitterの資金でスタートした、Twitterから独立したプロジェクト。 Twitterそしてジャックが分散・自由・オープンを考えていたことがわかります。
その他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
具体的になにができるのか? 所属サーバーと、検索・おすすめシステムが分離 → 好きに選べる・好きに見れる データを所属先の同意なく自分で所有・移動できる → そのための鍵とローカルリポジトリ
名前(Handle)やIDを所属とは関係ない独立したものにできる → 引っ越してもフォローや関係が切れない AT Protocolベースのソーシャルアプリを自作できる → BlueSkyは実装のひとつ
Mastodon等従来の連合との違いは? オフライン引っ越しができる (予めカスタムドメインを使用すると)名前を持ち運べる フォロー関係を(元のサーバーに頼らず)維持できる ローカルに依存せず横断的に閲覧・検索できる
おすすめアルゴリズムなどを選択できる PDS IPLD Repo クローリング インデクサー DID PLC
Nostrとの違いは? ユーザー名とパスワードでログインできる 鍵の紛失に怯えなくて済む(ローテーション可) クライアント使用時に鍵の漏出に怯えなくて済む 過去の発言や相互接続はPDS(サーバー)が保証してくれる
通信量が爆発的に発生しない スパムなどへの対策が期待しやすい ❌モデレーションや凍結は発生する ❌PDSが単一障害点になる(not 多重化) PDS IPLD Repo 🔑 🔑 Repo データ is You
AT Protocol/Bskyの 仕組みと用語(8分)
名前解決 IPLD Repo PDS (個人データサーバー) 参照 保持 DID PLC (名前解決サーバー)
DID - Decentralized Identifier 分散識別子/分権識別子/非中央集権型識別子 W3Cの定義する識別子。 ユーザーは1つの不変なIDで表します。 did:plc:ma37ez4i3gmwkvwpytsqeepp
これはデータリポジトリ(その人のすべての履歴)と 紐づいている、所属によらない唯一無二の分散IDです。 これにより、どこに居てもその人であることが決まります。 (→フォロー関係などが持ち運べる) ※Nostrで言うところの秘密鍵に相当
Handle ATProtocolで、その人を表す名前(いわゆるID)に相当 @gpsnmeajp.bsky.social @gpsnmeajp.boobee.blue @gpsnmeajp.achetaria.com いつでも変えられ、いつでも変わりうる表示名です。
人間が取り扱うための名前です。 (ログインや名前解決にも使用する) 所属サーバーから借りる 自分のドメインの DNSレコードで証明する ※Nostrで言うところのNIP-05に相当
DID Document と plc.directory DIDはIDですが、それだけだと紐づけができません。 付随情報が記載されているのがDID Documentです。 ・その人を証明する公開鍵 ・その人はどのPDS(所属サーバー)に所属しているのか
・その人のHandle この情報はPDS(所属サーバー)にあっては意味がないため 独立して運営される名前解決サーバー*に置かれます。 現在運営されているのはplc.directory *DNSに相当 ※Nostrで言うところの/.well-known/nostr.jsonに相当 ※これにより鍵ローテーションが可能になります
DID Placeholder (did:plc) DIDは生成・管理の方法はたくさんありますが ATProtocolとして提唱しているのがdid:plcです。 データリポジトリの最初のハッシュと紐づいています。 鍵ローテーションが可能で、2種類の鍵
署名鍵と、回復鍵の2つでローテーションできます。 ブロックチェーンではなくシンプルで堅牢な サーバーで管理されます。(plc.directoryなど) IPLD Repo did:plc zkxpsaopwdwddwpo edwpqaidfeaws
データリポジトリ AT Protocolでは、ユーザーの投稿や操作の履歴は データリポジトリに保管されます 署名鍵で署名しなければ書き込めません。 すべての情報は連鎖的に記録され、検証可能です。
サーバー上に置かれますが、誰でも取り出し可能で、 ローカルに保存しておくことで引っ越し可能になります。 ルート コミット ルート コミット ルート コミット CID: コンテンツID タイムスタンプ マークル検索ツリー 署名 署名 署名 Repo 署名済み (個人)データ リポジトリ Re po Re po Re po Re po Re po Re po Re po Re po
PDS(個人データサーバー) クローリングインデクサー PDS : スモールワールド データの保管・署名・通信を担うサーバーです。 個人間のイベントを扱うためのシステムです。
ユーザーの所属・認証・フィード・APIの提供などを行います。 ここに署名鍵を預けます。(ユーザーは回復鍵を手元に持ちます) クローリングインデクサー : ビッグワールド 検索・統計・おすすめなどの大規模処理を担当します。 ユーザーは複数あるサービスを自由に選択できます。
その他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 名前解決やデータの流れ
現状と今後 (2分)
まだ未完成 連合はない 検索もない(もうすぐつく) Androidアプリもない(非公式はあるヨ) クローズドベータ
モデレーション機能もない 掲げている理想の機能の大半はない(が原型はある) 仕様変更はある 夢を語りながら楽しんでいきましょう とりあえず技術的に試したいだけの 場合は有志サーバーの boobee.blue おすすめ
もっと詳しく知りたい場合は 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ルーム