/threshold-sig

A sample implementation of threshold signature

Primary LanguageGo

threshold-sig

シュノア署名を利用した閾値署名のサンプル実装

閾値署名作成手順

秘密鍵を秘密分散

  1. ディーラーが秘密鍵を生成
  2. 楕円曲線上のベースポイントを秘密鍵の値で乗じて公開鍵を算出する
  3. 秘密鍵のシェアを作成
  4. シェアを署名参加者候補に配る(参加者毎に異なるシェアが行き渡る)

署名作成

  1. ディーラーが署名に利用するランダム値を生成
  2. 楕円曲線上のベースポイントをランダム値で乗じて署名の要素Rを算出する
  3. ランダム値のシェアを作成
  4. ランダム値のシェア, R, 署名対象のメッセージを署名参加者候補に配る
  5. 署名参加者は受け取った情報を利用してシュノア署名を作成して返す
  6. 署名参加者から返された複数の署名からラグランジュの補間公式を利用して、公開鍵で検証可能な署名を得る

schnorr_test.go に閾値署名作成 & 検証のテストを記載

注意点

秘密鍵 & 署名に利用するランダム値は、ペダーセンの検証可能な秘密分散法を利用して生成すべきだが、信頼できるディーラーの存在を前提として省略。

Reference