S. Ota's avatar
S. Ota
_@susumuota.github.io
npub1susu...0yu8
A programmer. An author of nostr-keyx. Interests: Reinforcement Learning, Natural Language Processing and Artificial General Intelligence.
S. Ota's avatar
s_ota 2 years ago
Snort の markdown がひどい...
S. Ota's avatar
s_ota 2 years ago
NIP-06 の実装方法 (*0) - BIP-39 にてニーモニック(= entropy) を生成 - 256 bit (32 byte)の疑似乱数を生成 (entropy と呼ぶ) - entropy からニーモニックに変換 - entropy とニーモニックは1対1に相互に変換可能(Reversible, base2048 相当なので) - BIP-32 にて entropy から Nostr 秘密鍵を導出 - entropy をシードとしてマスターキーを生成 (*1) (*2) - マスターキーから Nostr 用の秘密鍵を導出 (*3) (*4) - ここで導出しているので Nostr 秘密鍵から元の entropy = ニーモニックに変換することは出来ない - (*0) - (*1) - (*2) - (*3) - (*4) - 実装例 - - にメモを書いているのでまとまったら NIP-06 に写しておきます。
S. Ota's avatar
s_ota 2 years ago
ニーモニックの計算方法(BIP-39) - strength 256 bitの場合 - 256 bit (32 byte)の疑似乱数を生成 (entropy と呼ぶ) (*1) - entropy のチェックサムを計算(SHA256 の 0 バイト目, 8 bit) (*2) - それをくっつけて 256 + 8 = 264 bit (33バイト)の整数を生成 - 264 bit の整数は 2^264 = 2^(11*24) = (2^11)^24 = 2048^24 - となり、2048個の単語リストから1単語ずつ選んで24個並べると表現出来る base64 を知ってる人は base2048 と考えれば簡単。 - base64: データを 6 bit ずつ分割し、それぞれ 64 個 (2^6個) の文字のうち一つを割り当てていく - base2048: データを 11 bit ずつ分割し、それぞれ 2048 個 (2^11個) の単語のうち一つを割り当てていく (*1) (*2)
S. Ota's avatar
s_ota 2 years ago
一応結果はこんな感じ。 秘密鍵から公開鍵の計算に29秒 32バイトのメッセージの署名に158秒 検証に86秒。 ``` Test vector #0: pubkey_gen took: 29071585 schnorr_sign took: 158253199 * Passed signing test. schnorr_verify took: 85828791 * Passed verification test. ```
S. Ota's avatar
s_ota 2 years ago
Raspberry Pi Pico + MicroPython + secp256k1.schnorr.sign は動くけど遅すぎ。次は Raspberry Pi Zero W やってみる。
S. Ota's avatar
s_ota 2 years ago
うちの環境だけかもしれませんが、以下のエラーがでまくってました。 Uncaught (in promise) undefined astraea.mousedev.page/:1 image
S. Ota's avatar
s_ota 2 years ago
Astraea v1.5.0 テスト。@error さんが結構居る。
S. Ota's avatar
s_ota 2 years ago
ニーモニックから秘密鍵に変換できるけど、秘密鍵からニーモニックは変換できないはず(要確認)
S. Ota's avatar
s_ota 2 years ago
ニーモニックは、自分が覚えやすいフレーズを恣意的に選んでもいいのだろうか。
S. Ota's avatar
s_ota 2 years ago
ニーモニックはドラクエの復活の呪文🤙 image
S. Ota's avatar
s_ota 2 years ago
beta.iris.to 違いがよくわからない