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
分散型SNS nostr 仕組み解説
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Segment
August 17, 2023
Technology
2.8k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
分散型SNS nostr 仕組み解説
youtube版:
https://www.youtube.com/watch?v=vB905DhX9nQ
Segment
August 17, 2023
More Decks by Segment
See All by Segment
Nostr(ノスター)を始めよう
gpsnmeajp
0
470
mocopiを簡易ジェスチャー認識音楽プレイヤーに使ってみた
gpsnmeajp
0
300
クライアントを作ってみてわかったこと
gpsnmeajp
0
350
AT Protocol (BlueSky Social)仕様解説 ~ W3C DID仕様を添えて ~
gpsnmeajp
3
4.1k
Nostr概説
gpsnmeajp
0
1.3k
Other Decks in Technology
See All in Technology
事業会社における 機械学習・推薦システム技術の活用事例と必要な能力 / ml-recsys-in-layerx-wantedly-2026
yuya4
0
160
自分が詳しくない領域でAIを使う #プロヒス2026
konifar
20
7.5k
コミットの「なぜ」を読む
ota1022
0
120
MUSUBI 田中裕一『AIと共に行う「しごとのリデザイン」- スモールバックオフィス編』AI Ops Lab #4
musubi
0
320
コミュニティの有益性 ~JAWS Days 2026 での体験を通して~ / The Benefits of a Community ~Through My Experience at JAWS Days 2026~
seike460
PRO
0
270
作る力から、見極める力へ — AI時代に広がるエンジニアの価値と役割
rince
0
340
[AWS Summit Japan 2026]迷っているあなたへ_小さな一歩が、やがて自分を助けてくれる
sh_fk2
2
420
データレイクの「見えない問題」を可視化する
sansantech
PRO
1
200
AI 不只幫你寫 Code: 當專案從 300 暴增到 1500, 我們如何撐住 DevOps
appleboy
0
250
ロボティクスの技術 / Robotics Technology
ks91
PRO
0
140
AI時代に求められる技術力 フロンティア・クリエイティビティ / Technical Excellence in the AI Era: Frontier Creativity
kaonavi
0
110
AIペネトレーションテスト・ セキュリティ検証「AgenticSec」紹介資料
laysakura
2
7.6k
Featured
See All Featured
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
750
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Deep Space Network (abreviated)
tonyrice
0
210
Site-Speed That Sticks
csswizardry
13
1.2k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
170
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
Statistics for Hackers
jakevdp
799
230k
Optimising Largest Contentful Paint
csswizardry
37
3.7k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
330
Heart Work Chapter 1 - Part 1
lfama
PRO
7
36k
Transcript
分散型SNS nostr 仕組み解説
目次 ▪ nostrって何? ▪ nostrっておすすめのSNSですか? ▪ 興味があるなら触ってみよう ▪ nostrの理念 ▪
nostrの実現方法 ▪ nostrの問題点 ▪ nostrのおもしろさ ▪ 代表的なクライアント 📱 📱 リレー ▼ ! $ $ 課金 リレー 特殊 リレー 集約 リレー 📱
nostrって何? ▪ Notes and Other Stuff Transmitted by Relays (短文とその他をリレーでやり取りする)
▪ 分散型SNSを実現するためのプロトコル 公開鍵署名を利用した面白い構造をしている ▪ 複数の個人などが運営するリレーサーバーの集合 により構成される分散したネットワークに見えるもの ▪ 誰かが管理している単一のサービスではなく、 総体としてサービスに見える。 ▪ 基本的にマイクロブログ(Xなど)風に使えるが、 クライアントを変えることで様々な使い方ができる。 (掲示板、ブログ等) 実際の例 ▶ このあと各項目について説明します ノスター ノストル ノーストリング ノースター ノシュトル ノシュトラ エヌオーエスティーアール
Q. nostrっておすすめのSNSですか? A. 「nostrはおすすめか?」と聞いてくるような人には、 現時点でお薦めはできません。 機能的には十分揃っていて、使い物にはなります。 一方で、他のSNSにあるような親切さは薄く、難解で、自己責任の割合が大きいです。 (プロトコルを利用するという側面が強く、サービスとして完成していない) ・技術的な面白さを感じられる人 ・発展途上の秘境感を味わいたい人
・管理者不在で凍結と無縁という点に魅力を感じる人 には向いているかもしれません。 YOU IS 🔑 Secret Key
興味があるなら触ってみよう nostter入門 ▪ nostterを開き、Try demoをクリック。 https://nostter.vercel.app/ ▪ 日本語TL閲覧専用モードになります。 アカウントを作りたくなったら、設定→Logout後、Create accountから作成。
興味があるなら触ってみよう のぞき窓 ▪ "のぞき窓"という、日本リレー(relay-jp.nostr.wirednet.jp)が 提供するビューアサイトもあります。 https://relay-jp.nostr.wirednet.jp/
nostrの理念
nostrの理念 ▪ censorship-resistant(検閲耐性)を持ち ▪ サーバーに依存せず・信頼する必要なく ▪ 回復力があり ▪ 公開鍵暗号と電子署名に基づいた ▪
改ざん不能で ▪ P2P技術に依存しない ▪ オープンなプロトコル https://github.com/nostr-protocol/nostr BANや凍結を無意味化し、発言・発信を止めるのを原理的に困難にする 具体的な実現方法については 後ほど説明するヨ
nostrの理念 censorship-resistant(検閲耐性) ▪ アカウントが凍結(BAN)された~ ▪ 投稿を削除しないと復活させないと言われた~ ▪ 永久凍結で二度とアカウントが作れなくなった~ ▪ サーバーから接続ごと遮断された~
▪ サイレンスされた~ これらを無意味化するということ ※nostrでも個別のサーバーからのBANが無いわけではありません そもそも課金しないと接続できないところとかもあります。 ネットワーク全体として、実質的に無意味化するという意味です。 https://github.com/nostr-protocol/nostr なんでもやっていわけじゃないヨ 悪いことすると、各リレーから追い出されたり 場合によってはIPアドレス開示請求されるヨ
nostrの理念 サーバーに非依存・信頼する必要なし 従来の中央集権であったり、連合分散系では ▪ 所属サーバーを気にしないといけない ▪ 所属サーバーから追い出されるとフォロー関係が切れる ▪ 所属サーバーに投稿が閉じ込められている ▪
所属サーバーが突如閉鎖されると縁も投稿も消え去る ▪ 所属サーバーの機能によって使える機能が変わる ▪ 所属サーバーによって使えるクライアントが違う という問題があった。 これらを起こさないということ https://github.com/nostr-protocol/nostr 実際には、いくつかの理由で やっぱり気にする必要はあるヨ かなりマシではあるけどネ
nostrの理念 回復力があり nostrでは ▪ いくつかのサーバーがダウン・通信遮断・放棄・データ削除に至っても ユーザーはほとんど気にならない ▪ 接続サーバーを追加・削除をしても見た目上ほとんど影響ない ▪ 並大抵のことではフォロー関係が失われない
といったことを実現している。 これにより、ユーザー目線では頑強に見えますし、 サーバー運営者側も、従来のサービスのサーバー運営と異なり、 非常に気楽に立てたり落としたりしやすいです。 https://github.com/nostr-protocol/nostr 実際には、個々人の 使い方によって変わるヨ
nostrの理念 公開鍵暗号と電子署名に基づいた 中央サーバーに依存しない構造を実現する要素。 詳しくは実現方法の方で説明します。 https://github.com/nostr-protocol/nostr おもしろいけど、nostrの 理解がハードな理由がこれ
nostrの理念 改ざん不能 ▪ 発言してないことを発言したことにされる ▪ 広告を差し込まれる ▪ 発言の中身を書き換えられる ▪ なりすまされる
これらができるのは、主にリレーサーバーですが、電子署名によって すぐにバレる・破棄できるようになっています。 これにより、接続しているサーバー運営者を信頼する必要がない (=気軽に接続できる)ことになります。 https://github.com/nostr-protocol/nostr あとで説明するけど、 秘密鍵を他人に渡すと これ全部ダメになるから 注意ヨ
nostrの理念 P2P技術に依存しない nostrはP2Pではありません。ブロックチェーンでもありません。 従来のクライアント-サーバーモデルを拡張した構造です。 これにより、利用者は ▪ ポートの開放やグローバルIPアドレスを用意する必要がありません。 ▪ 継続的な起動が必要ありません。 ▪
モバイル機器から簡単に使用することができます。 ▪ 不安定なノードに振り回されることがありません。 ▪ 他人の情報を不意に中継する心配がありません。 https://github.com/nostr-protocol/nostr 故にリレーサーバーが 必要になるのである 📱 📱 リレー 📱 📱
nostrの理念 オープンなプロトコル nostrはオープンなプロトコルです。 NIP (Nostr Implementation Possibilities) という仕様定義があり、 ここで誰でも提案・論議することができます。 クライアントやサーバーをこの仕様に基づいて
自由に作成することができます。 APIの利用許可を誰かに求める必要もありません。 拡張性の高い仕様になっており、形式に沿ってさえいれば 独自のデータや付加情報を送信・受信することも許容されます。 https://github.com/nostr-protocol/nips リレーごとに受け入れ基準と 対応範囲があるから、例えば 巨大データが拒否されたり、対応 してない仕様があったりするヨ
nostrの実現方法
nostrの実現方法 ▪ 中継だけのシンプルなリレーと、検証能力を持ったリッチなクライアント ▪ ネットワーク・トポロジー (経路の冗長化) ▪ 公開鍵署名・公開鍵暗号 ▪ NIP-05
▪ NIP-07 ▪ 基本的な流れのまとめ ▪ 具体的なクライアントの動作 とてもシンプル
nostrの実現方法 中継だけのシンプルなリレーと、 検証能力を持ったリッチなクライアント ▪ リレーの仕事は、指定条件に沿ったリアルタイムな中継と、過去のデータの保管・配信 これ以上のこと(スパムの防止やWebクライアントの提供、課金など)は、やってもいいし、やらなくてもいい。 ▪ クライアントの仕事は、署名と検証、条件の指定、各種ユーザー操作の処理 nostrの機能を実現するための主要な機能は(中継と記録・配信以外は)クライアントがすべて持つ。 リレー
投稿 イベント中継 フィルタ 保持 & 過去投稿の再配信 Websocket API フィルタ登録 配信 Nostr (Websocket) フィルタ登録 配信 鍵ペア生成 署名 テキスト投稿 メタ情報投稿 フィルタ登録 配信要求 フォローリスト投稿 表示(重複排除) クライアント クライアント クライアント 色々やってくれるリレーに依存する → 万が一のときに困る なので、選び方は人それぞれ
nostrの実現方法 ネットワーク・トポロジー (経路の冗長化) ▪ 複数(通常3~20個)のリレーに接続して、基本全部に対してデータを送信・購読する ▪ 最低1個のリレーを共有している相手には投稿が届く ▪ リレーの変な挙動や悪意、不具合、データ吹っ飛び、ダウンなどは これにより気にする必要がなくなる(全部が吹き飛ばない限り)
リレー同士は連携してもいいし、 しなくてもいい Relay Server 投稿 フィルタ登録 配信 Nostr (Websocket) Relay Server Relay Server Relay Server フィルタ登録 配信 Relay Server ❌ リレー間連携
nostrの実現方法 公開鍵署名・公開鍵暗号 ▪ 中央サーバー無くして、どうやって自分を登録・証明するのか ▪ npub1zsmy3hwxxynjtdwr6l3m0clndauyqxsl5jkfmdcnetqs8m9xv50sf0svh0 143648ddc6312725b5c3d7e3b7e3f36f78401a1fa4ac9db713cac103eca6651f ある秘密鍵で署名され、この公開鍵で検証できる正当な情報の発信者 = "私"です。
▪ アカウント管理も、IDもパスワードもなく、電子署名して発信されたデータの集合 それを便宜的にアカウントとして見なすのがnostrの仕組みです。 ▪ DMや非公開情報はECDH鍵交換による共通鍵暗号で行われます。 ▪ すべての情報は電子署名されるため、改変することはできません。 ▪ アカウント(秘密鍵)の作成はクライアントで完結します。 ▪ 秘密鍵を漏洩すると、取り返す・無効にすることはできません。 秘密鍵と公開鍵のペアが存在証明であり、この組み合わせは変更できません。 暗号学的に安全な乱数で秘密鍵さえ 生成できればいいので、 手計算でもアカウントを作れる ここで使われているのは、bitcoinで使用されているのと同じ楕円曲線暗号secp256k1です。
nostrの実現方法 NIP-05 ▪ npub1zsmy3hwxxynjtdwr6l3m0clndauyqxsl5jkfmdcnetqs8m9xv50sf0svh0 これでは誰か分かりません。 ▪
[email protected]
このような電子メール形式のアドレスで表現するのがNIP-05です。 ▪ Webサーバーにファイルを置くことで実現します。
.well-known/nostr.json ▪ 逆に公開鍵から、プロフィール情報を取得して Webサーバーに問い合わせ正当なWebサイトの所有者であるかを 検証することもできます。 (有名人へのなりすまし検証) プロフィールに書く名前は 各々が勝手に名乗れるので必要
nostrの実現方法 NIP-07 ▪ 秘密鍵を漏らすと終わりのため、ブロックチェーン技術のように ブラウザ拡張内やハードウェアウォレットに秘密鍵を格納しておき、 署名や暗号化を任せる仕組みがあります。 ▪ これをNIP-07といいます。 ▪ 有名な実装はnos2x
他にも色々あります。 信頼できるアプリや拡張以外に 秘密鍵を渡すな
nostrの実現方法 基本的な流れのまとめ ▪ クライアントは投稿を同時に接続している書込み可能なすべてのリレーに送信します。 その際、電子署名するため途中で書き換えられなくなります。 ▪ またクライアントは読み込み可能なすべてのリレーから配信を受けます。 ▪ そのため、同じリレーに属してる人が同じものを見れます。 ▪
リレー自体はあまり賢くはなく情報の中継に特化しています。 ▪ これにより、複数のリレーのうちどれかに属していれば同じ動作が期待できるため、 リレーを変えると何かが失われるといった心配をしなくて済みます。 ▪ リレーには多数接続しておくことでより冗長化できます。 ▪ リレーが突然死したり、ブロックしてきたりしても他のリレーが生きていれば 特に何をすることもなく使用し続けられます。 ▪ すべてのリレーが突然死しても、新しいリレーを登録することで、過去の投稿は消える かもしれませんがアカウント(秘密鍵)はそのまま使い続けられます。
nostrの実現方法 具体的なクライアントの動作 1. リレーサーバーに接続します。 最低1つですが、複数接続するのが普通です。Damusの場合は7つあります。 2. 自分自身(ユーザー)の公開鍵から、リレーに自分のプロフィールを取得し、 フォローリスト(公開鍵一覧)を取得します。 ※もちろんクライアントがローカルに保持していてもOKです。 3.
公開鍵リストをフィルタとして設定し、フォローしている人のプロフィールを要求します。 これをキャッシュしておくことで名前やアイコンをUIに表示できます。 ※もちろんクライアントがローカルに保持していてもOKです。 4. 公開鍵リストをフィルタとして設定し、テキスト投稿を要求します。 これにより、タイムラインが表示できます。 5. 以降、プロフィールの更新やテキスト投稿が増えると逐次配信されるため、UIに反映します。 ▪ 実際にはさらに、特定の人のTLを見に行った場合は、上記のような動作を 特定の公開鍵に対して実施する。
nostrの問題点
nostrの問題点 ▪ 治安・スパム ▪ データ保証と削除 ▪ なりすまし ▪ 人を探す ▪
クライアントの権限が強すぎる ▪ そもそもこれはSNSなのか? 他じゃあまり考えないことが いろいろ
nostrの問題点 治安・スパム ▪ censorship-resistant(検閲耐性)により、原理的に治安維持ができません。 ▪ 誰も追い出されないかわりに、誰も追い出せないのです。 ▪ スパムや危険情報の発信者をリレー単位では遮断できますが、 ネットワーク上に存在するのを止められません。 (メールのスパムや詐欺サイトが無くならないのと似ている)
▪ 一方、リレーを共有さえしなければ届かないので、 将来的には平和なリレー群と 危険地帯リレー群に分かれるかもしれません ▪ また、金を払わないと投稿を受け付けないリレーというのもあります ▪ もちろんクライアント側でのミュートや非表示化もできます。 有名な日本向けリレーは、 日本以外の地域からの投稿を遮断する ことでスパムなどを抑止しているヨ BANや凍結を無意味化し、発言・発信を止めるのを原理的に困難にする
nostrの問題点 データ保証と削除 ▪ データの保持も削除も保証されていません。 ▪ あるリレーがどの程度データを保持してくれるのか? 期間・容量は? あるリレーが送りたいデータを受け入れてくれるのか? データが突然消えないのか? →
すべて保証されていません。 ▪ 一方で、一度投稿したデータを消したくなったときは、 削除の要求ができますが、削除機能に対応しているのか? 本当に消えるのか? → 保証されていません。 ▪ 特に、ブロードキャストという操作で他者の投稿を 自分の接続しているリレーに再送信することができるため、 基本的に完全消去は困難です。 クライアントとの相性で 数百あったフォローが吹っ飛んで0に なったりするよ イケてるね
nostrの問題点 なりすまし ▪ 公開鍵は偽装できませんが、人間が読むには複雑すぎます。 ▪ 中央管理するサーバーがないため、プロフィールや名前はすべて自称です。 ▪ 検証するには、有効な署名や公開鍵を、外部サイトや手渡しなどで 受け取る必要があります。 ▪
ちなみに、フォローは公開鍵ベースで行われるため、 一度フォローしてしまえばなりすましは無視できます。 有名SNSでも なりすまし自体はあるし 特有ってほどでもないけどネ Don't Trust. Verify
nostrの問題点 人を探す ▪ 人を探すのが大変です。 ▪ 名前で探すことはできないかもしれません。 ▪ NIP-05か、公開鍵のどちらかがあれば確実にフォローはできます。 ▪ しかし、接続先のリレーが共通でない
& 不明な場合は、 公開鍵が特定できてフォローしていたとしても投稿を受け取れません。 ▪ 公開鍵を渡すときは、有名なリレーに参加しておくか、 リレーを併記しておきましょう。 (nostr対応のプロフィールサイトを利用すると リレーは自動で表示されます。) ▪ nprofile形式を使うのも良いですが対応ソフトが限られます。 ドコー
nostrの問題点 クライアントの権限が強すぎる ▪ リレーに権限がほとんどなく、クライアントの権限が強すぎます。 ▪ これはつまり、なにか有事の際(秘密鍵を漏洩した場合など)に 泣きつき先がないことを意味します。 ▪ 秘密鍵を渡すことは、取り消し不能なFull Access権限を
与えることになります。 ▪ 現状、キーローテーションや委任の仕組みは、 無いわけではないですが実用的ではありません。 ▪ そのため、 ・信用できるクライアントを探し、それを使う ・基本的にはNIP-07を使用し、秘密鍵を露出しない などの自衛手段を取る以外にありません。 ▪ マルウェアなどで不正に奪取されたら終了です。 秘密鍵は人間が扱えるものじゃない
nostrの問題点 そもそもこれはSNSなのか? ▪ 電子署名を使った汎用プロトコル ▪ WebSocket製チャットに過去ログ機能がついたやつ みたいな認識でいると、色々と理解しやすいかもしれません とにかく作りがシンプルすぎる 故にクライアントづくりは とても大変
nostrのおもしろさ
nostrのおもしろさ ▪ あまりに自由度が高いクライアント プロトコルの自由度が高すぎるので、 ・ブログが実装されたり、 ・掲示板が実装されたり、 ・キーバリューストアDBにされてみたり、 ・サイバー空間が実装されたり、 ・MMOみたいなのが実装されたりしている 独自実装も提案も活発
▪ 爆速配信 WebSocketによるリアルタイム配信のため、他人の投稿やリアクションが 爆速で来る。投稿して0.3秒後にはFavが飛んでくる。 他じゃありえないことが いろいろ https://github.com/nostr-jp/awesome-nostr-japan
代表的なクライアント
代表的なクライアント Damus ▪ iOSでnostrはじめるならこれ、という定番クライアント いろいろあるけど、 とにかくユーザー数が多い。 Zapper 5000と隣ニキ
代表的なクライアント Amethyst ▪ Androidでnostrはじめるならこれ、という定番クライアント 竹
代表的なクライアント nostter ▪ ブラウザでnostrはじめる初心者向き https://nostter.vercel.app/ illust by @stok33 npub1e09suzmq9mp6nt0ud9ttl03790q jx70wzwlc2pwwghcusvwju54qs0c800
代表的なクライアント Rabbit ▪ Deck風で使いやすいブラウザクライアント https://syusui-s.github.io/rabbit/ illust by @stok33 npub1e09suzmq9mp6nt0ud9ttl03790q jx70wzwlc2pwwghcusvwju54qs0c800
代表的なクライアント Astraea ▪ 日本語トレンドや絵文字リアクションに早期に対応した ブラウザクライアント https://astraea.mousedev.page/ illust by @stok33 npub1e09suzmq9mp6nt0ud9ttl03790q
jx70wzwlc2pwwghcusvwju54qs0c800
もっと詳しく 知りたくなったら
もっと詳しく知りたくなったら ▪ nostr protocol https://github.com/nostr-protocol/nostr ▪ nostr protocol NIPs https://github.com/nostr-protocol/nips
▪ awesome-nostr-japan (日本ユーザによる作品集) https://github.com/nostr-jp/awesome-nostr-japan ▪ nostr 日本Scrapbox https://scrapbox.io/nostr/ illust by @stok33 npub1e09suzmq9mp6nt0ud9ttl03790q jx70wzwlc2pwwghcusvwju54qs0c800