先日、Blockstreamのブログ記事↓で、非対話型のSchnorrの署名集約スキームについて知ったので、
↑にリンクされているドラフトBIPに記載されていた↓のペーパーを斜め読みしてみた。
https://eprint.iacr.org/2022/222.pdf
Schnorr署名の集約と言えば、Bitcoinの文脈だと、MuSig2などの対話型の集約プロトコルが有名で、このような集約方法をフルアグリゲーションと呼ぶみたい。これはマルチシグをSchnorr署名の集約特性を利用して実現する方式で、複数の参加者が共通のメッセージに対して対話的に署名を生成し、それを単一の署名に集約する。
↑のハーフアグリゲーションは、マルチシグのような対話型の署名方式ではなく、署名者同士はそれぞれ互いを知らずに個々の署名を生成し、その後不特定の集約者がその署名を集約することを想定している。マルチシグは対話型で、共通のチャレンジに対して署名を生成し、それが単一のSchnorr署名と見分けが付かないような集約アプローチになるのに対して、ハーフアグリゲーションでは各署名者が異なるメッセージにそれぞれ署名し、その署名のサイズが個々の署名データの合算値の約半分になるというもの(フルアグリゲーションのように単一のSchnorr署名と同じサイズになる訳ではない)。そして個々の有効なSchnorr署名をインクリメンタル/シーケンシャルに集約することができる。
この仕組みを活用すると、例えば、
といった事が可能になる。
ペーパーでは、3つのハーフアグリゲーション方式が説明されている(以下、表記は楕円曲線ベースのものに変えてる)。
ASchnorr
Chalkiasらによって提案された集約方式をASchnorrと呼んでいる。
公開鍵とメッセージに対するSchnorr署名をとして、各チャレンジをとした場合、それぞれ有効なSchnorr署名であれば、以下が成立する。
この2つの署名を単純にハーフアグリゲーションしようとすると、とする方法で、が成立するか検証する方法。
ただ、この集約方法は安全ではない。ある署名のチャレンジ(たとえば、)がもう1つの署名のコミットメント()に依存していないため、例えばをと細工すれば、の離散対数の知識を必要とせずに、の離散対数の知識のみで集約署名を偽造することができる。
ASchnorrでは、各署名に以下のような外部係数を使用して、この偽造問題に対処している。
および、
として、集約署名をとして、その署名の有効性の検証は、とするというもの。MuSigのアプローチと似てる。
IASchnorr
↑のASchnorrで集約は可能だが、インクリメンタルな集約サポートしていないので、個々の署名がすべて集まってから集約する必要がある。そこで、インクリメンタルな集約をサポートするハーフアグリゲーション方式がIASchnorrと呼ばれる方式。
↑の2つの署名が集約された後に、公開鍵とメッセージに対する署名が届いて、これを既存の集約署名に追加するケースを想定する。
単純に集約使用とすると、既に集約済みの署名を通常の署名として扱うことで再度ASchnorrを行うというもの。つまり、
および、
として、という集約をする方法。
ただ、この方法の問題は、3つの署名が同じタイミングで集約された場合と、↑のようにインクリメンタルに集約された場合とで、集約結果の署名値が異なり、正しく検証するために、それがどのように集約されたのかという情報が追加で必要になる。
IASchnorrでは、係数を個々の署名すべてから計算するのではなく、それ以前の署名にのみ依存させるよう生成することで、この問題に対処するようになっている。つまり
として、i番めの係数はとなる。こうすると、↑のように署名集約のタイミングによって集約値が異なるようなケースを回避できる。
この方式では、n個の公開鍵とメッセージに対する最終的な署名値は、
SASchnorr
最後に、SASchnorrが、このペーパーで新しく提案されているハーフアグリゲーションの方式で、シーケンシャルに集約した個別の署名をリカバリーできるという特徴を持つ。また集約の方式もASchnorrやIASchnorrとは結構違う。
署名者nは、n-1個の公開鍵とメッセージに対する集約署名を受け取ると、の代わりに集約コミットメントを計算し、チャレンジを計算し、署名値を計算する。
を受け取った検証者は、を計算すると、を計算することで、1つ前のを復元することができる。これを繰り返すことで、検証者はすべての個々の署名を復元することができる。
ペーパーでは、ランダムオラクルモデルの下で、Schnorr署名と同等の安全性を証明している。
↑の方式見た感じだと、各署名値が前の署名値に依存しているので、署名フェーズがシーケンシャルになる必要が出てくる。
データサイズ
↑のようにn個の公開鍵とメッセージに対して、以下署名データが必要になる。
- IASchnorrの場合、=n個のRと1つのs
- SASchnorrの場合、=1つのR値とn個のs値
個別のSchnorr署名だとn個のRとn個のsで構成されるため、約半分のデータサイズになっていることが分かる。だからハーフアグリゲーションというネーミングなのね。
ドラフトBIP
ドラフトBIPでは、インクリメンタルなハーフアグリゲーションをサポートするようなので、↑の2番めのアプローチがベースになってる模様。まぁ、ブロックやトランザクションの署名を集約するようなケースだと、SASchnorrのようなシーケンシャルな署名プロセスは採用できないので、インクリメンタルなアプローチになるよね。SASchnorrの方は証明書チェーンやルーティングプロトコルなでの利用が期待されているみたい。