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

仮想通貨の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」を付けたもの

参考書籍

関連記事

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

【Cubase】特定のトラックを無効にする方法。

今回は、Cubaseで特定のトラックのみを無効にする方法について紹介し

【転移学習】学習済みVGG16 による転移学習を行う方法【PyTorch】

今回は、PyTorch を使って、学習済みのモデル VGG16 を用い

【PyTorch】畳込みニューラルネットワークを構築する方法【CNN】

今回は、PyTorch を使って畳込みニューラルネットワーク(CNN)

【PyTorch】ニューラルネットワークを構築する方法【NN】

今回は、PyTorch を使って、ニューラルネットワーク(NN)を構築

【OpenCV】検出した顔画像部分を切り出す方法【Python】

OpenCV を使って、Python で画像の中から顔部分を切り出した

→もっと見る

PAGE TOP ↑