Skip to content

Instantly share code, notes, and snippets.

@denvernine
Created February 3, 2023 10:58
Show Gist options
  • Save denvernine/7c80c1640262f667cbf20786d0b2e601 to your computer and use it in GitHub Desktop.
Save denvernine/7c80c1640262f667cbf20786d0b2e601 to your computer and use it in GitHub Desktop.
nostrアカウントの取得とNIP-05 verification対応

nostrをはじめてみよう!

nostrってなに?

nostrとは、簡単に言うと分散型で検閲に強いプロトコルです。

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.

GitHub - nostr-protocol/nostr: a truly censorship-resistant alternative to Twitter that has a chance of working

nostr単体はサービスではなくプロトコルなので、誤解を恐れずに言えば、nostrに対応したたくさんのクライアントがある、というのが実体に近いかなと思います。

nostrではリレー(relay)ごとに投稿と閲覧を行います。リレーはサーバーのようなもので、リレーをまたがった交流はできない(リレーAに投稿するとリレーBから読み込むことができない)ようです。この点が検閲に強いとされている理由のようです。

アカウントをつくる

もっとも簡単な方法は https://github.com/aljazceru/awesome-nostr#clients からいずれかのクライアントサービスを選択することです。webUIを例にとると、

などがあります。見かけ以外の機能にほとんど差はないので、いくつかアクセスしてみて好みに合うものを選ぶのがいいと思います。今回はPCからnostr.comにアクセスすることにします。

nostr.comにアクセスした時点でアカウントが作成されます。画面右上に人の上半身型のマークがあるかと思いますが、そこをクリックすることでアカウント詳細が表示されます。 nostrでは公開鍵(public key)と秘密鍵(private key)を使ってアカウントの管理と投稿を行います。

image

今回の例では以下のようなアカウントが作成されました。convertボタンを押すとNIP-19にもとづいて変換されたhex値を得ることができます。 なおwalletは空欄になることがあるようです(条件がつかみ切れていません。わかる方がいれば教えていただきたいです)。値が入っている場合は、 LNbits のwalletのURLが入っていますが、今回は説明を省きます。

公開鍵: npub1qk5529zmmafvth79mgz7dr36gzfh9wnc9tfjdnh8mkrldmmvyd7szt0gdz
公開鍵(hex): 05a945145bdf52c5dfc5da05e68e3a409372ba782ad326cee7dd87f6ef6c237d

秘密鍵: nsec1etkesyy065527cgqred5al8lvf0fu4tl5n7q9wwale40dggk3nasaqsapu
秘密鍵(hex): caed98108fd528af61001e5b4efcff625e9e557fa4fc02b9ddfe6af6a1168cfb

このうち、privat keyはアカウント管理に使用しますので、 公開してはいけません

ログインする

アカウントが作成されたので、先述したクライアントを利用してログインしてみましょう。今回はastral.ninjaにアクセスします。

アクセスすとログイン画面が表示されます。入力欄にenter private keyと表示されていますので、private keyを入力します。

image

PROCEEDをクリックすればログインできます。

それから?

ここまでくればnostrの準備は終わりです。あとは投稿したり、他の人の投稿を閲覧したり、ほかのSNSと変わりません。

NIP-05 verification

NIP-05 verificationは簡単に言えばなりすまし防止の機能です。検証済みユーザーのみ投稿を許可されているリレーなどもあるようです。

github pagesで対応する

gistで投稿しているわけですし、github pagesで対応してみましょう。github pagesのはじめかたなどについては、別の記事に譲ります。

ここではすでにgithub pagesを利用していて、jekyllを使っている場合の例を取り上げます。githubのユーザー名はoctocatとします。

.well-known/nostr.json

github pagesで公開するディレクトリのルートに .well-known ディレクトリを作成します。その配下に nostr.json ファイルを設置します。

nostr.json は以下のような構造です。

{
  "names": {
    "{NAME}": "{HEX_VALUE_OF_PUBLIC_KEY}"
  }
}

先の記事で作成したアカウントを例にとると、以下のようになります。

{
  "names": {
    "john_doe": "05a945145bdf52c5dfc5da05e68e3a409372ba782ad326cee7dd87f6ef6c237d"
  }
}

{NAME} は何でもよいですが、利用できる文字は以下の文字のみです。

  • AからZの英字
  • 0から9の数字
  • ハイフン
  • アンダーバー(アンダースコア)
  • ピリオド(ドット)

Although there is a link to a very liberal "internet identifier" specification above, NIP-05 assumes the <local-part> part will be restricted to the characters a-z0-9-_., case insensitive.

nips/05.md at master · nostr-protocol/nips · GitHub

_config.yaml

_config.yaml に以下を追記します。

include: ['.well-known']

デプロイ後、インターネット上に nostr.json が octocat.github.io/.well-known/nostr.json のようなパスで公開されていれば設定完了です。

アカウントを検証する

NIP-05 verificationに対応するクライアントであれば、アカウントを検証することができます。branle.netlify.appを例にとります。

branle.netlify.appにログイン(秘密鍵のhex値を使います)して、NIP-05 Identifier欄に {NAME}@{DOMAIN} のように入力します。今回の例では [email protected] となります。

image

検証が問題なく終わると、プロフィールを保存することができます。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment