インターネット上で通信を暗号化して送信し、他の人に見られないように安全に通信を行うためのプロトコルである SSL/TLS の概要について説明します。
SSL/TLS とは
SSL/TLS とはインターネット等の通信ネットワークにおいて、送信者と受信者の間でやりとりするデータを暗号化して、第三者が読み取ることができないように安全に通信を行うための暗号化通信のプロトコルです。
SSL/TLS では通信するデータの暗号化だけではなく、データの改ざん検知や通信相手の認証を行いながら、安全に信頼できる相手と通信を行うための仕組みが決められています。
コンピューターの処理能力の向上や攻撃手法の多様化に合わせて、よりセキュアなプロトコルとなるように見直しが行われており、現在、存在する SSL/TLS のプロトコルのバージョンは以下の通りとなります。
SSL 2.0
SSL 3.0
TLS 1.0
TLS 1.1
TLS 1.2
TLS 1.3
上のプロトコルのバージョンは古い順に並べており、SSL 2.0 が一番古く、TLS 1.3 が最新のプロトコルのバージョンとなります。
SSL 2.0 ~ TLS 1.1 では様々な脆弱性が存在することが報告されているため、現在、主流で利用されているのは TLS 1.2 となります。
(ただし、新世代の暗号化プロトコルとして TLS 1.3 が発表され、利用され始めています。)
暗号化通信のプロトコルの用語として広く知られている SSL は、実際は古いプロトコルで セキュリティ強度も低いため、現在はあまり利用されていないプロトコルです。
しかしながら、”SSL” という言葉の認知度の方が “TLS” よりも圧倒的に高いのも事実ですので、本サイトでは暗号化通信のプロトコルの表記は “SSL/TLS” とします。
SSL/TLS は暗号化通信を行うためのプロトコルで、OSI 7 階層モデル的にはプレゼンテーション層となり、トランスポート層(TCP/UDP 等)とアプリケーション層(HTTP、LDAP 等)の間で利用されます。
特定のアプリケーション プロトコルに依存せず、様々なアプリケーション通信と組み合わせて利用することができます。
プロトコルの表記において、アプリケーション プロトコルの下に “S” を追加して、SSL/TLS と組み合わせて暗号化して利用利用していることを示します。
例:HTTPS、LDAPS、FTPS、SMTPS 等
SSL/TLS プロトコルの構成
ネットワーク上で暗号化通信を行うために TLS で規定されているプロトコルは以下の 5 つとなります。
SSL/TLS 通信では、以下のプロトコルを組み合わせて暗号化通信を実現させています。
- レコード プロトコル
- ハンドシェイク プロトコル
- 警告プロトコル
- 暗号仕様変更プロトコル
- アプリケーション データ プロトコル
各プロトコルが何なのか、簡単に説明します。
レコード プロトコル
全ての TLS 通信におけるデータの形式を決めたプロトコルです。
暗号化通信において、ハンドシェイクが完了して実際にデータを暗号化して送信するとき、データを圧縮したり、正当な相手から送信されてきたデータであることを保証するための認証情報(MAC)を付与します。
レコード プロトコルでは、TLS 通信においてアプリケーション データを暗号化し、改ざんされていないことを保証するための枠組みなど、暗号化通信を行う上で必要となる仕組みを定義しています。
ハンドシェイク プロトコル
暗号化通信を開始する前に、まずは通信相手と安全に通信を行うために以下の項目を確認しなくてはなりません。
- 暗号化通信に使用するアルゴリズム(暗号化方式、ハッシュ関数等)の選定
- 通信相手が信頼できる相手なのか確認
- 通信の暗号化に使用する鍵を交換
① SSL/TLS では、暗号化方式やハッシュアルゴリズムなどの PKI に関連する複数の技術を組み合わせて暗号化通信を実現しています。
ただし、暗号化方式やハッシュ関数等の技術にも複数のアルゴリズムが存在しているため、他の相手の暗号化通信を成立させるためには、両者とも利用できるアルゴリズムを確認しなくてはなりません。
どのアルゴリズムを利用して暗号化通信を行うのか、ハンドシェイクの段階で選定を行っています。
② 暗号化通信を行う際に、通信相手が信頼できる相手なのかを確認します。
例えば、Amazon のサイトにアクセスした時に接続しているサーバーが本当に Amazon 社のサーバーであることを確認しているので、私たちは安心してインターネットで買い物をすることができます。
SSL/TLS においては、暗号化通信を要求する側をクライアント、要求を受ける側をサーバーと呼びます。
一般的には、クライアントが通信相手となるサーバーが信頼できるなのかのみを確認しており、サーバー側はクライアントの信頼性は確認しません。
(SSL/TLS にサーバーがクライアントの信頼性を確認する仕組み自体はありますが、省略して通信されることが多いです)
通信の信頼性の確認には、デジタル証明書を利用して行われています。
③ 暗号化通信に利用する鍵を交換します。
通信相手とやり取りするデータの暗号化には “共通鍵暗号化方式” が利用されています。
暗号化を行うために、通信を行う両者で共通の鍵を事前に保有している必要があります。
共通の鍵を保持するために、事前に鍵を交換する必要があります。
警告プロトコル
TLS ハンドシェイクや暗号化通信の処理において、何らかの問題が発生した場合、その問題を相手に通知して必要に応じて通信を中断する必要があります。
警告プロトコルでは問題が発生したことを相手に通知するための仕組みを規定しています。
どのような問題が発生したのかを通知するための、エラー コードが定義されています。
暗号仕様変更プロトコル
TLS 通信において、通信に使用する各種アルゴリズムの選定や通信相手の正当性の確認などを行う通信は平文のデータで行いますが、共通鍵の鍵交換のプロセスが完了して完了としてクライアントとサーバーの双方が同じ共通鍵を保持することができたら、それ以降の通信は暗号化したデータに切り替えを行います。
暗号仕様変更プロトコルでは、共通鍵を保持して暗号化の準備が整ったので、これから暗号化通信に切り替えますということを相手に通知することを示したプロトコルです。
TLS ハンドシェイクの過程で使用されます。
アプリケーション データ プロトコル
TLS プロトコルは、トランスポート層とアプリケーション層の中間で利用されますが、暗号化されているデータがどのアプリケーション プロトコルで利用されるものなのかをクライアントとサーバー間で共有するために利用されます。
紹介した 5 つのプロトコルは、レコード プロトコルは全ての TLS 通信において適用されるプロトコルであるため上位のプロトコルとなり、他の4つはサブ プロトコルとなります。
TLS 通信では上記の各プロジェクトを組み合わせて、暗号化通信を実現させています。