ビットコインに使われている暗号化技術を解説|なぜ暗号化が必要なの?

▼おすすめの取引所ランキング

仮想通貨を英語訳すると何になるか皆さんご存知でしょうか。正解は・・

「Crypto currency」

このように表記するのです。これをそのまま日本語訳すると、暗号通貨」。

実はビットコインを始めとした、仮想通貨はブロックチェーンという単語ばかり注目されていますが、そのブロックチェーンの仕組みにも巧みに暗号化技術が利用されています。

この暗号化技術とは何なのか。また、どのような暗号化技術が、使われているのかを解説していきたいと思います。

<本記事の要約>
  • ビットコインでなぜ暗号化技術が使われているのか
  • どのような暗号化技術がビットコインで使われている?
  • それぞれの暗号化技術はどのような特徴を持ってる?

暗号技術の歴史

暗号の起源は古く、数千年の歴史を持ちます。その歴史の大部分は古典暗号に関するものです。古典暗号での暗号化は、紙と鉛筆(と多少の道具)を使って行うことができるものでした。1900年代になって、エニグマ暗号機のような複雑な仕組みを持った電気機械式の暗号が発明され、ついで電子式機械により、複雑な暗号機が導入されてくるようになります。

そして、軍事・政治の多くの場面で利用されることにより、暗号技術は発展を遂げました。

しかし、いま暗号技術を使うのは軍人やスパイだけではありません。インターネットの普及により、私たちも知らず知らずのうちに暗号を使っています。

現在においては、暗号技術はネットワーク社会に欠かせないカジュアルで標準化された通信技術の一つとなっているのです。

なぜ暗号化が必要?

一般的に、暗号を使うときはそれが「伝送中」であるか「停止中」であるかという二つの場合があります。ここで「伝送中」というのは、Webを通して、またはメールを使ってどこか別の場所に送ることや、自分のデバイスでない他のところに移すような場合を意味します。

ここで簡単に例え話をしましょう。電子メールのやり取りでも暗号化技術は使用されています。何故なら電子メールの送信(伝送)にはリスクが存在するからです。(もちろん、電子メールだけでなくコンピュータを使って通信を行うインターネットなどの世界全般において)

それは下記のような3つのリスクです。

  • ①盗聴
  • ②改ざん
  • ③なりすまし

①「受信者にだけ伝えたい重要な情報を第三者に知られてしまう(盗聴)」

②「伝えたい内容を第三者に書き換えられてしまう(改ざん)」

③「やりとりしている相手が実は本人ではない(なりすまし)」

インターネットというオープンな環境だからこそ、このようなリスクが存在するのです。

暗号化技術は、これらのリスクを抑えるために利用されています。

そして、ビットコインは「通貨」です。通貨のやりとりにおいて、上記のようなリスクが存在すれば、誰もその通貨を利用しませんよね信用がありませんから。

ビットコイン以前にも、ビットコインのような電子通貨(法定通貨を担保としない)が数多く発明され、実験されてきました。しかし、この「信用」の問題を解決できず、二重払いなどの課題が存在したのです。

しかし、ットコインは暗号化技術を上手く組み合わせた事により、独自の安全性をもたらし、「通貨」としての信用があるようにまで進化しています。

ビットコインの暗号化技術とは

前述したように、暗号化技術は様々な分野で利用されることにより発展してきました。

そうすると、ビットコインの暗号化技術はどれほど新しくて革新的な技術が使われているのだろうかと思います。

しかし、ビットコインには特に新しい暗号化技術は使われていません。

むしろ多くの検証に耐えて安全性が確認されている枯れた暗号技術を巧妙に組み合わせて出来ていると言えます。

その中でも、公開鍵暗号暗号的ハッシュ関数を見事なほど巧みに利用しているのです。

それではこの「公開鍵暗号」と「暗号的ハッシュ関数(一方向ハッシュ関数)」はどのようなものなのか見ていきましょう。

公開鍵暗号

まず、公開鍵暗号を説明するにあたって、「暗号化と復号化」について説明していきます。

例えば、メールを送信する際、送信者は第三者に盗聴されないように、メールを暗号化して、受信者に送ります。しかし、暗号文は暗号化された文字で送られているため、そのままでは受信者が読むことが出来ません。

この暗号化された文字を元の文字列(平文)に戻すことを「復号化」と呼びます。

このように正当な受信者が暗号文を平文に戻す行為を「復号化」と呼びますが、受信者以外の第三者が復号することを、「暗号解読」とも呼び、このような複雑な暗号を解くことを、通常「アルゴリズム」と呼びます。アルゴリズムには、それを解読するための「鍵(Key=キー)」が必要となるのです。

鍵(key=キー)とは

暗号化技術においての鍵は、一般的に2種類あります。

簡単に図にしているので、視覚的に理解しましょう。

  1. 共通鍵暗号 :暗号化と復号化で同じ鍵を使う方式。
  2. 公開鍵暗号(非対称暗号) :暗号化と復号化で異なる鍵を使う方式。
・共通鍵暗号

・公開鍵暗号

公開鍵暗号

ネットワーク社会で暗号を使用する際にまず問題になるのが、どうやって暗号鍵を安全に相手に渡すのかという鍵配送の方法です。この問題を根本的に解決したのが公開鍵暗号なのです。

公開鍵暗号は「公開鍵」と、「秘密鍵」と呼ばれるペアとなった2つの鍵を利用する暗号技術です。

ですが、公開鍵暗号は「暗号」のイメージと異なり、メッセージそのものが暗号化に使われることはあまりありません。

公開鍵暗号の代表的な利用例に下記のようなものがあります。

  • 暗号鍵の交換
  • 電子署名
  • 電子認証

そしてそれぞれの用途ごとに専用の公開鍵暗号技術があります。

公開鍵・秘密鍵

公開鍵暗号の公開鍵秘密鍵はそれぞれ反対向きの計算を行うために使われます。

特に秘密鍵はそれを持っている人にしか出来ない固有の計算能力を示すために使われます。

また、公開鍵はその秘密鍵を使った計算の結果を検証するために使います。

例えばインターネットを介した電子認証を行う場合、自分が本人であることを証明する手段としてユーザーIDとパスワードがありますが、通信相手が信用できない人物で合った場合、この方法を使うのは危険なのです。

信頼できない相手にパスワードを渡すと、悪用される可能性があるからです。

ではどのようにするのか。

パスワードのような自分の秘密の情報そのものを渡すのではなく、自分だけが出来る固有の計算能力を相手に示すことで本人であることを証明すればいいのです。その自分ができる固有の計算のために自分だけの秘密の情報を使うというわけです。

例えば、サービス側が自分の公開鍵を持っている時、サービス側から送られてきたランダムなデータを自分の秘密鍵を使って計算を行い、その結果をサービス側に返します。

サービス側はその人の公開鍵を使ってその計算結果を調べることによって、本人であることが確認できます。

そしてもちろん秘密鍵は絶対に他人には渡してはいけないのです。それを入手した人は本人に成り代わって成り代わってその固有の計算能力を持ってしまうからです。

当事者の識別子としての公開鍵

公開鍵は全ての当事者がそれぞれ自分の公開鍵と秘密鍵のペアをもっていることが前提になります。全ての当事者がそれぞれ自分の公開鍵と秘密鍵のペアをもっていることという社会的前提のことを公開鍵基盤(PKI)と言います。

ビットコインでは現実世界の実在とは切り離されたビットコインアドレスを利用しています。

このような実体と切り離された名前のことは一般的に仮名(pseudonym)とよばれ、積極的に実体の隠蔽を目的とする仕組みを備えた名前である匿名(anonymity)とは区別されます。

ビットコインは秘密鍵を使った計算を実際に行える主体が現実世界に存在することを前提にしているので、ペアになる公開鍵はその本人への識別子とみなすことができます。したがってビットコインは1種の公開鍵暗号基盤と呼ぶことが可能です。

電子署名

電子署名とは、文書への押印やサインを行う行為とよく似た機能を持つ公開鍵暗号技術です。

電子署名の機能は電子的なメッセージに対して、

「そのメッセージの作成者は誰か」「そのメッセージが1ビットも改ざんされていない」

という2つを証明することが出来ます。

そしてこの電子署名を作成する人を「署名者」と呼びます。署名者はメッセージと自分の秘密鍵を使って固有の電子署名のデータを作成します。この計算を署名作成と呼びます。

この電子署名を利用して、メッセージの完全性などを検証するのは第三者で、「署名検証者」といいます。この署名検証者は、メッセージと電子署名に対して署名作成者の公開鍵を使った計算によって電子署名の検証を行います。この計算を署名検証と呼びます。

ビットコインの電子署名のための公開鍵暗号技術

ビットコインでは、ECDSA(楕円曲線DSA)という電子署名の為の公開鍵暗号技術が使われています。

ECDSAにおける公開鍵暗号の基本性能は以下の3つとなります。

  • 暗号鍵の生成
  • 電子署名の作成
  • 電子署名の検証

暗号学的ハッシュ関数(一方向ハッシュ関数)

さて暗号学的ハッシュ関数を見ていきましょう。

暗号学的ハッシュ関数とは簡単に言うと、

任意の長さの文字列を入力すると一定のサイズのランダムな数値を返すような関数です。

この一定のサイズのランダムな値をハッシュ値と呼びます。

暗号学的ハッシュ関数は出力された数値から、元のメッセージに復号化することは出来ません。

この一見利用価値のなさそうな暗号学的ハッシュ関数ですが、下記のような用途が存在するのです。

  • メッセージのダイジェスト(要約)
  • メッセージの完全性を検証する手段
  • データへのコミットメント
  • データ参照の為のポインタ
  • データがメンバーであることやメンバーでないことの証明手段

メッセージのダイジェスト(要約)としての利用

ある処理が同じ入力に対しては必ず同じ値を返すという性質を決定性といいます。

暗号学的ハッシュ関数には決定性があり、どんなに長いメッセージでも、同じ入力であれば必ず同じハッシュ値を返します。この特性から、ハッシュ値を入力したメッセージのダイジェスト(要約)とも呼びます

メッセージの完全性を検証するための利用方法

もし暗号学的ハッシュ関数に入力されたメッセージがオリジナルから1ビットでも改ざんされていれば、そのハッシュ値じゃ全く別の値になります。つまりハッシュ値を使えばオリジナルのメッセージから1ビットも変わっていないことを確認できるのです。

このようにメッセージがオリジナルから1ビットも変わっていないことを完全性と呼びます。

メッセージへのコミットメントとしての利用方法

暗号学では、1度きりしか使用しないランダムな数値のことをnonce(ナンス)と呼びます。

メッセージのハッシュ値は誰にでも計算可能ですが、メッセージにnonceを追加した上でそのハッシュ値を計算し、メッセージとハッシュ値だけを公開した場合、そのnonceを知っているものしかそのハッシュ値を計算することは出来ません。

ハッシュ値を計算した人は、nonceを第三者に開示することで、実際に自分がそのメッセージのハッシュ値を作成したことを証明できます。(これをコミットメントと呼びます)

ここで登場するのが、ビットコインのマイニングです。

ビットコイン(Proof of Work)のマイニングはnonceを変更しながらブロックのデータのハッシュ値を繰り返し計算することです。マイニング競争は次々とnonceを変更しながらハッシュ値を計算し、それとターゲットと呼ばれる数値を比較し、世界で最初にターゲットよりも小さいハッシュ値を得たものが勝利者となるものです。

つまり、マイニングとはこの小さなハッシュ値を得るためのnonce(ナンス)を求める計算なのです。

データ参照の為のポインタとしての利用方法

ソフトウェア工学では、キーによって直接的にデータを参照できるデータ構造としてハッシュテーブルを使う方法がありますが、暗号学的ハッシュ関数においても、原理的に同じ用途に使うことが可能です。この場合ハッシュ値はデータを参照するためのポインタになります。

そしてこのポインタを利用すると、ハッシュ値間の連続構造を改変不可能にすることが出来ます。これをハッシュチェーンと呼びます。

あるデータがコミットされたメンバーであることの証明手段としての利用法

ハッシュチェーンの1つとして、マークル木という便利なデータ構造があります。マークル木は全ての枝がそれぞれ2つずつに分岐する木構造をもったハッシュチェーンです。

暗号学的ハッシュ関数の衝突耐性

異なるメッセージを入力したのに、出力されたハッシュ値が同じになってしまうことをハッシュ値の衝突といいます。ハッシュ値をメッセージのダイジェスト(要約)として安心して利用するためには、ハッシュ値の衝突があってはなりません。暗号学的ハッシュ関数は、ハッシュ値の衝突の可能性が極めて小さくなるように設計されています。この声質を衝突耐性と言います。

ビットコインにおける暗号学的ハッシュ関数の利用

計算式などは分かりにくくなるので説明は割愛しますが、この「一方向ハッシュ関数」を使って、データが改ざんされていないかどうかを調べることが可能です。

ビットコインで使われるハッシュ関数は「SHA256」と「RIPEMD160」です。

ビットコインでは、この暗号学的ハッシュ関数を巧みに利用しています。

簡単に例を挙げると

  • ビットコインアドレスは公開鍵のダイジェスト
  • トランザクションの識別子はトランザクションのハッシュ値
  • ブロック内の情報や含まれるトランザクション郡の内容への完全性の保証
  • ブロックの連鎖構造(ブロックチェーン)においてブロックの順序の保持、追加や欠落を不可能にするコミットメント
  • マイニング計算とそのコミットメント

この他にもビットコインでは、ハッシュ関数を上手く利用することにより、暗号化をしています。

終わりに

本記事では、ビットコインで使われている暗号化技術について、見てきました。

ビットコインではこのように暗号化ハッシュ関数、公開鍵暗号という昔ながらの暗号化技術が組み合わされて、安全性が担保されています。

この他にも、多くの要素がビットコインの暗号化には存在します。

是非、下記の本を読んで、勉強してみることをおすすめします。


その他 ビットコイン (bitcoin) 用語解説