Nostrの仕組み

従来のSNSが抱える問題

ツイッターやフェースブックといった従来のSNSには問題があります。ここではツイッターを例に考えてみます。ツイッターを運営しているのは、ツイッター社(現:X社)です。ツイッターの情報はすべて、ツイッター社のサーバーで管理されています。そのため、私たちがツイッターを利用しようと思った場合は、メールアドレスとパスワードをツイッターのサーバーに登録する必要があります。そしてツイッター社が許可を出した人だけにツイッターを利用する権利が与えられます。これは、犯罪活動を行うアカウントを停止したりするのには役立ちますが、同時に常識的に考えれば何も悪いことをしていない人でも、ツイッター社の方針によっては利用できなくなるリスクがあるということを意味しています。どうしてもツイッターを利用したい場合は、どんなにそれが非常識な内容であってもツイッター社の方針に利用者は従い続けなくてはなりません。いままでのツイッターの方針は常識的なものでしたので、このようなことはありませんでしたが、イーロン・マスク氏の買収騒動の後にこうした問題が表面化してしまいました。ジャーナリストのアカウントが凍結されたりするのはその最たる例と言えます。他にも例えばツイッター社の手違いで、利用者の個人情報が流出したり、投稿が消えてしまうリスクもあります。こういった問題はツイッター社が悪いわけではなく、情報を一つのサーバーで一元管理するシステム自体に初めから脆弱性があるということです。

Nostrの登場

こうした問題を対処するためには、一つのサーバーに依存しない、ソーシャルネットワークが必要で、そこで出てきたのが、Nostr(ノスター・ノストラ・ノストル...)です。ユーザーは投稿するときに、複数のサーバーに投稿します。情報のやり取りを図で見てみましょう。

アリスはサーバーA、Bに、ボブはサーバーB、Cに投稿したり閲覧したりできるように設定していたとします。サーバーAにボブの投稿はありませんが、サーバーBにはボブの投稿がありますので、アリスはボブの投稿を閲覧することができます。同じようにサーバーBでボブはアリスの投稿を閲覧できます。この場合、サーバーBに障害が起きて使えなくなると、アリスとボブはやり取りができなくなってしまいますので、もう少し多くのサーバーと接続しておいたほうがよいでしょう。こうしたサーバーをリレーサーバーと呼んでいます。リレーサーバーを利用者は選択することができます。Nostrは特定のサービスを指すのではなく、Notes and Other Stuff Transmitted by Relays (リレーで送信されるメモとその他のもの)の略で、上の図のような仕組み全体のことです。Nostrを実現するために、NIPs(Nostr Implementation Possibilities 訳:Nostr実装の可能性) という規格が定められています。GitHubでNIPsに関する提案を行うこともできます。

ユーザーの認証

ここで出てくる疑問が、特定のサーバーに依存していないのに、いかにしてユーザーを認証するかという疑問です。Nostrでは公開鍵暗号の仕組みを利用することで、上手に解決しています。公開鍵暗号では、公開鍵と秘密鍵があります。秘密鍵から公開鍵を生成することは可能ですが、公開鍵から秘密鍵を見つけだすことは極めて難しいことを利用した暗号方式らしいです(あんまり詳しくない)。ユーザーの投稿を秘密鍵で暗号化します。暗号化されているので、この投稿を読むことはできませんが、ユーザーが公開している公開鍵を利用することで、この投稿を普通の文に変換することができます。秘密鍵を持っているのは投稿したユーザーだけですので、公開鍵で普通の文に戻せる投稿はすべて、本人が投稿していることが確認できます(違ったらごめんなさい)。Nostrでは、秘密鍵と公開鍵のペアで本人を認証しています。秘密鍵が流出すると、誰でも投稿を書き込むことができてしまうため、秘密鍵は絶対に秘密にしなくてはなりません。普通のサービスで言うところのパスワードみたいなものです。ただし、一度登録した秘密鍵はユーザーを識別する公開鍵とセットですから、パスワードのように変更することはできません。万が一流出した場合は、他の誰かとアカウントを一生共有しつづけるか、別なアカウントを作るかしか方法がありませんので、くれぐれも秘密鍵の管理には注意が必要です。パスワードマネージャーなどの安全な場所で保管する必要があります。また、WebでNostrを利用するには、Nos2xなどの鍵を管理するブラウザ拡張機能をインストールすることが推奨されます。