用語集 / プロトコルとアップグレード
MuSig2
別名は鍵の集約です。
- MuSig2とは?
- MuSig2では、複数の署名者が各自の公開鍵を1つにまとめ、単一の64バイトのSchnorr署名を生成できます。そのため、グループでの支払いはオンチェーン上では単独の支払いとまったく同じに見えます。
BIP-327で規定されています。
要となるのは鍵の集約です。複数の参加者がそれぞれ秘密鍵を保有し、数学的にそれらの公開鍵を1つの集約鍵に足し合わせます。この集約鍵を単独で管理できる参加者は誰もいません。BIP-327により、この方式は通信2ラウンドに固定されました。元のMuSigでは3ラウンドでした。共有ウォレットにとってこれは、手数料が低く、ウォレットが共有であったことを示す公開の証拠が残らないことを意味します。
仕組み
MuSig2はグループに対して2回の処理で実行され、何に署名するのかを知る必要があるのは2回目の処理だけです。
1回目の処理では、各署名者が2つの秘密ノンスを生成し、対応する点のペアを公開します。コーディネーターは、集合全体をハッシュ化して導出した係数を用いて、それらのペアを1つの結合ノンスに足し合わせます。この係数こそが、以前の2ラウンド設計を破った攻撃を再び開くことなく、この方式がラウンドを1つ削減できるようにした具体的な工夫です。
2回目の処理では、各署名者がトランザクションの署名ハッシュに対して部分署名を生成し、1つの数値を返します。それらの数値を合計すると、通常のBIP-340のルールの下で32バイトの集約鍵に対して検証される、64バイトの署名1つになります。ブロックを検証するノードは、何人が関与したのかも、そもそも誰かが関与したのかも判別できません。
明言しておく価値のある安全性の性質が2つあります。鍵の集約では鍵ごとの係数が適用されるため、参加者が他の全員の鍵を打ち消す公開鍵を作り出すことはできません。これは、鍵を単純に足し合わせることで可能になる「ローグ鍵攻撃」です。また、ノンスは厳密に1回限りの使用です。同じノンスから2つの異なるメッセージに署名すると、秘密鍵がそのまま露呈します。そのため、正しい実装では秘密ノンスが消費された瞬間に消去され、同じセッションからの2回目の署名は拒否されます。
使われている場面
MuSig2はTaprootのキーパスによる支払いの背後にあります。したがって、実際に見えるのは、他のアドレスと同じように振る舞うbc1pアドレスです。
サイズ面の論拠は具体的です。Taprootのキーパスによる入力は、1人が署名した場合でも5人が署名した場合でも57.5vbyteです。一方、2-of-3のウィットネススクリプトによる支払いでは、3つの公開鍵と2つの署名を公開する必要があり、その2倍をはるかに超えるサイズになります。Taprootの出力は2021年11月14日のブロック709,632で使用可能になったため、この機能は何年も前からチェーン上に存在しており、ボトルネックはウォレットソフトウェアでした。
BIP-373が基盤を提供します。公開ノンス、参加者の鍵、部分署名のためのPSBTフィールドを追加するため、各ベンダーが独自のメッセージ形式を発明することなく、ハードウェア機器が署名セッションに参加できます。一般向けウォレットでの採用はまだ限定的です。最も具体的な導入例は、ライトニングネットワークにおけるsimple taproot channelsの取り組みで、2つのピアがチャネルへの入金を単一のMuSig2出力で行います。
MuSig2 vsマルチシグ
MuSig2は構造上、全員一致(all-of-n)です。従来のマルチシグは任意のしきい値を設定できます。
この違いが、MuSig2を貯蓄の近くに置くべきかどうかを決めます。スクリプトベースの2-of-3の設定は、1つの鍵を失っても機能し続けます。スクリプトが3つの鍵を指定し、そのうち2つを求めるからです。集約鍵はすべての参加者の存在を必要とし、いなくなった署名者はコインを一緒に持ち去ります。ただし、同じアドレスがリカバリー用の分岐を持つスクリプトパスにもコミットしている場合は別です。単一の集約鍵の下での真のしきい値には、FROSTなど別のプロトコルが必要であり、BIP-327が規定しているのはそれではありません。
2つ目のトレードオフは意図的なものです。スクリプトのマルチシグはブロックエクスプローラーを持つ誰でも監査できますが、MuSig2はそうではありません。これは家庭にとってはプライバシーの利点であり、支払いに2名の役員の承認が必要だったことを証明しなければならない財務担当者にとっては障害となります。