【ビットコイン再入門】Q&A 形式でなるほど理解!(後編)

【ビットコイン再入門】Q&A 形式でなるほど理解!(後編)
みるみ

この記事は Up&Coming という雑誌へ寄稿している内容とほぼ同一のものです。Up&Coming はフォーラムエイトさんという会社が発行している広報誌で、縁あって僕も記事を書かせていただけることとなりました。

「IT ならなんでも!」というご依頼だったのでネタチョイス的にこのブログとも相性がよく、寄稿した内容もブログに投稿することにしました。よければ本誌のほうもぜひお読みください(ネットで無料で読めます!)。

 

=====

前回号に引き続き、今回もビットコインを Q&A 形式で理解していくというテーマです。今号ではより細かい仕組みについて技術的観点からも探っていきましょう。

ところで、前号分のやや編集後記のような小ネタになりますが、この 3 ヶ月間におけるビットコインの値動きというのは非常に歴史的でした。何しろ 2021 年 11 月を最後に長らく更新されていなかった最高価格の記録を前例にないほどの勢いで一気に塗り替えてしまったからです。

前回号で「現在のビットコインの価格は 700 万円ほどですが~」という旨の記載をしましたが、実はこれは初稿を書き上げた時点では 600 万円としており、入稿直前でわざわざ数字を大きくしたのでした。しかし実際に発刊される頃にはなんと 1000 万円の大台を既に突破してしまっていたという事態に…。

この大イベントの裏には、やはり前回号の冒頭で触れた「米国のビットコイン現物 ETF」の存在があります。ETF を通じてビットコインに投資される規模が極めて大きかったということです。これからもビットコインが打ち立てていく記録に目が離せませんね。

Q:ビットコインアドレスってなに?

A:ビットコインにはアドレスという概念があり、これはたいてい銀行の口座番号に例えられます。「35wXoEmtRjebRpF3TZHax2dJFjkeSmiRBQ」のような文字列が各アドレスひとつひとつを示し、それぞれのアドレスにはそれぞれのビットコイン残高が記録されています。当然、送金するときは送信先のアドレスを指定することになります。

しかし通常の銀行口座と大きく違うのは、各アドレスの中身について常に全世界に公開されているという点です。前回号によれば、すべての「トランザクション」は「ブロックチェーン」に記録されていくのでした。送金こそまさしくトランザクションのことですから、どのアドレスからどのアドレスに送信されたかは常にパブリックになっているということです。

しかしこれは残高と送受信履歴が公になっているだけで、資産そのものが置いてあるわけではありません。そうでなければここにあるお金は瞬く間に消えてしまうはずです。ではどうやって「自分の資産を厳重に管理すること」と「公開されるアドレスや残高」というふたつの要素を両立させているのでしょうか。ここからがビットコインの中枢システムです。探索を続けましょう。

Q:自分の資産の実体はどこに存在しているの?

A:これまで登場した要素を振り返ると、ブロックチェーンにはトランザクションしか記録されておらず、アドレスからは残高がわかるのみでした。いまのところ自分のビットコイン本体がどこにどうやって記録されているかはわかっていません。

そのためにはビットコインの「UTXO モデル」について知る必要があり、さらにその理解のためにはトランザクションの内部構造をもう一段階深く見てみる必要があります。順番にいきましょう。

トランザクションの内部は大きくインプットとアウトプットというグループによって二分されています。インプットは今回の支払いに使う有効な資産を示すもの、アウトプットは支払った結果資産がどこに移動するかを示すもので、あるインプットはそれ以前にどこかで作成されたアウトプットと同一です。これは「お金を受け取っていなければお金を払うことはできない」と考えれば直感的に理解できると思います。

ビットコイントランザクションの中身

どこかから送金された結果やお釣り(インプット)を使って次の支払い(アウトプット)を作る

300 円のものを買うのに 100 円玉を 3 枚使ってもいいですが、(100)+(50×3)+(10×4)+(5×2)などのようなパターンでも支払うことができます。もしくは 500 円を払って 200 円のお釣りを受け取るかもしれません。ビットコインにおいて、これらの貨幣ないしは組み合わせのことを UTXO (Unspent Transaction Output) と呼び、過去のトランザクションで発生したアウトプットのうちまだ使用していないもの(つまり自分のお金として使えるもの)がインプットになる理屈でもあります。

これらが「支払う金額をつくるための部品」でありインプットそのものです。インプットの総額は支払いたい金額の合計以上になっていればよく、そのためアウトプット(つまり新たな UTXO)はたいてい「もともと支払いたかった金額」と「お釣り」という構成になります。

さて、本節のタイトルに戻りましょう。ブロックチェーンにはどのアドレスの残高も直接記録されていないのにも関わらず、どうして各アドレスの資産を管理できているのでしょうか。いまならもうその答えがわかりますね。アドレスのビットコイン残高は、そのアドレスに紐づく UTXO の合計と完全に同一です。ブロックチェーンの全てのデータを見渡せば、あるアドレスがどれだけの UTXO を持っているかは一目瞭然ですから、自動的に資産残高も決定されるわけです。

Q:盗まれないの?どうやって「金庫」に入れるの?

A:ここまででわかったことによると、どうやら「UTXO から新たなアウトプットを作成できる能力を持つことが自分のビットコインを使えることを意味する」と言えそうです。つまりこの能力をいかにして保管するかを知れれば、ビットコインの守り方も体得できそうです。

ここで公開鍵暗号の出番です。まずは登場人物を整理しましょう。

公開鍵暗号の基本的な流れ

公開鍵暗号の基本的な構図

他者も使える「公開鍵」はメッセージの暗号化や署名の検証に、自分だけが管理し秘匿しなければいけない「秘密鍵」はメッセージの復号や署名にそれぞれ利用されます。これにより、送信されたメッセージが改ざんされていないこと、送信したのは間違いなく自分であるということを証明できます。また、特定のデータを自分だけが取り出せる(復号)ようにするという仕組みも作れます。ちょっとビットコインにあてはめられそうな気がしてきませんか?

トランザクションの中で公開鍵と秘密鍵がどう機能するかを見ていきたいところですが、各鍵とアドレスの関係性についても先に知っておきましょう。これも図にしました。

ビットコインアドレスが生成されるまでの流れ

秘密鍵、公開鍵、アドレスの関係

秘密鍵は乱数生成器というものから生成され、この秘密鍵をもとにペアとなる公開鍵が「楕円曲線暗号」によって生成されます。鍵同士が関連しているからこそ、暗号化されたデータを復号したり誰かの署名を検証したりできるわけですね。そして公開鍵からさらに派生したものがビットコインアドレスで、これはハッシュ関数によって変換されたものです。ハッシュなのでここも不可逆で、つまり「秘密鍵→公開鍵→アドレス」の順に生成されていきますが、どのプロセスにおいても前の状態に戻すことはできません。

さて、いよいよトランザクションの中を実際に見ていきます。

トランザクションのインプットとアウトプットの中での公開鍵暗号のふるまい

トランザクションの中での公開鍵暗号

これはトランザクションの中でどのように公開鍵暗号が振る舞うかを模式的に表したものです。流れを簡潔にまとめるとするなら、①インプットには過去のアウトプットの使用権を証明するために所有者の秘密鍵で生成された署名が含まれており(つまり自分のお金を自分だけが取り出せる)、②アウトプットでは次にこのビットコインを使うための条件としてどの公開鍵を使うべきかが指定されます(つまりこのアドレスの資産は対応する秘密鍵を持つ者のみが使用できることが証明される)。そして③周りのノードは公開鍵を実際に使ってこの署名が正当であるかを検証する、の繰り返しです。

ここでわかることは、「自分の資産を守っているのは秘密鍵のみである」ということです。UTXO がブロックチェーン上に残っていたとしても、それを解錠できる秘密鍵を失ってしまったらそのビットコインは永久に取り出すことはできません。あなたのビットコインとは秘密鍵のことそのものであり、この保管方法こそ何よりも重要視すべき点なのです。

本節のタイトルに立ち戻ると、ビットコインが盗まれないように保管する方法というのは、秘密鍵をどう保管するかという命題に置き換えられるとわかります。暗号資産取引所での売買や送受金においては私たちが自身で秘密鍵の管理をする必要はありませんが(取引所が厳重に管理してくれています)、暗号資産を自分のウォレットで管理しておきたいという場合には必ず秘密鍵の管理手法を問われることになります。

いまのところベストプラクティスと言われている保管方法は、ハードウェアウォレットと呼ばれるものに記録しておく、紙に書いたり鉄板や石版に彫って金庫に入れておく、などです。PC やインターネット上に保存するのは絶対にやめましょう!あなたの資産を守れるのはあなただけ、「Don't trust, Verify (信用するな、検証しろ)」です。

Q:どうやって送金するの?

A:さて、ここまで来ると実は送金の仕組みももうほとんど説明できる状況になっています。振り返りとまとめも兼ねて流れを一緒に追っていきましょう。

まず、送金を表現するトランザクションを作成します。この作成を担うのは、取引所での送金なら取引所のシステム、あなたの個人のウォレットならそのウォレットアプリケーションです。いずれにしても正当な秘密鍵を持っているはずなので、それを使って過去の UTXO から有効な資産を選択し、トランザクションを署名します。完成したトランザクションは、前回号の通り他のノードへとブロードキャストされ、これを受け取った他のノードはトランザクションの正当性を検証します。検証に成功しブロックチェーンに取り込まれれば送金は完了したとみなされ、あなたのビットコインが別のアドレスに移転されます。

送金するとき、他のノードがどのように検証しているかも見ておきましょう。支払いに使われているビットコインが間違いなく所有者のものであることは、前述の公開鍵暗号によって既に証明されています。あとは二重支払いされていないかをチェックできればよいですが、これは同じく UTXO モデルが既に解決しています。支払いに使えるビットコインとはすなわち UTXO そのものなので、ブロックチェーンの完全なコピーを保持しているノード(フルノードといいます)はその支払いのインプットが過去と重複していないかはすぐに判定できるからです。

検証に成功するとそのトランザクションはチェーンに取り込まれて新たなブロックとなっていきますが、前回号でも触れたとおり、チェーンは一時的に分岐する可能性が常にあるため、1 ブロック承認されたただけでは「送金が完了した」という扱いにはなりません。もしそのチェーンが正史にならなかった場合、そこに含まれていた送金はなかったことになってしまうからです。では「一体何ブロックの承認があればいいのか?」ということになりますが、実はこの数値はブロックチェーンを利用する各システムが自由に決めています。小口決済を大量に行う取引所なのか、高額な送金をメインとする信託サービスなのか、各ユースケースによって独自の値を設ける必然性があるのがわかるでしょうか。参考として、一般的には 6 ブロックという承認数がよく使われていることも付記しておきます。

Q:実際の送金は手数料が高くてスピードも遅いって聞いたけど?

A:最後に、他の暗号資産やブロックチェーンへの興味の糸口となるように、ビットコインの課題についても紹介しておきます。ここまで主にビットコインの送金プロセスについて説明してきましたが、これが実際の日常生活で便利に使えるものであるかというと、実はそれは難しいものであると言わざるを得ません。

まず第一に、単純な送金に使用するには手数料が高すぎます。時期によりかなり変動しますが、最近だとだいたい数百円~数千円程度の推移です。国内の暗号資産取引所で送受金したことがある方はもっと高額な数値を見たことがあるかもしれません(ここには取引所の手数料も乗っています)。

そして第二に、送金が完了するまでに必要とする時間も(想定されるメインのユースケースに対しては)長すぎます。1 ブロックが承認されるまでに約 10 分かかりますが、買い物のたびにレジの前で 10 分間店員さんと毎度見つめ合わなければいけないのは少々骨が折れそうです。しかもこれは必要な承認数が 1 ブロックだった場合の話なので、実際はこの数倍になるかもしれません。

これを解決するために、いま暗号資産業界ではどのようなアプローチが存在しているか、大きく 2 種類のソリューションを紹介して終わりにしたいと思います。

  1. Lightning Network に代表される L2 ソリューション
  2. ビットコインではない新たなブロックチェーンと通貨の登場

ひとつめは、誤解を恐れず端的に説明するとするなら「大抵の小さいトランザクションはわざわざ毎回ブロックチェーンに書き込まなくてもよさそうだし、チェーンの外でまとめてトランザクションを処理しちゃって、最終的な結果だけを書き込むようにしちゃおう!」という感じです。これもまた非常に複雑ですが興味深い設計になっており、これからの暗号資産業界には必須の技術と考えられています。

ふたつめは言わずもがな、ビットコインの課題を解決するべく登場した他の多数の暗号資産のことを指します。実際、送金手数料が常に 1 円程度で送金も数秒で終わるというものも既に登場してきています。ここでは具体的な通貨名を挙げることはあえてしませんが、こういったものを探す中で自分だけの「推しコイン」を見つけるというのもまた楽しいものです。

みるみ
みるみ

ブロガー、ソフトウェアエンジニア。

この「みるめも」というブログの筆者です。

この記事へのコメント
コメントはまだひとつもありません :)

新しいコメントを書く

  • 必須項目はコメント本文のみですが、お名前はぜひご記入いただけると嬉しいです。
    ※メールアドレスを書いた場合も公開されることはないのでご安心ください。
  • 特定のコメントに返信したい場合は各コメントにある「返信する」ボタンからどうぞ。
  • コメントはこちらで承認の作業を行うまでは表示されません。ご了承ください。
    ※ここ数年スパムが激化しており、誤って削除されてしまうケースが増えてきました。スパムボックスも毎日自分の目で確認するようにはしているのですが、どうしても限界があります。確実に僕に連絡を取りたい方は メールTwitter からお願いします。