ビットコインとブロックチェーンの【暗号技術】初心者入門
「ビットコイン」や「ブロックチェーン」の関係する本は、もう何十冊読んだのか分からないくらいですが、今回は暗号通貨やブロックチェーンに使われている「暗号技術」について初心者なりに分かりやすく説明しようと思います。
私も全く分からなかった分野ですが、1年以上もビットコインやブロックチェーンに時間を費やしていると理解できるもので、初心者向けに分かりやすく説明できるのではないかと思っています。
また間違っていることや分かりづらいことがありましたら随時ご指摘大歓迎です。
暗号技術とは
もともとは軍事用に使われていた技術という歴史があります。以下は、「シマンテック・ウェブサイトセキュリティ」より引用します。
紐解いてみれば、古くは紀元前 3000 年頃のバビロニアの時代から暗号は使われていたとされています。 軍事・政治の場面での利用で発達した暗号技術ですが、インターネットの普及と日常的に接する情報量が飛 躍的に増加したことを背景に、利用用途や利用シーンが拡がり、日常の身近なところでも利用されるように なっています。出典:[簡単にわかる暗号の歴史 - シマンテック・ウェブサイトセキュリティ]
暗号技術を英語に訳すと「Cryptography=クリプトグラフィー」や「Cipher=サイファー」とも呼びます。よくビットコインやブロックチェーンの界隈で、トランザクション(取引)の説明がなされる際に「アリス」と「ボブ」という名前が出てきます。
この2人を英語に訳すとアリスは→「Alice」、ボブは→「Bob」となります。よく見てみるとアルファベット順になっています。ここでは「アリス=Alice」を「送信者」、「ボブ=Bob」を「受信者」として今後説明していきます。
普段、私たちが何気なく使っているメールで説明してみましょう。アリスがボブ宛てにあるメッセージを送信したとします。私たちは何も心配することなくそのメールを相手へ送信していることでしょう。
ただここで問題となってくるのが「第三者による盗聴」です。以下の図では「イブ=Eavesdropper」とします。Eavesdropperは盗み聞きする人などと訳されます。
では一体私たちはどのようにしてこのメールを「イブ」から守っているのでしょうか?ここで初めて出てくるのが暗号という技術です。実はビットコインの送信やブロックチェーンにも暗号の技術が使われています。
暗号化と復号化について
アリスはイブに盗聴されないようにメールを暗号化しようとします。暗号化する前のメールメッセージを「平文=ひらぶん(Plaintext=プレインテキスト)」と呼びます。
暗号化した後のメールを「暗号文(Ciphertext=サイファーテキスト)」と呼びます。
平文は、「おはよう。今日1ビットコイン送金します。」と誰でも読めますが、暗号文は「1$usk%1281⁰²`@:;12*」のように暗号化された文字で相手に届きます。これではイブが読むことが出来ません。
この暗号化された文字を元の文字列(平文)に戻すことを「復号化」と呼びます。
暗号解読とは
正当な受信者が暗号文を平文に戻す行為を「復号化」と呼びますが、受信者以外の第三者が復号することを、「暗号解読」と言います。
アルゴリズムとは
このような複雑な暗号を解くことを、通常「アルゴリズム」と呼びます。アルゴリズムには、それを解読するための「鍵(Key=キー)」が必要になります。
鍵とは
鍵には2種類あります。
- 対称暗号:暗号化と復号化で同じ鍵を使う方式。
- 公開鍵暗号:暗号化と復号化で異なる鍵を使う方式。
公開鍵暗号は別名、「非対称暗号」と呼ぶこともあります。またその歴史をたどると1976年にウィットフィールド・デフィー氏とマーティン・ヘルマン氏によって世界初の論文が発表されました。
対称暗号:暗号化と復号化で同じ鍵を使う方式
公開鍵暗号:暗号化と復号化で異なる鍵を使う方式
一方向ハッシュ関数とは
ここで「一方向」や「ハッシュ」や「関数」という言葉で出てきます。私にとって頭の痛いワードだっただけに、これを簡単に分かりやすく説明すると、「そのデータが本物かどうかを確かめるための数値」です。
これを「正真性(しょうしんせい)」と言います。普段、私たちはメール送受信以外にも、インターネット経由で無料のソフトウェアをダウンロードすることがあります。このソフトウェアがもし途中で悪意のあるユーザーによってウィルスが仕掛けられたとしたら。
この書き換えや改ざんを確認するためにこの「ハッシュ値」というものがあります。そのデータが正しいかどうかを確かめるためには、この「ハッシュ値」を計算するのですが、この値を出すために使われるのが「一方向ハッシュ関数」です。
計算式などは分かりにくくなるので説明は割愛しますが、この「一方向ハッシュ関数」を使って、データが改ざんされていないかどうかを調べることが出来ます。ビットコインで使われるハッシュ関数は「SHA256」と「RIPEMD160」です。
【SHA-256とは】米国のNISTが定めた標準のハッシュ関数のことです。【RIPEMD-160とは】ビットコインで使用されるハッシュは SHA-256 と RIPEMD-160 です。Bitcoinではハッシュは様々な所で用いられるが、そのほとんど全てで、SHA-256を2回適用した物が使われます。しかし、より短いハッシュが必要な場合(たとえばアドレスなど)は、1回SHA-256を適用した物に、さらにもう1回RIPEMD-160を適用した物が用いられます。出典:[SHA-256とは、RIPEMD-160とは - bitFlyer]
メッセージ認証コード
メッセージやメールが自分の期待した相手から届いたものであるかを確かめるために、「メッセージ認証コード」が使われます。
デジタル署名とは
「なりすまし」や「改ざん」「否認(自分の主張を後で変える行為)」などの脅威を防止する技術を「デジタル署名」と言います。ビットコインの取引では「デジタル署名のチェーン」とも表現されます。
検証(Verify)とは
このようにデータに「なりすまし」や「改ざん」「否認(自分の主張を後で変える行為)」などの脅威がなかったかどうかその「デジタル署名」を施してから相手へ送信します。そしてボブはこのデジタル署名を検証することによって、これらの脅威を防ぐことが出来ます。
擬似乱数生成器(ぎじらんすうせいせいき)
英語に訳すとPresudo Random number Generator: PRNGと言います。生成する数列が予測不可能で区別のつきにくい「乱数列」をつくるアルゴリズムです。
乱数列とは
擬似乱数生成器で出てきた「乱数列」とは、主に以下の3つに使われます。
- 鍵の生成:対称暗号やメッセージ認証コードで使用。
- 鍵ペアの生成:公開鍵暗号やデジタル署名に使用。
- ナンスの生成:一度だけ使用される使い捨てのランダムな数値。
ナンスとは、Number used once(一度だけ使用される使い捨ての数字)の略で、ブロックを生成するときに採掘者(マイナー)によって生成される32ビットの数値です。ブロックを生成するためには採掘難易度より小さいハッシュを計算することが必要です。もちろん何度計算してもハッシュ値は同じなのでナンスをどんどん変更させてハッシュ値を変えていき、うまくいくナンスを探すことになります。出典:[ナンス とは - bitFlyer]
なぜ乱数列をつくるのか?
もっとも重要なものが鍵(キー)になります。この鍵がもし悪意のある第三者の手に渡ってしまったら、自分の資産はあっという間になくなってしまうでしょう。
このため乱数列を使って鍵を生成し、第三者に見破られないようにします。
まとめ
ビットコインやブロックチェーンで使われている技術は決して新しいものではなく、もともと昔からあった暗号技術が組み合わさって作られた技術です。
これは以前に書いた「【ビットコイン取引所4選】1年かけて利用してみた信頼のできる取引所」のハッカー文化部分にも詳細がありますので併せて読んでみてください。
「ビットコインにしても、発想は新しくとも、暗号やP2Pといった技術そのものは新しく発明されたものではない。後述する多くのハッカー文化の産物は、既存のものの組み合わせから革新的なものをつくりあげていったのだ。」【ビットコイン取引所4選】1年かけて利用してみた信頼のできる取引所」
参考文献
2017年11月11日に【ビットコインウォレット】信頼できるおすすめウォレット一覧ついて書きました。
テクノロジー関連記事
2018年3月27日に「【初心者入門】プログラミングを学んで感じたおすすめプログラミング学習サイト」について書きました。