秘密鍵・公開鍵とは?ビットコインが不正送金されない理由

秘密鍵・公開鍵とは?ビットコインが不正送金されない仕組み

ビットコインって勝手に誰かに盗まれないの?と不安になる方もいるかもしれません。

そうですね。気を付けていないと盗まれるかもしれませんね。それは否定できません。

ビットコインを盗まれないための対策としてよく言われるのが、

「秘密鍵」を絶対に他人に教えてはいけない

「秘密鍵」は厳重に管理しましょう

ということです。聞いたことがある人も多いと思います。

なぜ、そこまで秘密鍵をきちんと扱わなくてはいけないのでしょうか?

まあ「秘密」ってついてるくらいだから、そりゃそうでしょ。

なんたって秘密のカギだからね!重要そう!

と感覚的には分かると思うのですが、では秘密鍵は何に使われているのでしょうか?

この記事では、ビットコインを送る時に、秘密鍵がどのように使われているのか?なりすましなどを防ぐ技術である「電子署名」という技術について簡単にまとめています。

ビットコインを送る仕組みや秘密鍵(や公開鍵)、電子署名について知れば、その重要性がより理解できると思います。

ビットコインは不正送金されないのか?

突然ですが、悪意を持った人がいたとします。

そうですね。怪盗Xとでも名付けましょうか。

怪盗Xは、善良な市民であるAさんがビットコインを持っていることを知ります。

怪盗X:Aさんのビットコインを頂戴しよう。

そう思ったとします。

悪意がありますからね。ノータイムで盗む気満々です。悪いやつです。

で、悪いやつってだいたい頭がいいんですよね。タチが悪いことに。ハッキングとかできちゃったりします。

ビットコインは物理的に実態のないお金です。

簡単に電子データを書き換えて、盗めそうな気がしますよね。

Aさんのウォレットの1ビットコインを何やかんやでハッキングして、怪盗Xのウォレットに移す。ポチっみたいな感じです

でも、実際には簡単に盗めません。

まあ、当たり前です。簡単に盗める(不正ができる)お金なんて、意味をなしません。

そんなもの、普及するはずがありませんからね。

曲がりなりにもビットコインはそれなりに普及をしていて、実際にモノが買えたりもします。

ではなぜ簡単に盗めないんでしょうか?

それは、ビットコインを送る時、必ず必要になるものがあるからです。

それは、送金者の「署名」です。

Aさんが、怪盗Xに確かに1ビットコイン送りました。というAさん自身の「署名」が必要なんですね。

正確にいうと、電子(デジタル)署名です。

この場合、Aさんは怪盗Xに送金する気などないですから、Aさんが電子署名をすることはありません。

この「電子署名」とは何なのでしょうか?

電子(デジタル)署名とは?その果たす役割

電子署名というのは、データ上で本人の確認ができる仕組みです。

ビットコイン固有の技術ではなく、公的機関などでも一般的に使われている技術ですが、ビットコインの取引ににおいても重要な役割を果たしています。

ビットコインの送金が、持ち主の本人によって行われたことであることや、取引自体が偽造・改ざんされていないことを証明しているんですね。

先ほどの怪盗Xのケースだと「なりすまし」を電子署名の技術によって防ぐことができます。

電子署名の仕組み。秘密鍵、公開鍵とは?

電子署名を理解したい場合、まず秘密鍵と公開鍵について理解する必要があります。

はい、出てきましたね、秘密鍵。

秘密鍵、公開鍵とは?

ビットコインの管理はウォレットを使っている人も多いと思います。

まあ、お財布ですね。電子的な。

ウォレットを作る時、秘密鍵も自動的に生成されます。パスワードみたいなもんですね。

ただ、意味不明な乱数です。英数字がランダムに数10桁並んだものです。

公開鍵というのは、秘密鍵をもとに生成されます。秘密鍵をもとに作られるのがミソです。秘密鍵と公開鍵は対の関係です。

秘密鍵から公開鍵を作成。不可逆
秘密鍵から公開鍵を作成。不可逆
参考
文章秘密鍵から公開鍵を作る方法は特殊な変換を行っています。公開鍵から、秘密鍵を推測することは不可能です。
▶秘密鍵から公開鍵とビットコインアドレスを生成する方法
▶秘密鍵から公開鍵を生成するアルゴリズム「楕円曲線暗号」

ビットコインを送る流れ

具体的に書くとややこしくなるので、だいたいのイメージでお伝えします。

例えば、今度はAさんがBさんにビットコインを送ろうとしたとします。

これは正当な取引です。

Aさん自身の意思で、Bさんに1BTCを送る取引です。

この場合、Aさん自身が「AからBに1BTCを送る」というデータに秘密鍵で鍵をかけ、ビットコインのネットワークにアップ(ブロードキャスト)します。

データに秘密鍵をかけてブロードキャスト
データに秘密鍵をかけてブロードキャスト

ビットコインのやり取りは、P2P(ピア・ツー・ピア)という仕組みのネットワーク内でやり取りがなされます。

Aさんからの情報を受取ったネットワークは、Aさんの秘密鍵で生成された公開鍵を使ってデータにかけられた「鍵」を開けます。

既知の公開鍵で開錠する
既知の公開鍵で開錠する

そうすると、そこには「AからBに1BTCを送る」という情報が書かれている。というイメージです。

これで何が分かるの?と思われるかもしれません。

秘密鍵はAさんしか持っていません。データに鍵をかけられるのはAさんだけです。

一方、Aさんの秘密鍵から生成された公開鍵は誰でも使えます。文字通り公開されているからです。

Aさんから送られた鍵のかかったデータを開けられるのは、Aの秘密鍵で作られた公開鍵だけです。

つまり、秘密鍵で作られた公開鍵で開けたデータはAさんが確かに作ったデータだ。ということがわかるんですね。

つまり、Aさん自身が自分の意思でデータを送ろうとしていることの証明になります。

もう少し詳しく書くと

正直、上の説明だけで、は~。なるほど。と思う人は少ない気がします。実際、私が納得しなかったからです。

なんとなくは分かるけど、イマイチ本当なのか分からない。

ではなんでそう書いたのか。と言われれば、その方が説明が簡単だからです。詳しく書くとちょっとややこしいんですね。

初心者向けではない。

もちろん、私は専門家でもなければ技術者でもないので、技術的なところまで突っ込んだ説明はできません。

しかし、上のやり取りについてもう少し詳しくご説明してみます。ここは読み飛ばしていただいても構いません。

まず「AからBに1BTCを送る」というデータをハッシュ関数を使ってハッシュ値にします。

ハッシュ関数を用いてハッシュ化
ハッシュ関数を用いてハッシュ化

ここで「AからBに1BTCを送る」というデータのことを「データ①」とします。

データ①にハッシュ関数をかけると、ランダムな値が出てきます。

実際に「AからBに1BTCを送る」という文章をハッシュ関数にかけると

こんな文字列が生成されます。

c2393cea4948687515fc9c039d5f21e87767db2e357a4e7c5c5cf8d37d46a6a4

このデータ(文字列)を「データ②」としましょう。

ハッシュ関数については以下記事に詳しく書いてありますのでご参照ください。

ハッシュ関数とは? ハッシュ関数とは?簡単に解説。ビットコインのブロックチェーンが改ざん不可能と言われるゆえん
ハッシュ化されたデータに秘密鍵をかける
ハッシュ化されたデータに秘密鍵をかける

で、Aさんは生成されたハッシュ値に秘密鍵でカギをかけます。このデータを「データ③」としましょう。

そして、カギをかけたデータ③と、もともとのデータである「AからBに1BTCを送る」というデータ①を一緒にビットコインのネットワークに送ります。

データ①とデータ③をブロードキャストする
データ①とデータ③をブロードキャストする

そのデータを受取ったネットワーク参加者は、Aさんの秘密鍵から作られた公開鍵を用いて、データ③を開けます。そうすると、データ②が出てきますね。

次に、ネットワーク参加者は、データ③と一緒にブロードキャストされたデータ①(もともとのデータ)をハッシュ関数にかけます。

ハッシュ関数は、ランダムな値が生成されますが、同じ値を代入すれば、同じ値が生成されます。

つまり、データ①をハッシュ関数にかけるとデータ②が生成されます。

つまりこういうイメージ
つまりこういうイメージ

データ③を公開鍵であけるとデータ②が出てくる。

データ①をハッシュ関数にかけるとデータ②が生成される。

つまり、途中で何者かにデータを改ざんされていない。ということが分かります。

途中でデータ①が書き換えられたものをハッシュ関数にかけたらデータ②と同じにならないからですね。

つまり、電子鍵を使うことで以下の2つが分かります。

データを送ったのはAさん本人であること(なりすましではない)

データは途中で何者かに改ざんされていないこと

だいたい分かりましたか?

秘密鍵は重要

ここまで見てきたように、秘密鍵は重要な役割を担っていることが分かったと思います。

秘密鍵が盗まれることは、自分のビットコインが盗まれることと同義です。

他人に秘密鍵が渡ってしまえば、それを使っていくらでもビットコインを送金できてしまうからですね。

仮想通貨をはじめるなら
仮想通貨をはじめて買う方であれば、操作画面が分かりやすく簡単に仮想通貨を買えるコインチェックがおすすめです。

■5分で申し込み完了(無料)
>>コインチェックで口座を開設する場合はこちら