Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
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.4k
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
220
mocopiを簡易ジェスチャー認識音楽プレイヤーに使ってみた
gpsnmeajp
0
200
分散型SNS nostr 仕組み解説
gpsnmeajp
2
2k
クライアントを作ってみてわかったこと
gpsnmeajp
0
270
Nostr概説
gpsnmeajp
0
870
Other Decks in Programming
See All in Programming
RDBの世界をぬりかえていくモデルグラフDB〜truncus graphによるモデルファースト開発〜
jurabi
0
170
DjangoNinjaで高速なAPI開発を実現する
masaya00
1
540
型付きで行うVSCode拡張機能開発 / VSCode Meetup #31
mazrean
0
250
Re:PandasAI:生成AIがデータ分析業務にもたらすパラダイムシフト【増補改訂版】
negi111111
1
1.1k
Cloud Adoption Frameworkにみる組織とクラウド導入戦略(縮小版)
tomokusaba
1
230
知られざるNaNの世界
hole
1
480
20241004 モノタロウ式~ドメインモデリングとリアーキテクチャ
monotaro
PRO
2
360
Integrating AI in Your Enterprise Java Applications
ivargrimstad
0
390
コードレビューと私の過去と未来
jxmtst
0
290
Modern Angular with Lightweight Stores: New Rules and Options
manfredsteyer
PRO
0
110
[PHPカンファレンス沖縄2024]「無理なくできるだけ安全に」テストもないレガシーコードをリファクタリングするテクニック
ikezoemakoto
3
130
ML-прайсинг_на_Lamoda__вошли_и_вышли__приключение_на_20_минут__Слава_Цыганков.pdf
lamodatech
0
260
Featured
See All Featured
Designing with Data
zakiwarfel
98
5.1k
Atom: Resistance is Futile
akmur
261
25k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
How To Stay Up To Date on Web Technology
chriscoyier
787
250k
Clear Off the Table
cherdarchuk
91
320k
WebSockets: Embracing the real-time Web
robhawkes
59
7.4k
The Cost Of JavaScript in 2023
addyosmani
43
5.9k
Why Our Code Smells
bkeepers
PRO
334
57k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
27
1.9k
GitHub's CSS Performance
jonrohan
1030
450k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
92
16k
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ルーム