今は鍵交換に格子暗号が使われているらしい。これはForward Secrecyの問題で、将来量子コンピュータによって過去の通信を復号できてしまうようになるという事態に対するセキュリティらしい。格子暗号がまだ若い技術なので、バグなどセキュリティ的な問題が生じる可能性もあるので(多分)ECDHEの技術と併用しているとのこと
YoshikuniJujo
YoshikuniJujo@yoshikunijujo.github.io
npub1a7y7...fdm2
Haskell好き
ChaChaという暗号化方式があるのだけどシンプルできれい。
共通鍵から疑似乱数列を作って、それとのxorを取っていくだけらしい。
Bech32のBCH符号は数学的にはいろいろややこしいところあるけど、実装としては簡単で、「誰かが計算してくれた6つの定数」があるので、それを使えば整数を5ビット左シフトして、空いたところをデータから取り出した5ビットでうめて、整数の左シフトでもれた5ビットのそれぞれについて、0なら何もせず、1なら6つの定数の対応するものでxorすればいいだけだ。
言葉で言うと冗長だけどコードにするとすごく簡単になる。

Sloth Walk – 🦊 Firefox (ja) 向け拡張機能を入手
Firefox 向け Sloth Walk をダウンロード。ナマケモノの絵文字がブラウザー上部をゆっくり往復するFirefox拡張機能...
NIP-49は90文字までというBech32の仕様を無視しているけれど、もともと90文字までという制限は誤まりを100%検出したいという潔癖な考えから出たもので、90文字よりも長くなったとしても検出できない可能性は10億分の1くらいらしいので、問題なさそう。
で、とりあえず圏論の話は終わりにしてBCH符号を理解しなくては、だ。いちばんの肝は要素数32の有限体における積算の定義かな。
結合環とかアーベル群とかはわからないな
NIP-07を作ってる途中なのだけどNIP-49が必要だよねということで、Bech32を調べていたら、BCH符号が必要ということで、BCH符号には有限体が出てくるのだけど、群、環、体とあるけど「圏はなんかもっとメタ的だよね」みたいに思って、そういえば「モナドが自己関手の圏におけるモノイド対象である」っていう呪文があったなと思って、何とはなしにジェミニと話してたら理解できた。
なんかジェミニと話してたら理解できた。
ちなみに「モノイドとは集合の圏におけるモノイド対象である」とも言える。
「モナドとは自己関手の圏におけるモノイド対象である」ということがわかった。
AIはラバーダック
ビッグエンディアンとリトルエンディアンは有限体の世界で和解する
Bech32は元データが90バイト以下であることが仕様によって決まってるのに、NIP-49は元データが91バイトなので、厳密にはBech32の仕様を満たしてないことになる。
Bech32の元データが90バイト以下という仕様は、まあわりと無視されてる感じなのかもしれない。
bech32は1バイトで6ビット分の情報量があるので、4文字が3バイトに対応する。
NIP-07拡張機能がAndroidのFirefoxで動かなくなったので自作しているのだけど、たぶんあと2週間くらいでできると思う。
だいたいの方針は決まった。とりあえずまずは秘密鍵とパスワードの入力のあたりからやろうと思う。
ゆくゆくは複数の秘密鍵や公開鍵も入力できるようにしたいけど、とりあえずはひとつだけ保存できるようにする。
秘密鍵とパスワードを入力すると暗号化された秘密鍵がlocal storageに保持される感じ。で秘密鍵またはパスワードを変更したいときは
* バックアップ
* 消去
* 新たに入力
という流れにする。バックアップを取るまでは消去はできないような形にしようと思う。
バックアップは元々のパスワード、新しいパスワード、新しいパスワード2の3箇所にパスワードを入れると新しいパスワードで暗号化された秘密鍵がバックアップとして入手できる。PEMファイルあたりで出力するのがいいかと思う。
とりあえず、そのあたりまで作ろうかと思う。このへんは設定画面でやる。
拡張機能の公開の練習として、とりあえずブラウザの画面上部をナマケモノがゆっくり移動する拡張機能の審査前のところまでやった。あとは審査に通れば、意味のない拡張機能Sloth Walkが世に放たれる。
楕円曲線暗号についていろいろ調べたのだけど必要なくなったかな。でも、数学的な美しさがわかってよかった。
たとえば有限体は要素数が決まれば1つに決まるといった話とか、きれい。
あと楕円曲線暗号は有限体の上に構成されるのだけど、どんな感じかと言うと、つまり群を作るわけだけど、その群における演算は特殊な加算で、その加算は楕円曲線上の2点の和がその2点をむすぶ直線と、曲線とのもうひとつの交点をX軸で反転したものらしい。
これはこれで、ちょっとコードを書いてみたいと思う。実用的なものじゃなくて実験的なものだけど。
NIP-07の拡張機能はesbuildを使ってnoble-secp256k1を利用して書くことにした。まずはごく単純な機能で、仕様を考える。それから簡単そうなところから実装していこう。
はじめは、クライアントから署名や公開鍵を求められたらエラーメッセージを出すみたいなところを実装する。