木走日記

場末の時事評論

インターネット暗号通信プロトコルSSLの原理


 前回当ブログでインターネット上の暗号化ソフトSSLに重篤な欠陥があると一般の読者に警鐘を鳴らしました。

ネットショップ利用者は早急にパスワードの変更を!〜暗号化ソフトSSLの欠陥・Heartbleed(心臓出血)は「壊滅的」
http://d.hatena.ne.jp/kibashiri/20140414

 重大な問題にも関わらず、予想通りといいますか読者の反応は今ひとつでありました。

 この問題、メディアの取り上げ方も地味でありますが、そもそも記者のみなさんが暗号通信とかSSLをどれほど理解して記事をおこしているのか、あまり理解されていない事は容易に想像できます。

 前回のエントリーに対してもある読者からそもそもSSLって何なのさ、知識もないし関心もない、という冷たい(苦笑)メールを頂きました。

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

 暗号通信やSSLの原理は専門知識のない人には理解するのはハードルが高いようです。

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

 なお、難しい数学的理論や専門性の高い用語は省いて説明を試みますので、各暗号技術におけるハッシュ計算などの理論的説明は削ぎ落として説明いたします。

 ・・・

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

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

 例えばアルファベットの大文字半角文字'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:公開鍵暗号方式

■SSLは公開鍵暗号方式の技術を利用した共通鍵暗号方式の通信〜ハイブリッド暗号通信

 さて、共通鍵暗号方式と公開鍵暗号方式を理解して頂いたら前準備は完了、SSL(Secure Sockets Layer)の説明に入りましょう。

 実際のインターネットの暗号通信プロトコルであるSSLはハイブリッド暗号方式を採用しています。

 先ほど共通鍵暗号方式の説明で「送信側と受信側で秘密裏に世界でただひと組の共通の暗号鍵を共有することで暗号通信を行うことが可能」 と述べましたが、実は遠く離れた二つの送信側と受信側の端末で、「秘密裏に世界でただひと組の共通の暗号鍵を共有する」方法は容易ではありません。

 メールでやりとりしますか、危険この上ないですね、電話で人間が教えますか、何十万人相手のネットサイトでは非効率でやってられませんね。

 そこでSSLでは「秘密裏に世界でただひと組の共通の暗号鍵を共有する」方法として公開鍵暗号方式の技術を利用します。

 まず受信側が用意している公開鍵を用いて送信側が作成した世界でただ一つの共通鍵を暗号化します。

 鍵自身を暗号化してしまうのがポイントです。

 この「暗号化された共通鍵」を複合できるのは秘密鍵を持っている受信側だけであります。

 それ以外世界中の誰もこの「暗号化された共通鍵」を解読はできません。

 「暗号化された共通鍵」を受け取った受信側は秘密鍵を使って複合します、この瞬間「秘密裏に世界でただひと組の共通の暗号鍵を共有する」ことに成功したわけです。

 あとは安心して共通鍵暗号方式で双方向可能な暗号通信が行えることになります。

■図3:ハイブリッド暗号方式

 ・・・

 今回このSSLの暗号通信そのものに欠陥があったわけではありません。

 SSLを利用する「オープンSSL」というソフトウエアのライブラリのひとつに不具合があったということです。

 ただ「オープンSSL」がインターネットに参加しているサーバーのおおよそ三分の二に普及しているという事実と、この不具合が重篤で下手をすると暗号鍵そのものも漏洩してしまうという事実が、この問題を深刻にしているのです。

 このエントリーがこの問題に対し読者の参考になれば幸いです。



(木走まさみず)




関連エントリー
■2014-03-03 暗号通信とビットコイン取引の原理の初心者向け説明を試みる
http://d.hatena.ne.jp/kibashiri/20140303 
■2013-02-11 遠隔操作ウイルス事件で日本の警察が突きつけられた技術的超難問
http://d.hatena.ne.jp/kibashiri/20130211
■2012-01-05 不思議な不思議な数式、ディフィー・ヘルマン鍵共有
http://d.hatena.ne.jp/kibashiri/20120105