SSLって実際何してるの?

SSLって実際何してるの?

暗号化フレームワークプロトコルSSLを利用した暗号化通信の概要をご紹介します。裏側を知らずにSSLを利用されている方、多いのではないですか?

暗号化通信を行うための暗号化フレームワークプロトコルSSLって・・・?

前回のコラムはこちら

SSL (現在主に暗号化通信で使用されているのはTLSですが、TLSも元々はSSLをベースにしているため、本コラムではSSLと表記します)を使用した暗号化通信で使用される主なプロトコルにHTTPSプロトコルがあります。HTTPSプロトコルはHTTPプロトコルとSSL暗号化フレームワークというプロトコルを併用した仕組みです。

そもそも、なぜHTTPプロトコルにはSSLプロトコルが必要なのでしょうか。HTTPプロトコルによる通信の際には、ネットワーク上で流れるデータは、私たちが見て理解できる形式の情報(平文)でやり取りされます。ここで盗聴者に情報を盗聴されてしまった場合、データの暗号化がなされていないので、個人情報などのデータをいとも簡単に盗まれてしまうわけです。そのため、盗まれても内容がわからないような形式(暗号文)でのやり取りをする必要があります。暗号化の仕組みがSSLプロトコルです。

つまりHTTPSでの通信を行う際の暗号化処理は、実際にはSSLプロトコルが行っているわけです。ただ、ここで注意しなくてはいけないのが、SSLはHTTP専用のプロトコルではないと言う点です。メールを送る際などに使用するSMTPというプロトコルなども暗号化メカニズムとしてSSLプロトコルを使用して暗号化することができます。

暗号化を行うためのSSLプロトコルの構成について

SSLプロトコルについて、HTTPSプロトコルを例に説明すると、TCP/IPでのアプリケーションレイヤに位置するHTTPプロトコルを使った通信を、同じアプリケーションレイヤで暗号化するためのプロトコルです。

プロトコルのレイヤ

SSLプロトコルでは、安全な暗号化通信を行う際に発生する、以下の問題を解決しながら暗号化されたデータのやり取りを行います。

(1) 機密性
(2) 正真性
(3) 認証

上記の3点の問題は、何かしらの方法で暗号化通信を行う際には必ず乗り越えなくてはならない問題です。SSLプロトコルはこれらの問題を乗り越えるための策をフレームワークとして用意し、安全な通信を保障します。

(1) 機密性

機密性とは、暗号化の最大の目的である、盗聴者に解読されずに、通信相手だけに機密データを送ることです。データに暗号化を施せば、データを盗まれてしまったとしても、それを盗聴者は解読することができません。暗号化をするために、SSLプロトコルでは、共通鍵暗号を利用し、暗号化を施します。また、共通鍵暗号で使用する、鍵と呼ばれる値を生成するために擬似乱数生成器を使用し、共通鍵暗号方式を使用する際に発生する鍵配送問題(共通鍵の鍵を共有する際に盗聴者に盗まれてしまう問題)を解決するために公開鍵暗号を使用します。

(2) 正真性

正真性とは、送信前のデータと、送信後のデータが同じもので、改ざんが行われていないことを保障するものです。通信相手からデータが届いたとしても、その内容が途中で悪意を持った人間に改ざんされてしまっていたなら、そのデータは使い物にならないどころか、間違った内容を鵜呑みにし、個人では詐欺にあったり、会社においては社会的な問題を起こす危険性をはらんでいます。SSLプロトコルで暗号化通信を行う際には、一方向ハッシュ関数を使用したメッセージ認証コードを使用し、正真性を保障します。

(3) 認証

認証とは、送られてきたデータが、正しい相手から送られてきたものであると証明するためのものです。これは、暗号化通信時のなりすましという脅威を解決することができます。暗号化を行う際には鍵と呼ばれる値を使用して暗号化と複合化を行いますが、本来通信したかったサーバではなく、悪意を持った人間が通信に介入し、代わりに悪意を持った人間との暗号化通信を行うための鍵を送ってきたならば、悪意を持った人間と暗号化通信を行うことになってしまい、せっかく暗号化ができたとしても、機密情報がすべて駄々漏れになってしまいます。SSLプロトコルで暗号化通信時を行う際には、証明書で認証を行い、本来通信したかったサーバとだけ、暗号化通信をします。

このような、さまざまな暗号化技術を駆使し、安全にやり取りを行うのが、SSLプロトコルです。

では、実際にSSL暗号化フレームワークプロトコルを使用した暗号化通信の流れを見ていきます。

SSLプロトコルを使用した暗号化通信の開始時の流れ

SSLプロトコルでの暗号化通信は大きく分けて4つのフェーズから始まります。この、実際に暗号化通信が始まるまでの処理を、ハンドシェイクと呼んでいます。事前に通信する双方にて、どのような通信の仕組みを利用していくのかを相談し、合意が得られて握手する様を、ハンドシェイク(握手)と呼びます。実際には、SSLプロトコルのフレームワークのひとつの機能であるハンドシェイクプロトコルがこの作業を行います。

SSLプロトコルの構成

(1) 暗号化アルゴリズムの提案と合意
(2) 証明書の提示
(3) 共通鍵生成のためのデータの送付と共通鍵生成
(4) 合意した暗号への切り替えと暗号化通信の開始

上記の4つのフェーズを踏むことで、互いが暗号化を行う際の取り決めが行われ、実際の暗号化が行われたHTTP通信が開始されます。

順を追って4つのフェーズを説明していきます。

(1) 暗号化アルゴリズムの提案と合意

サーバ(Webサーバ)に対して要求を出すクライアント(ブラウザ)から、クライアントが使用できる暗号化アルゴリズム一覧が提示されます。クライアントから提案された暗号化アルゴリズムから、実際の通信時に使用する暗号化アルゴリズムをサーバが選択し、使用する暗号化アルゴリズムをクライアントに知らせます。

(2) 証明書の提示

これから暗号化通信を行っていくサーバが、間違いなく目的のサーバであることを保障するために、サーバ側から公開鍵を含む証明書を受け取ります。クライアントは、証明書を確認し通信を継続するかを決定します。また、クライアント証明書(クライアントがサーバに対して自分自身を証明するための証明書)を使用した相互認証の仕組みを利用する場合は、クライアント証明書をサーバに提示して認証してもらいます。

(3) 共通鍵生成のためのデータの送付と共通鍵生成

クライアントは、プレマスタシークレットという値を生成し、サーバに送付します。このプレマスタシークレットは、共通鍵をサーバとクライアント双方で生成するために必要な非常に重要な情報ですので、この値を盗聴者に解読されてしまうと非常に困ります。そのためこのプレマスタシークレットを保護しながらサーバに送るために、証明書についている公開鍵を使用してプレマスタシークレットを暗号化します。この暗号は、サーバが送付した証明書に含まれる公開鍵とペアになった、秘密鍵と呼ばれる鍵でしか復号することができません。この秘密鍵は通信相手のサーバだけが持っているものなので、盗聴者に盗まれたとしても盗聴者は秘密鍵を持っていないので解読することができません。サーバとクライアントは共有したプレマスタシークレットの値を元に、まったく同じマスタシークレットという値を生成して、さらにそのマスタシークレットから共通鍵を生成します。これでお互いが暗号化と復号化を行うために必要な鍵を安全に生成することができます。

(4) 合意した暗号への切り替えと暗号化通信の開始

手順(1)にて合意していた暗号化プロトコルに切り替えをクライアントとサーバで行い、以後、事前に取り決めた暗号化プロトコルを使用し、通信を行います。

まとめ

いかがだったでしょうか。​今回はSSLプロトコルを使った暗号化通信の流れを概要としてご紹介しました。皆様が普段使用しているHTTPSなどのプロトコルを使用した通信の裏側では、SSL暗号化フレームワークプロトコルが暗号化を施した安全な通信を行っています。

次回以降では、今回のコラムで登場したさまざまな暗号化技術を一つ一つ解説していきますのでお楽しみに。

記事は、予告なく変更または削除される場合があります。
記載された情報は、執筆・公開された時点のものであり、予告なく変更されている場合があります。
また、社名、製品名、サービス名などは、各社の商標または登録商標の場合があります。