nostr.directoryのTwitter認証バッジ

はじめに

前回の投稿「Nostrアカウントの認証(NIP-05)」の続きです。
今回はnostr.directoryTwitter 認証バッチを有効にした際の作業記録です。

最初に感想を述べると、なんかよく分からないけれどできたという感じです。

なので、ここで書かれている通りにやっても上手くいかない可能性があります
同じように困っている方がここで書かれていることを参考にして解決できるかもしれない、という程度の内容なので軽い気持ちでご覧いただければと思います。

とはいえ、もし間違えや誤解を招く記載があれば後で訂正しようと思っています。

作業記録

1. Twitter 上で指定された文言をツイート

nostr.directory のサイトを開くと[Tweet your nostr pubkey] と[Verify your pubkey on nostr] という2つのボタンがあります。

nostr.directory

[Tweet your nostr pubkey] ボタンをクリックしてTwitter 上で指定された内容のツイートをします。

詳しい手順は、前々回の投稿「Nostrアカウントの作成(Damus, Amethyst, snort.social)」のあとがき「nostr.directory」に記載してあります。

このツイートをした後にnostr.directory で自身のアカウントを検索してみると、検索結果にアカウントの情報が表示されるようになりました。(検索条件はTwitter のユーザー名かNostr アカウントの公開鍵を指定します)

nostr.directory > Account

この時はまだ、Twitter の認証バッジは灰色です。
このツイートは、この検索でアカウントを表示できるようにするためだけのもののようです。

Twitter アイコンの右上の(?)をクリックすると、認証バッジを有効する方法と思われる内容が表示されます。

nostr.directory > Twitter Verification ヘルプ

Twitter の検証

ユーザーは下記をする必要がある:

1. nostr.directoryのHPで示されたフォーマットに従って、自身のnostr公開鍵をツイートする

2. nostr.directoryのHPで示されたフォーマットに従って、nostrの公開鍵(1のような)を送信する

上記1. は当項目で実施したこと。2. は後述「3. Nostrアカウントで指定された文言をPost」でやることの認識です。

2. Nostrアカウントにリレーサーバを追加

Nostr のnostr.directory のアカウントが登録しているリレーサーバと自分のアカウントが登録しているリレーサーバを比較して、nostr.directory のアカウントの方にしか登録されていなかったwss://nostr-pub.wellorder.net を追加します。

これが本当に必要かは公式サイトに掲載されている訳ではないので実は必要ないかもしれませんが、何度か試しても上手くいかず、成功した時にこれを追加していたので書いておきます。

Damus > Relays (Before)
追加する前
Damus > Relays (Add)
追加
Damus > Relays (Added)
追加した後

Damus を使ってリレーサーバを追加しました。
画面はDamus の画面です。

3. Nostrアカウントで指定された文言をPost

Damus でPost

iPhone のDamus アプリを使ってPost します。

まず、ブラウザでnostr.directory のサイトを開きます。

nostr.directory > Verify

[Verify your pubkey on nostr] ボタンをクリックします。

nostr.directory > Verify (1)
nostr.directory > Verify (2)

iPhone が初代SE なので画面のレイアウトが窮屈で見づらいですが、”Twitter screen name” という入力欄にTwitter アカウントのユーザー名(先頭の@ を除く)を入力する(左の画像)と、右の画像のようにPublic Key の箇所が入力した内容に自動で置き換わるので、[Copy Verifrication Text] をタップしてクリップボードにコピーします。

Damus アプリを開いて、コピーを貼り付けてPost します。

Damus > Post
Damus > Posted

これで認証バッジにチェックが付くはずが暫く待っても灰色のまま。
どうしてよいか分からぬまま続けてブラウザ向けのNostr クライアントIris を使ってPost してみることにしました。

Iris でPost

ブラムザ向けのNostr クライアント Iris を使ってPost します。

ブラウザを使ってPost する文言を作る手順は同じなので省略します。
Iris でPost しました。

Iris > Posted
iris

上がIris のPost、下がDamus のPost。約1時間後にPost していました。

nostr.directory > Twitter (verified)
nostr.directory

Iris でPost してすぐにnostr.directory を見ると、緑色のチェックが付いていました。
DamusIris のPost のどちらが反映されたのか、Nostr クライアントの違いが影響しているのかなどよく分からないですが、とにかくTwitter 認証バッジが有効になりました。

あとがき

Nostr 関連の最初の投稿「Nostrアカウントの作成(Damus, Amethyst, snort.social)」の際に同じVerify のPost をしていたのですが反映されず、その時は諦めたのですが気になって再度チャレンジして何とかなりました。

これが有効になると、nostr.directory でTwitter のアカウントとnostr アカウントが紐づいていることを確認できることになるので、Twitter でつながっている知人のnostr アカウントを安心して特定できるようになる、という感じでしょうか。

とりあえず、認証バッジが全部灰色よりは見た目がいい感じになれてよかったです。

参照

Nostrアカウントの認証(NIP-05)

はじめに

前回の投稿「Nostrアカウントの作成(Damus, Amethyst, snort.social)」の続きです。
今回はNIP-05 の認証をします。

自身で管理するWeb サーバのドメイン名とNostr アカウントを紐づけることで、Nostr アカウントのプロフィール欄にドメイン名を認証バッジ付きで表示させることができます。
Nostr アカウントがそのドメインの所有者であることを証明することになるので、第三者がそのNostr アカウントがなりすましでないことを確認できるようになります。

1. Web サーバに認証用のファイルを配置

自身で管理するWeb サーバの<domain>/.well-known/nostr.json で参照できる場所に下記のファイルを配置します。

{
  "names": {
    "<name>": "<pubkey>"
  }
}

3行目は自身のNostr アカウントの情報に書き換えます。

  • name
    • Nostr アカウントのUsername(先頭の@ を除く)
  • pubkey
    • Nostr アカウントの公開鍵(HEX 形式

今回、下記のように書き換えました。

{
  "names": {
    "GiantRodent": "94e3a1c166f4fea85b94870219e6461de923296f3fe4736b24c3e23b4c0c43e4"
  }
}

公開鍵(HEX形式)

nostr.directory にアカウントを登録している場合は、NIP-09 のhexPubKey にHEX 形式の公開鍵が表示されているので、ここからコピーして使えます。

nostr.directory > NIP19
nostr.directory > @RodentGiant

Damus のKey Converter というページで、npub で始まる公開鍵を入力してHEX 形式に変換することもできます。

Damus > Key Converter

ファイルを配置(CLI)

Web サーバの公開ディレクトリに認証用のファイルを配置します。
サーバにSSH 接続して下記のコマンドでファイルを配置しました。

mkdir .well-known
cd .well-known
touch nostr.json
chmod 644 nostr.json
vi nostr.json
→ 前述のJSON を貼り付け

2. Web サーバの設定でCORS を許可する

Web サーバの設定ファイルに、CORS を許可する設定を追記します。

Apache

Header set Access-Control-Allow-Origin "*"

nginx

add_header 'Access-Control-Allow-Origin' '*';

3. Nostr アカウントにNIP-05 の識別子を登録

Nostr アカウントにNIP-05 の識別子を登録します。

今回はDamus を使って登録します。
アカウントのプロフィールを編集するページで、<name>@<domain> という形式でNIP-05 の識別子を登録します。

  • name
    • Nostr アカウントのUsername(先頭の@ を除く)
  • domain
    • Webサーバのドメイン名
Damus > Account > Profile > Edit (NIP-05)
Damus > Profile > NIP-05 Verification

今回は [email protected] を登録しました。

登録してプロフィール画面に戻ると、認証バッジ付きのドメイン名が表示されるようになっていました。
細かいですが、実際には画面が表示されてから2〜3秒後に表示されました。

Damus > Account > Profile
NIP-05 認証前
Damus > Account > Profile (NIP-05認証済)
NIP-05 認証後

nost.directory のページを見ると、NIP-05 の認証バッジにチェックが入っていました。

nostr.directory > NIP-05 (認証済)
nostr.directory > @RodentGiant (NIP-05認証済)

あとがき

NIP-05 の認証はスムーズにできました。

nostr.directory にTwitter の認証バッジがあるので、これにもチェックを入れたいのですが上手くできず。
また時間がある時に試してみようと思います。

参照

Nostrアカウントの作成(Damus, Amethyst, snort.social)

はじめに

Twitter の共同創業者の一人、Jack Dorsey 氏がTwiiter でこのようなツイートをしました。

「オープンプロトコルに向けた1つのマイルストーン。Nostr がApple App Store にDamus を公開しました。Google Play Store はAmethyst 、Web 向けにはsnort.social (代表で1つ挙げると)があります」

知らないキーワードばかりだったので気になって調べてみました。

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 とは
    • 「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つとも動作する環境が異なります。
ユーザは環境によって使うものを選ぶことになります。

いずれもNostr のクライアントという位置付けのものなので、作成した自身のNostr アカウントは異なる環境のクライアントでもログインして使うことができます。

デザインやUI はそれぞれ個性を出していますが、できることはTwitter やMastodon と同じような感じで、投稿やフォローをすることができ、タイムラインにフォローした人の投稿が流れます。
なので「ツイッターに代わる可能性があると発言する人もいる」のだそうです。

手順(作業の流れ)

実際にNostr クライアントを使ったNostr アカウントを作成から、他のNostr クライアントでログインできるかを確認した手順です。

今回はDamus でNostr アカウントを作成しましたが、他のNostr クライアントでもNostr アカウントを作成することはできるので、iOS 端末を持っていない方はAmethystsnort.social でNostr アカウントを作成して始めることができます。

(iPhone) DamusでNostrアカウント作成

iPhone を使って、App Store アプリでDamus を検索します。
使ったiPhone が初代SE のせいか、一部レイアウトが崩れている箇所がありますが無視してください。

  • Damus – App Store (Apple)
Damus > App Store

Damus アプリをインストールしたら開きます。

Damus > Create Account 1

Damus アプリが起動したら[Create Account] をタップします。

既にNostr アカウントを持っている場合は、[Login] からログインすることができます。今回はDamus アプリを使ってNostr アカウントを作成する手順なので、ログインについての解説は省略します。

Damus > Create Account 2
Damus > Create Account 3

EULA(使用許諾契約書)の内容を確認して[Accept] をタップします。

Damus > Create Account 4
Damus > Create Account 5

作成するアカウントのユーザ情報を入力して[Create] をタップします。

  • Username (必須)
    • 頭に@ がついて表示されるユーザ名
  • Display Name (任意)
    • ユーザの表示名。間にスペースを入れることができる。
  • About (任意)
    • 自己紹介文
  • Account ID
    • 自動で作番された公開鍵の文字列が表示されています(表示が途中で切れています)
Damus > Create Account 6
Damus > Create Account 7
Damus > Create Account 8

Welcome, Giant Rodent!” と表示されているので、このタイミングでアカウントは作成されているようです。

Public Key に表示されているnpub で始まる文字列が公開鍵です。
直前の画面では途切れていましたが、ここでは全体が表示されています。
この公開鍵は公開して使用する情報でユーザの識別に使われます。Twitter の自身のアカウントのプロフィール欄にこの公開鍵の文字列を掲載して、友人や知人がDamus で公開鍵を使ってアカウントを検索してフォローするというような使い方がされています。

公開鍵の左のアイコンをタップすると真ん中の画面の状態になります。
公開鍵はクリップボードにコピーされるので、必要に応じてパスワードマネージャーなどに保存します。

Private Key が表示されました。nsec で始まる秘密鍵の文字列が表示されています。(秘密鍵は非公開にする必要があるものなのでマスキングしています)
この秘密鍵はログイン時に使用する情報で、他人に知られないように秘密に管理する必要があります
実際にログインを試してみると、入力するのは秘密鍵のみでパスワードなど別の情報の入力は求められませんでした。誤ってTwitter のプロフィール欄に掲載すると第三者が自身のアカウントにログインしてなりすましの投稿などができてしまうので扱いには注意が必要です。別のデバイスでログインできたのでリスクベース認証はしていなそうです。

秘密鍵の左のアイコンをタップすると右の画面の状態になります。
秘密鍵はクリップボードにコピーされるので、パスワードマネージャーなどに保存しておきます。失念するとログインできなくなるので保存する必要があります

[Let’s go!] をタップします。

Damus > Posts & Replies
Damus > Posts

作成したアカウントのホーム画面が表示されました。
Posts & Replies にDamus アカウントの投稿と返信が表示されています。
Posts をタップすると、Damus アカウントの投稿が表示されています。
デフォルトでDamus アカウントをフォローしているのでDamus アカウントの投稿が表示されているようです。

これでNostr アカウントの作成が完了しました。

投稿してみる

右下にある[+] をタップして投稿してみます。

Damus > Post 1
Damus > Post 2
Damus > Post 3

投稿するメッセージを入力して[Post] をタップします。
投稿した後に左上のアイコンからプロフィール画面を見ると、投稿したメッセージが表示されていました。

ちなみに、Twitter では投稿をTweetと呼んでいましたが、Nostr ではPost と呼ぶみたいです。

フォローしてみる

Jack Dorsey のNostr アカウントをフォローしてみます。

Jack Dorsey がTwitter でNostr アカウントの公開鍵をツイートしていたのでこれをコピーして使います。

Damus > Account Follow 1
Damus > Account Follow 2
Damus > Account Follow 3

下の虫眼鏡アイコンをタップして表示された画面のSearch 欄にコピーした公開鍵を入力すると”Goto profile <公開鍵>” と表示されたのでタップします。
Jack Dorsey のアカウントの画面が表示されたので[Follow] をタップするとフォローできました。

(Android) Amethyst でログイン

Android スマホを使って、Play ストアでAmethyst を検索します。

  • Amethyst – Play ストア(Google)
Amethyst > Playストア

Amethyst アプリをインストールしたら開きます。

Amethyst > Login 1
Amethyst > Login 2

Amethst アプリが起動したら”nsec / npub / hex private key” にNostr アカウントの秘開鍵を入力し、”I accept the terms of use” をONにして[Login] をタップします。

Nostr アカウントを持っていない場合は、[Generate a new key] からNostr アカウントを作成することができます。(解説は省略)

Amethyst > Home > New Threads
Amethyst > Account

アカウントのホーム画面が表示されました。
New Threads にDamus アカウントの投稿と、先ほどDamus アプリで投稿した自分のアカウントの投稿が表示されています。
左上のアイコンをタップすると、Damus で作成したアカウントのUsername とDisplay Name が表示されています。

Damus で作成したNostr アカウントでAmethyst アプリにログインできました。

投稿してみる

右下にある[+] をタップして投稿をしてみます。

Amethyst > Post 1
Amethyst > Post 2
Amethyst > Post 3

投稿するメッセージを入力して[Post] をタップします。
New Threads に投稿したメッセージが表示されました。

(WebApp) snort.social でログイン

Web ブラウザを使ってsnort.social のページを開きます。
今回はMac のChrome を使いました。

snort.social > Login 1

右上の[Login] をクリックします。

snort.social > Login 2

Login ページが表示されたら”nsec / npub / nip-05 / hex private key…” にNostr アカウントの秘開鍵を入力し、[Login] をクリックします。

Nostr アカウントを持っていない場合は、[Generate Key] からNostr アカウントを作成することができます。(解説は省略)

snort.social > Posts

アカウントのホーム画面が表示されました。
Posts にDamus アカウントの投稿と、先ほどDamus とAmethyst アプリで投稿した自分のアカウントの投稿が表示されています。

続けて、右上のアイコンをクリックしてアカウントのページを表示します。

snort.social > Account

Damus で作成したアカウントのDisplay Name と公開鍵が表示されています。Display Name の右に”follows you” という文言があったので気になって調べてみると、デフォルトで自分自身をフォローしていました。違和感がありますが、とりあえず気にしないでおきます。

Damus で作成したNostr アカウントでsnort.social にログインできました。

ちなみに、このアカウントのページのURL は以下のようになっていました。

snort.social > Account (URL)

ドメイン名の右側にある長い文字列はアカウントの公開鍵の文字列になっていました。このように公開鍵は公開されたアカウントの識別子として使われています。

アカウントのプロフィール情報の登録

Damus アプリを使って、アカウントのプロフィール情報を登録します。

Damus > Posts
Damus > Account
Damus > Account > Profile

ホーム画面の左上にあるアイコンをタップして表示されたメニューのProfile をタップし、表示されたプロフィール画面の右上の[Edit] をタップします。

Damus > Account > Profile > Edit 1
Damus > Account > Profile > Edit 2
Damus > Account > Profile > Edit 3

YOUR NAMEUSERNAMEは登録済みなので、追加で下記の情報を入力して[Save] をタップします。

  • PROFILE PICTURE
    • アイコン画像のURL を指定します
    • Gravatar に登録しているアイコンのURL を指定しました
  • BANNER IMAGE
    • バナーの画像のURL を指定します
    • 自身のブログにアップロードしている画像のURL を指定しました
  • WEBSITE
    • ウェブサイトのURL を指定します
    • 自身のブログのURL を指定しました
  • ABOUT ME
    • 気の利いた自己紹介文が思いつかなかったのでとりあえず”カピバラ”
Damus > Account > Profile (Edited)
Damus

登録した内容が反映されました。

Amethyst アプリでも確認してみます。

Amethyst > Account > Profile (Edited)
Amethyst

snort.social も確認します。

snort.social > Account (Edited)
snort.social

Damus アプリで登録したプロフィール情報が他のクライアントでも反映されていました。
とりあえず、普通に使えそうな状態にはなりました。

あとがき

作成したNostr アカウント

わたし(GiantRodent)のNostr アカウントの公開鍵はこちらです。
フォローしてもらえたら嬉しいです。

npub1jn36rstx7nl2sku5suppnejxrh5jx2t08lj8x6eyc03rknqvg0jqgycpxe

GiantRodent の公開鍵
Nostr > QR code (GiantRodent)

鍵ペア(公開鍵/秘密鍵)について

鍵ペアの取得方法

Nostr の公式サイトでもアカウントを作成できました。ここではアカウントを作成するというより、生成された鍵ペアを取得するというUI になっていました。

この鍵ペアの方式が何か気になって調べてみると、vanity pubkeyvanity address と呼ばれているもので、好みのprefix やsuffix が付いた公開鍵の鍵ペアを自身で生成することができるようでした。
Edward Snowden の公開鍵のprefix “sn0wden” を見て真似したくなりましたが、生成する仕組みがBitcoin のマイニングのようにprefix やsuffix の桁数が多いほど計算コストがかかるのだそうで止めておきました。
下記のサイトの情報が参考になりました。ありがとうございました。

Nostr クライアントに公開鍵を使ってログインする

実は、公開鍵を使ってログインすることもできます。ただし閲覧専用で。
他人の公開されている公開鍵を使ってログインすると、あたかも他人のアカウントにログインしたかのような状態になります。何とも言えない仕様。

秘密鍵を安全に管理する

秘密鍵はNostr クライアントにログインする際にしか使わないので、秘密鍵は単体でユーザID とパスワードを兼ねたものと考えて扱えばよいかもしれません。

間違えて秘密鍵を第三者に提供したり公開することがないように、パスワードマネージャーには秘密鍵のみを保存して、公開鍵は保存しない方が安全に運用できる気がします。

公開鍵はユーザID として第三者に公開・提供する使い方をするので、ログイン以外の場所で公開鍵を入力するシーンがあったらDamus のProfile 画面からコピーするというルールを決めて運用すれば、間違えて秘密鍵を公開するというミスは防げそうです。

パスワードマネージャーに保存する際の名前

Damus, Amethyst はあくまでもNostr クライアントなので名前は「Nostr」にしました。
Damus でログインするのに”Nostr” を探すのは正直不便なので、複数のクライアントを使わないのであれば”Damus” のようにクライアントの名前にしもよいのかも。

なりすまし対策

NIP-05

アカウントが本人のものであることを認証する方法のようです。
自身が管理するWeb サーバ上に必要な設定をして、Nostr アカウントにそのWeb サーバの設定を指す情報を登録することで、認証バッジを表示させることができるようです。

nostr.directory

Twitter 上で他のユーザにNostr アカウントを持っていることを伝える方法として、Twitter のプロフィール欄にNostr の公開鍵を掲載したり、公開鍵をツイートする方法がありますが、それ以外の方法として、nostr.directory というサイトにNostr アカウントとTwitter アカウントが紐づいていることを登録することで、このサイトでTwitter のユーザ名を入力してそのユーザがNostr アカウントを持っているか確認できるようにすることができるようになります。

手順を掲載しておきます。簡単です。

nostr.directory

[Tweet your nostr pubkey] をクリックするとTwitter のツイートの入力フォームが所定の文言が入力された状態で開きます。

nostr.directory > tweet
nostr.directory > tweet (公開鍵貼り付け後)
公開鍵を貼り付け後

Paste your nostr public key here” という箇所をNostr アカウントの公開鍵に置き換えてツイートします。これで、nostr.directory のサイトで検索すると検索結果に表示されるようになります。

nostr.directory > Twitter Account

Badges が幾つか並んでいて、その中に前述のNIP-05 があるので、ここでもNostr アカウントがなりすましでないかを確認できるようになっています。

リレーサーバの選択について

Damus クライアントでNostr アカウントを作成したら、デフォルトで7つのリレーサーバが設定されていました。
削除や追加を乱暴にしているとアカウントのプロフィール情報や投稿が消えてしまいそうなので、少し仕組みを調べてから変更してみようと思います。

Damus > Account > Relays
Damus > Relays(default)

さいごに

Jack Dorsey といえば分散型SNS「Bluesky」を開発中であることを発表していたので、今回の発表はそれのことか?と思ったら別のものでした。
Bluesky もベータ版のウェイトリストの募集を始めてから3ヶ月ほど経っているので、そろそろ新しい動きがないか気になるところです。

参照