はじめに
Twitter の共同創業者の一人、Jack Dorsey 氏がTwiiter でこのようなツイートをしました。
「オープンプロトコルに向けた1つのマイルストーン。Nostr がApple App Store にDamus を公開しました。Google Play Store はAmethyst 、Web 向けにはsnort.social (代表で1つ挙げると)があります」
知らないキーワードばかりだったので気になって調べてみました。
Nostr
- Nostr – Nostr公式
Nostr の公式サイトにあった自己紹介文です。
A decentralized network based on cryptographic keypairs and that is not peer-to-peer, it is super simple and scalable and therefore has a chance of working.
“What is Nostr?” nostr.com
「Nostr は公開鍵暗号技術をベースにしたピアツーピアではない非中央集権的なネットワークで、非常にシンプルで拡張性があるのでうまく機能することが期待できます」
詳しいことはリンク先の下記ページに記載されていました。
- nostr-protocol / nostr – GitHub
書かれていることをざっくりと箇条書きしてみました。(かなり省略してます)
- Nostr とは
- 「Notes and Other Stuff Transmitted by Relays」の略
- 検閲に強いグローバルな”ソーシャル”ネットワークを提供するプロトコル
- 信頼できる中央のサーバに依存せず、P2P 技術にも依存していない
- 暗号鍵と署名により改ざんに対する耐性がある
- Nostr の構成
- クライアントとリレーサーバで構成されている
- クライアントはユーザが使う(ネイティブクライアントやWebクライアントなど様々な方法で使える)
- リレーサーバは誰かが稼働させる
- Nostr の仕組み(投稿はどのように処理されるかなど)
- 書いた投稿は自分の鍵で署名して、誰かがホストしたリレーサーバを経由して送信される
- 他の人の更新情報を得るためには複数のリレーサーバに問い合わせをして、投稿を受け入れているリレーサーバは転送のみを行う。クライアント側で署名を検証するのでリレーサーバの信頼性は問わない。
- Twitter とMastodon の課題について
- Twitter の課題を解決する代替手段のニーズがある:広告、ユーザを中毒にするために色々やってる、フォロワーの実際のフィードが表示されない、ban やシャドーban がある、スパムが多い
- Mastodon の課題:第三者が管理するドメイン名にユーザID が付与されている、サーバの管理者はTwitter のようにユーザをban できる、etc.
更に詳しく知りたい場合は、Nostr のプロジェクトやリソースを集めたキュレーションリストのサイトを漁ってみるとよさそうです。
Damus, Amethyst, snort.social
この3つはいずれもNostr クライアントで、3つとも動作する環境が異なります。
ユーザは環境によって使うものを選ぶことになります。
- Damus
- ネイティブクライアント(iOS 向け)
- Damus – App Store (Apple)
- Damus – Damus公式
- damus-io / damus – GitHub
- Amethyst
- ネイティブクライアント(Android 向け)
- Amethyst – Play ストア(Google)
- vitorpamplona / amethyst – GitHub
- snort.social
- Web クライアント(ブラウザ向け)
- snort.social – snort.social (公式)
- v0l / snort – GitHub
いずれもNostr のクライアントという位置付けのものなので、作成した自身のNostr アカウントは異なる環境のクライアントでもログインして使うことができます。
デザインやUI はそれぞれ個性を出していますが、できることはTwitter やMastodon と同じような感じで、投稿やフォローをすることができ、タイムラインにフォローした人の投稿が流れます。
なので「ツイッターに代わる可能性があると発言する人もいる」のだそうです。
- 分散型SNS「Damus」がApp Storeに登場──ジャック・ドーシー氏が開発資金を寄付 (2023.2.2) – coindesk JAPAN
手順(作業の流れ)
実際にNostr クライアントを使ったNostr アカウントを作成から、他のNostr クライアントでログインできるかを確認した手順です。
今回はDamus でNostr アカウントを作成しましたが、他のNostr クライアントでもNostr アカウントを作成することはできるので、iOS 端末を持っていない方はAmethyst やsnort.social でNostr アカウントを作成して始めることができます。
(iPhone) DamusでNostrアカウント作成
iPhone を使って、App Store アプリでDamus を検索します。
使ったiPhone が初代SE のせいか、一部レイアウトが崩れている箇所がありますが無視してください。
- Damus – App Store (Apple)
Damus アプリをインストールしたら開きます。
Damus アプリが起動したら[Create Account] をタップします。
既にNostr アカウントを持っている場合は、[Login] からログインすることができます。今回はDamus アプリを使ってNostr アカウントを作成する手順なので、ログインについての解説は省略します。
EULA(使用許諾契約書)の内容を確認して[Accept] をタップします。
作成するアカウントのユーザ情報を入力して[Create] をタップします。
- Username (必須)
- 頭に@ がついて表示されるユーザ名
- Display Name (任意)
- ユーザの表示名。間にスペースを入れることができる。
- About (任意)
- 自己紹介文
- Account ID
- 自動で作番された公開鍵の文字列が表示されています(表示が途中で切れています)
“Welcome, Giant Rodent!” と表示されているので、このタイミングでアカウントは作成されているようです。
Public Key に表示されているnpub で始まる文字列が公開鍵です。
直前の画面では途切れていましたが、ここでは全体が表示されています。
この公開鍵は公開して使用する情報でユーザの識別に使われます。Twitter の自身のアカウントのプロフィール欄にこの公開鍵の文字列を掲載して、友人や知人がDamus で公開鍵を使ってアカウントを検索してフォローするというような使い方がされています。
公開鍵の左のアイコンをタップすると真ん中の画面の状態になります。
公開鍵はクリップボードにコピーされるので、必要に応じてパスワードマネージャーなどに保存します。
Private Key が表示されました。nsec で始まる秘密鍵の文字列が表示されています。(秘密鍵は非公開にする必要があるものなのでマスキングしています)
この秘密鍵はログイン時に使用する情報で、他人に知られないように秘密に管理する必要があります。
実際にログインを試してみると、入力するのは秘密鍵のみでパスワードなど別の情報の入力は求められませんでした。誤ってTwitter のプロフィール欄に掲載すると第三者が自身のアカウントにログインしてなりすましの投稿などができてしまうので扱いには注意が必要です。別のデバイスでログインできたのでリスクベース認証はしていなそうです。
秘密鍵の左のアイコンをタップすると右の画面の状態になります。
秘密鍵はクリップボードにコピーされるので、パスワードマネージャーなどに保存しておきます。失念するとログインできなくなるので保存する必要があります。
[Let’s go!] をタップします。
作成したアカウントのホーム画面が表示されました。
Posts & Replies にDamus アカウントの投稿と返信が表示されています。
Posts をタップすると、Damus アカウントの投稿が表示されています。
デフォルトでDamus アカウントをフォローしているのでDamus アカウントの投稿が表示されているようです。
これでNostr アカウントの作成が完了しました。
投稿してみる
右下にある[+] をタップして投稿してみます。
投稿するメッセージを入力して[Post] をタップします。
投稿した後に左上のアイコンからプロフィール画面を見ると、投稿したメッセージが表示されていました。
ちなみに、Twitter では投稿をTweetと呼んでいましたが、Nostr ではPost と呼ぶみたいです。
フォローしてみる
Jack Dorsey のNostr アカウントをフォローしてみます。
Jack Dorsey がTwitter でNostr アカウントの公開鍵をツイートしていたのでこれをコピーして使います。
下の虫眼鏡アイコンをタップして表示された画面のSearch 欄にコピーした公開鍵を入力すると”Goto profile <公開鍵>” と表示されたのでタップします。
Jack Dorsey のアカウントの画面が表示されたので[Follow] をタップするとフォローできました。
(Android) Amethyst でログイン
Android スマホを使って、Play ストアでAmethyst を検索します。
- Amethyst – Play ストア(Google)
Amethyst アプリをインストールしたら開きます。
Amethst アプリが起動したら”nsec / npub / hex private key” にNostr アカウントの秘開鍵を入力し、”I accept the terms of use” をONにして[Login] をタップします。
Nostr アカウントを持っていない場合は、[Generate a new key] からNostr アカウントを作成することができます。(解説は省略)
アカウントのホーム画面が表示されました。
New Threads にDamus アカウントの投稿と、先ほどDamus アプリで投稿した自分のアカウントの投稿が表示されています。
左上のアイコンをタップすると、Damus で作成したアカウントのUsername とDisplay Name が表示されています。
Damus で作成したNostr アカウントでAmethyst アプリにログインできました。
投稿してみる
右下にある[+] をタップして投稿をしてみます。
投稿するメッセージを入力して[Post] をタップします。
New Threads に投稿したメッセージが表示されました。
(WebApp) snort.social でログイン
Web ブラウザを使ってsnort.social のページを開きます。
今回はMac のChrome を使いました。
- snort.social – snort.social (公式)
右上の[Login] をクリックします。
Login ページが表示されたら”nsec / npub / nip-05 / hex private key…” にNostr アカウントの秘開鍵を入力し、[Login] をクリックします。
Nostr アカウントを持っていない場合は、[Generate Key] からNostr アカウントを作成することができます。(解説は省略)
アカウントのホーム画面が表示されました。
Posts にDamus アカウントの投稿と、先ほどDamus とAmethyst アプリで投稿した自分のアカウントの投稿が表示されています。
続けて、右上のアイコンをクリックしてアカウントのページを表示します。
Damus で作成したアカウントのDisplay Name と公開鍵が表示されています。Display Name の右に”follows you” という文言があったので気になって調べてみると、デフォルトで自分自身をフォローしていました。違和感がありますが、とりあえず気にしないでおきます。
Damus で作成したNostr アカウントでsnort.social にログインできました。
ちなみに、このアカウントのページのURL は以下のようになっていました。
ドメイン名の右側にある長い文字列はアカウントの公開鍵の文字列になっていました。このように公開鍵は公開されたアカウントの識別子として使われています。
アカウントのプロフィール情報の登録
Damus アプリを使って、アカウントのプロフィール情報を登録します。
ホーム画面の左上にあるアイコンをタップして表示されたメニューのProfile をタップし、表示されたプロフィール画面の右上の[Edit] をタップします。
YOUR NAME とUSERNAMEは登録済みなので、追加で下記の情報を入力して[Save] をタップします。
- PROFILE PICTURE
- アイコン画像のURL を指定します
- Gravatar に登録しているアイコンのURL を指定しました
- BANNER IMAGE
- バナーの画像のURL を指定します
- 自身のブログにアップロードしている画像のURL を指定しました
- WEBSITE
- ウェブサイトのURL を指定します
- 自身のブログのURL を指定しました
- ABOUT ME
- 気の利いた自己紹介文が思いつかなかったのでとりあえず”カピバラ”
登録した内容が反映されました。
Amethyst アプリでも確認してみます。
snort.social も確認します。
Damus アプリで登録したプロフィール情報が他のクライアントでも反映されていました。
とりあえず、普通に使えそうな状態にはなりました。
あとがき
作成したNostr アカウント
わたし(GiantRodent)のNostr アカウントの公開鍵はこちらです。
フォローしてもらえたら嬉しいです。
npub1jn36rstx7nl2sku5suppnejxrh5jx2t08lj8x6eyc03rknqvg0jqgycpxe
GiantRodent の公開鍵
鍵ペア(公開鍵/秘密鍵)について
鍵ペアの取得方法
Nostr の公式サイトでもアカウントを作成できました。ここではアカウントを作成するというより、生成された鍵ペアを取得するというUI になっていました。
- Nostr – Nostr公式
この鍵ペアの方式が何か気になって調べてみると、vanity pubkey やvanity address と呼ばれているもので、好みのprefix やsuffix が付いた公開鍵の鍵ペアを自身で生成することができるようでした。
Edward Snowden の公開鍵のprefix “sn0wden” を見て真似したくなりましたが、生成する仕組みがBitcoin のマイニングのようにprefix やsuffix の桁数が多いほど計算コストがかかるのだそうで止めておきました。
下記のサイトの情報が参考になりました。ありがとうございました。
- Nostr でシャレた公開鍵を使う (2023.2.6) – Zenn
- awesome-nostr – (“Vanity pubkey mining”の辺り)
Nostr クライアントに公開鍵を使ってログインする
実は、公開鍵を使ってログインすることもできます。ただし閲覧専用で。
他人の公開されている公開鍵を使ってログインすると、あたかも他人のアカウントにログインしたかのような状態になります。何とも言えない仕様。
秘密鍵を安全に管理する
秘密鍵はNostr クライアントにログインする際にしか使わないので、秘密鍵は単体でユーザID とパスワードを兼ねたものと考えて扱えばよいかもしれません。
間違えて秘密鍵を第三者に提供したり公開することがないように、パスワードマネージャーには秘密鍵のみを保存して、公開鍵は保存しない方が安全に運用できる気がします。
公開鍵はユーザID として第三者に公開・提供する使い方をするので、ログイン以外の場所で公開鍵を入力するシーンがあったらDamus のProfile 画面からコピーするというルールを決めて運用すれば、間違えて秘密鍵を公開するというミスは防げそうです。
パスワードマネージャーに保存する際の名前
Damus, Amethyst はあくまでもNostr クライアントなので名前は「Nostr」にしました。
Damus でログインするのに”Nostr” を探すのは正直不便なので、複数のクライアントを使わないのであれば”Damus” のようにクライアントの名前にしもよいのかも。
なりすまし対策
NIP-05
アカウントが本人のものであることを認証する方法のようです。
自身が管理するWeb サーバ上に必要な設定をして、Nostr アカウントにそのWeb サーバの設定を指す情報を登録することで、認証バッジを表示させることができるようです。
- ツイッターライクなSNS「Nostr」を Damus アプリで使う。初期の設定と、認証バッジを付ける手順 (2023.2.4) – Lifehacking.jp
- nostr-protocol / nips / NIP-05 – GitHub
nostr.directory
Twitter 上で他のユーザにNostr アカウントを持っていることを伝える方法として、Twitter のプロフィール欄にNostr の公開鍵を掲載したり、公開鍵をツイートする方法がありますが、それ以外の方法として、nostr.directory というサイトにNostr アカウントとTwitter アカウントが紐づいていることを登録することで、このサイトでTwitter のユーザ名を入力してそのユーザがNostr アカウントを持っているか確認できるようにすることができるようになります。
手順を掲載しておきます。簡単です。
[Tweet your nostr pubkey] をクリックするとTwitter のツイートの入力フォームが所定の文言が入力された状態で開きます。
“Paste your nostr public key here” という箇所をNostr アカウントの公開鍵に置き換えてツイートします。これで、nostr.directory のサイトで検索すると検索結果に表示されるようになります。
Badges が幾つか並んでいて、その中に前述のNIP-05 があるので、ここでもNostr アカウントがなりすましでないかを確認できるようになっています。
リレーサーバの選択について
Damus クライアントでNostr アカウントを作成したら、デフォルトで7つのリレーサーバが設定されていました。
削除や追加を乱暴にしているとアカウントのプロフィール情報や投稿が消えてしまいそうなので、少し仕組みを調べてから変更してみようと思います。
さいごに
Jack Dorsey といえば分散型SNS「Bluesky」を開発中であることを発表していたので、今回の発表はそれのことか?と思ったら別のものでした。
Bluesky もベータ版のウェイトリストの募集を始めてから3ヶ月ほど経っているので、そろそろ新しい動きがないか気になるところです。
- Bluesky – Bluesky(公式)
- Twitter創業者の立ち上げた分散型SNSプロトコル開発団体が新SNS「Bluesky」を発表 (2022.10.25) – Gigazine
参照
- Nostr
- Nostr – Nostr公式
- nostr-protocol / nostr – GitHub
- awesome-nostr
- nostr.directory
- Nostr でシャレた公開鍵を使う (2023.2.6) – Zenn
- ツイッターライクなSNS「Nostr」を Damus アプリで使う。初期の設定と、認証バッジを付ける手順 (2023.2.4) – Lifehacking.jp
- nostr-protocol / nips / NIP-05 – GitHub
- Damus
- Damus – App Store (Apple)
- Damus – Damus公式
- damus-io / damus – GitHub
- 分散型SNS「Damus」がApp Storeに登場──ジャック・ドーシー氏が開発資金を寄付 (2023.2.2) – coindesk JAPAN
- Amethyst
- Amethyst – Play ストア(Google)
- vitorpamplona / amethyst – GitHub
- snort.social
- snort.social – snort.social (公式)
- v0l / snort – GitHub
- その他
- Twitter創業者の立ち上げた分散型SNSプロトコル開発団体が新SNS「Bluesky」を発表 (2022.10.25) – Gigazine