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

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

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

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

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

デジタル署名とは?

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

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

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

の技術が使われます。

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

送信者の手順

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

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

 

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

受信者の手順

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

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

 

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

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

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

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

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

の2つがあります。

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

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

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

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

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

 

トランザクションの検証

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

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

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

参考書籍

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

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

関連記事

【仮想通貨】新しいトランザクション(取引)の追加方法【ブロックチェーン】

仮想通貨で用いられているブロックチェーン技術において、新しいトランザクション(取引)をどのように既存

記事を読む

【ビットコイン】1ブロックに含まれる情報について調べてみた【マークル木】

ビットコインなどの仮想通貨では、トランザクション(取引)の束を「ブロック」という単位で扱い、「ブロッ

記事を読む

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

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

記事を読む

【イーサリアム】日本円のチャートで比較する方法【イーサリアム・クラシック】

イーサリアム(Ethereum)は、2020年時点で、時価総額がビットコインに次ぐ第2位の仮想通貨で

記事を読む

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

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

記事を読む

【仮想通貨】ハッシュ関数(SHA-256)について調べてみた【ブロックチェーン】

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

記事を読む

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

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

記事を読む

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

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

記事を読む

【Python】 複数の辞書型の同じ key を持つ value を計算に用いる方法。

Python で、複数の辞書型を読み込んで、同じキー(key)を持つ数

【Python】 Series 型を dict(辞書型)に変換する方法。

Python で Series 型を dict(辞書型)に簡単に変換す

【Python】 DataFrame の特定の列で出現回数をカウントして降順でソートする方法。

Python で DataFrame 型の特定の列を指定して、対象列の

【テキストマイニング】 Amebaブログからデータ取得するための準備。

テキストマイニングを行うために、Ameba ブログ(アメブロ)のデータ

【Linux】 ローカルに Python をインストールする方法。

今回は、Linux サーバに、root 権限なしで、ローカルに Pyt

→もっと見る

PAGE TOP ↑