本ページはプロモーションが含まれています
ビットコインアドレスが作成される仕組みはこちらビットコインアドレスとは?<仕組みと取得方法>で解説をしました。ここではビットコインアドレスが秘密鍵⇒公開鍵⇒Base58という変換によって作成されていく過程を分かりやすく、そして少し詳しく解説をしていきます。
秘密鍵の生成からビットコインアドレス生成までの流れ
少しおさらいしておくと、ビットコインアドレスを作成するまでの過程では「乱数生成器」を用いてランダムな文字列を作成、そこから秘密鍵を生成します。そしてその秘密鍵を一方向性のある(逆に計算で導き出す事のできない)演算により公開鍵を作成します。
公開鍵が作成されたら公開鍵を人の目にも見やすい「ビットコインアドレス」へと変換していくのですが、ここではビットコインという「資産」に用いるのに適したような形式になるようにBase58というフォーマットが利用されます。以下では公開鍵をビットコインアドレスに変換する際に利用されている仕組みを解説していきます。
その前にビットコインアドレスが最終的な私たちの目の前に現れる直前にどのような形式になっているのかを確認しておきましょう。
[プレフィックス(1バイト)][ペイロード(データ)][チェックサム(4バイト)]
という形になっています。これらをBase58というフォーマットを利用して26~30の文字列にします。先頭にプレフィックス・真ん中にペイロード・終わりにチェックサム、という事を覚えておくと理解がスムーズになり、且つビットコインアドレスがどのように利用しやすく作成されているかが分かると思います。
スポンサー
プレフィックス
プレフィックスとは日本語では「接頭辞」と呼ばれ、文字列の先頭に来る文字の事を指します。ビットコインアドレスを作成する際にもプレフィックスという概念は利用されています。
プレフィックスはビットコインアドレスの識別子の役割を担います。例えばビットコインネットワークには実際に価格の付いているビットコインを所有したり、送信したする事ができる「メインネット」とビットコインの送信などを試行できる「テストネット」というものがあります。これらはプレフィックスでは「0x00(メインネット)」と「0x6F(テストネット)」というように16進数で識別されており、Base58に通すと「1」「m(n)」でビットコインアドレスが始まるように表示されます。普段目にする多くのビットコインアドレスが「1」から始まるのはこの為です。
また、ビットコインアドレスでも通常のものとsegwitに対応しているものではビットコインアドレスの先頭文字が異なる事があります。これもプレフィックスであらかじめ識別されるように作成されているのが原因です。
このようにプレフィックスがある事でそのビットコインアドレスがどのようなものなのかすぐに見分ける事ができるのです。
ペイロード(データ)
先ほど示したペイロードには公開鍵をSHA256とRIPEMD160というハッシュ関数に通した値が入ります。これがビットコインアドレスと公開鍵を繋いでいるものです。ペイロードはビットコインアドレスではビットコインアドレスを示しているデータという認識でいいでしょう。あまり深く考える必要はありません。
チェックサム
チェックサムという最後の箇所ではビットコインアドレスに間違いが無いかを検証する事ができます。
チェックサムは今まで見てきた「プレフィックス」と「ペイロード」をSHA256というハッシュに2回通しその出た数値の先頭(4バイト)がチェックサムになります。つまりSHA256(SHA256(プレフィックス+ペイロード)の先頭(4バイト)というようになります。
この4バイトの数値をつけている事で入力したビットコインアドレスが誤りのあるものかどうか検知できるようになっています。
何故ならビットコインアドレスは先ほど述べたように
A・[プレフィックス(1バイト)][ペイロード(データ)][チェックサム(4バイト)]
をBase58に通した(エンコードと言います)ものなのでAの
[プレフィックス(1バイト)][ペイロード(データ)]
をSHA256に2回通せばB・[チェックサム(4バイト)]が導き出されます。
そのB・[チェックサム(4バイト)]がビットコインアドレスから逆算された(デコード)
A・[プレフィックス(1バイト)][ペイロード(データ)][チェックサム(4バイト)]
のA・[チェックサム(4バイト)]と同様かを調べればすぐに誤りがあるかどうかが検知できるという事です。
Base58Check
このように
[プレフィックス(1バイト)][ペイロード(データ)][チェックサム(4バイト)]
をBase58に通してビットコインアドレスを作成する方法はBase58Checkと呼ばれます。
Base58Checkがあるので例えば取引所でビットコインを出金しようとしてビットコインアドレスを入力した際、少し間違って入力してしまった場合に自動でチェックサムなどの誤りが検知され「無効なアドレスです」と表示される事になるのです。
このようなビットコインの仕組みを少しずつ知る事はそれだけで面白いですし、今後より安全に保管・送金する際に役に立つと考えます。
関連記事
スポンサー