ブロックチェーン

ブロックチェーン・仮想通貨の公開鍵と秘密鍵とは?デジタル署名やアドレスの生成方法などをわかりやすく解説

ブロックチェーンの技術を理解するうえで欠かせないもののひとつに「公開鍵暗号」という暗号技術があります。

この記事を読むと次の内容を理解することができます。

  • 公開鍵暗号方式について
  • 秘密鍵、公開鍵、アドレスについて
  • マルチシグについて

公開鍵暗号方式とは

秘密鍵と公開鍵について理解するためにはこの公開鍵暗号方式を理解する必要があります。

インターネット上で二者間の通信、データの送受信を暗号化するとき、暗号化と復号化(暗号化されたデータをもとに戻す作業)が行われます。それぞれの作業を行うために暗号化するための鍵、復号化するための鍵が必要です。

暗号化と復号化を共通の鍵で行う方法を共通鍵暗号方式、「秘密鍵」、「公開鍵」という異なる鍵で暗号化と復号化を行う方法を公開鍵暗号方といいます。

共通鍵暗号方式は、鍵を安全に相手に渡すことができるかが非常に重要です。しかし、インターネット上ではこれは難しい。そこで、この問題を解決したのが公開鍵暗号方式です。

公開鍵暗号方式は、「秘密鍵」と「公開鍵」を使用します。

公開鍵暗号方式の流れ

  1. データ受信者は自分が保有する「秘密鍵」と「公開鍵」のうち「公開鍵」のみを公開する
  2. データ送信者は、受信者が公開する「公開鍵」を取得する
  3. 取得した「公開鍵で」データを暗号化し、暗号化したデータを送信
  4. 受信者は受信した暗号化されたデータを自分が保有する「秘密鍵」で復号化し、データを取得する

ビットコインなどの仮想通貨では、公開鍵暗号を用いてトランザクションのデジタル署名を行っています。

また、典型的な公開鍵暗号アルゴリズムとしてRSAというものがありますが、ビットコインなどには楕円曲線暗号(ECC)のひとつである楕円曲線DSA(ECDSA)アルゴリズムが使われています。

楕円曲線暗号はRSAに比べて鍵のビット数を少なくでき、処理性能を高速化できるのが特徴です。つまり、RSAと比べたとき、楕円曲線暗号の方が短い鍵でも強力であるということです。

秘密鍵とは

公開鍵暗号方式において、秘密鍵は公開鍵とペアになっています。ビットコインの場合はECDSAによって秘密鍵と公開鍵のペアが生成されます。

秘密鍵は名前の通り秘密にしなければならない鍵です。もし仮に、他人にビットコインの秘密鍵を知られてしまったらその鍵に紐づけられているすべてのビットコインを奪われてしまう可能性があります。実世界で例えると銀行通帳、カード、銀行印、暗証番号を盗まれた状態に等しいです。

なので、秘密鍵は誰にも知られないように管理しなければならず、自分でバックアップを取っておく必要があります。そのために、仮想通貨ではウォレットが存在し、そのウォレットの中に秘密鍵を保存しておくわけです。

ブロックチェーンネットワークにおいて、秘密鍵はトランザクションの署名に使われます。

公開鍵とは

一方、公開鍵は自分以外の第三者にも公開する鍵です。公開鍵は秘密鍵によって生成されます。しかし公開鍵から秘密鍵を割り出すことができないアルゴリズムとなっているため安全です。

ブロックチェーンネットワークにおいて、公開鍵は元のトランザクションと署名済みのトランザクションが一致するか検証するために使われます。そしてこの公開鍵をもとにアドレスが生成されます。

アドレスとは

ビットコインなどの仮想通貨でいうアドレスとは銀行の口座番号のようなものです。仮想通貨の取引(コインの送金)を行う時はこのアドレスを使います。

アリスのアドレスからボブのアドレスへ1BTC送金した場合、アリスのアドレスとボブのアドレス、トランザクションはブロックチェーンに記録され、改ざんされることはありません。もちろん秘密鍵と公開鍵はブロックチェーンに記録されません。

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

では具体的にビットコインのアドレスが生成されるまでの流れを確認していきます。

ビットコインアドレス生成までの流れ

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

まず、秘密鍵から公開鍵を生成します。SHA-256やRIPEMD-160などのハッシュ関数を通しつつ、プレフィックスの00を使いしたりしていきます。タイプエラーなどにより送金ミスが起こらないようにチェックサムも加えます(詳しくはこちら)。

この文字列Base58フォーマット(詳しくはこちら)に変換したものがビットコインアドレスとなるわけです。SHA-256やRIPEMD-160などのハッシュ関数については以下の記事で解説しています。

イーサリアムのアドレス生成

つぎはイーサリアムのアドレス生成の流れを確認していきます。ビットコインアドレスの生成方法とは使っているハッシュ関数が違ったり、Base58フォーマットを使用していなかったりなどの違いがあります。

イーサリアムアドレス生成までの流れ

  1. 秘密鍵からECDSAで公開鍵(64バイト)を生成する
  2. 公開鍵をハッシュ関数keccak-256に通し、文字列(32バイト)を得る
  3. 最初の12バイトを消し、20バイトのアドレスにする
  4. そのアドレスにプレフィックスの0xを加えることで最終的なアドレスを得る

アドレスが正しい形式であるかを検証するチェックサムですが、ご覧の通り、イーサリアムでは導入されていません。

これの理由としては、イーサリアムは将来的にアドレスをURLのドメインのようなネームの登録制にしようとしているためです。

実際にENS(Ethereum Name Service)でオリジナルドメインを取得できるようになっています。

ビットコイン送金の流れ

基本的な流れとして秘密鍵→公開鍵→アドレスという流れはなんとなくでも理解できたかと思います。それでは具体的にどういう流れでビットコインが送金されるか確認していきましょう。

アリスからボブに1BTC送金する流れ

  1. アリスは「アリスのアドレスからボブのビットコインアドレスに1BTC送金」というトランザクションを作成
  2. アリスは作成したトランザクションをアリスの秘密鍵を使って署名(暗号化)
  3. ブロックチェーンネットワークへトランザクションがブロードキャストされ検証
  4. 検証の結果、トランザクションに問題ないと判断されるとトランザクションが新たにブロックの中に追加される
  5. 10分ほどでボブに送金完了

今回重要なところは③の検証です。公開されているアリスの公開鍵によって誰でも暗号化されたトランザクションを復号することができます。

これは、この取引がアリスのものであるかという証明をするためです。アリスがだしたトランザクションを復号化できる公開鍵は、アリスのみが持つ秘密鍵からしか生成できないません。

よって、「暗号化される前のトランザクション」と「復号化したトランザクション」が一致すればこのトランザクションを送ったのはアリスであることが証明できるわけです。

この証明を実現するためにビットコインを含む仮想通貨にはデジタル署名が利用されています。

マルチシグ(マルチ・シグネチャ)

通常のアドレスと異なり、マルチシグ化したアドレスは送金する際、複数の署名が必要になります。

なかでも”2 of 3″(3つに分けた秘密鍵のうち2つの鍵が揃えば署名可能)が有名かと思います。

秘密鍵が万が一1つ漏れたとしてもほかの鍵がなければ送金できないのでこのマルチシグを採用することで高セキュリティになることは間違いないですよね。

マルチシグについて調べたら結構勘違いしてたところがあったので軽く仕組みについてまとめておきます。

実際に自分のウォレットをマルチシグに対応させたことある人は良く分かっていると思います。

“2 of 3″の場合、使用するアカウントは4つです。

アカウントAをマルチシグ化し、保管庫として使用したとします。

ほかのアカウントB(ガンジー)、C(ギャング)、D(ミイラ)を署名者として使用し、アカウントAを操作できるのはこれらの署名者だけです。

そのため、アカウントA保管庫の秘密鍵は漏れても問題ありませんが、操作できる署名者の秘密鍵は厳重管理する必要があります。

仮にミイラがハッキングされた場合、ガンジーとギャングの力を併せてミイラを署名者から消します。

そして空いた枠にアカウントE(覆面レスラー)を追加すれば元通りです。

 

送金する際は下図のようになります。

 

  1. ガンジーが保管庫の仮想通貨をおじさんに送金したい
  2. 署名待ち
  3. ギャングが「その送金は正しい」と署名する
  4. 承認される
  5. おじさんに送金

まとめ

今回は、公開鍵暗号、秘密鍵、公開鍵、アドレス、デジタル署名について解説しました。

こういった技術的な面を少しでも理解しておくと仮想通貨やブロックチェーンに対して見方が変わってくるのではないかと思います。

ブロックチェーンエンジニアになるならTech Academy

スマートコントラクトを開発できる!

自分でオリジナルのサービスを作れる!

 

ビットコイン取引は購入手数料がマイナスのZaifがおすすめ

僕もやっている仮想通貨積立はZaifだけ

Zaif公式サイトを見てみる

Zaifの登録・積立方法はこちら

 

 

手数料無料で取引するならbitbank.cc

 

金融庁の仮想通貨交換業登録した安心取引所

bitbank公式サイトを見てみる

bitbank.ccの登録方法はこちら

 

 

bitFlyerは取り扱い通貨豊富で初心者にもおすすめ

bitFlyer ビットコインを始めるなら安心・安全な取引所で

 

世界に進出した国内大手取引所

bitFlyer公式サイトを見てみる

bitFlyerの登録方法はこちら