ゼロ知識署名の原理から、乱数やハッシュ生成が適当でもとりあえず署名はできてしまう。署名時の乱数生成の拙さやハッシュ関数の不連続性に課題がある場合、それは常に指摘されなければならない。つまりゼロ知識署名のソースコードは常にオープンソースである必要がある。バックドアの無い健全な運営のためにはオープンソースであることが本質的に重要である。
Bitcoinとか金融取引の署名は暗号が強力であると同時に1msecでも早く、1バイトでも容量節約するように心血が注がれている。tweaksの塊で私みたいな素人がコード読んでも見落としてることいっぱいある。
乱数生成で楕円曲線上に均等に分布するような工夫したり、ハッキングに備えてメモリ内に秘密鍵を推測できてしまうような余計な情報が残らないようにアルゴリズム組んだり…奥が深いのね。暗号技術って…。
楕円曲線暗号の部分抑えておけばあとはコーディングするだけだと思ってたけど、割と難しい。BIP340の部分…。
Nostr のNoteをSchnorr署名するまでに必要な事項、進捗状況。
- [x] 素数 p を法とする多倍超整数の四則演算
- [x] 乗法逆元の高速演算 ☆
- [x] 多倍長整数の累乗の高速演算 ☆
- [x] 平方剰余を高速計算する方法実装 (secp256k1限定)☆
- [x] 楕円曲線secp256k1 上の加法群演算の実装
- [ ] secp256k1 のスカラー倍を高速に計算する方法 O(n*long(n)) ☆
- [ ] キーペア生成実装
- [x] Nostr のNoteシリアライゼーション
- [ ] Pubkeyの圧縮形式から楕円曲線上の座標を復元する
- [ ] Noteに対するSchnorr 署名
- [ ] Schnorr署名の検証
ぐらいできればようやくNostrのNoteに署名できそう。☆印がSchnorr署名を現実的な計算コストで実装するために本質的に重要な箇所。
楕円曲線上の有理点の部分集合が件の加法演算に対して有限群を成すような条件っていままでどうやって見つけてたんだろうな…。不思議でならない。宇宙人が教えてくれたのかな…。