Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
分散型SNS nostr 仕組み解説
Search
Segment
August 17, 2023
Technology
2.9k
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
510
mocopiを簡易ジェスチャー認識音楽プレイヤーに使ってみた
gpsnmeajp
0
310
クライアントを作ってみてわかったこと
gpsnmeajp
0
360
AT Protocol (BlueSky Social)仕様解説 ~ W3C DID仕様を添えて ~
gpsnmeajp
3
4.1k
Nostr概説
gpsnmeajp
0
1.3k
Other Decks in Technology
See All in Technology
白金鉱業Meetup Vol.25 アウトカムが二値のデータに対するCausal Impact
brainpadpr
0
210
データ_AIの事業の勝敗をわけるもの
nek0128
0
380
[2026-09-11]SREは誰のもの?運用エンジニアが始める 「SRE領域への越境」とチームの進化の軌跡 〜Road to NEXT CRE
tosite
0
290
幾何アルゴリズムで なめらかなピン操作を / iOSDC Japan 2026 / smoothpin
kazumanagano
0
350
AgentCore Runtime上にAgentic Coding基盤を構築・展開する際の設計ポイントと限界点 / Design considerations and limitations when building an agentic coding platform on AgentCore Runtime
har1101
4
180
SREは、MCPとAutopilotをこう使え!
kazumax55
2
840
AIエージェントの自己改善をどう設計するか / How to Design Self-Improvement for AI Agents
22mi
25
16k
すぐできる衛星通信対応 あとは山奥に行くだけ
tatetate55
0
130
iOSDC Japan 2026 day1 TrackC 10:50
feedtailor
1
160
AI de Idea
kawaguti
PRO
2
120
技術的負債から考える、AI時代のエンジニアリング投資 — ビズリーチの技術的負債と向き合った経験から、変更し続けられるソフトウェアを考える/ technical-debt-con2026
visional_engineering_and_design
3
3k
DEFCON34-Write-up_HYCu-MYCu
daikiokazaki
0
160
Featured
See All Featured
Exploring anti-patterns in Rails
aemeredith
4
510
Faster Mobile Websites
deanohume
310
32k
Into the Great Unknown - MozCon
thekraken
41
2.7k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
76k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
500
Optimizing for Happiness
mojombo
378
71k
Believing is Seeing
oripsolob
1
220
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
830
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.4k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
Bash Introduction
62gerente
615
220k
How to train your dragon (web standard)
notwaldorf
97
6.8k
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