Upgrade to Pro — share decks privately, control downloads, hide ads and more …

分散型SNS nostr 仕組み解説

Avatar for Segment Segment
August 17, 2023

分散型SNS nostr 仕組み解説

Avatar for Segment

Segment

August 17, 2023
Tweet

More Decks by Segment

Other Decks in Technology

Transcript

  1. 目次 ▪ nostrって何? ▪ nostrっておすすめのSNSですか? ▪ 興味があるなら触ってみよう ▪ nostrの理念 ▪

    nostrの実現方法 ▪ nostrの問題点 ▪ nostrのおもしろさ ▪ 代表的なクライアント 📱 📱 リレー ▼ ! $ $ 課金 リレー 特殊 リレー 集約 リレー 📱
  2. nostrって何? ▪ Notes and Other Stuff Transmitted by Relays (短文とその他をリレーでやり取りする)

    ▪ 分散型SNSを実現するためのプロトコル 公開鍵署名を利用した面白い構造をしている ▪ 複数の個人などが運営するリレーサーバーの集合 により構成される分散したネットワークに見えるもの ▪ 誰かが管理している単一のサービスではなく、 総体としてサービスに見える。 ▪ 基本的にマイクロブログ(Xなど)風に使えるが、 クライアントを変えることで様々な使い方ができる。 (掲示板、ブログ等) 実際の例 ▶ このあと各項目について説明します ノスター ノストル ノーストリング ノースター ノシュトル ノシュトラ エヌオーエスティーアール
  3. nostrの理念 ▪ censorship-resistant(検閲耐性)を持ち ▪ サーバーに依存せず・信頼する必要なく ▪ 回復力があり ▪ 公開鍵暗号と電子署名に基づいた ▪

    改ざん不能で ▪ P2P技術に依存しない ▪ オープンなプロトコル https://github.com/nostr-protocol/nostr BANや凍結を無意味化し、発言・発信を止めるのを原理的に困難にする 具体的な実現方法については 後ほど説明するヨ
  4. nostrの理念 censorship-resistant(検閲耐性) ▪ アカウントが凍結(BAN)された~ ▪ 投稿を削除しないと復活させないと言われた~ ▪ 永久凍結で二度とアカウントが作れなくなった~ ▪ サーバーから接続ごと遮断された~

    ▪ サイレンスされた~ これらを無意味化するということ ※nostrでも個別のサーバーからのBANが無いわけではありません そもそも課金しないと接続できないところとかもあります。 ネットワーク全体として、実質的に無意味化するという意味です。 https://github.com/nostr-protocol/nostr なんでもやっていわけじゃないヨ 悪いことすると、各リレーから追い出されたり 場合によってはIPアドレス開示請求されるヨ
  5. nostrの理念 サーバーに非依存・信頼する必要なし 従来の中央集権であったり、連合分散系では ▪ 所属サーバーを気にしないといけない ▪ 所属サーバーから追い出されるとフォロー関係が切れる ▪ 所属サーバーに投稿が閉じ込められている ▪

    所属サーバーが突如閉鎖されると縁も投稿も消え去る ▪ 所属サーバーの機能によって使える機能が変わる ▪ 所属サーバーによって使えるクライアントが違う という問題があった。 これらを起こさないということ https://github.com/nostr-protocol/nostr 実際には、いくつかの理由で やっぱり気にする必要はあるヨ かなりマシではあるけどネ
  6. nostrの理念 回復力があり nostrでは ▪ いくつかのサーバーがダウン・通信遮断・放棄・データ削除に至っても ユーザーはほとんど気にならない ▪ 接続サーバーを追加・削除をしても見た目上ほとんど影響ない ▪ 並大抵のことではフォロー関係が失われない

    といったことを実現している。 これにより、ユーザー目線では頑強に見えますし、 サーバー運営者側も、従来のサービスのサーバー運営と異なり、 非常に気楽に立てたり落としたりしやすいです。 https://github.com/nostr-protocol/nostr 実際には、個々人の 使い方によって変わるヨ
  7. nostrの理念 改ざん不能 ▪ 発言してないことを発言したことにされる ▪ 広告を差し込まれる ▪ 発言の中身を書き換えられる ▪ なりすまされる

    これらができるのは、主にリレーサーバーですが、電子署名によって すぐにバレる・破棄できるようになっています。 これにより、接続しているサーバー運営者を信頼する必要がない (=気軽に接続できる)ことになります。 https://github.com/nostr-protocol/nostr あとで説明するけど、 秘密鍵を他人に渡すと これ全部ダメになるから 注意ヨ
  8. nostrの理念 P2P技術に依存しない nostrはP2Pではありません。ブロックチェーンでもありません。 従来のクライアント-サーバーモデルを拡張した構造です。 これにより、利用者は ▪ ポートの開放やグローバルIPアドレスを用意する必要がありません。 ▪ 継続的な起動が必要ありません。 ▪

    モバイル機器から簡単に使用することができます。 ▪ 不安定なノードに振り回されることがありません。 ▪ 他人の情報を不意に中継する心配がありません。 https://github.com/nostr-protocol/nostr 故にリレーサーバーが 必要になるのである 📱 📱 リレー 📱 📱
  9. nostrの理念 オープンなプロトコル nostrはオープンなプロトコルです。 NIP (Nostr Implementation Possibilities) という仕様定義があり、 ここで誰でも提案・論議することができます。 クライアントやサーバーをこの仕様に基づいて

    自由に作成することができます。 APIの利用許可を誰かに求める必要もありません。 拡張性の高い仕様になっており、形式に沿ってさえいれば 独自のデータや付加情報を送信・受信することも許容されます。 https://github.com/nostr-protocol/nips リレーごとに受け入れ基準と 対応範囲があるから、例えば 巨大データが拒否されたり、対応 してない仕様があったりするヨ
  10. nostrの実現方法 中継だけのシンプルなリレーと、 検証能力を持ったリッチなクライアント ▪ リレーの仕事は、指定条件に沿ったリアルタイムな中継と、過去のデータの保管・配信 これ以上のこと(スパムの防止やWebクライアントの提供、課金など)は、やってもいいし、やらなくてもいい。 ▪ クライアントの仕事は、署名と検証、条件の指定、各種ユーザー操作の処理 nostrの機能を実現するための主要な機能は(中継と記録・配信以外は)クライアントがすべて持つ。 リレー

    投稿 イベント中継 フィルタ 保持 & 過去投稿の再配信 Websocket API フィルタ登録 配信 Nostr (Websocket) フィルタ登録 配信 鍵ペア生成 署名 テキスト投稿 メタ情報投稿 フィルタ登録 配信要求 フォローリスト投稿 表示(重複排除) クライアント クライアント クライアント 色々やってくれるリレーに依存する → 万が一のときに困る なので、選び方は人それぞれ
  11. nostrの実現方法 公開鍵署名・公開鍵暗号 ▪ 中央サーバー無くして、どうやって自分を登録・証明するのか ▪ npub1zsmy3hwxxynjtdwr6l3m0clndauyqxsl5jkfmdcnetqs8m9xv50sf0svh0 143648ddc6312725b5c3d7e3b7e3f36f78401a1fa4ac9db713cac103eca6651f ある秘密鍵で署名され、この公開鍵で検証できる正当な情報の発信者 = "私"です。

    ▪ アカウント管理も、IDもパスワードもなく、電子署名して発信されたデータの集合 それを便宜的にアカウントとして見なすのがnostrの仕組みです。 ▪ DMや非公開情報はECDH鍵交換による共通鍵暗号で行われます。 ▪ すべての情報は電子署名されるため、改変することはできません。 ▪ アカウント(秘密鍵)の作成はクライアントで完結します。 ▪ 秘密鍵を漏洩すると、取り返す・無効にすることはできません。 秘密鍵と公開鍵のペアが存在証明であり、この組み合わせは変更できません。 暗号学的に安全な乱数で秘密鍵さえ 生成できればいいので、 手計算でもアカウントを作れる ここで使われているのは、bitcoinで使用されているのと同じ楕円曲線暗号secp256k1です。
  12. nostrの実現方法 NIP-05 ▪ npub1zsmy3hwxxynjtdwr6l3m0clndauyqxsl5jkfmdcnetqs8m9xv50sf0svh0 これでは誰か分かりません。 ▪ [email protected] このような電子メール形式のアドレスで表現するのがNIP-05です。 ▪ Webサーバーにファイルを置くことで実現します。

    .well-known/nostr.json ▪ 逆に公開鍵から、プロフィール情報を取得して Webサーバーに問い合わせ正当なWebサイトの所有者であるかを 検証することもできます。 (有名人へのなりすまし検証) プロフィールに書く名前は 各々が勝手に名乗れるので必要
  13. nostrの実現方法 基本的な流れのまとめ ▪ クライアントは投稿を同時に接続している書込み可能なすべてのリレーに送信します。 その際、電子署名するため途中で書き換えられなくなります。 ▪ またクライアントは読み込み可能なすべてのリレーから配信を受けます。 ▪ そのため、同じリレーに属してる人が同じものを見れます。 ▪

    リレー自体はあまり賢くはなく情報の中継に特化しています。 ▪ これにより、複数のリレーのうちどれかに属していれば同じ動作が期待できるため、 リレーを変えると何かが失われるといった心配をしなくて済みます。 ▪ リレーには多数接続しておくことでより冗長化できます。 ▪ リレーが突然死したり、ブロックしてきたりしても他のリレーが生きていれば 特に何をすることもなく使用し続けられます。 ▪ すべてのリレーが突然死しても、新しいリレーを登録することで、過去の投稿は消える かもしれませんがアカウント(秘密鍵)はそのまま使い続けられます。
  14. nostrの実現方法 具体的なクライアントの動作 1. リレーサーバーに接続します。 最低1つですが、複数接続するのが普通です。Damusの場合は7つあります。 2. 自分自身(ユーザー)の公開鍵から、リレーに自分のプロフィールを取得し、 フォローリスト(公開鍵一覧)を取得します。 ※もちろんクライアントがローカルに保持していてもOKです。 3.

    公開鍵リストをフィルタとして設定し、フォローしている人のプロフィールを要求します。 これをキャッシュしておくことで名前やアイコンをUIに表示できます。 ※もちろんクライアントがローカルに保持していてもOKです。 4. 公開鍵リストをフィルタとして設定し、テキスト投稿を要求します。 これにより、タイムラインが表示できます。 5. 以降、プロフィールの更新やテキスト投稿が増えると逐次配信されるため、UIに反映します。 ▪ 実際にはさらに、特定の人のTLを見に行った場合は、上記のような動作を 特定の公開鍵に対して実施する。
  15. nostrの問題点 ▪ 治安・スパム ▪ データ保証と削除 ▪ なりすまし ▪ 人を探す ▪

    クライアントの権限が強すぎる ▪ そもそもこれはSNSなのか? 他じゃあまり考えないことが いろいろ
  16. nostrの問題点 治安・スパム ▪ censorship-resistant(検閲耐性)により、原理的に治安維持ができません。 ▪ 誰も追い出されないかわりに、誰も追い出せないのです。 ▪ スパムや危険情報の発信者をリレー単位では遮断できますが、 ネットワーク上に存在するのを止められません。 (メールのスパムや詐欺サイトが無くならないのと似ている)

    ▪ 一方、リレーを共有さえしなければ届かないので、 将来的には平和なリレー群と 危険地帯リレー群に分かれるかもしれません ▪ また、金を払わないと投稿を受け付けないリレーというのもあります ▪ もちろんクライアント側でのミュートや非表示化もできます。 有名な日本向けリレーは、 日本以外の地域からの投稿を遮断する ことでスパムなどを抑止しているヨ BANや凍結を無意味化し、発言・発信を止めるのを原理的に困難にする
  17. nostrの問題点 データ保証と削除 ▪ データの保持も削除も保証されていません。 ▪ あるリレーがどの程度データを保持してくれるのか? 期間・容量は? あるリレーが送りたいデータを受け入れてくれるのか? データが突然消えないのか? →

    すべて保証されていません。 ▪ 一方で、一度投稿したデータを消したくなったときは、 削除の要求ができますが、削除機能に対応しているのか? 本当に消えるのか? → 保証されていません。 ▪ 特に、ブロードキャストという操作で他者の投稿を 自分の接続しているリレーに再送信することができるため、 基本的に完全消去は困難です。 クライアントとの相性で 数百あったフォローが吹っ飛んで0に なったりするよ イケてるね
  18. nostrの問題点 なりすまし ▪ 公開鍵は偽装できませんが、人間が読むには複雑すぎます。 ▪ 中央管理するサーバーがないため、プロフィールや名前はすべて自称です。 ▪ 検証するには、有効な署名や公開鍵を、外部サイトや手渡しなどで 受け取る必要があります。 ▪

    ちなみに、フォローは公開鍵ベースで行われるため、 一度フォローしてしまえばなりすましは無視できます。 有名SNSでも なりすまし自体はあるし 特有ってほどでもないけどネ Don't Trust. Verify
  19. nostrの問題点 人を探す ▪ 人を探すのが大変です。 ▪ 名前で探すことはできないかもしれません。 ▪ NIP-05か、公開鍵のどちらかがあれば確実にフォローはできます。 ▪ しかし、接続先のリレーが共通でない

    & 不明な場合は、 公開鍵が特定できてフォローしていたとしても投稿を受け取れません。 ▪ 公開鍵を渡すときは、有名なリレーに参加しておくか、 リレーを併記しておきましょう。 (nostr対応のプロフィールサイトを利用すると リレーは自動で表示されます。) ▪ nprofile形式を使うのも良いですが対応ソフトが限られます。 ドコー
  20. nostrの問題点 クライアントの権限が強すぎる ▪ リレーに権限がほとんどなく、クライアントの権限が強すぎます。 ▪ これはつまり、なにか有事の際(秘密鍵を漏洩した場合など)に 泣きつき先がないことを意味します。 ▪ 秘密鍵を渡すことは、取り消し不能なFull Access権限を

    与えることになります。 ▪ 現状、キーローテーションや委任の仕組みは、 無いわけではないですが実用的ではありません。 ▪ そのため、 ・信用できるクライアントを探し、それを使う ・基本的にはNIP-07を使用し、秘密鍵を露出しない などの自衛手段を取る以外にありません。 ▪ マルウェアなどで不正に奪取されたら終了です。 秘密鍵は人間が扱えるものじゃない
  21. nostrのおもしろさ ▪ あまりに自由度が高いクライアント プロトコルの自由度が高すぎるので、 ・ブログが実装されたり、 ・掲示板が実装されたり、 ・キーバリューストアDBにされてみたり、 ・サイバー空間が実装されたり、 ・MMOみたいなのが実装されたりしている 独自実装も提案も活発

    ▪ 爆速配信 WebSocketによるリアルタイム配信のため、他人の投稿やリアクションが 爆速で来る。投稿して0.3秒後にはFavが飛んでくる。 他じゃありえないことが いろいろ https://github.com/nostr-jp/awesome-nostr-japan
  22. もっと詳しく知りたくなったら ▪ 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