Mastering Ethereum

前回(3章)

4章 暗号化

  • 鍵とアドレス
  • 秘密鍵
  • 公開鍵
  • 暗号ハッシュ関数
  • アドレス

前章より、

外部所有アカウント(EOA)は、

秘密鍵、Ethereumアドレス、デジタル署名

により所有権を決定付け。

 

暗号化

 

公開鍵暗号(非対称鍵暗号)、楕円曲線暗号 etc...

秘密鍵

k = f8f8a2f43c8376ccb0871305060d7b27b0554d2ccf41b2705608452f315

OSの乱数生成器から無作為な256bit

端的には乱数

無作為な数字から秘密鍵は生成される

16進数でランダムに生成した秘密鍵(k)の例

(256bitを4bit毎に16進数エンコードされた64桁)

公開鍵

次世代公開鍵暗号「楕円曲線暗号」と その適切な活用に向けて
http://www.imes.boj.or.jp/citecs/symp/14/ref3_seitou.pdf

一般的な楕円曲線暗号(Elliptic Curve Cryptography: ECC)

 

 

 

1. DSAを楕円曲線上で定義した楕円曲線DSA (ECDSA)
2. ディフィー・ヘルマン(DH)鍵共有を楕円化した楕円曲線DH鍵共有 (ECDH)
3. ...etc

secp256k1 elliptic curve

ECDSAによる署名生成と検証の仕組み
https://zoom-blc.com/what-is-ecdsa

秘密鍵から一方向のみ計算可能な方法で導出

公開鍵は秘密鍵から生成される

端的には楕円曲線(x,y座標)上の点 K-> (x, y)

Ethereumの公開鍵は上記のx,yが連結した値

K = (x,  y)

 x = 6e70fa199ik36teyhfngjd772lfdoiuyzrar...

 y = 839k7h46fyv6735cget25du476c6d84k2...

K = k * G

ランダムに生成された秘密鍵(k)と

楕円曲線上で事前に定義された点(G)とを

掛け合わせることで曲線上の別の点(公開鍵K)を取得する。

生成点Gはsecp256k1標準の一部として指定される。

kとKとの関係は固定されるが、kからKへの一方向にのみ計算可能

そのため秘密鍵kを公開することなく、公開鍵Kから派生した値(イーサリアムアドレス)を共有できる(次節アドレス記載)。

暗号ハッシュ関数

おさらい

Data Structure

各ノードのlocal databaseにトランザクションとシステムの状態を保存。

イーサリアムアドレスは、一方向ハッシュ関数(Keccak-256)によって公開鍵orコントラクトから導出した固有識別子

Ethereumの暗号ハッシュ関数: Keccak-256

上記ハッシュ値の最後の20バイトがアドレス

アドレス

イーサリアムアドレスフォーマット

公開鍵のKeccak-256によるハッシュ値の最後の20byte

チェックサムを持たない16進数で表示されている

システム上位レイヤー(アプリケーション/サービス層)にてチェックサムを意図

ビットコインアドレスではクライアント側のUIでエンコードされ、間違い防止のビルドインチェックサムが含まれている。

0x70E7E97d26325b228af2Eb73e24539068016121a

ICAP、IBAN

ICAPは、国際銀行勘定番号(IBAN)エンコーディングと部分的に互換性のあるイーサリアムアドレスエンコーディング

IBANは、海外送金のエラー削減、処理の迅速化およびコスト低減を主な目的として、欧州銀行協会と国際標準化機構(ISO)により策定。IBANは銀行口座番号を識別するための国際標準。主に送金に利用。

IBANは、国別コード、チェックサム、銀行口座識別子(各国固有)を含む最大34文字の英数字で構成。

ICAPは、非標準国コード「XE」から始まり、チェックサム(2文字)、口座識別子をもつ構造で、IBANと同じ構造。

IBAN

EIP-55

大文字を使用するチェックサム付き16進数

イーサリアムアドレスは大文字小文字を区別しない特性から、アドレスのアルファベット文字の一部を大文字化する変更を加えることで入力の間違いや誤読からアドレスを保護するチェックサム機構を導入可能

0x001d3f1ef827552ae1114027bd3ecf1086ba0f9

 

↓ EIP-55の大文字小文字混合チェックサム

 

0x001d3F1ef827552Ae1114027BD3ECF1086bA0F9

keccak256("001d3f1ef827552ae1114027bd3ecf1086ba0f9")

 

↓ hash化

 

23a69c1653e4bbb619b0b2cb8a9bad49892a8b9695d9a19d8f673ca991deae1

アドレス

001d3f1ef827552ae1114027bd3ecf1086ba0f9

 

ハッシュ値

23a69c1653e4bbb619b0b2cb8a9bad49892a8b9695d9a19d8f673ca991deae1

0x001d3f1ef827552ae1114027bd3ecf1086ba0f9

 

↓ EIP-55の大文字小文字混合チェックサム

 

0x001d3F1ef827552Ae1114027BD3ECF1086bA0F9

ハッシュ値に対応する16進数が0x8以上の場合は、各アルファベットを大文字にする。

アドレス

001d3f1ef827552ae1114027bd3ecf1086ba0f9

 

ハッシュ値

23a69c1653e4bbb619b0b2cb8a9bad49892a8b9695d9a19d8f673ca991deae1

Mastering Ethereum (第4章)

By Akira Tamai

Mastering Ethereum (第4章)

  • 65