【ビットコイン】 アドレス生成方法について調べてみた。

公開日: : 最終更新日:2020/11/19 仮想通貨 , , ,

仮想通貨の1つであるビットコインを送金するときは、送付側と受け手側のそれぞれのアドレスが必要になります。

ビットコインのアドレスは、1 または 3 から始まる 27~34 文字の英数字で構成されています。

アドレスは、送付側と受け手側それぞれの秘密鍵を元にして作られた公開鍵から生成されます。

アドレス生成手順

秘密鍵から公開鍵を生成する手順については以前まとめましたので参考にしてみてください。
※下記ページはイーサリアムの例ですが、ビットコインでも同じ楕円曲線「secp256k1」が使われています。
【イーサリアム】 公開鍵暗号について調べてみた。

アドレスは、以下の手順で公開鍵をハッシュ化して生成されます。
ハッシュ化する際に使われるハッシュ関数「SHA-256」と「RIPEMD-160」については以前にまとめました。
【ビットコイン】ハッシュ関数(SHA-256・RIPEMD-160)について調べてみた。

  1. 公開鍵をハッシュ関数 SHA-256 でハッシュ化する。
  2. そのハッシュ値の先頭に「00」もしくは「05」を付ける。
  3. 付与した値に対して2回ハッシュ関数 SHA-256 を通してハッシュ値を得る。
  4. 2. の末尾に、3. の先頭4バイトを付与する。
  5. 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)」となっていることが確認できます。

参考書籍

関連記事

【ビットコイン】承認されたブロックを見てみる【ブロックチェーン】

ビットコイン(BitCoin)の公開台帳であるブロックチェーンについて、新たに承認されたブロ

記事を読む

【ビットコイン】ハッシュ関数(SHA-256・RIPEMD-160)について調べてみた。

ビットコインなどの仮想通貨で使用されているハッシュ関数(hash function)という技

記事を読む

初心者でも分かるビットコインの仕組みについてまとめてみた。

ビットコインは,時価総額が1位で最も有名な仮想通貨です. 仮想通貨の時価総額の見方について

記事を読む

【仮想通貨】デジタル署名と公開鍵暗号の違いは!?

ビットコインなどの仮想通貨のブロックチェーン技術で用いられている「デジタル署名」「公開鍵暗号

記事を読む

【イーサリアム】 ハッシュ関数(Keccak-256)について調べてみた。

仮想通貨の1つであるイーサリアムで用いられているハッシュ関数「Keccak-256」について

記事を読む

【イーサリアム】 ホリエモンが2014年当時にイーサリアムの可能性に気付いていた!?

ホリエモンこと堀江氏が、2014年の自身のブログで「イーサリアムやべぇ。。。」というタイトル

記事を読む

【仮想通貨】新しいトランザクション(取引)の追加方法【ブロックチェーン】

仮想通貨で用いられているブロックチェーン技術において、新しいトランザクション(取引)をどのよ

記事を読む

【Solidity】 イーサリアムでコントラクトを生成してみた。

スマートコントラクトプログラミングの高級言語の1つである Solidity を使って、イーサ

記事を読む

【MetaMask】イーサリアムのウォレットを使ってみた【テスト環境】

今回、イーサリアムのウォレットの1つである MetaMask(メタマスク)を使って、テストブ

記事を読む

【仮想通貨】デジタル署名について調べてみた【ブロックチェーン】

ビットコインなどの仮想通貨のブロックチェーンで用いられているデジタル署名(Digital s

記事を読む

【TensorFlow】GPUを認識しない時の対処方法【Python】

TensorFlow で GPU を認識させようとしたときにハマってし

【耳コピ】音楽ファイルを楽器ごとに分離する方法【Spleeter:フリー】

今回は、mp3 などの音楽ファイルをボーカル、ベース、ドラムなどの楽器

【Chainer】手書き数字認識をしてみた【Deep Learning】

Chainerを用いて、ニューラルネットワークを構築し、手書き数字認識

【Spyder】引数のあるスクリプトを実行する方法。

Python の統合開発環境(IDE)である Spyder では、簡単

【Anaconda】Prompt 上で Git コマンドを実行する方法。

Anaconda のコマンドプロンプト(Anaconda Prompt

→もっと見る

PAGE TOP ↑