公開鍵暗号方式

はじめに

ブログ内容を刷新しました。アルゴリズムを用いたシステムトレードで暗号通貨市場での一攫千金を狙っていましたが、断念しました。というのも、ある程度勝率があるアルゴリズムを作ることができたのですが、手持ちの資産が少なすぎて一日に100円も儲けられなかったからです。その割にはプログラム開発に1週間とか平気でかかっていたので、馬鹿みたいだと思ってやめることにしました。別の方法で資産を増やすことにします。

まあどの方法でも時間がかかるのは間違いないのですが、プログラミングを真面目にするとそれなりに体力を使ってしまうので、時間がかかる上に疲れるのです(笑)。 ということで方針を180度変え、徹底的なリサーチに基づくトレード戦略をこのブログでは展開していきます。

今回はその準備として暗号通貨に用いられる基礎的な技術である公開鍵暗号方式ビットコインにおけるその応用例を解説します。

公開鍵暗号方式

概念自体はとても簡単です。 やることは公開鍵でメッセージを暗号化し、秘密鍵でそれを復号する。これだけ。 プロセスとしては受信者が公開鍵と秘密鍵をセットで用意し、送信者には公開鍵でメッセージを暗号化させる。で、それを受信者が秘密鍵で複合する。

ポイントは一連の流れが受信者側から始まることです。

  1. まず受信者が秘密鍵と公開鍵を作り、公開鍵を文字通り公開する。まあ公開とまで行かなくても送信者に教えてあげる。そしてこれは誰にバレても問題ない。
    そして秘密鍵は絶対に他人にバレないように保管しておく。

  2. 送信者が公開鍵を用い、メッセージを暗号化し、送信する。

  3. 受信者が暗号文を秘密鍵で復号する。

こんな感じでこっそりメッセージを送ることができるわけです。 ただ暗号化する鍵と復号する鍵を別々にして、一方からもう一方を推測できないという性質を持たせる必要があります。この性質を今のところ満たしているのが素因数分解とか離散対数問題とかです。具体的にはRSA暗号楕円曲線暗号などがあります。確かビットコイン楕円曲線暗号だったかな。これを解説してもいいのですが、みなさんが疲弊するだけですので、興味ある人は自分で調べてください。

ビットコイン公開鍵暗号のおける使われ方

本題です。これはあまり真面目に調べていないのですが、おそらくあってます。

公開鍵暗号を用いたデジタル署名という形で使われています。公開鍵暗号の説明では、公開鍵で暗号化、秘密鍵で復号をしました。デジタル署名では秘密鍵でメッセージを暗号化をし、それが公開鍵で復号できることを利用します。

具体例を出して説明しましょう。AliceがBobにメッセージMを送りたいとします。Bobは受け取ったメッセージMが本当にAliceによって書かれたものかを確認したいわけです。そこでAliceはメッセージMをAliceしか持っていない秘密鍵で暗号化して署名Xを作ります。
\[ \text{Alice : } M \xrightarrow{秘 密鍵で暗号化} X \] この署名XをメッセージMに付け加えてBobに送信します。Bobは署名Xが公開鍵で復号することでメッセージMが得られるかを確認します。
\[ \text{Bob : } X \xrightarrow{公開鍵で復号} M \]

この方法の安全性は

  • 秘密鍵はメッセージの送信者しか知らない
  • 公開鍵で復号できる暗号文は対応する秘密鍵で暗号化されたものしかない

という性質によって保証されています。

ビットコインのシステムではこれを送金依頼を出すときに使います。ビットコインシステムにおいて口座番号の役割をもつビットコインアドレスは公開鍵暗号方式での公開鍵にほとんどそのまんま対応しています。ビットコインアドレスから1BTCをどこかに送金する時、その持ち主が送金依頼を出したという証明をするために上記の秘密鍵によるデジタル署名が行われるのです。

ビットコインで用いられる技術の中でとりわけ有名なものはブロックチェーンですが、僕が本質的に面白いと思っているのは、公開鍵であるビットコインアドレスに紐づく情報は完全に公開されており、ビットコインアドレスさえ知っていれば残高や取引履歴がだれでも見れてします点です。ある意味、徹底的な非匿名性を持っているというわけです。これについては今後考察していきたいと思います。