Avatar
S. Ota
8721cdf007e798f80549a4bf174b973dc388e01952f0a952f5473c2cf84a7f60
A programmer. An author of nostr-keyx. Interests: Reinforcement Learning, Natural Language Processing and Artificial General Intelligence.

Zap くださったみなさま、ありがとうございます!⚡

発表資料を追加しました🤙

https://428lab.connpass.com/event/276333/

#nostrstudy

みなさまおつかれさまでした🤙 #nostrstudy

本日の Nostr勉強会 #1 の発表資料です。

https://speakerdeck.com/s_ota/nostr-keyx-20230310

#nostrstudy

コンピュータの乱数は擬似乱数なので実装がアレだとまずいですね(こちらの理由の方が多そう)。

RSA が 2020 年時点で 829 bit まで解かれていて、 secp256k1 が RSA 3072 bits 相当ということなのでしばらく大丈夫なんではないでしょうか。(量子コンピュータが来るとわかりませんが)

https://en.wikipedia.org/wiki/RSA_Factoring_Challenge

https://www.secg.org/sec2-v2.pdf

NIP-07 ブラウザ拡張機能 nostr-keyx の v1.4.0 をリリースしました。

- YubiKey 対応.

- NIP-07 を許可する URL 設定を追加

https://github.com/susumuota/nostr-keyx

YubiKey やパスキー認証については、本日開催される Nostr勉強会 #1 (2023/03/10(金) 22:00-) にて「Nostr でパスキー認証」というタイトルで発表予定です。

https://428lab.connpass.com/event/276333/

明日の Nostr勉強会 #1 (2023/03/10(金) 22:00-) にて、以下タイトルで発表する予定です。

Nostr でパスキー認証 (NIP-07, nostr-keyx, YubiKey)

https://428lab.connpass.com/event/276333/

もしパスキーに興味がある方がおられましたら、以下のページが参考になるかもしれません(発表内でも簡単に説明します)。

https://www.yubion.com/post/%E3%83%91%E3%82%B9%E3%82%AD%E3%83%BC%EF%BC%88passkeys%EF%BC%89%E3%81%A3%E3%81%A6%E3%81%AA%E3%82%93%E3%81%A0%E3%82%8D%E3%81%86%EF%BC%9F%EF%BC%88%E5%89%8D%E7%B7%A8%EF%BC%89

#nostrstudy

存在は認知されている!

> Twitterからの移行先としては、つぶやきを重視する同種ソーシャルメディアとして、「Mastodon(マストドン)」や「Discord」、あるいは「Nostr」「Misskey」、さらには従来プラットフォームとして「mixi」などの名前があがるが、いずれも候補としては3%台にとどまる。

https://webtan.impress.co.jp/n/2023/03/08/44430

iOS/macOS 用の NIP-07 の Nostore は次のバージョンで Apple keychain に移行する予定だそうです。生体認証も調べているそうです。

https://github.com/ursuscamp/nostore/issues/10

昨日学校を休んだ子はバッジのこと知らないかも...

iOS/macOS Safari 用 NIP-07 の Nostore のソースを読んでみた。

- 秘密鍵は平文で browser.storage.local に保存 (nos2xと同じ)

多分 iCloud バックアップで平文のままコピーされると思います。

```

const storage = browser.storage.local;

(中略)

async function savePrivateKey([index, privKey]) {

if (privKey.startsWith('nsec')) {

privKey = nip19.decode(privKey).data;

}

let profiles = await get('profiles');

profiles[index].privKey = privKey;

await storage.set({ profiles });

return true;

}

```

https://github.com/ursuscamp/nostore/blob/c68f91923aa87ae31d8d7de41368d1ea04a3323f/Shared%20(Extension)/Resources/background.js#L180

https://github.com/ursuscamp/nostore/blob/c68f91923aa87ae31d8d7de41368d1ea04a3323f/Shared%20(Extension)/Resources/background.js#L21

TweetDeck は Adobe Air 版が終わってから使ってないな

自分が理解できた範囲ですが、NIP-07 ではその記事の

- 署名: signEvent (secp.schnorr.sign)

- 鍵共有: nip04.encrypt と nip04.decrypt ( secp.getSharedSecret)

に相当するのかなと思いました(間違っていたらすみません)。

Replying to Avatar S. Ota

YubiKey 対応出来た。YubuKey 側の OpenPGP の設定はデフォルトのままでいけました。

設定方法は以下です。nostr-keyx をインストールした後、gpg コマンドで Nostr の秘密鍵を暗号化しておく必要があります。

https://github.com/susumuota/nostr-keyx/blob/main/public/macos/yubikey.sh

上記コメントに書いてある設定をした後、ブラウザの nostr-keyx のポップアップの設定で `yubikey` というアカウントを作ってそれを選択しておきます。署名の度に YubiKey がピコピコ光れば OK。

ちなみに gpg を呼び出しているだけなので YubiKey がなくても動きます🤙

問題点は、PIN を入力する UI がまだないので、初回の PIN 入力はターミナルから別途 yubikey.sh を呼び出して一度 PIN を入力しておく必要があります。YubiKey を抜き差ししたり PC をスリープさせたりすると再度 PIN 入力が必要になるので yubikey.sh を実行してください。

上記をすると YubiKey と PIN 入力がないと署名出来ない状態にはなります。

ただし、Node.js のメモリ空間内に秘密鍵が平文で展開されますので Node.js のメモリが覗き見されたらアウトです(OS のキーチェーンを使う場合と同様)。

YubiKey 内で署名までやるというのが一番良いのですが、現状では簡単にやれる方法は見つかりませんでした。おそらく OpenPGP にパッチを当てれば出来るのかもしれません。

YubiKey 対応出来た。YubuKey 側の OpenPGP の設定はデフォルトのままでいけました。

設定方法は以下です。nostr-keyx をインストールした後、gpg コマンドで Nostr の秘密鍵を暗号化しておく必要があります。

https://github.com/susumuota/nostr-keyx/blob/main/public/macos/yubikey.sh

上記コメントに書いてある設定をした後、ブラウザの nostr-keyx のポップアップの設定で `yubikey` というアカウントを作ってそれを選択しておきます。署名の度に YubiKey がピコピコ光れば OK。

ちなみに gpg を呼び出しているだけなので YubiKey がなくても動きます🤙

問題点は、PIN を入力する UI がまだないので、初回の PIN 入力はターミナルから別途 yubikey.sh を呼び出して一度 PIN を入力しておく必要があります。YubiKey を抜き差ししたり PC をスリープさせたりすると再度 PIN 入力が必要になるので yubikey.sh を実行してください。

iOS Safari + Snort + Nostore が結構いい感じだったので Nostore のソースを読んでみる。

https://github.com/ursuscamp/nostore