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
Digital Signature Standard (DSS)
https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf
一般的な楕円曲線暗号(Elliptic Curve Cryptography: ECC)
1. DSAを楕円曲線上で定義した楕円曲線DSA (ECDSA)
2. ディフィー・ヘルマン(DH)鍵共有を楕円化した楕円曲線DH鍵共有 (ECDH)
3. ...etc


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