ビットコインの情報サイトの運営者ブログ

サイトには掲載していない仮想通貨に関する時事的な情報や個人的な感想など。中級者以上向け。

Segwitの次の可能性(シュノア署名・MAST)

最新バージョンのBitcoin Coreに組み込まれ、次バージョンには有効化かと思われるSegwitですが、トランザクション展性やスケーラビリティ問題への対策だけではなく、新技術の実装が容易になるという大きなメリットもあると言われています。

これは、分離された署名の格納領域であるwitnessの中にスクリプトのバージョンを記述する欄が導入されるためです。

そもそもビットコインはトランザクション内に記述されたスクリプトを元に動作しており、そのスクリプトによって通常の送金取引だけでなく、様々な処理を実行することができます。ビットコインのスクリプトは、イーサリアムのようにチューリング完全ではないので、できることには限りがありますが、例えば、OP_CHECKLOCKTIMEVERIFYという処理を使えば、一定期間使用できない凍結されたBTCを送ることもできます。また、OP_RETURNという処理を使えばその時点でスクリプトを停止して後ろに任意のデータを挿入することができるので、その任意のデータを元にCounterpartyやFactomなどをはじめとして数多くのビットコイン上のプラットフォームが構築されています。

これまでスクリプトや署名に関する仕様を変更するのはかなり困難でハードフォークが必要となる場合も多いと考えられていましたが、Segwitにより導入されるwitnessにより今まで困難だった仕様変更が容易になると言われているのです。

Schnorr signature(シュノア署名)

中でもSegwitにより期待されているのがSchnorr署名という新しい署名方式の導入です。

ビットコインにおいて署名というのは根幹的な役割を果たしており、BTCの所有権を証明するために利用されています。署名はプライベートキー(秘密鍵)を利用することにより取引データから作成され、取引データから作成された署名は公開鍵(アドレスの元)により正しいものであると誰でも確認できます。正しい署名と一緒に「AからBに1BTC送る」というトランザクションをネットワークに送信すれば、Aの秘密鍵の所有者が送金処理を実行したとAの秘密鍵を知ることなく誰でも確認できることになります。

一般的に署名の方式には様々なものがあり、ビットコインではECDSAという方法が利用されています。このECDSAに変わる署名方式として提案されているのがSchnorr署名という方式です。

Schnorr署名は数ある署名方式の中でも最もコンパクトな署名であり、署名検証のスピードもECDSAより速いと言われています。

Schnorr署名は、複数の署名を一つに統合できるのが大きな特徴です。多くの場合、ビットコインのトランザクションは複数の「入力(input)」から成り立っています。Blockchain.infoなどのブロックエクスプローラーを見れば分かると思いますが、複数のアドレスから同時に送信する場合もそうですし、一つのアドレスから送信する場合もしばしば入力が複数になることがあります。

(ここらへんはUTXOという基礎知識があれば理解できると思います。)

このような場合、一つ一つの入力それぞれについて、署名を同時に添付する必要があります。そのため、署名の分だけサイズが大きくなってしまうのです。サイズが大きくなるということは、取引手数料が高くなるということを意味します。Schnorr署名では、これらの署名を一つに統合することができます。多くの署名が一つに統合されるので、サイズ的に非常にコンパクトになるのです。

Schnorr署名は通常の送金だけではなく、特にマルチシグネチャでの送金に大きな利点があります。マルチシグネチャアドレスでは複数人の署名を必要としますが、Schnorr署名を利用すれば一つの署名の統合できるので、大きくサイズ削減を行うことができます。

署名のサイズが小さくなればトランザクション全体のサイズも小さくなり、スケーラビリティ問題に対する大きな対策になるというわけです。

Schnorr署名はサイズをコンパクトにするという目的が大きいですが、セキュリティ面から考えた新しい署名方式の導入も一部では推されています。

しばしばビットコインは量子コンピュータが実用化されたら崩壊する(例えば公開鍵から秘密鍵を算出できるようになる)と言われることがありますが、これも新しい署名方式の導入により防げると考えられます。Lamport署名という署名方式は量子コンピュータに対して耐性があると言われており、特に有効だと考えられています。ただし実際には、Lamport署名自体に欠点が多く存在し、現段階でのビットコインへの実装はあまり現実的ではありませんが、従来のECDSA自体にセキュリティ上の懸念があっても、今までより簡単に署名方式を変更できるようになったのは大きいと言えるでしょう。

MAST(Merkelized Abstract Syntax Trees、マークル化抽象構文木)

もう一つスケーラビリティ問題への対策になると考えられているのが、MAST(マークル化抽象構文木)という技術です。

現在のビットコインのスクリプトは、scriptPubKeyと呼ばれる欄に送信者が直接記述する方式となっています。しかし、現在のスクリプトシステムにはある程度サイズ制限があることや、スクリプトの内容がすべて全世界に公開されてしまうというデメリットも存在します。

MASTではビットコインのスクリプトの条件処理の部分ごとに分割し、それぞれをマークル木(各データをツリー構造にハッシュ化して短くまとめたもの)として統合しようとするものです。

これによりサイズ削減できるだけではなく、ツリーの一部の枝部分のみを実行して、残りの実行しない部分はハッシュ化されており第三者から見えないという意味でプライバシー保護にもなります。例えば、Aさんが通常の送金処理の他に「もし一年間使用しなければ、BさんにBTCの使用権を引き渡す」というスクリプトを添付して送信したとします。このとき、後半のスクリプトはハッシュ化されており、第三者には一切見ることができません。

条件処理を使うような複雑なスクリプトはあまり使用されていないのが現状ですが、今後広く使用されるようになればメリットの大きい技術だと考えられます。(プライバシーの観点から使用可能性が増えるとも考えられます。)

このMASTもSegwitにより導入されるwitnessを利用することで今までより容易に導入することができます。

参考リンク

Bitcoin Core :: Segregated witness: the next steps