【仮想通貨】デジタル署名について調べてみた【ブロックチェーン】

ビットコインなどの仮想通貨のブロックチェーンで用いられているデジタル署名(Digital signature)技術について調べてみました。

仮想通貨で送金などの取引を行うときは、トランザクションという単位で行われます。その際に、「仮想通貨を譲渡する人が同意している」ことを証明することが必要になります。

紙媒体などでしたら、署名(サイン)ハンコ(印章)でその人が同意しました、ということを表します。

その署名や判子の代わりに、仮想通貨では、デジタル署名という技術が使われています。

デジタル署名とは?

デジタル署名は、仮想通貨に限らず電子データを扱う際の改ざん防止などで使用されています。

デジタル署名を実現するために、

  • ハッシュ値(ハッシュ関数)
  • 秘密鍵と公開鍵(公開鍵暗号)

の技術が使われます。

ハッシュ値(ハッシュ関数)については以前にまとめました。
【仮想通貨】ハッシュ関数(SHA-256)について調べてみた【ブロックチェーン】

送信者の手順

送信するメッセージにデジタル署名を入れるには、次の手順で行います。

  1. 署名をしたいメッセージのハッシュ値を作成する。
  2. メッセージのハッシュ値を送付者の秘密鍵を使って暗号化する(デジタル署名)。
  3. メッセージとデジタル署名(メッセージのハッシュ値を秘密鍵で暗号化したもの)をセットにして送信する。

 

このように、「デジタル署名は送付するメッセージを元に作成されている」ということがポイントです。

受信者の手順

一方、受信する人は、次の手順で行います。

  1. メッセージからハッシュ値を作成する。
  2. デジタル署名を公開鍵を使って復号し、ハッシュ値を得る(送信者のハッシュ値と等しくなる)。
  3. これらの2つのハッシュ値を比較し、検証する。

 

もし、2つのハッシュ値が異なっていたら、どこかでメッセージが改ざんされていたことになります。

ブロックチェーンでのデジタル署名

仮想通貨では、取引(トランザクション)のまとまり(ブロック)をつないでいき、1つの台帳(ブロックチェーン)を作成していきます。

そのブロックチェーンでのデジタル署名の使用パターンは、

  • トランザクションへの署名
  • トランザクションの検証

の2つがあります。

トランザクションへの署名

先ほどは、メッセージに対してデジタル署名を行う手順を紹介しましたが、ブロックチェーンでは、そのメッセージがトランザクションに変わります

メッセージもトランザクションも文字列なので、署名の手順はあまり変わりません。

トランザクションのデジタル署名を作成するには、以下の手順で行います。

  1. 「アカウント番号」「譲渡金額」などの必要な情報(デジタル署名を除く)を全て使ってトランザクションを記述する。
  2. 記述したトランザクションのハッシュ値を作成する。
  3. 所有権を譲渡するアカウントの秘密鍵を使って、トランザクションのハッシュ値を暗号化する(デジタル署名)。
  4. 手順 3 で作成したデジタル署名をトランザクションに追加する。

 

トランザクションの検証

トランザクションを検証するには、以下の手順で行います。

こちらも、先ほどの「受信者の手順」とほとんど変わりません。

  1. トランザクションデータ(デジタル署名は除く)のハッシュ値を計算する。
  2. 所有権を譲渡するアカウントの公開鍵を使ってデジタル署名を復号し、ハッシュ値を得る。
  3. これらの2つのハッシュ値を比較し、同一であれば承認する。

参考書籍

徹底理解 ブロックチェーン」という書籍を参考にしました。

この本はブロックチェーンの仕組みについて丁寧に書かれており、数式も全く出てこないので非常に読みやすくてオススメです!

関連記事

【イーサリアム】 ハッシュ関数(Keccak-256)について調べてみた。

仮想通貨の1つであるイーサリアムで用いられているハッシュ関数「Keccak-256」について

記事を読む

【MetaMask】イーサリアムのウォレットを使ってみた【テスト環境】

今回、イーサリアムのウォレットの1つである MetaMask(メタマスク)を使って、テストブ

記事を読む

【仮想通貨】トランザクションについて調べてみた【ブロックチェーン】

ビットコインなどの仮想通貨では、取引をトランザクションで記述されます。 そのトランザク

記事を読む

【イーサリアム】 公開鍵暗号について調べてみた。

仮想通貨の1つであるイーサリアムでは、公開鍵暗号という技術が使われています。 公開鍵暗

記事を読む

【ビットコイン】 アドレス生成方法について調べてみた。

仮想通貨の1つであるビットコインを送金するときは、送付側と受け手側のそれぞれのアドレスが必要

記事を読む

【イーサリアム】 ホリエモンが2014年当時にイーサリアムの可能性に気付いていた!?

ホリエモンこと堀江氏が、2014年の自身のブログで「イーサリアムやべぇ。。。」というタイトル

記事を読む

【Solidity】 イーサリアムでコントラクトを生成してみた。

スマートコントラクトプログラミングの高級言語の1つである Solidity を使って、イーサ

記事を読む

【仮想通貨】デジタル署名と公開鍵暗号の違いは!?

ビットコインなどの仮想通貨のブロックチェーン技術で用いられている「デジタル署名」「公開鍵暗号

記事を読む

【ビットコイン】承認されたブロックを見てみる【ブロックチェーン】

ビットコイン(BitCoin)の公開台帳であるブロックチェーンについて、新たに承認されたブロ

記事を読む

【イーサリアム】 チューリング完全性について調べてみた。

仮想通貨の1つであるイーサリアムについて調べていると、チューリング完全性(Turing co

記事を読む

【投資信託】為替ヘッジのあり・なしについて調べてみた。

海外株式などの投資信託を見ていると、「為替ヘッジ有り」と「為替

【楽天FX】レバレッジやロスカット率を設定する方法。

今回は、楽天FXでレバレッジやロスカット率を設定する方法について紹介し

【MQL4】注文を出す関数について調べてみた【OrderSend】

今回は、EAで注文を出すMQL4の関数「OrderSend()」につい

【楽天MT4】ドル円のスワップとスプレッドについて調べてみた。

楽天MT4で、ドル円(USD/JPY)のスワップポイントとスプレッドに

【MT4】ノートPCを閉じてもEAを実行させ続ける方法【Windows10】

今回は、MT4上でノートPCを閉じてもEAを実行させ続ける方法について

→もっと見る

PAGE TOP ↑