みなさん、こんにちは!
ブリュの公式ブログ.netにお越しいただきまして、ありがとうございます。
このサイトでは、ITについて特化したサイトを運営しています。
このカテゴリでは、情報処理技術試験とITの基礎知識として、様々な技術についての紹介を行っています。
今回は、インターネットにおける暗号化技術のSSL/TLSについて紹介します。
SSLは通信内容を暗号化する技術であり、SSLの進化系がTLSになります。
しかし、一般的にはTLSのことをSSLと呼んでいるので、このサイトでは、SSLとTLSは同じ意味として説明をしていきます。
情報処理技術者試験のシラバスにおいては、基本情報技術者試験(Lv.2)、応用情報技術者試験(Lv.3)のほかに、高度情報処理技術者試験として、
- 情報処理安全確保支援士試験(Lv.4)
- ネットワークスペシャリスト試験(Lv.4)
の他、全ての高度試験においてLv.3で出題範囲となっています。
目次
SSL/TLSはアプリケーション層のプロトコル
SSL/TLSは、TCP/IPプロトコルスイートにおけるアプリケーション層のプロトコルになります。
これをOSI基本参照モデルで表すと、おおよそセッション層に位置すると言われています。
なお、OSI基本参照モデルでは、7階層への分類を行っていますが、実際に使われているTCP/IPプロトコルスイートでは、上位3層をまとめてアプリケーション層としています。
そのため、SSL/TLSがセッション層に位置するというのは「だいたいそれぐらいの位置」という程度であり、明確な分類ではありません。
以前にOSI基本参照モデルの記事でも書きましたが、OSI基本参照モデルにおける上位層の分類は、あまり意味をなしていません。
基本的には下位4層の分類が大事であり、さらなる付加価値を与えているものが、ざっくりと上位層(アプリケーション層)に分類される程度の認識で大丈夫です。
そのため、SSL/TLSは、おおよそ上位層に分類されるプロトコルぐらいの認識で大丈夫でしょう。
OSI基本参照モデル | TCP/IPプロトコルスイート | |
上位層 | アプリケーション層 | アプリケーション層 |
プレゼンテーション層 | ||
セッション層 | ||
下位層 | トランスポート層 | トランスポート層 |
ネットワーク層 | ネットワーク層 | |
データリンク層 | ネットワークインターフェース層 | |
物理層 |
公開鍵暗号と共通鍵暗号のハイブリッド構成
SSL/TLSは公開鍵暗号と共通鍵暗号の長所を生かしたハイブリッド構成になっています。
SSL/TLSでは、
- 最初に公開鍵暗号で通信を確立し、ユーザー側→サーバーの一方通行の暗号化を可能にする
- その後共通鍵を生成し、ユーザー側とサーバーの双方向での暗号化を可能にする
という手順で、暗号化を行っています。
公開鍵暗号の特徴
公開鍵暗号の特徴は、サーバー側が秘密鍵を保持し、公開鍵を世界に向けて公開する暗号化方式です。
公開鍵と秘密鍵はセットになっており、公開鍵で暗号化したものは秘密鍵のみで復号可能であり、逆に秘密鍵で暗号化したものは公開鍵でのみ復号が可能になるペアとなっています。
つまり、公開鍵暗号を利用すると、ユーザー側が公開鍵で暗号化して送信すれば、秘密鍵を保持しているのはサーバーだけになり、ユーザー側からサーバー間に向かう、一方通行の暗号化が可能になります。
共通鍵暗号の特徴
共通鍵暗号は、サーバーとユーザー側が同じ鍵(共通鍵)を持っており、共通鍵で暗号化したものは同じ共通鍵でのみ復号が可能になります。
よって、ユーザー側とサーバーが、仮に「同じ共通鍵を持っている状況」を実現できれば、サーバーとユーザー側における双方向の暗号化通信が可能になります。
しかし、共通鍵の伝達方法には注意しなければなりません。
万が一、鍵の交換中に第三者に盗聴された場合、安全な暗号化通信が不可能になってしまいます。
SSL/TLS有効化までの手順
では、具体的なSSL/TLSの有効化までの手順を見ていきましょう。
ユーザー側がサーバーに接続要求
まずはユーザー側がサーバーに接続要求をします。
なお、サーバー側は、事前に公開鍵と秘密鍵のペアを保持しています。
公開鍵は世界に向けて公開しており、誰でも入手可能ですが、秘密鍵についてはサーバー外部に漏れないように厳重に保管しています。
サーバーが公開鍵暗号を送信する
ユーザー側からの接続要求があると、サーバーが公開鍵をユーザー側に送信します。
公開鍵は名前の通り元々公開するための鍵なので、第三者に入手されても特に問題はありません。
実際には、公開鍵を受け取った後、SSL/TLSの認証局(CA)に証明書の確認作業が行われます。
ここでは、SSL/TSLの暗号化の手順のみを解説するため、このプロセスは省略します。
なお、SSL/TLSの機能は2つあり、
- 暗号化通信
- 証明書の確認によるなりすましの防止
があります。
しかし、実際には証明書発行のハードルが低いSSLが多数存在しているので、SSL化されているサイトだから絶対に安全ということではありませんのでご注意ください。
例えば、詐欺サイトであってもSSL化することも可能です。
ユーザー側が共通鍵を生成
ユーザー側は公開鍵を受け取ると、共通鍵を生成します。
ユーザー側が共通鍵を公開鍵で暗号化
ユーザー側は、生成した共通鍵を、公開鍵で暗号化します。
ユーザー側がサーバーに共通鍵を送信
ユーザー側が公開鍵で暗号化した共通鍵をサーバーに送信します。
ここで、公開鍵で暗号化したものは秘密鍵でしか復号できないことに注意してください。
秘密鍵はサーバーしか持っていませんから、ユーザー側→サーバーの一方通行の暗号化が成立しており、ユーザー側が生成した共通鍵は、安全にサーバーに届きます。
また、公開鍵は広く公開されていますが、公開鍵で暗号化したものは同じ公開鍵で復号できないのも、この暗号化方式のポイントとなります。
共通鍵を秘密鍵で復号
サーバー側は受け取った共通鍵を、自身の持つ秘密鍵で復号します。
なお、第三者の盗聴の危険性を考えたとしても、公開鍵で暗号化したものは秘密鍵でしか復号できませんから、秘密鍵を持たない第三者に共通鍵が漏れたとしても、解読不可能なので特に問題はありません。
共通鍵を利用した双方向の暗号化の確立
共通鍵を受け取ったサーバーは、共通鍵を使ってユーザー側との双方向通信を開始します。
共通鍵で暗号化したものは同じ共通鍵でしか復号できません。
そして、公開鍵暗号によって安全に共通鍵の交換を行ったため、共通鍵を所持しているのはユーザーとサーバーだけです。
このように、SSL/TLSでは、公開鍵暗号を利用して安全に共通鍵の交換を行い、最終的には共通鍵暗号によって、安全な暗号化通信を行います。
まとめ
ここまで、SSL/TLSの動作について紹介してきました。
ポイントは、公開鍵暗号と共通鍵暗号のメリットを生かしたハイブリッドな暗号化方式を採用していることです。
なお、本文中にも書きましたが、SSL/TLSの暗号化については、通信経路の暗号化しか視野に入っていません。
接続する相手が本当に安全なのかは、ユーザー側が公開鍵を受け取った段階で、認証局(CA)に問い合わせます。
よって、暗号化されているとはいっても、通信相手が安全であることまでは保障されないので注意してください。
また、最近ではLet’s Encryptのような無料のSSL証明書(当サイトも利用中)も登場しています。
無料で手軽なSSLが増える一方、詐欺集団にも悪用されやすい傾向があるので、SSL化されているサイトが安全だという考えは、一昔前の考えであると認識した方がいいでしょう。
余談ですが、Let’s Encryptはドメイン認証と言って、証明書の発行に関してほとんど審査がありません。
この背景としては、SSL/TLSの暗号化だけに着目し、インターネットの世界でプライバシー保護や盗聴などのサイバー犯罪を防止することを目的に、暗号化通信が世界に浸透することを目的としているからです。
つまり、Let’s Encryptのような無料SSLでは、暗号化だけに着目しており、サイトの健全性を証明する証明書という意味では、ほとんど機能していません。
銀行などの金融機関のサイトを見ると、有料のSSL証明書を導入している企業も多く、そういった証明書は実在の有無なども詳細に審査されており、サイバー空間と現実空間の一致性を保つような工夫が行われています。
なお、こうした有力なSSL証明書は審査基準が厳しい他、審査に関しての人件費が発生するために料金も高額です。
導入障壁が高いので、一般的には詐欺サイトには利用されにくい傾向があります。
以上、SSL/TLSの暗号化手順について、参考になれば幸いです。