ビットコインの改善プロセスBIPに、現行の署名方式ECDSAの代替案となる「シュノア署名」が提案されました。本記事ではビットコインネットワークのセキュリティーを高め、効率をよくし、プライバシーも強化すると期待を集めるシュノア署名について解説します。
ビットコインと署名技術
ビットコインをはじめとする多くの仮想通貨やそのブロックチェーンでは、公開鍵暗号による署名技術が使われています。シュノア署名という特定の署名技術について説明する前にビットコインでどのように署名技術が使われているのか概要を見てみましょう。
ビットコインのアドレスを作るには、まずペアとなる秘密鍵と公開鍵を生成し、公開鍵からアドレスを作成します。トランザクションを作成する場合、送金情報に秘密鍵で署名し、ビットコインのネットワークに署名済みの送金情報をブロードキャストします。送金情報は公開鍵で検証され、検証結果が正しければ有効なトランザクションとみなされます。
画像: ビットコイン取引のイメージ(ブロックチェーンのセキュリティに必要不可欠な鍵「秘密鍵・公開鍵」より)
「トランザクションを作成しているのは間違いなく自分である」ことを、他者の知らない秘密鍵を使ってサイン(signature、署名)し、正しいものであると主張するわけです。署名が確かに署名者のものであることは誰もが公開鍵を使って検証できます。偽の秘密鍵で署名された送金情報は公開鍵による検証が失敗し、正しいものとみなされません。
※ 公開鍵暗号や署名について詳しくは本ブログのブロックチェーンのセキュリティに必要不可欠な鍵「秘密鍵・公開鍵」を参考にしてください。
ビットコインでは楕円曲線電子署名アルゴリズム(ECDSA、Elliptic Curve Digital Signature Algorithm)が署名に使われていますが、これに代わるものとして2018年7月にBIPに提案されたのがシュノア署名です。
BIPへの提案の経緯
シュノア署名は、ドイツの数学者であり暗号学者のClaus-Peter Schnorr(クラウス-ペーター・シュノア)博士が発案した署名方式です。オリジナルの論文は1990年に発表され、学術出版で有名なシュプリンガー社のウェブサイトで公開されています。
シュノア署名は効率がよく安全な署名方式と考えられてきましたが、ビットコインではECDSAからシュノア署名に署名方式が変更されることはありませんでした。これはシュノア署名への変更にはハードフォークが必要だったためです。この状況は2017年8月に有効化されたSegwitによって大きく変わります。Segwitが最終テストに入った2016年春に、シュノア署名に期待する記事がビットコイン Magazineに掲載されています。
SegwitとはSegregated Witnessの略称で「署名の分離」を意味し、その名前の通り、トランザクション本体から署名を分離し、Witnessと呼ばれる別の領域に格納するものです。
画像: Segwitによるデータ構造の変更(ビットコインのブロックチェーンをスケールさせる「Segwit」より)
Witnessに対してはハードフォークではなくソフトフォークで新しいルールを適用できるため、Segwitが有効化されたことでシュノア署名をソフトフォークで導入できるようになり、シュノア署名導入の障壁が大きく下がりました。
※ Segwitについて詳しくは本ブログのビットコインのブロックチェーンをスケールさせる「Segwit」を参考にしてください。
Segwitの有効化から半年ほどたった2018年1月、ブロックチェーン技術に関する開発を行うBlockstreamとフランスの認証機関ANSSIの開発者がシュノア署名をベースにしたマルチシグの方式MuSigに関する論文「Simple Schnorr Multi-Signatures with Applications to ビットコイン」を発表し、7月には、同論文の共著者でBlockstream共同創業者のPieter Wuille氏がBIPにシュノア署名の利用を提案しました。
- “Simple Schnorr Multi-Signatures with Applications to ビットコイン” Gregory Maxwell, Andrew Poelstra, Yannick Seurin, and Pieter Wuille(2018年5月20日 改訂版)
- Pieter Wuille氏による提案 bips/bip-schnorr.mediawiki at bip-schnorr · sipa/bips
ただし、Wuille氏の提案はあくまで個人のGitHubリポジトリにコミットされたもので、2018年11月現在、まだBIPで正式に議論されているものではありません。
シュノア署名とは
シュノア署名とはどのような署名方式なのでしょうか。秘密鍵と元のメッセージから誰もが公開鍵で検証できる署名済データを作成する点、公開鍵や署名から秘密鍵を推測するのが極度に難しい点は現行のECDSAと同様です。ただし、数学的な処理の特性から、シュノア署名には「セキュリティーの証明がある」「ECDSAの持つ展性という脆弱性を排除できる」「線型性により効率よく署名を処理できる」という特徴があります。また、ECDSAでも実現は可能なもののシュノア署名でよりシンプルに実現できる応用があり、これらはビットコインのプライバシーの強化に貢献します。
前出のPieter Wuille氏によるBIPへの提案をもとに、セキュリティー、効率的な署名処理、ビットコインのプライバシーを高める応用という3つの観点からシュノア署名を説明します。
高いセキュリティー
シュノア署名はECDLP(楕円線離散対数問題)の困難さを前提としてランダムオラクルモデルで証明できますが、現在ビットコインで使われているECDSAにはこのような証明がありません。また、ビットコインには秘密鍵を知らない第三者がトランザクションを改ざんできる展性と呼ばれる脆弱性があり、この一部はECDSAに起因するもので、BIP62やBIP66で議論されています。署名の検証方法を変更するといった方策も考えられますが、シュノア署名にはおそらく展性はないだろうとされ、署名方式をECDSAからシュノア署名に変更することで展性の排除に貢献します。
効率的な署名処理
シュノア署名を導入すると、特定のケースでECDSAに比べ署名済データのサイズを小さく保つことができます。ECDSAでは、トランザクションにおいて受け取り先が同じでも、送金元それぞれで署名をする必要がありますが、シュノア署名にはlinearity(線型性)と呼ばれる性質があり、複数の送金元が同一の受け取り先に送金する場合、送金元が共同でデータに署名でき、署名済のデータは送金元の公開鍵の和で検証可能です。
ビットコインのプライバシーを高める応用
シュノア署名のアプリケーションとしては、マルチシグだけでなく、n人中のk人による署名といった閾値付きの署名、アトミックスワップで署名鍵を橋渡しするアダプター署名、署名対象の作成者と署名者が異なるブラインド署名が可能になることが提案の中で説明されています。これらの応用にはビットコインのプライバシーを強化する効果も期待できます。
このように導入するメリットの多いシュノア署名ですが、デメリットはあるのでしょうか?前出のGitHubに投稿された提案の中でWuille氏は「デメリットはほとんどない(標準化されていないことをのぞいて)」としています。
BIPに提案された仕様や数学的な詳細は前出のSchnorr博士によるオリジナルの論文、ビットコインへの応用について書かれた論文、Wuille氏のリポジトリのBIPへの提案を参照してください。
おわりに
ビットコインでシュノア署名が導入されると、ネットワークがより効率的かつ安全になり、トランザクションのプライバシーが強化され、その上導入のデメリットはない・・・となるとよいことずくめのようです。しかし、あくまで「導入されて利用が広がれば」の話です。Segwitが有効化され、シュノア署名をソフトフォークで導入できるようになったものの、利用が広がるまでの道のりは長いでしょう。
今後Wuille氏の提案がBIPに取り入れられ、本格的に議論が進んでいくことが期待されます。仕様が確定した後も、有効化の審判にさらされ、さらにウォレットや取引所、ユーザーなど多くのステークホルダーがシュノア署名に対応し、利用が広がる必要があります。
ソフトフォークで導入されたSegwitについて見てみると普及の難しさがわかります。2017年8月の有効化をきっかけに取引所やウォレットがSegwitに対応し始めましたが、ビットコインに関する統計情報を扱うOXTのチャートによると、2018年11月現在、ビットコインのSegwitトランザクションの割合はトランザクション全体の40%弱とまだ道半ばです。
導入のメリットが大きく、期待の集まるシュノア署名が今後どのように議論され、ネットワークに受け入れられることになるのか、必ずしも技術論だけでは話が進まないビットコインのネットワークの決定に注目したいところです。