シュノア署名を利用した閾値署名のサンプル実装
- ディーラーが秘密鍵を生成
- 楕円曲線上のベースポイントを秘密鍵の値で乗じて公開鍵を算出する
- 秘密鍵のシェアを作成
- シェアを署名参加者候補に配る(参加者毎に異なるシェアが行き渡る)
- ディーラーが署名に利用するランダム値を生成
- 楕円曲線上のベースポイントをランダム値で乗じて署名の要素Rを算出する
- ランダム値のシェアを作成
- ランダム値のシェア, R, 署名対象のメッセージを署名参加者候補に配る
- 署名参加者は受け取った情報を利用してシュノア署名を作成して返す
- 署名参加者から返された複数の署名からラグランジュの補間公式を利用して、公開鍵で検証可能な署名を得る
schnorr_test.go
に閾値署名作成 & 検証のテストを記載
秘密鍵 & 署名に利用するランダム値は、ペダーセンの検証可能な秘密分散法を利用して生成すべきだが、信頼できるディーラーの存在を前提として省略。