numpad0

クラッシュコースNostr

2023/02/07

TL;DR:

iOS: Damus, Android: Amethyst, PC: iris.toを開け。あとはフィーリングでなんとかなる。

Nostrってなに

 新しいTwitterクローン(2).web3。仮想通貨機能(Lightning Networkによる簡易送金)が初めから統合されている。ブロックチェーンではない。P2Pではない。リレー間のメッシュ機能はまだない。アーキテクチャはWinny掲示板に似ているらしい。IDは独自形式の公開鍵ペアで、投稿は秘密鍵で署名され、 リレーサーバに送信される。ユーザは推しがいるリレーサーバに接続してフォローしておくとその投稿が降ってくる。手動更新ではなくストリーミングAPI的な挙動になる。

はじめかた

 クライアントアプリ(iOS: Damus, Android: Amethyst, PC: iris.to)を開いて希望の@ユーザ名を打ち込むと秒でIDができる。よく使われるリレーのURLは最初からアプリに登録されている。ID取得はローカルの生成動作なので何の待ちもチェックもない。この時公開鍵秘密鍵が生成され、これがIDパスワードに相当する。公開鍵はnpub、秘密鍵はnsecで始まる。逆に文字形式のパスワードはない。秘密鍵は絶対になくしてはいけない。Twitter互換の@ユーザ名とディスプレイネームは存在するが@ユーザ名の一意性は強制されないので好きに被らせられる。

公開鍵、秘密鍵、公開鍵暗号とは

 平文に対して公開鍵と秘密鍵の両方で1回ずつ暗号化すると平文に戻る暗号化方式。どちらを先に行ってもよく、平文を秘密鍵で暗号化すれば公開鍵で復号できるし、公開鍵で暗号化すると秘密鍵で復号できる。片方だけ行ったものを暗号文として扱う。ただし、同じ鍵で復号することはできない。もう片割れで処理する以外に解読方法はない。

秘密鍵の取り扱い

 秘密鍵は絶対になくしてはいけない。なくすとログインできなくなる。また、パスワードなので他人に教えてはいけないし、信頼できないアプリに打ち込んでもいけない。現状、変更や再発行や失効や継承ができないので、秘密鍵を流出または紛失した場合は転生することになる。ただし、認証バッジを剥がして付け替えることはできる。なくさないように鍵はスクショしてとっておくのがいいと筆者は考えている。

投稿の呼び方

 ”note”。頭は大文字なのか? わからない。

ログイン

 秘密鍵を打ち込むとログインできる。べきところに公開鍵を打ち込むとネトストできる(?)。Twitter古参の言い方で言えばxAuthかつパスワード変更不可なので秘密鍵は絶対になくしてはいけない。iris.toには入力していいのか? 何も分からない。筆者は雰囲気でNostrをやっている。

リレーサーバ

noteを受け付けて保持してくれるお人好しが運営している掲示板サーバ。運営するインセンティブとしては投げ銭をもらうとかソーシャルグラフの観測に役立てることが考えられる。クライアントアプリは投稿すると一斉に登録全リレーへ同報するようになっており、逆に待っているとリレーからはフォローしている公開鍵の付いたnoteが降ってくる。メンションは同じリレーサーバを共有している相手同士でしか見えない。

スパム

 現在、Globalタイムラインに大量の中国語エロ動画や仮想通貨系スパムが流れている。対策はない。リレーサーバを全部外してスパム対策済みのサーバに切り替えると止まると思われるが、そのスパム対策済みサーバに接続しているユーザとしか会話できなくなるので筆者はおすすめしない。

フォロワーへのID共有方法

 クライアントアプリのプロフィール画面に公開鍵が見えているので、それをコピペするのが早い。またはQRコードが出せるのでそれを見せてもよい。昨今のTwitterに乗せるとBANされるかもしらんので注意されたい。Mastodonや他SNSのIDと紐づけるサービスも出てきているので活用してもよいのかもしれない。

フィーチャセット、フォロー、投稿、画像投稿、ログ

認証バッジ/NIP-05

 クライアント側からプロフィール画面で指定されているサーバに/.well-known/nostr.json?id=<id>という形式でクエリを打って、打ったIDと公開鍵が返ってくればクライアント側でバッジが付く。github.com/username.keysに近い。GitHub PagesでやりたければWebからリポジトリを作ってWeb編集機能で以下をコピペしてキー変換サイトで公開鍵をhex形式に変換してexamplehex123...を自分のものに置換すると早い:

_config.yml :

include: ".well-known"

/.well-known/nostr.json(ファイル名にフルパスを打ち込むとディレクトリが掘れる):

{
  "names": {
    "example": "hex12345678901234567890123456789012345678901234567890"
  }
}

 webrootに_config.ymlの代わりに.nojekyllという空ファイルを作る方法も広まっているが、Markdownの変換も止まるのでだるい。ちなみにGitHub Pagesは自前ドメインが使えるので筆者はまさにそうしてusername@username.exampleで認証を通している(ドヤ。他に有志によって上のnostr.jsonを返すサービスが立てられているが、転生した時にバッジを消すのがメンドそうなので筆者はおすすめしない。

仮想通貨 / Crypto / Bitcoin Lightning

 Wallet of SatoshiiOS / Android を落とし、Lightning Invoice(請求書)を生成、コピーして投稿に貼ると支払いを受け付けられる。請求書には有効期限があり失効する。Lightning Address(LNURL…)をプロフィールのBitcoin Lightning Tipsの欄に設定すると常設の受取先にできる。Lightning Network/Bitcoin Lightningは無印Bitcoinを拡張し、割り当てた残高をオフチェーンで融通することでマイナー待ちなく高速に支払いを行うシステム。Lightningアドレスの残高は無印Bitcoin(Bitcoin mainnet)と行き来できる。詳しくは知らん。

 注意点として、利便性観点からWallet of Satoshiはウォレットを運営が保持している形式(non-custodial というらしい)なのでセキュリティは運営に依存する。飛んで困る額を入れてはだめ。

参考文献

- 以上 -