Segwitとは何か?今さら聞けない仮想通貨
Crypto Times 編集部
こんにちは、hayata(@crypto_hayata)です。今回は、Segwit(Segregated Witness)について解説していこうと思います。
また、今回も技術的な詳細よりも理解のしやすさを重視して解説していきます。
この記事の3つのポイント!
- Segwitは、署名データを別領域に格納する
- Segwitは、実質的なブロックサイズを大きくする
- Segwitは、送金の利便性を高める
記事参考:①segwitとは何か? ②ZOOM ③bitFlyer
目次
Segwitとは何か
Segwitを一言で説明すると、「ビットコインの取引データ内の署名を分離して別の領域に格納することによって、取引当たりのデータ量を減らすことで、送金詰まりを改善する仕組み」のことです。
以下では、
- ①署名データを別領域に格納し、取引データを削減する仕組み
- ②送金詰まりを改善する仕組み
に分けて、より詳しく解説します。
①署名データを別領域に格納し、取引データを削減する仕組み
ここでは、①の内容について解説します。
まず、前提としてビットコインの取引データをトランザクション(以下、TX)と言うことを覚えておいてください。
知らない方も多いと思いますが、ビットコインのトランザクション(TX)にはinputとoutputがあります(他にも、バージョンやタイムスタンプなども含まれますが関係ないので割愛します)。
inputには送金元の情報(送金元の秘密鍵で作成された公開鍵や署名など)が、outputには送金先の情報(送金先アドレス公開鍵のハッシュ値)が含まれています。(公開鍵や秘密鍵の詳しい説明は、別の機会があればしようと思います。分からなくてもSegwitの仕組みは解説できますので続けます。)
Segwit(Segregated witness)では、本来TXのinput(送金元情報)に含まれている署名データを別の領域に格納します。この別領域をWitnessと言います。また、署名データが別領域に格納されることに対応するようにoutput書き換えも行われます。
この署名データの移動により、それぞれのTXのサイズが減ります。
別領域に格納された署名データはどこにいったのかというと、各ブロックの最初にあるcoinbaseTXという場所に保存されます。ここのデータを確認することで、署名がなされているかを確認することが出来ます。
そして、署名データをWitnessに格納することによってTXサイズがどのくらい削減できるかということは以下の式で求めることが出来ます。(1MBは、現在のビットコインのブロックサイズを表しています。)
Witness以外のブロックサイズ+Witness÷4≦1MB
要するに、Witness領域に保存されたデータは容量が4分の1になるということです。ありえませんが、ブロック内のすべてのデータがWitnessに格納されればブロックサイズは実質4MBとなります。しかし実際には、1.7MB程度になるであろうと推測されています。
②送金詰まりを改善する仕組み
ここからは、送金詰まりを改善する仕組みについてお話しします。ここの内容は、直接的にSegwitとは関係がありません。
①では、Segwitによってブロックサイズが実質1.7MB相当になるといいましたが、ブロックサイズの拡大自体が送金詰まりを改善します。
それはなぜかと言うと、ビットコインは1日で出来る送金の上限データ容量が決まっているからです(ビットコインだけに関わらず、ブロックチェーンを採用している通貨すべてに言えます)。また、なぜ上限が決まっているかと言うと、1日にマイニングによってマイニングされるブロック数が限られているからです。
例えば、1日に150ブロックがマイニングされているとして、1日で150MB分のデータをBTCのブロックチェーンに記載できます。もしSegwitされて、1ブロック当たりの実質容量が1MBから1.7MBになったとすれば、1日当たり255MB 分のデータが利用できるようになります。
つまり、その差分の105MBで記載出来る分だけの送金詰まりは改善するという訳です。
(因みに、ビットコインでは、難易度調整によって10分で1ブロックがマイニングされるように定期的に調整が入ります。それゆえ、マイニングをするマイナーが増えても、本来は生成されるブロック数は増えません(一時的な増減はあります)。)
Segwitのメリット・デメリット
メリット
メリットとして、既に送金詰まりの改善を挙げました。
しかし、他にもメリットは多いです。
- 取引所やウォレットでのトランザクション(TX)識別がTXIDで可能になる
- 取引手数料の低下
- 送金の承認時間(送金完了までの時間)の短縮
- ライトニングネットワークを導入しやすくなる
- トランザクション展性(マリアビリティ問題)への耐性
- DDoS攻撃への危険性の軽減
今回は、特にトランザクション展性への耐性ついて述べます。
因みに、ライトニングネットワーク(略して、LN)とは、こちらも送金詰まりを解消する仕組みの一つです。こちらの解説は過去に詳しく書きましたので、文末にリンクを貼っておきます。
トランザクション展性とは
トランザクション展性とは、「トランザクションID(TXID)が変更されてしまう」という現在のビットコインが抱えている問題の一つです。こちらも出来る限り簡潔に解説します。
トランザクション展性という脆弱性によって、トランザクションに含まれるアドレスと送金量を変更せずにTXIDだけを変更することが可能です。
この脆弱性によって、二重支払いの問題が起きます。
以下の図を用いて説明するので、まずは図を見てください。
Bさんだけが攻撃者です。また、①と②は送金を、③はTXの書き換え行為を、④はTXが書き換えられたことを、⑤は④によって送金がされなくなったことを表します。以下で、具体的に解説します。
まず、AさんがBさんに送金し、承認を受け送金を完全に完了します(①)。その後、BさんがAさんから送金された通貨を用いて、Cさんのお店で買い物をした代金を送金します(②)。①の送金は承認済みなのに対し、②の送金は承認が済んでいません。また、Cさんのお店では、迅速な決済の為に承認を待たず支払いを完了させた扱いにしています。
Bさんは、Cさんへの代金支払いの為に送金したトランザクションが承認される前に、Aさんから送金されたトランザクションIDを書き変えました(③)。すると、トランザクション展性によりTXIDが変更されて(④)、それによってBさんからCさんへの送金が行われなくなります(⑤)。
BさんはAさんから送られた通貨を用いて、Cさんへの決済に使用しました。よって、BさんからCさんへの送金はAさんからBさんへの送金を参照しているために、Bさんの攻撃によって②の送金が①の送金を参照できなくなったのです。
結局、何が言いたかったのかというと、Segwitによってこのような問題が起きなくなるということです。しかし、二重支払いにはこれ以外のタイプもあり、全ての二重支払い問題が解決されるわけではありません。
デメリット
ここからはデメリットについて説明します。
デメリットとしては、
- トランザクション毎にマイナーが得られる手数料が減る
- 実装が複雑だった
- Segwitに対応していない通貨に誤送金すると署名無しで引き出せてしまう
- マイナーの反対意見が多かった
などが挙げられます。一部はデメリットとは言いきれないかもしれません。
実装が複雑なことに関して、マイニングをするマイナーがSegwitに対応しなくてはならないことは問題でした。ビットコインでは全体の95%がSegwitに対応したコンピュータを実装しなければならないそうです。ただし、2017年8月24日にアクティベート(有効化)されました。
また、3つ目のデメリットに関して、Segwit非対応通貨の口座に誤送金した時の盗難リスクも上昇します。なので、bitlflyerはbtcの預入時にはSegwitが利用できないようになっています。
また、マイナーの反対意見は強いものでした。その理由として、当時使用されていたマイニング用のpc(ASICboost)が使えなくなることもありました。しかし、それだけではなくビックブロック派がハードフォークによってビットコインキャッシュを誕生させるなどしました。
終わりに
今回は、Segwitとは何かについて、その仕組みに焦点をあてて解説しました。
Segwitについては、特にマイナーの意見も含めると複雑な記事になってしまうので出来るだけ技術に焦点を当てるようにしました。より詳しいことが知りたい方は、下の参考などから見てみましょう。
今回の記事を、簡単にまとめると「Segwitは、TX内の署名を別領域に保存することによって実質的なブロックサイズを大きくし、送金の利便性が高まる」ということです。
また、モナコインやLitecoinも既にSegwitに対応しているので、覚えておきましょう。
Segwitのように送金の利便性を高める技術として、ライトニングネットワークについての記事も書いています。こちらも以下のリンクよりご覧ください。
仮想通貨に送金革命!?ライトニングネットワークとは何かを解説! – CRYPTO TIMES