【イーサリアム】 公開鍵暗号について調べてみた。

仮想通貨の1つであるイーサリアムでは、公開鍵暗号という技術が使われています。

公開鍵暗号では、秘密鍵と公開鍵を作ります。公開鍵は秘密鍵から作ることができ、秘密鍵が分かれば、公開鍵は簡単に作れます。

公開鍵は「銀行口座番号」で、秘密鍵は「暗証番号」と例えることができます。

イーサリアムでは、実際に取引を行う外部所有アカウント(EOA)は、秘密鍵を基にして作られます。

また、トランザクション(取引など)に対するデジタル署名は秘密鍵によって行われます。

デジタル署名については、以前にまとめました。
【仮想通貨】デジタル署名について調べてみた【ブロックチェーン】

秘密鍵生成方法

秘密鍵は、簡単にいうと「ランダムに抽出された数字」です。イーサリアムでは、長さが 256 ビットの数字が秘密鍵として使われます。

手順としては、string 型の十分に長いランダムなビット列を、Keccak-256 や SHA-256 のハッシュ関数を使って 256 ビットにしたものです。得られた数値が、ある範囲内に収まっていれば適切な秘密鍵を得られたことになります。もし、範囲外の場合は、条件を満たすまで繰り返します。

公開鍵生成方法

公開鍵は、秘密鍵から生成します。ただし、公開鍵は一般に公開されてしまう情報なので、公開鍵から秘密鍵を推測できないようにしなければなりません。

秘密鍵から公開鍵を一方向で作成するために、楕円曲線暗号という技術を用います。

イーサリアムでは、「Secp256k1」という名前で定義された固有の楕円曲線と定数のセットを用いており、ビットコインと同じ楕円曲線になります。

楕円曲線の式は以下のようになります。

$$y^2=x^3+ax+b mod p$$

「Secp256k1」では、それぞれ「a」「b」「p」の値が決まっています。

以下の手順で公開鍵を作成していきます。

  1. 楕円曲線上の基準となる点 G(x, y)を決める。
  2. G を基に楕円曲線上での足し算を行い、楕円曲線上の点2G を決める。
  3. 2.を秘密鍵(256ビットの数字)の回数分だけ繰り返し、楕円曲線上に n * G の点を得る。
  4. この n * G をして得られた点(x, y)を公開鍵とする。

公開鍵として得られた点(xy座標値)は、イーサリアムでは以下のように座標値を連結させてシリアル化します。

04 + x座標(32バイト:16進数で64文字)+ y座標(32バイト:16進数で64文字)

実際に用いられているイーサリアムの公開鍵は以下のようになります。

イーサリアムアドレス生成方法

イーサリアムアドレスは、ハッシュ関数(Keccak-256)を使って、公開鍵から作成されます。

ハッシュ関数は公開鍵の作成だけでなく、デジタル署名などイーサリアムのシステム全体で使用されています。

ハッシュ関数(Keccak-256)については以前にまとめました。

【仮想通貨】ハッシュ関数(SHA-256)について調べてみた【ブロックチェーン】

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

イーサリアムアドレス作成の手順としては、まず、公開鍵に対して、ハッシュ関数(Keccak-256)を用いてハッシュ値を計算します。

次に、ハッシュ値の最後の 20バイト(最下位バイト)を取得したものに対して、16進数エンコードであることを示すため、先頭に「0x」を付けます。

具体的には以下のようになります。

公開鍵

公開鍵のハッシュ値

ハッシュ値の下位20バイト

先頭に「0x」を付けたもの

参考書籍

関連記事

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

【仮想通貨】時価総額のランキングを円(JPY)で見る方法。

ビットコインやイーサリアムなどの仮想通貨の時価総額のランキングを 円(JPY)で見れる分かり

記事を読む

【イーサリアム】日本円のチャートで比較する方法【イーサリアム・クラシック】

イーサリアム(Ethereum)は、2020年時点で、時価総額がビットコインに次ぐ第2位の仮

記事を読む

【仮想通貨】トランザクションについて調べてみた【ブロックチェーン】

ビットコインなどの仮想通貨では、取引をトランザクションで記述されます。 そのトランザク

記事を読む

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

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

記事を読む

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

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

記事を読む

【ビットコイン】1ブロックに含まれる情報について調べてみた【マークル木】

ビットコインなどの仮想通貨では、トランザクション(取引)の束を「ブロック」という単位で扱い、

記事を読む

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

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

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

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

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

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

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

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

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

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

→もっと見る

PAGE TOP ↑