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

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

参考書籍

関連記事

【イーサリアム】クライアントソフト geth を使ってみた。

イーサリアムのクライアントソフト geth をインストールして使ってみました。 クライ

記事を読む

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

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

記事を読む

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

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

記事を読む

【イーサリアム】 チューリング完全性について調べてみた。

仮想通貨の1つであるイーサリアムについて調べていると、チューリング完全性(Turing co

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

ビットコインは,時価総額が1位で最も有名な仮想通貨です. 仮

【LaTeX】 見出し付き箇条書きを右にずらす方法【数式の変数説明】

今回は、LaTeX で見出し付き箇条書きの全体の位置を右にずらす方法に

【LaTeX】 余白部分を設定しレイアウトを確認する方法。

今回は、LaTeX の余白部分のレイアウトの変更方法とレイアウトの確認

【LaTeX】 レポートや論文の表紙のテンプレート。

LaTex を使ってレポートや論文を書くときに、表紙をつけると思います

【DTM】 Cubase AI でギターやベースを録音する方法。

今回は、DTM のための DAWソフト Cubase AI でギター(

→もっと見る

PAGE TOP ↑