木走日記

場末の時事評論

暗号通信とビットコイン取引の原理の初心者向け説明を試みる

 私は副業で工学系の大学や専門学校でネットワーク工学を外来講師として教えています。

 最近いろいろなところでビットコインについて質問を受けます。

 暗号通貨であるビットコインの原理は専門知識のない人には理解するのはハードルが高いようです。

 そこで今回はビットコインの取引について、専門知識を有しない読者を対象に暗号通信のいろはから理解いただけるように、説明を試みます。

 なお、難しい数学的理論や専門性の高い用語は省いて説明を試みますので、ビットコインの生成法や、各暗号技術におけるハッシュ計算などの理論的説明を削ぎ落として説明しますので、いくつかの説明部分は実態とは正確性に欠けている事をご了承ください。

 では、暗号通信とビットコイン取引の原理の初心者向け説明をいたします。



■暗号鍵が文字通りキーとなる暗号通信〜共通鍵暗号方式

 ご存知のとおりデジタル通信においてはすべての情報はデジタル信号で送られます。

 例えばアルファベットの大文字半角文字'A'は0と1のデジタル信号では8ビット’0110 0001’で扱われます。

 送信側が暗号を掛けずそのままのビット列(以下暗号を掛けないそのままの情報を平文、暗号を掛けた情報を暗号文と記す)を通信して正しい受信者に送ろうとしてしまえば、ネット上第三者はその情報をのぞき見れば、それが’0110 0001’というビット列であること、すなわち文字'A'であることを盗み見可能です。

 そこで通信の暗号化がなされます、その際キーとなるのは文字通り暗号鍵(あんごうかぎ)と呼ばれるビット列です。

 送信側と受信側であらかじめ秘密裏に共通の暗号鍵暗号アルゴリズムを共有します。

 暗号鍵といってもただのビット列ですが、説明を簡単にするために暗号鍵を’1111 1111’の8ビットを採用したとしましょう。

 採用される暗号アルゴリズムは、やはり説明を簡単にするために、排他的論理和という論理演算にいたしましょう。

 排他的論理和とは、演算対象の二つのビットが排他的すなわち0と1の組み合わせなら結果は1、排他的でないすなわち0と0か1と1ならば結果は0となる論理演算です。

 送信側は送りたい平文に暗号鍵と暗号アルゴリズムを使って暗号化し暗号文を作成します。

 文字'A'すなわち’0110 0001’に、暗号鍵すなわち’1111 1111’を使って、暗号化すなわち排他的論理和を演算すれば、暗号文すなわち’1001 1110’が作られます。

 送信側はこの暗号文をネット上正しい受信者に通信致します。

 ネット上で第三者がこの情報’1001 1110’をのぞき見ても、それが文字'A'であることを解読することは、使用された暗号鍵と暗号アルゴリズムを知らない限り不可能です。

 一方正しい受信者は暗号文’1001 1110’を受信したら自分の持っている暗号鍵’1111 1111’を使って、暗号文を解読して平文に戻します(復号といいます)。

 すなわち暗号文’1001 1110’に、暗号鍵すなわち’1111 1111’を使って、復号化すなわち排他的論理和を演算すれば、平文すなわち'A'である’0110 0001’がよみがえります。

 このように送信側と受信側で秘密裏に世界でただひと組の共通の暗号鍵を共有することで暗号通信を行うことが可能です。

 この方式を共通鍵暗号方式と呼びます。

■図1:共通鍵暗号方式

■不特定多数と可能な暗号通信〜公開鍵暗号通信

 次に不特定多数と暗号通信を可能にする技術を説明しましょう。

 送信側を大切な個人情報を送信するネットショップのユーザー、受信者側をその個人情報を受信するネットショップ側と仮定すると理解しやすいでしょう。

 まず受信者側では暗号化する暗号鍵を広くネットで公開し誰もがダウンロード可能とします。

 ここでこの公開鍵は広く不特定多数のユーザーがダウンロード可能となります。

 ただしこの公開鍵は暗号を掛けることは可能ですが、暗号を解読して平文に戻す、すなわち復号することはできないように工夫されています。

 この暗号を解読できる鍵は、世界でたったひとつだけ受信側が秘密裏に持つのです。

 こうして不特定多数の送信者が受信側に暗号通信可能となります。

 第三者がのぞき見てもこの暗号文を解読することは不可能です。

 不特定多数からの暗号文は正しい受信者のみ、すなわち秘密鍵を持っているネットショップ側だけが復号可能となります。

 ただしこの方式では暗号通信は一方通行である点に注意が必要です。

 この方式を公開鍵暗号方式と呼びます。

■図2:公開鍵暗号方式

■暗号技術を利用したユーザー認証技術〜電子署名

 私たちの日常生活において大切な契約をするときには、契約書に本人が自著で署名・捺印をして、確かに本人が契約したことを証明いたします。

 ネットワークにおいても通信相手が正しい本人であることを証明することはとても重要です。
 暗号通信においてもセキュリティ上次の3要素は完全に守られなければなりません。

 機密性:悪意のある第三者がのぞき見ても理解不能であること。
 完全性:悪意のある第三者が改ざんしていないこと。
 ユーザー認証:悪意のある第三者がなりすましていないこと。

 そこで公開鍵暗号方式の技術を応用して電子署名というユーザー認証技術が生まれました。

 電子署名においては送信側(署名する本人)が暗号を解読する鍵(認証鍵)を公開し、不特定多数が彼の署名文(暗号文)を認証(復号)可能とします。

 ただし暗号を掛ける鍵(署名鍵)は世界でただひとつ送信側・本人が秘密鍵として保持します。

 これによって彼が署名した文(暗号を掛けた文)は不特定多数の受信者が認証(復号)することになります。

 受信者側は正しく認証できたこと、この文を暗号化できるのは送信側・本人だけである事実から、悪意のある第三者によるなりすましはないこと、途中で1ビットでも第三者が改ざんしていたらただしく認証(復号)できないことから改ざんもないこと、そしてもちろん機密性つまり途中で第三者に見られても理解不能であること、暗号通信におけるセキュリティ上の3要素が完全に守られていることが証明されるのです。

■図3:電子署名

■暗号通貨ビットコインの取引

 暗合通貨であるビットコインの取引には「電子署名」の技術が応用されています。

 技術的にビットコインがなぜ偽造不可能なのか説明致します。

 例えばあなたが同じメールを10人の友人に送信したとします。

 当然ながらあなたの送信済みフォルダに1通、友人たちに合計10通、同一のメールが存在することになります。

 つまり通信の世界では情報を通信するということは複製をコピーすることに他なりません。

 メールをビットコインに置き換えれば、上記の例では1枚のビットコインが11枚に増えてしまいます。

 これを防ぐためにビットコイン取引では電子署名の技術を応用して、ビットコインの1対1の取引の本人認証などのセキュリティを維持しつつ、誰から誰へ売られたのか記録しているのです。

 ビットコインには中央銀行のような中央機関は存在せず、通貨の発行や取引はすべてピアツーピア・ネットワーク上、つまり1対1を原則として行われているのです。

 ビットコインのすべての取引履歴はブロックチェーンと呼ばれる台帳に記録されます。

 ブロックチェーンには過去のすべての取引が記録されているため、これを見れば、取引の整合性を誰でも検証することができるのです。

 ・・・

 さてMt.Goxサイバー攻撃により顧客のコインをすべて失ったとあります。


 これは電子署名が成功しビットコインの所有者が変更したにも関わらず、失敗と通知して再送信を繰り返すという手口が用いられたようです。

 上記の電子署名の送信側がMt.Gox、受信側が犯行グループと考えれば理解しやすいでしょう。

 認証行為が成功したにも関わらず、失敗通知を繰り返しどんどんビットコインを引き出していったものと思われます。

 しかしこの犯罪行為も正確にブロックチェーンに履歴がすべて残っているはずです。

 ブロックチェーンを解析することで今回の犯行の真犯人に迫ることができるかもしれません。

 今回のエントリーがこの問題における読者の参考になれば幸いです。



(木走まさみず)