ビットコインでは、公開鍵暗号による電子署名という仕組みで所有者の証明を行っています。実際にそう言われても、何が行われているのか理解していない人も多いのではないでしょうか。今回はインターネットにおける暗号について、簡単に説明してから実際にビットコインで使用されている公開鍵・暗号鍵というものを作ってみたいと思います。
なぜインターネット上で暗号化が必要なの
例えばAさんとBさんが、インターネットを経由して情報のやり取りを行うとします。この情報は、二人以外に知られたくないものなので第三者に知られないように情報の伝達を行う必要があります。
もしこれが現実の話であれば、AさんがBさんの耳元まで言って話せば済むことですがインターネットの世界ではそのようにはいきません。AさんとBさんがやり取りするためには、インターネット上の複数のコンピュータを中継して繋がる必要があります。そのため、中継地点のどこかで情報が盗み見られる可能性が必ず発生してしまうのです。
第三者に情報を盗み見られることなく、情報のやりとりを行うために情報を暗号化し送りたい対象であるBさんだけがそれを見れるように暗号化が必要になっています。
公開鍵暗号とは
ビットコインなどの仮想通貨では、公開鍵暗号という技術が使われています。公開鍵暗号は、秘密鍵と秘密鍵から生成される公開鍵のペアとなる2つの鍵を用いて問題を解決します。秘密鍵や公開鍵のように、名前に鍵と付いていますが実際はランダムな数値です。秘密鍵と公開鍵はそれぞれ対応しており、一つの秘密鍵に対して一つの公開鍵が存在し、それぞれの鍵で暗号化や復号化ということができます。
また次のような特性を持ちます。
- 秘密鍵で暗号化したデータは公開鍵でしか復号できない
- 公開鍵で暗号化したデータは秘密鍵でしか復号できない
公開鍵しか持っていない人は、秘密鍵を持っている人が復号できるデータの暗号化はできますが復号化はできないということになります。これにより、AさんがBさんに暗号で情報を伝えたい場合には、Bさんに秘密鍵、公開鍵を用意してもらいBさんがAさんに公開鍵をインターネットを通じて渡し、Aさんが送りたい情報をBの公開鍵で暗号化してBさんに送ります。Bさんは、手元にある秘密鍵で、Aさんの情報を復号化することができ安全に情報を受け取ることができるのです。
公開鍵と秘密鍵を生成してみよう
それでは実際に公開鍵と秘密鍵を生成してみようと思います。プログラミング言語については、Rubyを使用しbitcoin-rubyというgemを利用したいと思います。
何となくこんなことをやっているのかというレベルの理解で大丈夫です。
$ sudo gem install bitcoin-ruby #bitcoin-rubyというgemをインストール $ sudo gem install openassets-ruby #gemコマンドを用いて、openassets-rubyをインストール
ビットコインの公開鍵暗号を利用するために、下準備を行いました。
では実際に、公開鍵と暗号鍵を生成してみましょう。そうは言っても既に、インストールしたパッケージに公開鍵と秘密鍵を生成してくれるメソッドが入っているので簡単に作ることができます。
>> require 'bitcoin' >> key = Bitcoin::generate_key #秘密鍵と公開鍵の配列を出力 => ["03b5d764badebeebc7efa324323133e950aeb93fbc297f0fe08bedc8e77b6028", "04abf0b1ed828f68a4e170773ae9f0250d039fe7bd2fe90f3726a956646c486e8a3939020ffbe388290ef46ae0569c8452e3047c66fbcb410bac0108fdb44bade1"] >> privateKey = key[0] #秘密鍵 => "03b5d764badebeebc7efa324323133e950aeb93fbc297f0fe08bedc8e77b6028" >> publicKey = key[1] #公開鍵 =>"04abf0b1ed828f68a4e170773ae9f0250d039fe7bd2fe90f3726a956646c486e8a3939020ffbe388290ef46ae0569c8452e3047c66fbcb410bac0108fdb44bade1"
本来であれば楕円曲線なども理解できればいいですが、ここでは簡単に公開鍵と秘密鍵を生成することができるというところだけでもわかって貰えたら嬉しく思います。
おわりに
ビットコインや仮想通貨を勉強していると、必ず公開鍵と秘密鍵という話が出てきます。聞いたことはあるけど、実際にどうやって作っているかわからないという人も多いのではないでしょうか。
今回は簡単ではありますが、実際にビットコインで利用されている公開鍵暗号を作ってみることができました。これからも、ビットコインなどで使われている仕組みを紹介していきたいと思います。仮想通貨やビットコイン、ブロックチェーン技術がより身近に感じることができるように、これからも日々発信してきたいと思います。