ビットコインアドレスとウォレットの関係性
ビットコインについては知っているけど、アドレスってなに?という方も中にはいるかもしれません。 ビットコインアドレスには、秘密鍵のウォレットアドレスと公開鍵のウォレットアドレスの2種類があり、ブロックチェーンに記録され、目に見える形で使われているのは公開鍵のウォレットアドレスですが、秘密鍵によるウォレットアドレスも生成可能です。 しかし、ユーザーインターフェースが発達し、このようなことを意識せずともビットコインを持ち、利用することができているのが現状です。 ここで今一度ビットコインアドレスの仕組みについて学習しておくことで、よりビットコインやその他の仮想通貨への理解を深めて行ければと思います。


ビットコインアドレスにはどんな情報が入っているか見たことはあるか?

どんな情報が入っているのか意識して確認したことはないよ。

実は、ウォレットの中身というのは何もないのじゃ。そういったことも知らんということじゃろう?

ウォレットの中身が何もない??残高には僕の仮想通貨の残高数量がちゃんと表示されているので中身はあるはずだけど・・・!!(博士もとうとうボケたのかな…?)

残高として表示した方が使いやすいからそうしているだけで、本来はUTXO(Unspent Transaction Output)という未だ使われていないトランザクションの合計値を集合させて視覚的に表示しているだけなのじゃ

UTXO…?また分からない話が出て来た…。博士!詳しく教えて!
ビットコインアドレスとウォレットの関係性
様々なウォレットアプリやハードウェアが登場しており、使いやすいものが増えているので意識することもなくなってきておりますが、ウォレットには実は仮想通貨が保管されているわけではなく、秘密鍵が保管されており、その秘密鍵によって送金アドレスを生成したり、公開鍵を生成し受取アドレスを生成したりすることができています。
あくまでも記録をウォレット内には保管しているだけであり、実はウォレットの中身に実際の仮想通貨が入っているわけではありません。
しかし、口座や残高に馴染みのある我々のためにアプリケーションの提供側がユーザーインターフェースを工夫し、残高として仮想通貨の数量を表示してくれているだけなのです。
そして、送金にはUTXOを使用しますが、UTXOは分割することができません。
したがって、指定した数量以上のUTXOを送り先のアドレスに送金し、指定した数量を超えて受け取ったビットコインをまた送り先から送り主の方へ送金する仕組みとなっております。
ビットコインアドレスの構造
ビットコインアドレスはSHA-256でハッシュして楕円曲線に掛けて生成されているのですが、英数字の羅列には意味があります。
14q1uDiSRkliHez3XaXoAZoWKBgKzhcwUa
というビットコインアドレスがあったとします。
ビットコインアドレスでは1または3で始まる25文字~35文字の英数字で構成されており、先頭の1または3が「プレフィックス」と呼ばれている部分であり、ここがビットコインアドレスのバージョンや種類を示すための識別子です。
つぎに「エンティティ」と呼ばれている中身の部分はデータとしての実体のことであり、大部分を公開鍵のハッシュが占めています。
そして最後の末尾にある「チェックサム」と呼ばれる部分は、アドレスに間違いがあったときに検出することができる付加情報となっております。
このようにビットコインアドレスは大きく3つの意味に分けることができます。
ただの英数字の羅列で分かりにくいのですが、これでも人間が見やすいように「Base58」というルールに従って変換されているのです。
Base58型に変換後の先頭プレフィックスはこちら
Version prefix(16進数) | 種類 | Base58変換後の先頭プレフィックス |
---|---|---|
0x00 | 公開鍵ハッシュ(P2PKH) | 1 |
0x05 | スクリプトハッシュ(P2SH) | 3 |
0x80 | 秘密鍵WIF形式 | 5 |
0x80 | 秘密鍵圧縮WIF形式 | K or L |
0x0142 | BIP38暗号化秘密鍵 | 6P |
0x0488B21E | BIP32拡張公開鍵 | Xpub |
ビットコインアドレスの種類
前述のようにビットコインアドレスにはバージョンや種類によって文頭が1または3で始まりますが、これは公開鍵ハッシュ(P2PKH)かスクリプトハッシュ(P2SH)かの違いを表しているのです。
P2PKH
P2PKHとは、Pay-to-Public-Key-Hashの略した記述方法であり、一般的に出回っているスタンダードなビットコインアドレスはこちらであり、1からアドレスが始まります。
P2SH
P2SHとは、Pay-to-Script-Hashの略した記述方法であり、こちらは条件付きのアドレスということで3から始まるものとなっております。
後述しますマルチシグネチャと呼ばれる複数人による署名が必要なビットコインアドレスが代表的なものとなっております。
マルチシグネチャ
では、マルチシグネチャとはなにか?ですが、ビットコインの送金方法は、秘密鍵で署名して送金するのですが、一般的な方法では一つの秘密鍵で署名すると送金することができるようになっておりますが、マルチシグネチャでは送金するためには秘密鍵による署名が複数必要になってきます。
例えばAさんがBさんに1BTCを送金したい場合に、CさんとDさんの署名もしないと送金することができないといったことがマルチシグネチャです。
早く送金したいのに他の人の署名が必要になっているので迅速に送金することができなくなってしまいますが、裏を返せば秘密鍵を1つ盗まれただけでもハッカーとしては仮想通貨を盗み出すことができません。
マルチシグネチャはシングルシグネチャよりもセキュリティ面で強固であり、日本国内の仮想通貨取引所のウォレットはほとんどマルチシグネチャの3から始まるビットコインアドレスとなっております。

想定していた以上に仕組みは複雑に出来ているんだね!

そうじゃろ。だからこそインターネットを介して価値を送金することができるビットコインというものは素晴らしいのじゃ!

確かにそうだね。勉強になったよ!自分でも他の仮想通貨のアドレスの仕組みも調べてみる。

それが良いじゃろう。仮想通貨によってはアドレスの生成方法が違っていたりするから調べてみると面白いと思うぞ!何かわかったらわしにも教えてくれ!

はい!博士!
まとめ
ビットコインのようなオープンソースのものでは世界中の様々な人間からBIP(Bitcoin Improvement Proposal)が来て常に新しく進化しています。そのため、アドレスの形式、バージョンやタイプも常に進化しています。
様々な変遷を経てより使いやすく、よりセキュアになっているのです。
最近ではマルチシグネチャのアプリケーションが定番となっているため1から始まるビットコインアドレスを見ることも少なくなりましたが、これはマルチシグネチャという機能が普及している証拠と言えます。
このようにアドレスの変化から時代の流れも読み解くことができますし、送金先や受取先のセキュリティも1から始まるか、3から始まるかなど、簡易的ですが見分けることができるようになります。
是非とも皆さんもアプリケーションのユーザーインターフェースに頼る前に一度ビットコインアドレスの仕組みから学習してみてはいかがでしょうか。