【ビットコイン】 アドレス生成方法について調べてみた。
仮想通貨の1つであるビットコインを送金するときは、送付側と受け手側のそれぞれのアドレスが必要になります。
ビットコインのアドレスは、1 または 3 から始まる 27~34 文字の英数字で構成されています。
アドレスは、送付側と受け手側それぞれの秘密鍵を元にして作られた公開鍵から生成されます。
Contents
アドレス生成手順
秘密鍵から公開鍵を生成する手順については以前まとめましたので参考にしてみてください。
※下記ページはイーサリアムの例ですが、ビットコインでも同じ楕円曲線「secp256k1」が使われています。
【イーサリアム】 公開鍵暗号について調べてみた。
アドレスは、以下の手順で公開鍵をハッシュ化して生成されます。
ハッシュ化する際に使われるハッシュ関数「SHA-256」と「RIPEMD-160」については以前にまとめました。
【ビットコイン】ハッシュ関数(SHA-256・RIPEMD-160)について調べてみた。
- 公開鍵をハッシュ関数 SHA-256 でハッシュ化する。
- そのハッシュ値の先頭に「00」もしくは「05」を付ける。
- 付与した値に対して2回ハッシュ関数 SHA-256 を通してハッシュ値を得る。
- 2. の末尾に、3. の先頭4バイトを付与する。
- 4. を Base58 エンコードする。
Base58エンコードとは?
Base58エンコードとは、2進数で表されたバイナリデータを文字列のデータに変換するためのエンコード方式です。
Base58では、見間違いやすいアルファベット(O、l、I)・数字(0)と記号(+、/)は使用しません。
また、手順2で先頭に付与する「00」もしくは「05」は Version Prefix といい、Base58エンコードするデータの種類を特定するものです。
「00」の場合は、公開鍵ハッシュ(P2PKH)を表し、「05」の場合は、スクリプトハッシュ(P2SH)を表します。
「00」をBase58エンコードすると先頭が「1」になり、「05」をBase58エンコードすると先頭が「3」となります。
ビットコインのアドレスの先頭が以下の例のように「1」または「3」になるのはこのような理由があるからです。
ビットコインアドレスの確認
以下のサイトから実際のビットコインのアドレスを確認することができます。
https://www.blockchain.com/explorer?view=btc
アドレスの先頭が「1」となっているものは「フォーマット」が「BASE58(P2PKH)」となっています。
一方、アドレスの先頭が「3」となっているものは「フォーマット」が「BASE58(P2SH)」となっていることが確認できます。
参考書籍
関連記事
-
【イーサリアム】 チューリング完全性について調べてみた。
仮想通貨の1つであるイーサリアムについて調べていると、チューリング完全性(Turing co
-
【仮想通貨】新しいトランザクション(取引)の追加方法【ブロックチェーン】
仮想通貨で用いられているブロックチェーン技術において、新しいトランザクション(取引)をどのよ
-
【仮想通貨】トランザクションについて調べてみた【ブロックチェーン】
ビットコインなどの仮想通貨では、取引をトランザクションで記述されます。 そのトランザク
-
【ビットコイン】ハッシュ関数(SHA-256・RIPEMD-160)について調べてみた。
ビットコインなどの仮想通貨で使用されているハッシュ関数(hash function)という技
-
【Solidity】 イーサリアムでコントラクトを生成してみた。
スマートコントラクトプログラミングの高級言語の1つである Solidity を使って、イーサ
-
【イーサリアム】クライアントソフト geth を使ってみた。
イーサリアムのクライアントソフト geth をインストールして使ってみました。 クライ
-
【仮想通貨】デジタル署名について調べてみた【ブロックチェーン】
ビットコインなどの仮想通貨のブロックチェーンで用いられているデジタル署名(Digital s
-
【MetaMask】イーサリアムのウォレットを使ってみた【テスト環境】
今回、イーサリアムのウォレットの1つである MetaMask(メタマスク)を使って、テストブ
-
【ビットコイン】1ブロックに含まれる情報について調べてみた【マークル木】
ビットコインなどの仮想通貨では、トランザクション(取引)の束を「ブロック」という単位で扱い、
-
【イーサリアム】日本円のチャートで比較する方法【イーサリアム・クラシック】
イーサリアム(Ethereum)は、2020年時点で、時価総額がビットコインに次ぐ第2位の仮