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

公開日: : 最終更新日:2020/11/19 仮想通貨 , , , , , , ,

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

なお、ブロックチェーンにおけるデジタル署名(電子署名)の詳細については以前にまとめました。
【仮想通貨】デジタル署名について調べてみた【ブロックチェーン】

「デジタル署名」「公開鍵暗号」は、いずれも、公開鍵・秘密鍵とよばれる2種類の鍵を用いて暗号化・複合化する技術になります。

では何が違うのでしょうか?

それは、鍵を用意するのが、文書を「送る側」か「受ける側」かという違いになります。

鍵を受け手側で用意する方式が「公開鍵暗号」で、鍵を送り手側で用意する方式が「デジタル署名(電子署名)」となります。

基本的には、同じような技術を使っているのですが、鍵を作成する人が異なるのは、「公開鍵暗号」と「デジタル署名」で目的が異なるためです。

簡単にいうと、公開鍵暗号の目的は、「送付する文書そのものを暗号化し、第3者から読み取られないようにする」ことです。

一方、デジタル署名の目的は、「送付する文書の内容が改ざんされないようにする」ことです。なので、デジタル署名の場合は、文書の内容については第3者に読み取られてもかまわないということになります。

もう少しだけそれぞれの暗号方式について詳しくみていきましょう。

公開鍵暗号

公開鍵暗号では、データ(文書)を受け取る人が「公開鍵(暗号化に使う鍵)」「秘密鍵(複合化に使う鍵)」を用意します。

そして、暗号化に使う鍵である公開鍵をデータを送る人に渡します。データを送付する人は、その公開鍵を使ってデータを暗号化します。

暗号化されたデータを受け手に送付し、受け取ったら秘密鍵を使って複合化します。

このようにすることによって、秘密鍵を持っている人だけがデータ(平文)を読むことができます。

なお、暗号化されたデータは第3者も見ることができますが、秘密鍵がないと平文に戻せないので、受け手以外は文書を読み取ることができません。

デジタル署名

デジタル署名は、公開鍵暗号と逆の流れになります。

デジタル署名では、データ(文書)を送る人が「秘密鍵(暗号化に使う鍵)」「公開鍵(復号化に使う鍵)」を用意します。

送付データを送付する人が秘密鍵を使ってデータを暗号化します。この暗号化したデータをデジタル署名といいます。

そして、元のデータと暗号化したデータ(デジタル署名)、さらに、公開鍵を受け手に送ります。

受け手は、公開鍵を使って暗号化したデータ(デジタル署名)を復号化します。元のデータも送付されているので、復号化したデータと比べることによって、送られたデータが改ざんされていないことを確認することができます。

また、本当にその送り手が送ったものかどうかについても確認することができます。

参考書籍

「いまさら聞けない ビットコインとブロックチェーン」という本を参考にしました。

この本は、仮想通貨の取引所であるコインチェックの執行役員の 大塚雄介 氏が書いています。

2017年に出版されており、その次の年の2018年にコインチェックで取り扱っている仮想通貨の1つ NEM(ネム)が580億円分流出する事件が起こります。

本書では、「仮想通貨は取引所も含めて安全である」的なことが書かれてありますが、事件の壮絶なフラグになっているように感じました。。。

関連記事

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

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

記事を読む

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

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

記事を読む

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

ビットコインなどの仮想通貨のブロックチェーンで用いられているデジタル署名(Digital s

記事を読む

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

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

記事を読む

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

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

記事を読む

【イーサリアム】クライアントソフト geth を使ってみた。

イーサリアムのクライアントソフト geth をインストールして使ってみました。 クライ

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

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

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

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

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

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

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

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

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

→もっと見る

PAGE TOP ↑