Nostr

Fumi
19 min readFeb 5, 2023

--

Nostrという新しい分散型のソーシャルプロトコルを試してみています。

私の公開鍵 はこちらです。

npub1zkquutx5q7c3f8pv5ad2wgszrwxkmnmj9769dxf7r3uvnf92mn0sas5dnh

Nostrとは

Notes and Other Stuff Transmitted by Relays、略してNOSTR。

こちらがGitHub。

The simplest open protocol that is able to create a censorship-resistant global “social” network once and for all.

It doesn’t rely on any trusted central server, hence it is resilient; it is based on cryptographic keys and signatures, so it is tamperproof; it does not rely on P2P techniques, therefore it works.

This is a work-in-progress. Join the Telegram group!

Nostrとは最もシンプルでオープンなプロトコルで、検閲耐性のあるグローバルなソーシャルネットワークが作れるよ!中央のサーバには依存せず、暗号鍵と署名に基づくので改ざん防止になり、P2P技術に依存しないのでうまく動くよ!

従来のソーシャルメディアは、Twitterを使う時はTwitter社がアカウント情報も、投稿したデータも、友達の情報 (friendlist)も、何もかも中央サーバ側で保有しており、Twitter社にアカウントをbanされたらどうしようもないし、別のソーシャルメディアに友達リストを持ち出すこともできませんでした。Nostrは、分散型のソーシャルプロトコルなので、特定のサーバやアプリに依存しません。

例えば私はAmethystというNostrプロトコルに対応したAndroidアプリでNostrを使い始め、Damusという同じくNostrプロトコルに対応したiPhoneアプリを使っている人達を友だちとしてフォローすることができました。また、Snort.socialという別のウェブクライアントにAmethystで使っている秘密鍵を入れることでAmethyst同様ログインし、同じアカウントとして投稿したり、友達のポストを読んだり、自由に行うことができました。

Nostrの使い方

Very short summary of how it works, if you don’t plan to read anything else:

Everybody runs a client. It can be a native client, a web client, etc. To publish something, you write a post, sign it with your key and send it to multiple relays (servers hosted by someone else, or yourself). To get updates from other people, you ask multiple relays if they know anything about these other people. Anyone can run a relay. A relay is very simple and dumb. It does nothing besides accepting posts from some people and forwarding to others. Relays don’t have to be trusted. Signatures are verified on the client side.

Nostrの使い方は、最初はとまどうと思いますが、使い始めてみるとかなり簡単に使えるようになっています。

  1. Nostrクライアントをダウンロードし、公開鍵・秘密鍵を取得
  2. 秘密鍵を使ってログイン
  3. プロフィールをアップデート(名前とか写真とか)
  4. ポストを書く
  5. 自分の公開鍵を友達に知らせてフォローしてもらう
  6. 友達の公開鍵を探してフォローし、みんなのポストを見る

Nostrは「クライアント」と「リレー」で出来ています。

ユーザーは「クライアント」(webクライアントでもネイティブクライアントでもOK)を入手し、ポストを作成し、自分の秘密鍵で署名し、他のサーバーに送信することができます。

友達のポストを見るには、友達の公開鍵 (NPubと呼ばれるPublic Key)をもらい、それを検索すると、いくつかのリレー経由でその人が見つけることができ、フォローすることで別のサーバ・アプリにいる友だちのポストも見ることができます。メールアドレスとか名前とか電話番号等の登録が一切ないのも特徴の一つかと思います。

普通のユーザーとしてはそれでOKです。

裏で動いてくれている「リレー」は誰でも作ることができ、とてもシンプルで、投稿を受領したり配信するのみ。世界中のリレーのリストはこちら

リレー・クライアント・ライブラリ・ツールなどのまとめ

Jack Dorseyが「Nostrを使うには、iPhoneならDamus、AndroidならAmethyst、ウェブならsnort.social」とツイートしたことでこれらのクライアントを使う人がわっと増えたようです。なお、DamusはAndroid版開発用のクラウドファンディングの目標額を超えたのでそのうち出てくるかも。(Damusの語源はノストラダムス)

Jackの本命はAT ProtocolとBluesky?

Jackは 14BTC(当時$245,000 相当のBitcoin)をNostrの開発に投資しており、上記の通りインフルエンサー力を発揮してNostrを宣伝しています。

Jack Dorsey Gives Decentralized Social Network Nostr 14 BTC in Funding

ただ、Jackがこの投資を決めた時のカジュアルさはこちらで語られている通り。

Jack自身が開発に関わっているのはこれまた別の分散型ソーシャルメディアプロジェクト「Bluesky」で、プロトコルは「Authenticated Transport (AT)Protocol」。(現在はプライベートベータ)AT Protocolは「ソーシャルメディアアカウントのポータビリティ、アルゴリズムの選択、相互運用性、パフォーマンスを重要視」しているとのこと。

AT Protocolのドキュメンテーションはこちら

BlueskyのGithubはこちら

Blueskyが分散型ソーシャルメディア「AT Protocol」概要発表

よって、NostrがTwitterキラーかというと実はそうでもないかもしれませんが、「分散型ソーシャルメディア」と一言で言っても使ってみるとだいぶ異なるため、色々試してみるというのはよい経験だと思います。Mastodonしかり、Nostrしかり、(リリースされたら)Blueskyしかり。

Nostrクライアント

同じNostrアカウントでも、クライアントによってできること・ユーザ体験が異なります。

Nostrのクライアントは既にかなりたくさんあり、それぞれやれることが異なります。

比較表

左の画像はSnort、右はAmethystですが、Snortは他人のポストに対して「共有・IDコピー・ミュート・ブロック・日本語に翻訳」しかできませんが、Amethystだと「テキストやPublic Keyのコピー、ブロードキャスト、ユーザを隠す、スパム・詐欺を報告、なりすまし、不適切なコンテンツ、違法行為の報告」などがあります。クライアントの開発者が何を重視してアプリを作っているかが如実に現れます。

Damusは写真の投稿が直接はできないようなのですが(画像をアップロードしてURL経由で投稿)、Amethystはできます。ただしこれも実際は別サーバに画像が送られてURLを取得して表示しているので、バックエンドでやっていることは同じ。要はユーザにどういうインターフェースを見せるかですね。

Snortだと自分が投稿したポストを削除することができますが、Amethystは削除できません。

Snort(とDamus)はメインのタブに「Global」と呼ばれる色々な人のポストが流れるタイムラインがありますが、AmethystはそれがないかわりにDMのセクションにAmethystユーザのタイムラインと Nostrユーザのタイムラインが隠れています。その横にある「New Requests」タブがいわゆる一般的なDMです。

始め方が簡単 vs 秘密鍵の漏洩リスク

Nostrは、メールアドレスや電話番号などを一切入れなくても、最初に取得する秘密鍵・公開鍵さえあれば使い始めることができます。

Nostrの始め方が簡単な裏返しとして、秘密鍵をなくしてしまうとアクセスすることができなくなります。メアドも電話番号も入れないので、「パスワードリセット」みたいに秘密鍵を問い合わせるということ自体ができません。

また、秘密鍵を漏らしてしまうとアカウントを完全に乗っ取られてしまいます。怪しい連携サイト・アプリに秘密鍵を渡さないように気をつけましょう。(ペイメントと連携したらお金も盗まれたら怖いなと思ったのですが、ペイメントは秘密鍵とは無関係になっていると教えて頂きました。ありがとうございます!)

普通のSNSでもパスワードを漏らしたら乗っ取られるので同じことではあるのですが、パスワードは*****のように隠されたりするところ、秘密鍵は隠されていないアプリもあります。また、公開鍵と秘密鍵が両方非常に長い文字列で似ているので、いつかは間違えて秘密鍵を公開してしまう人が出るのではないかと心配です。

npubで始まる文字列が公開鍵(public)、nsecで始まる文字列が秘密鍵(secret)なので、nsecの方を公開している人を万が一見つけてしまったらこっそり教えてあげましょう。

検閲がない vs 言いたい放題になる可能性

Twitterでは、2021年1月6日の米国議会襲撃事件に際して、Donald Trumpがツイートで扇動したとしてアカウント停止をしたり、他のソーシャルメディアへのリンクをツイートしたジャーナリスト達のアカウントを停止したり、Twitter社による「判断」が入ります。これは検閲だと文句を言う人もいるでしょうが、ユーザあるいは社会にとって安全であるようにケアされていたとも言えます。

Permanent suspension of @realDonaldTrump

Self-Proclaimed Free Speech Champ Elon Musk Announces Twitter Censorship Policy

No One on Twitter Is Safe From Elon Musk

これに対し、Nostrは、Githubの一番上に書いてある説明の一行目からして、「検閲耐性がある」プロトコルを標榜しており、基本的には検閲されないソーシャルネットワークを目指しています。(ただしglobalに投稿される画像で不適切なものはマスキングされるなど、一定の処理は行われているようです。)

The simplest open protocol that is able to create a censorship-resistant global “social” network once and for all.

Amethystなど、Nostrクライアントによっては「スパム・詐欺、なりすまし、不適切なコンテンツ、違法行為の報告」等ができるようになっています。

どんなアプリもリリース当初はアーリーアダプターなギークによる牧歌的な世界なのですが、ユーザーが増えるにつれて修羅の世界に変わっていってしまうこともあるので、ヘイトスピーチがはびこらないネットワークとして存続できるかは、ユーザの側にもかかってきます。

そもそもコンテンツ・モデレーションはソーシャルメディアを運営する上で最も難しいものの一つではないでしょうか。

「Twitterを自由な言論の場にするよ!」というのは素晴らしいことですが、企業経営として広告収入を必要とするからには広告主がブランドを毀損するとして嫌がるような人種差別とかエロとかは禁止しないといけません。国によってルールも異なりますし、政府からの削除要請も無視できません。ユーザが増え、影響力が高くなればなるほど舵取りが難しくなります。

このあたりをまとめた下記の Verge の記事も今となっては懐かしいし、この記事を受けて Elon がTwitterプロフィールの住所を “hell” にしたのも大昔のことのようですがたった3ヶ月前。

Welcome to hell, Elon

サーバなし・しがらみなし・簡単 vs Mastodon

Nostrに似た分散・連合型(federated) ソーシャルネットワークのMastodonはサーバに参加し、サーバ毎にコミュニティができ、サーバ同士が繋がってコミュニケーションができ、サーバ移動ができるのでロックダウンはされないという仕組みでしたが、初めて使う人はどのサーバに入ればいいのかわからなかったり、サーバによってはコミュニティが喧嘩になったりサーバ管理者を怒らせてサーバから追放されるみたいな事案が起きたり、色々な問題が起きていたそうです。(私が初期の頃立てたFumidonサーバは私以外誰もおらず、現在参加させていただいているGurudonサーバは平和なので、個人的にはトラブルを見たことがないのですが)

それに対してNostrはどこかのサーバに参加するということはありません。秘密鍵と公開鍵を持って、どのクライアントでもログインして投稿できるし、友達リストも紐付いているので別のクライアントでも同じようにポストを見ることができます。身軽!

Nostrはサーバがないのでサーバ管理者からbanされるということはありませんが、将来的にはどっかのrelay管理者からbanされるということはありえなくはない。ただ、relayが既に世界中に山程あるので、検閲耐性的にもrelayがトラブルになるなどに対する冗長性確保としても、複数のrelayにつないでおいた方が安全かもしれません。(自分でrelayを作ってみるということもできちゃう)

また、Mastodonは初心者にはとっつきにくいと言われています。Nostrも最初はとまどいますが、Twitterに似ていることもあり、結構慣れるのは早い気がします。

ペイメント vs Twitter

Twitterになかった物の一つとして、ペイメントが挙げられます。

昨今人気のSNS「POST」は投稿に対して「いいね・リポスト・コメント」に加えて「チップをあげる」ボタンが全ての投稿についています。

Nostrの場合、実装はアプリによりますが、Damusを始めとするいくつかのクライアントはLightning Networkと呼ばれるブロックチェーンベースのペイメントを使ったチップの受け渡しができるようになっているようです。デモ動画はこちら。

なお、Elonは昨日「TwitterはTwitter Blue(有料)ユーザに対して広告収入を分配する」と発表しました。

本人認証

Nostrは使い始めるのに必要なのが秘密鍵だけなので、アカウントを作るのが非常に簡単です。ほかのSNSでもできるといえばできますが、偽アカウントを作るのも簡単です。

例えばNostrに「Elon Musk」がいたのですが、おそらくElon Muskの名前を入力してElonの写真を入れただけの偽Elonかなと。

JackやEdward Snowdenなど、Nostrユーザ達はTwitterで自分のPublic Keyをお知らせして本人のアカウントだとわかるようにしています。

そこで作られたのがこのNostr Directory。Twitterアカウントと紐付けて、TwitterのフォロワーがNostrで本人を見つけやすいようにしています。

私も無事Nostr Directoryに掲載されました :)

また、Twitterの認証バッジのように、Nostrにも認証バッジがあります。クライアントによって見え方が違いますが、左のSnortだと名前の下の行のチェックマーク、右のAmethystだとアイコンの右上のチェックマーク。

こちらはNIP-05と呼ばれ、ドメイン認証になっているのでファイルを置けるドメインを持っている必要があります。

NIPNostr Implementation Possibilitiesの略で、Nostrと互換性のあるリレーやクライアントソフトウェアのための様々な仕様のことを指し、NIP-05はNIPの中の一つのスペックになります。

NIPのリストと解説へのリンクはこちら

NIP-05の設定方法はこちら:NIP-05 simple guide

自分でドメイン持ってないけど認証されたいよ!という方向けに、個人の方が代行してくださっています。例えばこちら:

nostr-check

Nosutora

ただ、認証バッジがついていたからといって誰かが本人性を確認しているわけではないので、書いてある「名前の本人」とは限りません(上述の偽Elonもバッジ付き)。

$Damus 詐欺

実にweb3らしいといえばweb3らしいのですが (^^;;

web3の世界では、プロジェクトを立ち上げるとトークンを発行し、初期メンバーはそれを安く手に入れることができる、みたいなことがよくあります。要は成功しそうなプロジェクトであればあるほど、後で値上がりすることが期待される。DamusアプリがAppleの審査を通ったのが2/1ですが、アプリ公開3日後にはさっそく$Damusという存在しないトークンが発行されたかのように詐欺ツイートが始まり、Damus公式Twitterアカウントが「詐欺だよ!これは詐欺だよ!」とモグラ叩きをせざるを得ない状況に。

実際は、Nostrはブロックチェーンを使っていないし、Damusはトークンを発行していません。ただし、Nostrを最初に始めたfiatjafさんとか、NostrやDamusの開発者jb55さんが元々Lightningなどブロックチェーン系の開発に多く携わっていたことから、web3/Blockchain系の親和性がとても高くなっています。

もっと詳しくNostrについて知りたいという方は、Nostr/Damusの開発者jb55ことWilliam Casarinのインタビュー2本をどうぞ:

What Is Nostr & How Does It Work? | E54

TFTC rip 348: Building “Web 3.0” the right way on Nostr with jb55

ソーシャルネットワーク以外へのNostrの活用

ソーシャルネットワークとしてのNostrについては、ここまで。

Nostrというのは “Notes and Other Stuff Transmitted by Relays”というプロトコルであるということは冒頭に書いた通りなのですが、これは「Relayサーバを介してメモや他の色んな物を通信するよ」と言っているだけで、ソーシャルネットワーク専用プロトコルというわけではありません。動画の中でもWilliamが話している通り、ソーシャルネットワークはあくまでアプリの一例で、他のアプリを作ろうと思えば作れます。こちらのクライアントリストを見ていると、ブログツールやチャットツールなどは既に開発されているようですね。

ちょっと変わったものとしては、Nostrでチェスが遊べるアプリもあります(笑)

jesterui.github.io

--

--

Fumi
Fumi

Written by Fumi

Currently explorer. Ex-Niantic, ex-Google, ex-NTT, ex-Interscope, ex-Technorati and ex-Digital Garage.

No responses yet