用語集 / プロトコルとアップグレード
Schnorr署名
別名はBIP340です。
- Schnorr署名とは?
- Schnorr署名は、ビットコインがTaprootとともに採用した64バイトの署名方式であり、その決定的な特性は線形性です。複数の鍵と署名が1つに加算されます。
BIP-340で規定されています。
ECDSA署名は71バイトまたは72バイトで、結合することはできません。Schnorr署名は常に64バイトで、結合することができます。この違いにより、2人でも15人でも、単一の公開鍵に対して検証できる単一の署名を生成でき、オンチェーンには署名者が何人いたかを示す情報は何も残りません。ビットコインはBIP-340でこの方式を採用しました。同BIPは2020年1月に作成され、ブロック709,632から有効になりました。
仕組み
この方式は、ビットコインがこれまでずっと使用してきたのと同じ楕円曲線secp256k1と、同じ秘密鍵を使用します。変わるのは、それらをめぐる代数です。
署名するには、秘密のノンスを選び、それが生成する点をRとして公開し、ノンス、Rと公開鍵とメッセージのハッシュ、および秘密鍵から単一の数sを計算します。署名はRとsをそれぞれ32バイトで書き出したもので、固定の64バイトという長さはここから来ています。検証では同じ方程式を並べ替え、2つの点が一致することを確認します。ECDSAはこの途中でモジュラー逆元を必要としますが、Schnorrは必要としません。この逆元が不要であることが、全体が線形性を保つ理由です。
線形性が実用上の利点です。2つの秘密鍵を足し合わせると、その和は2つの公開鍵の和に対する署名になり、グループは1つの見かけ上の鍵を共有できます。またバッチ検証も可能になります。ブロックを検証するノードは、数百の署名を1つずつではなく1つの集約された演算で確認でき、これは初期ブロックダウンロード中に最も重要になります。
BIP-340には、陥りやすい罠を防ぐための2つの細部があります。公開鍵はx-onlyで、y座標を暗黙のうちに含む32バイトであり、これにより同じ鍵の2つのエンコーディングがかつて生じさせていた曖昧さがなくなります。そしてすべてのハッシュはタグ付きハッシュで、ドメイン文字列が前置されるため、ある目的のために作られた署名が、似たバイト列をたまたまハッシュする別のプロトコルで有効なものとして再生されることは決してありません。
ノンスは依然として危険な部分です。2つの異なるメッセージ間で1つのノンスを再利用すると、単純な算術によって秘密鍵が露出します。これはECDSAの場合とまったく同じであり、そのためBIP-340は選択を実装者に任せるのではなく、任意の補助ランダム性を混ぜた決定論的な導出を規定しています。
これらが2009年に登場しなかったのには理由があります。Claus Schnorrはこの方式について米国特許4,995,082を保持しており、それが失効したのは2008年2月、ビットコインのホワイトペーパーが登場する数か月前のことでした。当時、ECDSAが特許の制約のない標準だったため、ビットコインは次善の選択肢を搭載して出荷され、それを修正するまで12年間待ちました。
ビットコインを購入するときにこれが重要な理由
単一鍵のウォレットでは効果はごくわずかであり、まとまった金額を守る人にとっては、ビットコインが追加した中で最も有用な暗号技術です。
まず、複数のデバイスにまたがってコインを保有するコストから見てみましょう。2 of 3の構成を従来の方法で使用すると、すべてのトランザクションで2つの署名と3つの公開鍵が公開されるため、資金を移動するたびにポリシー全体のコストを支払うことになります。Taprootを通じて協調的に使用すると、公開される署名は1つだけで、他の鍵は決して現れません。少額をまとめる場合、節約は複利的に積み上がり、これはまさに長期保有者が最終的に行うことです。
次に、より大きなプライバシーへの影響があります。チェーン分析企業はアドレスをその形によって分類しますが、マルチシグは常に目立つ形でした。当サイトがレビューしているハードウェアウォレットはこのような構成で共同署名者として機能できますが、Taproot以前は、適切に自己防衛する行為そのものが、守る価値のある何かを持っていることを観察者に伝えていました。協調的なSchnorrの使用は、何かを弱めることなくその手がかりを取り除きます。
相続計画の計算も変わります。Taprootツリーの未使用の分岐はコストがかからないため、通常の使用のたびにコストを支払うことなく、家族のために時間遅延付きの回復パスを追加できます。これは真に新しい選択肢であり、設計する前に当サイトのセキュリティガイドを読む価値があります。巧妙なカストディスキームの失敗の仕方は、強奪されることではなくアクセスを失うことだからです。
MuSig2:2人の署名者、1つの署名
BIP-327として標準化されたMuSig2は、線形性をウォレットが実際に使えるものに変えるプロトコルです。
公開鍵を単純に足し合わせるのは安全ではありません。ある参加者が自分の鍵を公表する前に他の全員の鍵を知ると、他の鍵を打ち消す鍵を作り、単独で署名できるようになります。これがローグキー攻撃であり、MuSig2は各鍵を集合全体から導出された係数で重み付けすることでこれを防ぎ、どの参加者も自分の鍵を自由に選ぶことはできません。
署名の流れは2ラウンドです。各当事者がノンスコミットメントを送信し、次に各当事者が部分署名を送信し、部分署名は合計されて集約鍵の下での1つの有効なSchnorr署名になります。2ラウンドであることが重要である理由は、最初のラウンドを事前に行えることであり、これにより署名が絶えず交換されるライトニングネットワークのチャネルでこの方式が使用可能になります。
オンチェーンに残るのは、単一の鍵パスの出力を使用する単一の64バイトの署名です。協調的な2者間の使用は約57.5vバイトで、他のどの入力タイプよりも少なく、観察者は1人の人物が承認したのか委員会が承認したのかを知ることができません。
Schnorr署名vs署名
ビットコインでは、単に署名と言えば今でも通常はECDSAを意味し、両方の方式が日常的に使われています。1、3、またはbc1qで始まるアドレスにあるコインは、2010年とまったく同じようにECDSAで使用されます。bc1pアドレスにあるコインはSchnorrで使用されます。両方を保有するウォレット(多少なりとも履歴のあるほとんどのウォレットがそうですが)は、そのことに言及することなく同じセッションで両方の種類の署名を生成します。ビットコインはECDSAを使っている、それで終わりだと言う人は、2021年11月以前のプロトコルを説明しているにすぎません。
Schnorr署名vs MuSig2
Schnorrは署名方式であり、MuSig2はその上に構築された1つのプロトコルです。Schnorrを単一の鍵で永遠に使い、MuSig2には決して触れないことも可能で、今日の通常のTaprootウォレットはまさにそうしています。MuSig2は複数の当事者が1人に見えたいと望むときにのみ登場し、同じ特性の上に構築された唯一の選択肢ではありません。署名者の不在を許容する閾値方式や、アトミックスワップやライトニングネットワークで使われるアダプター署名は、同じ線形性を利用した別個の構成です。