SlideShare a Scribd company logo
1 of 15
ATProtocolの技術的課題探索
をしていたら「あれ」が
実現できてしまった件
Hirofumi Ukawa
@ukawa.bsky.social
自己紹介
• 本日は個人として発表
• 本業は企画系の仕事だがここ2週間は技術バカにもどる
• 製品組み込み開発、ネットワーク、メディア処理、研究開発が
得意。35年程度フルスタックを目指してやっています。先は
長い
@ukawa.bsky.social
今回の首謀者
• @so-asano.comさん
• 寝ずにコードを書くおじさん
• そこに課題があると手が動いてしまうナイスガイ!フリーランスのアプリエンジニア。仕事募集中
• 作品: Amity(音楽SNS)/BlueMotion(動画サイト)など
• @kojira.ioさん
• 面白い事をじゃんじゃんやっていきたいおじさん
• 昔からずっと面白い事をやっている!歌が上手い
• 作品:ブルースカイちゃん
• @Nightheaven.bsky.socialさん
• 理想の「人類とSNSの付き合い方」を考える人
• 今回のチャレンジのきっかけの場所(Discord)を用意してくれた。感謝
• @ukawa.bsky.social
• 面白い事をやるために、面白くない事をやるおじさん
• 作品: RSSフィードボット、運行情報フィードボット
• 今回の実験、実装の責任はすべて私の責任である事をここに宣言します。
きっかけ
• 2023/8/20 7:19 首謀者A
• ATProtocolの仕様って、セキュリティ上問題じゃないの?ほらほら騙しリンクとか日付偽装とかいくらでも
作れるよ。
• app.bsky.feed | AT Protocol app.bsky.feed.postでcreatedAtがいくらでも偽装できる。過去への投稿が可能
• app.bsky.richtext | AT Protocol app.bsky.richtext.facetでリンクの偽装がいくらでもできる。例えばメン
ションをURLリンクにしたりできちゃう
• 2023/8/24日あたりまで、首謀者A,B,C,D
• 数日、白熱した議論の結果として、「分散型SNSプロトコルにはそのPostの安全性を保障するSafety
Verification Serviceが必要なのでは無いか、どや」という結論に達し、その仕様についての議論を開始、現
状のPDSの動作の検証も別途続ける、、、、、、、、あれ?
議論の結果
• 現状のPDSの実装に関して
• クライアントが好きな日付で投稿できる
• クライアントがPostするデータには好きな項目を追加できる
• Postデータでも、Profileデータでも、おそらくなんでも
• クライアントはPostされたデータを生のまま取得できる
• ん?、、、、、、という事は?
• やばい「あれ」ができてしまう
「あれ」=「DM」
• あれだよあれ。クライアントだけでDMが実装できるよ!
• でも、これは”Disguised Message”としよう
• この仕組みが使えないように公式が対応する事を目標にしよう
• 8/25日 AM 6:40分あたり、DMを実現しようプロジェクトが立
ち上がる 担当は以下
• プロトコル仕様検討担当(ukawa)
• UI含めた実装担当(so-asano)
• テストpds立てる担当、見守る担当(kojira)
• なにかもめた時の公式との交渉担当(Nightheaven:勝手に決め
ています。基本はukawa責ですのであしからず)
「Disguised Message」の開発方針
• 9/2 勉強会に間に合うようにつくる(まにおーた!)
• オープンソースにする(これちょっとまっててな)
• Bluesky公式への脆弱性の訴えの為の参照実装として制作する
• 利用するBlueskyの脆弱性と技術は以下
• createdAt 詐称可能問題 : サーバで日付チェックが入らない
• でも公式クライアントでcreatedAtが古い場合はタイムラインに流れてこない
• POSTデータチェック無し問題:サーバーでデータの詳細チェックが入らない
• POSTされたJSONの内容について、基本チェックが入らずにクライアントに提示され
る。今回はProfileとPostを利用する
• 公開鍵暗号
• RSA公開鍵暗号を利用し、ユーザー間の鍵交換に利用する
• 共通鍵暗号
• メッセージ本体の暗号化ににはRSAで交換されたAES暗号を利用する
時間が無いので簡単に概要
【今回の参照実装の名前】
BlueDM (so-asano命名)
【今回の実装の概要】
• ユーザーProfileにRSA公開鍵を差し込む
• ユーザーPostにAES共通鍵で暗号化メッセージを差し込む
• DMのきっかけを作る人はDM先のRSA公開鍵で生成したAES共通鍵
を暗号化する(きっかけはメンション付きのPost)
• DMを受ける人は、RSA秘密鍵でAES共通鍵を復号化する
• あとは、そのメンション付きのポストへのリプライとして扱うが、
100年前のReplyとして処理し他のユーザーにわからないようにす
る
デモ実装の画面(ログイン)
App Passwordをつかってログインします
秘密の招待キーワードを入れます
*何が起きても
自己責任でお願いします*
あなたのハンドルをいれます
https://bluedm.vercel.app
↑開発者用UIが開きます
デモ実装の画面(送信側)
相手のハンドルを@無しで入力して
Sendボタンをタッチします
送信相手もBlueDMに一度でもアクセス
できている必要があります
本デモは、so-asanoが、next.jsで実装し、
Vercelで動作させています
注意!:実行すると過去のDMにアクセスできなくなります
他のブラウザやクライアントでも利用する場合に、
「秘密鍵」をPEM形式でエクスポート・インポートできます
デモ実装の画面(受信側)
お使いのBlueskyクライアントの通知に
Lets DM! !とメッセージがきます
送信側の未読のDMが赤色で示されます
クリックする事でメッセージが送受信
できます
デモ実装の画面(DM中:送受信)
おお!DMできた!
しかもEnd 2 Endで通信データ
の暗号化ができてしまっている!
仕組み上グループチャットなども
できるはず
Bluesky上でブロックをしていれば
そもそも受信できません!
考察
• ATProtocolの仕様と、Blueskyの現状実装を元に、新たなサーバー実装無しでDMを実現できました
• Bluesky公式はRichtextの整合性チェックや、日付偽装の問題などBluesky普及の為に、今後の悪意
を持つ者が活躍できない実装をめざしてもらいたいと思います
• End 2 Endの暗号化は犯罪を呼ぶ可能性があります(マネーロンダリング、人身売買、児童買春の道
具になりうる)
• 各国当局の法律によりSNSサーバー運用者には保存義務や開示義務が課されています
• それが分散運用だったとしても、同じ。運用者が「平文」を合法的に得る仕組みの検討が必要。
• ATProtocolの仕様には問題があるのでは無く、PDSの実装、クライアントの実装として、一般ユー
ザーが安心して利用できる仕組みが大事だと我々は考えています
• どいうわけで、本日からBlueDMはしばらく利用できると思いますが、無事使えなくなる事をお祈
りしながら、くれぐれも「自己責任」での利用をお願いします
オープンソース化と仲間募集
• 急ぎつくった為、コードがお見苦しい為後日公開とします。
• 趣旨に賛同して、「自分の作ったクライアントにもこれ実装し
てみたい!」ので早くコードをよこせ。ていう人はso-asanoも
しくはukawaまでDMしてください。
• 面白い事をじゃんじゃんやっていきたい人は、我々と一緒に議
論を戦わせて実装を競いましょう。4人のメンバーのだれかに、
アプローチください。 技術者じゃない方かも歓迎!
ご清聴ありがとうございます

More Related Content

Similar to Bluesky勉強会資料_ukawa_v2-1.pptx

「アイロンビーズプロッター作ろうとしてみた with プロ生ちゃん」 プロ生勉強会 第44回@熊本
「アイロンビーズプロッター作ろうとしてみた with プロ生ちゃん」 プロ生勉強会 第44回@熊本「アイロンビーズプロッター作ろうとしてみた with プロ生ちゃん」 プロ生勉強会 第44回@熊本
「アイロンビーズプロッター作ろうとしてみた with プロ生ちゃん」 プロ生勉強会 第44回@熊本kirin_nico
 
遠くの"計画"よりも今日の"CD"(継続的デプロイ) #jenkinsstudy
遠くの"計画"よりも今日の"CD"(継続的デプロイ) #jenkinsstudy遠くの"計画"よりも今日の"CD"(継続的デプロイ) #jenkinsstudy
遠くの"計画"よりも今日の"CD"(継続的デプロイ) #jenkinsstudyKazuhito Miura
 
「むしゃくしゃしたのでOpenDocumentで帳票テンプレート」 - 第13回関西LibreOffice勉強会 #LibOKansai
「むしゃくしゃしたのでOpenDocumentで帳票テンプレート」 - 第13回関西LibreOffice勉強会 #LibOKansai「むしゃくしゃしたのでOpenDocumentで帳票テンプレート」 - 第13回関西LibreOffice勉強会 #LibOKansai
「むしゃくしゃしたのでOpenDocumentで帳票テンプレート」 - 第13回関西LibreOffice勉強会 #LibOKansaiKazuhito Miura
 
筑波大学 情報メディア創成 大学説明会 2019
筑波大学 情報メディア創成 大学説明会 2019筑波大学 情報メディア創成 大学説明会 2019
筑波大学 情報メディア創成 大学説明会 2019Takakura_Rei
 
デザイナー視点から見たWeb開発する人々
デザイナー視点から見たWeb開発する人々デザイナー視点から見たWeb開発する人々
デザイナー視点から見たWeb開発する人々Miho Matsui
 
エンジニアという仕事を楽しみ続けるためのキャリア戦略
エンジニアという仕事を楽しみ続けるためのキャリア戦略エンジニアという仕事を楽しみ続けるためのキャリア戦略
エンジニアという仕事を楽しみ続けるためのキャリア戦略Shuichi Tsutsumi
 
「実録!となりのJenkins2.0」 - 第7回大阪 / 第9回(東京)Jenkins勉強会 #jenkinsstudy
「実録!となりのJenkins2.0」 - 第7回大阪 / 第9回(東京)Jenkins勉強会 #jenkinsstudy「実録!となりのJenkins2.0」 - 第7回大阪 / 第9回(東京)Jenkins勉強会 #jenkinsstudy
「実録!となりのJenkins2.0」 - 第7回大阪 / 第9回(東京)Jenkins勉強会 #jenkinsstudyKazuhito Miura
 
インターネットにおける悪評 - 高野光弘編
インターネットにおける悪評 - 高野光弘編インターネットにおける悪評 - 高野光弘編
インターネットにおける悪評 - 高野光弘編TAKANO Mitsuhiro
 
Co-KoNPILe #0 - #3 までやってみたまとめ
Co-KoNPILe #0 - #3 までやってみたまとめCo-KoNPILe #0 - #3 までやってみたまとめ
Co-KoNPILe #0 - #3 までやってみたまとめNISHIHARA Shota
 
IoTって何が良いの? 〜言うてるオレもわからんわ〜 #kinoko_iot
IoTって何が良いの? 〜言うてるオレもわからんわ〜 #kinoko_iotIoTって何が良いの? 〜言うてるオレもわからんわ〜 #kinoko_iot
IoTって何が良いの? 〜言うてるオレもわからんわ〜 #kinoko_iotKazuhito Miura
 
JenkinsとDockerって何が良いの? 〜言うてるオレもわからんわ〜 #jenkinsstudy
JenkinsとDockerって何が良いの? 〜言うてるオレもわからんわ〜 #jenkinsstudyJenkinsとDockerって何が良いの? 〜言うてるオレもわからんわ〜 #jenkinsstudy
JenkinsとDockerって何が良いの? 〜言うてるオレもわからんわ〜 #jenkinsstudyKazuhito Miura
 
Rでを作る
Rでを作るRでを作る
Rでを作るNagi Teramo
 
20120920中間発表2
20120920中間発表220120920中間発表2
20120920中間発表2Hisashi Imai
 
20140618 教育・知育アプリのつくりかた
20140618 教育・知育アプリのつくりかた20140618 教育・知育アプリのつくりかた
20140618 教育・知育アプリのつくりかたMori Tetsuya
 
プロ生ちゃんについて
プロ生ちゃんについてプロ生ちゃんについて
プロ生ちゃんについてYou&I
 
U16愛知プログラミングコンテストを見に行きました
U16愛知プログラミングコンテストを見に行きましたU16愛知プログラミングコンテストを見に行きました
U16愛知プログラミングコンテストを見に行きましたNISHIHARA Shota
 
わんくま名古屋#33(20141115) モノ作り半生
わんくま名古屋#33(20141115) モノ作り半生わんくま名古屋#33(20141115) モノ作り半生
わんくま名古屋#33(20141115) モノ作り半生Yasuhiko Yamamoto
 

Similar to Bluesky勉強会資料_ukawa_v2-1.pptx (20)

「アイロンビーズプロッター作ろうとしてみた with プロ生ちゃん」 プロ生勉強会 第44回@熊本
「アイロンビーズプロッター作ろうとしてみた with プロ生ちゃん」 プロ生勉強会 第44回@熊本「アイロンビーズプロッター作ろうとしてみた with プロ生ちゃん」 プロ生勉強会 第44回@熊本
「アイロンビーズプロッター作ろうとしてみた with プロ生ちゃん」 プロ生勉強会 第44回@熊本
 
遠くの"計画"よりも今日の"CD"(継続的デプロイ) #jenkinsstudy
遠くの"計画"よりも今日の"CD"(継続的デプロイ) #jenkinsstudy遠くの"計画"よりも今日の"CD"(継続的デプロイ) #jenkinsstudy
遠くの"計画"よりも今日の"CD"(継続的デプロイ) #jenkinsstudy
 
「むしゃくしゃしたのでOpenDocumentで帳票テンプレート」 - 第13回関西LibreOffice勉強会 #LibOKansai
「むしゃくしゃしたのでOpenDocumentで帳票テンプレート」 - 第13回関西LibreOffice勉強会 #LibOKansai「むしゃくしゃしたのでOpenDocumentで帳票テンプレート」 - 第13回関西LibreOffice勉強会 #LibOKansai
「むしゃくしゃしたのでOpenDocumentで帳票テンプレート」 - 第13回関西LibreOffice勉強会 #LibOKansai
 
筑波大学 情報メディア創成 大学説明会 2019
筑波大学 情報メディア創成 大学説明会 2019筑波大学 情報メディア創成 大学説明会 2019
筑波大学 情報メディア創成 大学説明会 2019
 
デザイナー視点から見たWeb開発する人々
デザイナー視点から見たWeb開発する人々デザイナー視点から見たWeb開発する人々
デザイナー視点から見たWeb開発する人々
 
4DX
4DX4DX
4DX
 
エンジニアという仕事を楽しみ続けるためのキャリア戦略
エンジニアという仕事を楽しみ続けるためのキャリア戦略エンジニアという仕事を楽しみ続けるためのキャリア戦略
エンジニアという仕事を楽しみ続けるためのキャリア戦略
 
「実録!となりのJenkins2.0」 - 第7回大阪 / 第9回(東京)Jenkins勉強会 #jenkinsstudy
「実録!となりのJenkins2.0」 - 第7回大阪 / 第9回(東京)Jenkins勉強会 #jenkinsstudy「実録!となりのJenkins2.0」 - 第7回大阪 / 第9回(東京)Jenkins勉強会 #jenkinsstudy
「実録!となりのJenkins2.0」 - 第7回大阪 / 第9回(東京)Jenkins勉強会 #jenkinsstudy
 
インターネットにおける悪評 - 高野光弘編
インターネットにおける悪評 - 高野光弘編インターネットにおける悪評 - 高野光弘編
インターネットにおける悪評 - 高野光弘編
 
Co-KoNPILe #0 - #3 までやってみたまとめ
Co-KoNPILe #0 - #3 までやってみたまとめCo-KoNPILe #0 - #3 までやってみたまとめ
Co-KoNPILe #0 - #3 までやってみたまとめ
 
IoTって何が良いの? 〜言うてるオレもわからんわ〜 #kinoko_iot
IoTって何が良いの? 〜言うてるオレもわからんわ〜 #kinoko_iotIoTって何が良いの? 〜言うてるオレもわからんわ〜 #kinoko_iot
IoTって何が良いの? 〜言うてるオレもわからんわ〜 #kinoko_iot
 
JenkinsとDockerって何が良いの? 〜言うてるオレもわからんわ〜 #jenkinsstudy
JenkinsとDockerって何が良いの? 〜言うてるオレもわからんわ〜 #jenkinsstudyJenkinsとDockerって何が良いの? 〜言うてるオレもわからんわ〜 #jenkinsstudy
JenkinsとDockerって何が良いの? 〜言うてるオレもわからんわ〜 #jenkinsstudy
 
Cmujp21_node-webkit
Cmujp21_node-webkitCmujp21_node-webkit
Cmujp21_node-webkit
 
Rでを作る
Rでを作るRでを作る
Rでを作る
 
20120920中間発表2
20120920中間発表220120920中間発表2
20120920中間発表2
 
20140618 教育・知育アプリのつくりかた
20140618 教育・知育アプリのつくりかた20140618 教育・知育アプリのつくりかた
20140618 教育・知育アプリのつくりかた
 
プロ生ちゃんについて
プロ生ちゃんについてプロ生ちゃんについて
プロ生ちゃんについて
 
U16愛知プログラミングコンテストを見に行きました
U16愛知プログラミングコンテストを見に行きましたU16愛知プログラミングコンテストを見に行きました
U16愛知プログラミングコンテストを見に行きました
 
わんくま名古屋#33(20141115) モノ作り半生
わんくま名古屋#33(20141115) モノ作り半生わんくま名古屋#33(20141115) モノ作り半生
わんくま名古屋#33(20141115) モノ作り半生
 
Scc2013 sound
Scc2013 soundScc2013 sound
Scc2013 sound
 

Bluesky勉強会資料_ukawa_v2-1.pptx