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

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

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

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

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

デジタル署名とは?

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

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

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

の技術が使われます。

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

送信者の手順

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

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

 

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

受信者の手順

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

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

 

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

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

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

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

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

の2つがあります。

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

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

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

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

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

 

トランザクションの検証

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

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

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

参考書籍

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

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

関連記事

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

【ビットコイン】ハッシュ関数(SHA-256・RIPEMD-160)について調べてみた。

ビットコインなどの仮想通貨で使用されているハッシュ関数(hash function)という技

記事を読む

【仮想通貨】時価総額のランキングを円(JPY)で見る方法。

ビットコインやイーサリアムなどの仮想通貨の時価総額のランキングを 円(JPY)で見れる分かり

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

【TensorFlow】GPUを認識しない時の対処方法【Python】

TensorFlow で GPU を認識させようとしたときにハマってし

【耳コピ】音楽ファイルを楽器ごとに分離する方法【Spleeter:フリー】

今回は、mp3 などの音楽ファイルをボーカル、ベース、ドラムなどの楽器

【Chainer】手書き数字認識をしてみた【Deep Learning】

Chainerを用いて、ニューラルネットワークを構築し、手書き数字認識

【Spyder】引数のあるスクリプトを実行する方法。

Python の統合開発環境(IDE)である Spyder では、簡単

【Anaconda】Prompt 上で Git コマンドを実行する方法。

Anaconda のコマンドプロンプト(Anaconda Prompt

→もっと見る

PAGE TOP ↑