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

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

暗号技術には「公開鍵暗号方式」と「共通鍵暗号方式」の2種類が存在しています。
cryptoeconomicsが重要視している暗号技術は、「公開鍵暗号方式」で暗号用の為に用いる公開鍵と復号用の為に用いる秘密鍵をそれぞれ別の鍵として扱います。
公開鍵暗号方式は、処理が遅いというデメリットがありますが、データの復号化が可能なのは秘密鍵の所有者のみのためセキュリティーの観点から安心感があります。
一方で共通鍵暗号方式というのは、同じ鍵で暗号化と復号化を行う方式を言い、鍵が1つであることから暗号化する際に使用した鍵を復号化する際にも、同様の鍵が必要になるためユーザーで使い回しをすると、漏洩する可能性も考えられ安全管理の徹底が必要となります。

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

ECDSAによって公開鍵と秘密鍵のペアがランダムに生成されます。
正式には、秘密鍵から公開鍵が生成され、公開鍵から仮想通貨の送金アドレスが作成されます。
もちろん公開鍵から秘密鍵を推測すことは困難です。
秘密鍵はコインの所有権を表しており、紛失することはコインの紛失を意味します。
公開鍵からはコインの漏洩等に繋がることはなく、他人に知られても問題がありません。

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

ビットコインのアドレス生成

ビットコインアドレスは、1・3またはbc1 から始まる27~34 文字の文字列です。
1から始まるのは一般的なビットコインアドレスで、3から始まるのはマルチシグアドレスです。
また、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にはチェックサムという機能がついており、無効なアドレスを検出してユーザーの誤送信時に知らせる。

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

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

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

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

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

正しいデータ:”1234515”

誤ったデータ:”1234615”

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

CoinPicks Lab内では以上のテーマでもう一歩踏み込んで解説しております。
もっと知識を深めたい方はLabでお待ちしています。
CoinPicks Labとは? | CoinPicks|仮想通貨の価値を伝える

友だち追加
仮想通貨の質問や悩みがある方はどしどしLINEお待ちしてます!!
リアルタイムの仮想通貨情報や筆者の興味と好奇心で呟いてます。

CoinPicks Labでは、より一歩踏み込んだ情報配信をしています。


PAGE TOP