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 3 years ago
Twitter API がいつ使えなくなるのか待っているが、今朝も使えてた。2/14 だけエラーになった。 - 2/13 OK - 2/14 エラー - 2/15 OK - 2/16 OK `a few more days` と言っているのでそろそろ使えなくなりそう。 > There has been an immense amount of enthusiasm for the upcoming changes with Twitter API. > Twitter APIの今後の変化に対する熱意は計り知れないものがあります。 あと、皮肉が効きすぎている :D
S. Ota's avatar
s_ota 3 years ago
snort を local で動かすと速くなる気がする件は、多分プラシーボ... しばらく使ってるとやはりレスポンス遅くなる時がある。
S. Ota's avatar
s_ota 3 years ago
とりあえず、snort は markdown link には対応していない。末尾にスペースつけるだけ。ってことでいいのかな。
S. Ota's avatar
s_ota 3 years ago
> fiatjaf deleted the safer-markdown branch 2 weeks ago となってる。 まあ、markdown は使わないことにしよう。でも # つけると意図せずでかい文字になったりするのはやめてほしい
S. Ota's avatar
s_ota 3 years ago
snort の markdown 対応がよくわからない XD
S. Ota's avatar
s_ota 3 years ago
S. Ota's avatar
s_ota 3 years ago
snort をローカルで立ち上げてるんだけど、 よりサクサク動く気がする。 例えば、ページスクロールして一番下まで行った時に、次のポストが表示されるまでの時間が明らかに速い。 でも、アクセスログを見るとサーバにはリクエストが来てないから、ブラウザ側の処理かリレーからの返答の時間なんだと思うけど、この違いはなぜ起きるのかな? docker 使える人試してみてください。 ``` git clone cd snort docker build -t snort . docker run --rm -it -p 80:80 snort # http://localhost にブラウザでアクセス ```
S. Ota's avatar
s_ota 3 years ago
[ソース1]( `decryptData` は AES。password は平文。 ``` const password = get().password as string; const privateKey = decryptData(account.nostrPrivateKey as string, password); ``` [ソース2]( pick で password を除外されるので `browser.storage.sync` には保存されていないはず。 ``` saveToStorage: () => { const current = get(); const data = { ...browserStorageDefaults, ...pick(current, browserStorageKeys), }; return browser.storage.sync.set(data); }, ``` ``` % cat ~/Library/Application\ Support/Google/Chrome/Default/Sync\ Extension\ Settings/iokeahhehimjnekafflcihljlcjccdbe/000003.log password はなかった。 ```
S. Ota's avatar
s_ota 3 years ago
NIP-07 の実装の件、Alby はどうなってるのかなと思って調べてみた。 - 秘密鍵は AES で暗号化した上で `browser.storage.sync` に保存 - AES のパスワードは平文だが `browser.storage.sync` には保存していない(おそらくメモリのみ) - AES のパスワードは Chrome 起動毎に入力 という感じなのでちゃんと実装されているようです。Lightning 方面はさっぱりわかりませんが、NIP-07 に関しては Alby で良いかもしれないです。 詳細は次のポストで。
S. Ota's avatar
s_ota 3 years ago
NIP-05 のこれか。 > Showing just the domain as an identifier > > Clients may treat the identifier _@domain as the "root" identifier, and choose to display it as just the <domain>. For example, if Bob owns bob.com, he may not want an identifier like bob@bob.com as that is redundant. Instead, Bob can use the identifier _@bob.com and expect Nostr clients to show and treat that as just bob.com for all purposes.
S. Ota's avatar
s_ota 3 years ago
もう少しマシな方法としては、OS が管理しているキーチェーン(macOS なら`キーチェーンアクセス.app`)に秘密鍵を置いて、そこから情報をもらうという方法があります。 Chrome の Native Messaging という仕組みを使うと、外部コマンドと stdin/stdout で情報をやり取りできるようなので、外部コマンド内でキーチェーンにアクセスして秘密鍵を取得して、外部コマンド内で署名を行って、その結果を Chrome に返すという方法があります。これだと Chrome には秘密鍵を保存せずに済みます。 NativeMessagingを用いたnostr NIP-07実装例については #[0] さんがプロトタイプを作成されています。
S. Ota's avatar
s_ota 3 years ago
nostr-keyx では、共通鍵(AES-GCM)で暗号化しているので、共通鍵を手に入れないと復号化は難しいです。共通鍵はメモリに置いているのでディスクのバックアップでコピーされることはないと思います。 % cat 000003.log encryptedPrivateKey "[\"0FsY962F4VMLS4My1HyfKWLSm/Rl6fdTM5i/ni0Z251o4Fgbfx5njvj+x5XSHhniZlQsOuxAQSu6y4Zjl+8Xn3bM6+139ov0WYp+APMOu+Q=\",\"/11uhVPrZeKcCbl9vbYE6Q==\",\"m96A5oRooKs9Ut3/aeHkWA==\"]" 共通鍵はメモリに置いているので Chrome を終了すると共通鍵は消去されます。なので Chrome を起動する毎にパスワードを入力して共通鍵を生成しないといけないということと、もし Chrome のメモリを覗き見されて共通鍵がバレると秘密鍵は復号化されてしまいます。
S. Ota's avatar
s_ota 3 years ago
NIP-07 Extension で秘密鍵が平文で保存されている件ですが、例えば nos2x では以下のファイルに秘密鍵が平文で保存されています(macOS の場合。Windows は %APPDATA%\Local\Google\Chrome 内にあるはず)。 % cd ~/Library/Application\ Support/Google/Chrome/Default/Local\ Extension\ Settings/kpgefcfmnafjgpblomihpgmejjdanjjp % cat 000003.log private_keyB"1ac49ce7f5eab04de1df56f9a3b1165d79a77237f76953f611a6d4c2c586ad3a" 秘密鍵が平文でファイルに保存されていると、ディスクのバックアップを取るとそのままコピーされてしまうので、現在使っているディスクだけでなくバックアップディスクの取り扱いにも注意が必要になります。
S. Ota's avatar
s_ota 3 years ago
sat 送っていただいた方、ありがとうございます!
S. Ota's avatar
s_ota 3 years ago
NIP-07 を実装したミニマルな Chrome 拡張機能 nostr-keyx に、秘密鍵をAES(共通鍵)で暗号化して保存する機能を追加しました。 秘密鍵を平文ではなく暗号化した状態で `chrome.storage.local`(ファイルシステム)に保存するので少し安全になるかもしれません。AES鍵(共通鍵)は `chrome.storage.session` (メモリ)に保存しています。 - 秘密鍵を暗号化するための AES-GCM 暗号を追加(共通鍵) - 秘密鍵とパスワードを設定するためのポップアップメニューを追加