【ビットコイン】秘密鍵と公開鍵の「秘密」と安全な取扱い方

akey

ビットコインの記事を読んでいると、秘密鍵とか公開鍵という難しい用語が出てきますね。例えば、秘密鍵が盗まれたとか公開鍵暗号の技術などなど…技術の知識が無い人にも簡単に分かるように説明をしてほしいところです。

実は秘密鍵や公開鍵はビットコインに限定した用語ではありません。ところがビットコインには中央政府が無い代わりに多くのユーザーによって運営されていて、その「秘密鍵」と「公開鍵」を使って正しい取引ができるように運用されているために、記事のあちらこちらにその二つの鍵の名前が登場するのです。

でも仮にもうビットコインを始めていて、取引をしているよ!という人でも、秘密鍵を見ることはほとんどありません。それでは一体どこで使われているのか分かりませんね。実はあなたがビットコインを入れるためのウォレットを作った時、あなたはもう秘密鍵を持っているのです。そしてその秘密鍵に対応する公開鍵とビットコインアドレスも決まります。秘密鍵と公開鍵のようにセットで呼ばれることが多いのですが、すべての元は秘密鍵なのです。そしてそのウォレットを使い続ける限り、その秘密鍵はあなたがあなたであることを証明し続けてくれるのです。

さあ、そのような表からは中々見ることはないけれども、裏側ではあなたにずっと寄り添っている「秘密鍵」の正体を解き明かしていきましょう。

1.ビットコインの仕組みと秘密鍵、公開鍵

1-1.ビットコインの仕組み

ビットコインはP2P(ピーツーピー)ネットワークと呼ばれる分散ネットワークで運用されています。銀行のようなメインコンピューターが無く、世界中のコンピューターが分散して同じデータを管理しています。そして新しい取引が発生すると、その分散したデータに追記され、そのデータが承認されると取引が成立します。

そして、このプロセスのあちこちに秘密鍵や公開鍵が使われているのです。

1-2.秘密鍵と公開鍵はウォレットを作ると誕生する

ビットコインを購入するとコインはウォレットというところに入ります。取引所で購入した場合には取引所のウォレットに、誰かからコインを受取った場合は自分のスマートフォンなどのウォレットに入ります。取引所に口座を作ったり、スマートフォンのアプリでウォレットを作ったりすると、その一番初めの段階で秘密鍵が作られます。多くのアプリでは見ることができませんが、起動してウォレットを新規作成するメニューを選んだ瞬間に、例えばこんな感じの秘密鍵ができあがります。

<秘密鍵>
929014bf54c64bf8a97f9d54728f897b32cabc18e48bb1dc66015a31d347be53 
※鍵の長さが64文字の一例

ただの英数字の羅列ですが、これは銀行の暗証番号レベルのとても大事なものです。

この秘密鍵が個々のウォレットには必ず一つは存在するのですが、多くのウォレットでは自分で管理しなくても良い工夫がされているため、あまり目にすることがありません。むしろセキュリティー面ではそのほうが良いでしょう。

そしてこの秘密鍵を元にペアで作られるのが、公開鍵と呼ばれるものでこのような英数字のものです。

<公開鍵>
043687ee3a3de3a3a361a09840cce73c46d0b4b64ad4412f9031d1551e02ad8b7bbf4ddcfe81d191e0f8ccc7a3a9f2c9d235704f809e2f7e37e552f24f1087ac4e
※実際に上の秘密鍵があるとすれば、対応する公開鍵はこのようになります

さらにこの公開鍵からビットコインアドレスが作られます。

<ビットコインアドレス>
124nCqvywcMgHcdqcPQU8p3yaDAofsE24U
※上の公開鍵があるとすれば、対応するビットコインアドレスはこのようになります

このようにビットコインアドレスは、秘密鍵と公開鍵が元になってできあがります。つまり、ビットコインアドレスがあるということは、裏側ではその段階までに、このような秘密鍵と公開鍵がばっちり準備されているということがお分かり頂けたかと思います。

ちなみに公開鍵から秘密鍵を特定することはほぼ不可能です。全ての公開鍵は秘密鍵を元に作られていて、先ほどの64文字の秘密鍵の場合、秘密鍵の組み合わせは184467447379551616通りにもなります。仮に知っている公開鍵とペアになる秘密鍵を探そうとしても、候補の秘密鍵の組み合わせが多すぎて、現在のコンピューターの性能ではほぼ不可能であると言われています。

1-3.秘密鍵で取引データは署名される

さて、取引においても秘密鍵は重要な役割があります。少し説明が複雑になるので、図を用意しました。

secret_keyここでAさんからBさんへ1BTC1ビットコイン)が送金される取引があるとします。その時Aさんからは、「AさんからBさんへ1BTCが送金される」という署名前の取引データと、「AさんからBさんへ1BTCが送金される」という内容がAさんの秘密鍵で署名された取引データ、さらにはAさんの公開鍵がデータに同封されてビットコインのネットワークに送信されます。

Aさんの秘密鍵を使って署名されたデータは改ざんすることができません。分散ネットワーク上のコンピューターは署名された取引データを復号(元のデータに戻すこと)した取引データと署名前の取引データの照合作業を行います。ここで内容が一致していれば、これは間違いなくAさんがBさんに1BTC送金したいというデータであると承認されるのです。

1-4.公開鍵は送金すると世界中に公開される

今見たように、公開鍵は名前の通り、取引の度に取引データと一緒に分散ネットワークに送信される公開された鍵です。ネットワーク上に送信されたデータを、全世界の承認者たちは公開鍵を使って検証します。署名された取引データを、公開鍵を使って中身を確認し、それが署名無しの取引データの内容と一致すると、新しい取引データとして承認・記録されることになります。

ちなみに先ほどビットコインアドレスは公開鍵から作られると言いましたが、ビットコインアドレスから公開鍵を求めることはできません。ですから送金の際には取引データと一緒に公開鍵も送信することになり、その結果として、その公開鍵は世界中に公開された状態になります。

しかし知られていない公開鍵も存在します。造ったばかりのウォレットの公開鍵などが該当します。一度もコインを送金していないビットコインアドレスに関しては、誰もその公開鍵を知りません。つまり初めから公開というわけではないのです。

2.秘密鍵は人に見られないように注意しよう!

2-1.秘密鍵が分かるとコインが盗める

ビットコインアドレスは口座番号のようなもので、秘密鍵はその暗唱番号やパスワードのようなものであるとよく言われます。しかし先ほど見たように、秘密鍵があれば公開鍵もビットコインアドレスも生成できますから、あなたのウォレットが他の人のスマートフォン上に直ちに再現されてしまうリスクが生じるのです。ウォレットが再現されてしまうと、そこからどこかの見知らぬアドレスへ不正送金されてしまうこともあるでしょう。

ウォレットアプリなどでは秘密鍵を公開してしまうことが無いように、ユーザーには鍵を見せないように運用されているものがほとんどです。ところがペーパーウォレットのように紙に印刷して保管するウォレットの場合、その紙の写真を撮られたり、コピーされたりすれば、相手はいつだってあなたのウォレットからコインを盗み出すことが可能になってしまいます。秘密鍵が見えるウォレットは特に注意が必要です。

かつて秘密鍵をめぐるこんな事件がありました。

アメリカのテレビ番組で、その司会者が印刷ギフト用のビットコインアドレスと秘密鍵のQRコードを見せたところ、中身が速攻で盗まれてしまったことがありました。盗んだ人からも司会者へ返金の連絡があったのですが、司会者はそのままコインをプレゼント。いい勉強になったよとコメントしました。

参照外部サイト: A Bloomberg TV Host Gifted Bitcoin On Air And It Immediately Got Stolen

このようにテレビで秘密鍵そのものを見せるケースは稀かと思いますが、秘密鍵や秘密鍵を含むQRコードを他人に見せると同じことが起きかねませんので注意しましょう。

ただ、むやみに心配する必要はありません。ウォレットアプリなどを使ってみると分かりますが、秘密鍵は表示させたくても表示されないものがほとんどだからです。アプリの裏側でしっかりと保管されているので安心です。むしろ勝手にログインされて不正送金されないようにスマートフォンの管理に気を付けましょう!

2-2.万が一、秘密鍵を見られてしまった時の対応方法

もし秘密鍵を見られてしまったら、どうすれば良いでしょうか。これさえ知っておけばいざという時にも安心です。冒頭でも書きましたが、秘密鍵はウォレットを作ると一つ与えられます(秘密鍵とそのウォレットは一心同体だと思って下さい)。つまり秘密鍵を知られるとコインが盗まれる可能性がありますから、そのウォレットはあきらめて新しいウォレットを作ればいいのです。そして新しいウォレットにコインを送金してしまえば対応完了です!

手順は次の通りです。

①別なサービスやアプリを使って新しいウォレットを作る

②古いウォレットのコインを新しいウォレットへ全額(手数料分を引いて)送金する

③新しいウォレットでコインを受け取る。承認が100%(もしくは6回)になるまで待つ

④承認が100%(もしくは6回)になったら古いウォレットを削除する

⑤古いウォレットのサービスを引き続き利用したければ、もう一度古いウォレットサービスから新規ウォレットを作成してそこに全てのコインを送金する

手順⑤までやり切れば、秘密鍵を作り直したのと同じ状態になります。でもビットコインを移動させる度に送金手数料がかかるので、タダでは無いことは覚えておきましょう。

3.オンラインで生成した秘密鍵は危険なので使わないようにしよう!

ほとんどの方はビットコインアドレスには意味の無い文字列が並んでいると感じられるでしょう。ところがそのような文字列の中に自分の名前や特定の文字列が現れるような秘密鍵を生成してくれるオンラインサービスを目にすることがあります。これは絶対に危険なので利用しないようにしましょう。

アドレスに特定の文字列を入れようと思えば、秘密鍵をランダムに作り出してそれに対応する公開鍵、ビットコインアドレスを確認する作業が必要です。なぜならアドレスから秘密鍵は特定できないからです。そして発見までには途方もない時間が浪費されます。そのようなサービスをやってくれるサイトを見つけるとつい飛びついてしまう気持ちも分かります。

しかし冷静になってみましょう。あなたにその秘密鍵を見つけたサイト側は、あなたのビットコインアドレスと秘密鍵をずっと持ち続けるかもしれません。そしてあなたがコインを預けた瞬間に、どこかへ不正送金してしまうことだってできるのです。

4.まとめ

ビットコインの仕組みにおいて、秘密鍵と公開鍵はとても重要な役割を果たしています。ビットコインを使う限りずーっと付き合っていくことになります。ビットコインを送金すると自分の公開鍵は知られてしまいますが、それは安全な取引に必要なことなので気にする必要はありません。

一方の秘密鍵ですが、こちらは絶対に人に見せないようにしましょう!また取引所やウォレットで自動生成されるビットコインアドレスが気に入らないからと、どこかのウェブサイトなどで生成したアドレスと秘密鍵を使うのは絶対にやめましょう。そのサイトはあなたのウォレットのコインをいつでも抜き取ることができるからです。

もし秘密鍵を知られてしまったら、新しいウォレットを作ってコインを移してしまいましょう。送金手数料はかかりますが、コインが盗まれる心配からは解放されます。

以上のことに気をつけて、安心して二つの鍵と付き合っていきましょう!