Compact Multi-Signatures for Smaller Blockchains
概要
Rogue key攻撃が存在しないBLS multi-signature (同一のメッセージに対する署名集約)
https://eprint.iacr.org/2018/483
前提
BLS署名
$ sk \in \mathbb{F}_rを秘密鍵、$ pk = g_2^{sk} \in \mathbb{G}_2を公開鍵とする。メッセージ$ MにHashToCurveを適応したものを$ H(M) \in \mathbb{G}_1とする。署名は$ \sigma = H(M)^{sk} \in \mathbb{G}_1であり、$ e(H(M), pk) \overset{?}{=} e(\sigma, g_2)によって署名を検証できる。
Signature Aggregation
メッセージ$ M_iに対して公開鍵$ pk_iによる署名を$ \sigma_iとする。このとき、これら複数のBLS署名は
$ \sigma = \prod_i \sigma_i
$ \prod_i e(H(M_i), pk_i) \overset{?}{=} e(\sigma, g_2)
によって集約することができる。$ \sigmaの計算は信頼できない第三者が行うことができる。
Rogue key攻撃
上のSignature Aggregationは同一の$ M_iが存在するときRogue key攻撃が可能になる。例えばAliceとBobが同一のメッセージ$ Mに署名する場合を考えよう。 Bobの公開鍵を$ pk_bとする。Aliceは$ pk_a = g_2 (pk_b)^{-1}を自分の公開鍵、$ \sigma = H(M)を集約された署名だと宣言する。すると、$ e(H(M), pk_a) e(H(M), pk_b) = e(H(M), g_2)より、Bobが署名したように見せかけることができる。
Proof of Possesion
Rogue key攻撃は、Aliceが$ pk_aに対応する$ sk_aを知っていることの証明を要求することで防ぐことができる。具体的には、特定のメッセージに対して署名してもらい、署名できれば対応する秘密鍵を知っていることが確認できる。
Proof of Possesionは、登録時に一度だけ行い、以降は署名集約のたびに「登録」されていること(=PoPしたこと)を検証すれば良い。EthereumのBeacon chainはこの方式でRogue key攻撃を防いでいる。
しかしながら、登録フェーズが必要なのは手間であるし、集約のたびに登録を確認するのもコストが掛かる。Rogue key攻撃が存在しない集約プロトコルが望ましい。
Rogue key攻撃が存在しないmulti-signature
同一のメッセージに対するsignature aggregationをmulti-signatureと呼ぶ。次のような工夫によってPoP無しだがRogue key攻撃が存在ないmulti-signatureを構成できる。
各署名は
$ e(H(M), pk_i) = e(\sigma_i, g_2)
を満たす。ここで公開鍵$ pk_iと署名$ \sigma_iをある乱数$ a_i \in \mathbb{F}_r倍してみよう
$ e(H(M), pk_i^{a_i}) = e(\sigma_i^{a_i}, g_2)
ペアリングの双線形性より、上の式が成り立てば下の式も成り立つ。この状態で集約すると、
$ \sigma = \prod_i \sigma_i^{a_i}
$ pk = \prod_i pk_i^{a_i}
$ e(H(M), pk) \overset{?}{=} e(\sigma, g_2)
となる。$ a_iを(i)各署名者で違う値(ii)全員の公開鍵$ PKに依存する
ように
$ a_i = \mathrm{hash}(pk_i, PK)
と選ぶ。
先ほどと同じように、
$ pk_a^{a_a} = g_2 (pk_b)^{-a_b}
となるような$ pk_aを選ぶことはできるが、それは$ PKに含まれないので検証を通ることはできない。
逆に言えば、検証者は$ PKの中に不審な公開鍵が含まれていないかチェックする必要がある
コスト
検証者は$ n回のhashと$ n回の$ \mathbb{G}_2上のscalar multiplication, $ n-1回の$ \mathbb{G}_2上の和と1回のpairingを計算する必要がある。ただし、$ \sigmaの計算は信頼できない第三者に委託することができるのでコストに考慮していない。
コストは高めnunocloth.icon