秘密鍵と公開鍵とアドレス

暗号化方式

暗号技術には2種類の方式が存在しており、「公開鍵暗号方式」と「共通鍵暗号方式」と呼ばれています。

cryptoeconomicsが重要視している暗号技術は、「公開鍵暗号方式」で暗号用の為に用いる公開鍵と復号用の為に用いる秘密鍵をそれぞれ別の鍵として扱います。

公開鍵暗号方式は、処理が遅いというデメリットがありますが、データの復号化が可能なのは秘密鍵の所有者のみのためセキュリティーの観点から安心感があります。

一方で共通鍵暗号方式というのは、同じ鍵で暗号化と復号化を行う方式を言い、鍵が1つであることから暗号化する際に使用した鍵を復号化する際にも必要になるため、ユーザーによる鍵の使い回しによって漏洩する可能性も考えられる為、安全管理の徹底が必要となります。

下記図にて分かりやすく比較しております。

暗号化方式 共通鍵暗号 公開鍵暗号
暗号化アルゴリズム RC4、DES、3DES、AES RSA、ElGamal
使用する暗号鍵 共通鍵 公開鍵、秘密鍵
鍵の管理 通信接続先ごとに作成 通信接続先の数に関係なく1つだけ作成
鍵の交換 第三者に知られないよう安全に交換 作成した公開鍵を一般に公開
データの処理時間 速い 遅い

秘密鍵(Private key)と公開鍵(Public key)

鍵の生成時に使用されているアルゴリズムを「 楕円曲線暗号(ECC)の楕円曲線DSA(ECDSA)」と言います。

ECDSAは楕円曲線という数学を使ってDSAと同じ原理の公開鍵暗号を構成したものです。一般的に普及している暗号アルゴリズムはRSAですが、ECCアルゴリズムはRSAと比較してビット数を少なくすることができ、処理性能を高速化することが可能です。

ECDSAによって公開鍵と秘密鍵のペアがランダムに生成されます。正式には秘密鍵から公開鍵が生成され、公開鍵からビットコインアドレスが作成されます。一方向性ハッシュ関数という暗号方式を用いている為、ビットコインアドレスから公開鍵の推測や公開鍵から秘密鍵の推測は困難となっています。(推測が不可能という訳ではなく、極めて非現実的ということです。)

一方向性ハッシュ関数についてはこちらをご覧ください。

ビットコイン におけるハッシュ関数について

秘密鍵はビットコインの所有権を表しており、秘密鍵の紛失はビットコインの紛失を意味します。上述したように、公開鍵やビットコインアドレスから秘密鍵が漏洩する可能性は極めて低い為、第三者に知られても問題がありません。

上図にあるように秘密鍵はブロックチェーン内でトランザクションの署名に使用され、公開鍵はトランザクションの照合に使用されます。

つまり送信者が秘密鍵を使用して署名したトランザクションと、秘密鍵から生成された公開鍵でトランザクションの署名の照合が可能であれば正当な取引として認められます。

 

アドレスの生成方法

ビットコインアドレスは公開鍵から一方向性ハッシュ関数を用いて生成されていることがわかりました。

ビットコインアドレスが生成されるまで

ビットコインアドレスは1・3またはbc1 から始まる27~34 文字の文字列です。

1から始まるのは一般的なビットコイン(P2PKH)アドレスで、3から始まるのはP2SHアドレスです。また、bc1から始まるビットコインは、Segwitアドレスと決まっています。

1BitQEtcoxAnViwUYX9k6KupmmsEfWrGnr

  1. 秘密鍵からECDSAで公開鍵を生成
  2. 公開鍵をハッシュ関数SHA-256に通しハッシュ値を得る
  3. そのハッシュ値をさらにハッシュ関数RIPEMD-160に通しハッシュ値を得る
  4. ハッシュ値の先頭にプレフィックスとして00を加える
  5. ハッシュ関数SHA-256に通す
  6. もう一度ハッシュ関数SHA-256に通す
  7. 4byteのチェックサムを一番後ろに加える
  8. Base58(*1)のフォーマットでエンコーディングする

*1 BASE58 :二進数で表されたバイナリデータを文字として扱うためのエンコード方式のこと。仮想通貨では、公開鍵や秘密鍵、アドレスの形式を変換するときに広く使われている。特徴としてユーザーの誤認識を防ぐために、英数字以外の文字や数字の「 0 」と英大文字の「 O 」、数字の「 1 」と英小文字の「 l 」などが場外されている。また、 BASE58 にはチェックサムという機能がついており、無効なアドレスを検出してユーザーの誤送信時に知らせる。

ハッシュについては、こちらを読んでおくと理解が早まります。

イーサリアムアドレスが生成されるまで

イーサリアムアドレスは、0xから始まる合計42文字の文字列です。

0x6079dd09E8bfDFb3032eE0
aD6f35Eb3e9aa506B6

1.秘密鍵からECDSAで公開鍵(64byte)を生成

e145ccef1033dea239875dd00dfb4fee6e3348b
84985c92f103444683bae07b83b5c38e5e2b0c
8529d7fa3f64d46daa1ece2d9ac14cab9477d04
2c84c32ccd0

2.公開鍵をハッシュ関数Keccak-256に通し文字列(32byte)を得る

2a5bc342ed616b5ba5732269001d3f1e
f827552ae1114027bd3ecf1f086ba0f9

3.最初の12byte消し20byteのアドレスになる

001d3f1ef827552ae1114027bd3e
cf1f086ba0f9

4.そのアドレスが16進数であることを示すため接頭辞に”0x”を付加

0x001d3f1ef827552ae1114027b
d3ecf1f086ba0f9

イーサリアムアドレスの生成時には、BASE58フォーマットが使用されておらずチェックサム機能がついておらず、誤送信をしても知らせてくれることはありません。なぜこの機能がついていないかというと、ENS(Ethereum Name Service)と呼ばれるアドレスをWEBのドメインのような役割で可読性を高くするという機能を実装しているからです。

しかし、ICAP(Inter exchange Client Address Protocol)形式のアドレスといったチェックサム付きのフォーマットも検討されています。実際にはICAPへの移行はあまり進んでいません。そこで2016年1月にイーサリアム創設者のVitalik Buterin氏が提案した、Capitals-based checksumと呼ばれる誤送信の検出方法が採用されました。

Capitals-based checksumの役割は、アドレスの小文字を大文字に置き換えることで誤送信検出機能を持たせており、99.986%の精度で誤りを検出できるとのことです。

変換前:0x001d3f1ef827552ae1
114027bd3ecf1f086ba0f9

変換後:0x001d3F1ef827552Ae
1114027BD3ECF1f086bA0F9

 

チェックサムはどのように機能しているのか

先ほどから何度か登場している「チェックサム」は、データ送信において送信側に誤送信検出する手法のことを言います。検出機能がない場合、送信側が間違っていても気付くことなく、遅延や損失を招くことになるため、ユーザビリティの観点からも非常に重要な機能と言えます。

そのチェックサムの仕組みについて説明します。

例えば、”12345″というデータを送信するとします。ただしそのデータをそのまま送信するのではなく、検出機能を持たせるために「S」という文字を12345″の合計値「15」として計算して追加します。

そして、送信するデータ”12345″の末尾に「S」付けて送信します。送信データは、”12345+S” = “1234515”となります。このチェックサムの仕組みを受信側が理解していれば、データの合計値と付加した「S」の間に不一致が生じるため受信したデータの一部が誤っていた場合に誤りを検出することができます。

例えばチェックサムをつけた状態の正しいデータは”1234515”ですが、何らかの原因によって”1234615”とデータが受信されたとします。

正しいデータ:”1234515”

誤ったデータ:”1234615”

この時、誤ったデータのチェックサムを取り除き、「S’」という文字を”12346”の合計値「16」として計算します。受信したデータ“1234515”から、チェックサムSは15であることを受信側は知っています。

一方で、誤ったデータを元に再度計算して求めたチェックサムS’は16です。この違いから、データに誤りがあることを検出することができます。

 

CoinPicks LINE@

おかげさまで現在お友達が1057名を突破しました。仮想通貨の最新情報や重要なファンダ情報などを「プッシュ通知」にて誰よりもはやくお届けします。

https://platform.twitter.com/widgets.js

CoinPicks Lab

学習項目
 
  • 分析レポート
  • Bitcoinについて
  • Ethereum経済圏について
  • ST(セキュリティートークン)について
  • PoS型プラットフォームトークンについて
  • ステーブルコインについて
  • コンセンサスアルゴリズムについて
  • トークン設計について
  • 流通設計について
  • CBDCについて
  • 各インフルエンサーによる特化した情報
  • Q&A項目の共有
  • 基礎学習
  • 掲示板

https://lounge.dmm.com/detail/761/

などなど…
今後も学習項目は増えていきます。