【イーサリアム】 公開鍵暗号について調べてみた。
仮想通貨の1つであるイーサリアムでは、公開鍵暗号という技術が使われています。
公開鍵暗号では、秘密鍵と公開鍵を作ります。公開鍵は秘密鍵から作ることができ、秘密鍵が分かれば、公開鍵は簡単に作れます。
公開鍵は「銀行口座番号」で、秘密鍵は「暗証番号」と例えることができます。
イーサリアムでは、実際に取引を行う外部所有アカウント(EOA)は、秘密鍵を基にして作られます。
また、トランザクション(取引など)に対するデジタル署名は秘密鍵によって行われます。
デジタル署名については、以前にまとめました。
【仮想通貨】デジタル署名について調べてみた【ブロックチェーン】
Contents
秘密鍵生成方法
秘密鍵は、簡単にいうと「ランダムに抽出された数字」です。イーサリアムでは、長さが 256 ビットの数字が秘密鍵として使われます。
手順としては、string 型の十分に長いランダムなビット列を、Keccak-256 や SHA-256 のハッシュ関数を使って 256 ビットにしたものです。得られた数値が、ある範囲内に収まっていれば適切な秘密鍵を得られたことになります。もし、範囲外の場合は、条件を満たすまで繰り返します。
公開鍵生成方法
公開鍵は、秘密鍵から生成します。ただし、公開鍵は一般に公開されてしまう情報なので、公開鍵から秘密鍵を推測できないようにしなければなりません。
秘密鍵から公開鍵を一方向で作成するために、楕円曲線暗号という技術を用います。
イーサリアムでは、「Secp256k1」という名前で定義された固有の楕円曲線と定数のセットを用いており、ビットコインと同じ楕円曲線になります。
楕円曲線の式は以下のようになります。
$$y^2=x^3+ax+b mod p$$
「Secp256k1」では、それぞれ「a」「b」「p」の値が決まっています。
以下の手順で公開鍵を作成していきます。
- 楕円曲線上の基準となる点 G(x, y)を決める。
- G を基に楕円曲線上での足し算を行い、楕円曲線上の点2G を決める。
- 2.を秘密鍵(256ビットの数字)の回数分だけ繰り返し、楕円曲線上に n * G の点を得る。
- この n * G をして得られた点(x, y)を公開鍵とする。
公開鍵として得られた点(xy座標値)は、イーサリアムでは以下のように座標値を連結させてシリアル化します。
04 + x座標(32バイト:16進数で64文字)+ y座標(32バイト:16進数で64文字)
実際に用いられているイーサリアムの公開鍵は以下のようになります。
1 |
046e145ccef1033dea239875dd00dfb4fee6e3348b84985c92f103444683bae07b83b5c38e5e2b0c8529d7fa3f64d46daa1ece2d9ac14cab9477d042c84c32ccd0 |
イーサリアムアドレス生成方法
イーサリアムアドレスは、ハッシュ関数(Keccak-256)を使って、公開鍵から作成されます。
ハッシュ関数は公開鍵の作成だけでなく、デジタル署名などイーサリアムのシステム全体で使用されています。
ハッシュ関数(Keccak-256)については以前にまとめました。
【仮想通貨】ハッシュ関数(SHA-256)について調べてみた【ブロックチェーン】
【イーサリアム】 ハッシュ関数(Keccak-256)について調べてみた。
イーサリアムアドレス作成の手順としては、まず、公開鍵に対して、ハッシュ関数(Keccak-256)を用いてハッシュ値を計算します。
次に、ハッシュ値の最後の 20バイト(最下位バイト)を取得したものに対して、16進数エンコードであることを示すため、先頭に「0x」を付けます。
具体的には以下のようになります。
公開鍵
1 |
K = 6e145ccef1033dea239875dd00dfb4fee6e3348b84985c92f103444683bae07b83b5c38e5e... |
公開鍵のハッシュ値
1 |
Keccak256(K) = 2a5bc342ed616b5ba5732269001d3f1ef827552ae1114027bd3ecf1f086ba0f9 |
ハッシュ値の下位20バイト
1 |
001d3f1ef827552ae1114027bd3ecf1f086ba0f9 |
先頭に「0x」を付けたもの
1 |
0x001d3f1ef827552ae1114027bd3ecf1f086ba0f9 |
参考書籍
関連記事
-
【イーサリアム】日本円のチャートで比較する方法【イーサリアム・クラシック】
イーサリアム(Ethereum)は、2020年時点で、時価総額がビットコインに次ぐ第2位の仮
-
初心者でも分かるビットコインの仕組みについてまとめてみた。
ビットコインは,時価総額が1位で最も有名な仮想通貨です. 仮想通貨の時価総額の見方について
-
【仮想通貨】デジタル署名について調べてみた【ブロックチェーン】
ビットコインなどの仮想通貨のブロックチェーンで用いられているデジタル署名(Digital s
-
【イーサリアム】クライアントソフト geth を使ってみた。
イーサリアムのクライアントソフト geth をインストールして使ってみました。 クライ
-
【イーサリアム】 ハッシュ関数(Keccak-256)について調べてみた。
仮想通貨の1つであるイーサリアムで用いられているハッシュ関数「Keccak-256」について
-
【仮想通貨】時価総額のランキングを円(JPY)で見る方法。
ビットコインやイーサリアムなどの仮想通貨の時価総額のランキングを 円(JPY)で見れる分かり
-
【仮想通貨】トランザクションについて調べてみた【ブロックチェーン】
ビットコインなどの仮想通貨では、取引をトランザクションで記述されます。 そのトランザク
-
【MetaMask】イーサリアムのウォレットを使ってみた【テスト環境】
今回、イーサリアムのウォレットの1つである MetaMask(メタマスク)を使って、テストブ
-
【Solidity】 イーサリアムでコントラクトを生成してみた。
スマートコントラクトプログラミングの高級言語の1つである Solidity を使って、イーサ
-
【仮想通貨】デジタル署名と公開鍵暗号の違いは!?
ビットコインなどの仮想通貨のブロックチェーン技術で用いられている「デジタル署名」「公開鍵暗号