通信の暗号化(3)
AAL/TLS
SSL/TLSとは
SSL(Secure Socket Layer)
Netscape社が開発した暗号化の仕組み
Web(SSL)サーバとブラウザ間でデータを暗号化して転送する場合に使用することができるプロトコル。
SSL/TLSによって確立されるセキュアな通信経路上でHTTP通信を行う仕組みが「HTTP over SSL」「HTTP over TLS」(両者をまとめて「HTTP over SSL/TLS」)であり、URIスキーム「https」で表される
【特徴】
- アプリケーション層とトランスポート層の間で暗号化が行われる
- デジタル証明書(公開鍵証明書)を用いてサーバ、クライアントの正当性を相互に認証する
(通常、一般的なサイトではサーバ認証のみ) - SMTP、FTP、Telnet、POP3、IMAP4など、多くのTCP/IPアプリケーションに対応している
- MACによるメッセージ認証を行う
【目的】
- 盗聴の防止:公開鍵暗号方式と共通鍵暗号方式を組み合わせて実現される。
- なりすまし防止:サーバ認証とクライアント認証によって行われる。
- 改ざんの防止:送受信されるメッセージの改ざん検知は、メッセージの中に
埋め込まれる、MAC(Message Authentication Code)を基に行われる。
SSLとは Webサーバとのやりとりを暗号化してくれるもの。 ●やりとりを盗聴されていないこと ●相手が偽物ではないこと ●やりとりを誰かが改ざんしていないこと を証明してくれる |
httpsによる暗号化通信が行われているGoogle検索画面ですの鍵マークをクリックした状態ですが、このように、Webサイトの証明書が利用されている。
SSLとTLS
SSLとTLSの違いは?
SSL(Secure Sockets Layer)は、ネットスケープコミュニケーションズ社が開発したプロトコル。それをRFCとして標準化するとともに、機能を付加したものがTLS(Transport Layer Security)。両者の互換性はない
しかし、2014年にSSLv3に重大な脆弱性が見つかり、今後、主軸はTLSになるが、SSLという名称が広まっているため、SSLと表現しながら、実際にはTLSを使用しているという状態になるだろう
SSLとTLSのポート番号
プロトコルによってポート番号は変わる
https(HTTP over SSL/TLS):SSLでもTLSでもどちらもポート番号は443
POP3S(POP3 over SSL) のポート番号は、995
SSL/TLSのプロトコル構造
トランスポート層とアプリケーション層の間に位置づけられる。内部のプロトコル構造は下位層のRecordプロトコルと上位層のHandshakeプロトコル、ChangeChipherSpecプロトコル、Alertプロトコル、Applicationプロトコルから構成される
プロトコル名 | 概要 |
---|---|
Recordプロトコル | 上位層からのデータをブロックに分割し、圧縮、MAC生成、暗号化処理を行って送信する。データ受信の際は、複合、MAC検証、伸張処理を行って上位層に引き渡す。 |
Handshakeプロトコル | 新たなセッションの確立、既存のセッションの再開の際に暗号化アルゴリズム、鍵、デジタル証明書などの通信に必要なパラメータを決定する |
Change Cipher Specプロトコル | パラメータの変更などを通信相手に通知するために用いる |
Alertプロトコル | 通信中に発生したイベントやエラーを通信相手に通知する。Warning(警告)とFatal(致命的)がある |
Application Dataプロトコル | Handshakeプロトコルによって決定したパラメータに従ってアプリケーションデータを送信する |
SSL通信の流れ、通信シーケンス
日頃から何気なく使っているhttps通信。ネットサーフィンをしていると、httpなのかhttpsなのかどうかも意識しないことが多。実際には、複雑な処理が行われていが、これらの処理は自動で行われているので、私たちが意識することはない。
大雑把に言うと、
@サーバ証明書で、サーバの正当性を確認する
A証明書の公開鍵を使ってサーバとクライアントの共通鍵を作り、その鍵で暗号化通信をする。
SSL通信の流れ
@ | Client Hello |
通信の開始をサーバに通知、クライアントが利用可能な、暗号化と圧縮のアルゴリズムの一覧を送信 | |
A | Server Hello |
使用する暗号化と圧縮のアルゴリズムを決定し、クライアントに通知 | |
B | Certificate |
サーバの証明書を、ルートCAまでの証明書のリスト(証明書チェーン)を含めて送信 | |
C | Server Key Exchange(省略可) |
一時的なRSA鍵かDH鍵を生成し、サーバの署名をつけて送信 サーバが証明書を持たない or Certificateで送信したサーバの証明書に、鍵交換可能な公開鍵(RSAおよびDH)が含まれない場合の代替として使用 | |
D | Certificate Request(省略可) |
サーバが信頼するルートCA の一覧を付与し、証明書の提示を要求(クライアントの認証を行う) | |
E | Server Hello Done |
クライアントに対して、Server Hello から始まる一連のメッセージが完了したことを通知 | |
F | Certificate (省略可) |
クライアント証明書をサーバに送付。Bと同様に証明書チェーンも送信 | |
G | Client Key Exchange |
暗号化に使用するセッション鍵を生成するための情報(プリマスタシークレット)を生成・暗号化、サーバに送信 ※プリマスタシークレットの暗号化には、サーバの証明書に含まれる公開鍵を使用 | |
H | Certificate Verify (省略可) |
クライアントは、Client Helloから直前までの受信内容のダイジェストからデジタル署名(Certificate Verify)を生成、サーバに送信 受信したサーバは、クライアントから受け取った証明書(CertificateF)を使い、署名の検証を行う(その証明書が間違いなくクライアントのものであることを確認可能) | |
I | [Change Cipher Spec]※ |
クライアントは、生成したプリマスタシークレット(G)からマスタシークレットを生成、さらにマスタシークレットからセッション鍵(A)を生成。 使用する暗号アルゴリズムの準備が整ったことをサーバに通知 | |
J | Finished |
鍵交換と認証処理が成功したことをサーバに通知。交換したセッション鍵を使い、メッセージを暗号化して送信。 | |
K | [Change Cipher Spec]※ |
サーバは、クライアントから受信した暗号化済プリマスタシークレット(G)を、自身の秘密鍵を使い復号。復号したプリマスタシークレットからマスタシークレットを生成後、マスタシークレットからセッション鍵(共通鍵)(B)を生成。(A)=(B) 使用する暗号アルゴリズムの準備が整ったことをクライアントに通知 | |
L | Finished |
鍵交換と認証処理が成功したことをクライアントに通知。交換したセッション鍵を使い、メッセージを暗号化して送信。 |
以降は、アプリケーションのデータを、暗号化された状態で送受信する。
※Change Cipher Spec は、ハンドシェイクプロトコルの一部ではなく、独立したプロトコル(Change Cipher Spec Protocol)となっている。
SSL/TLSにおける鍵生成及び送信データ処理
鍵生成の仕組み
I、K におけるマスタシークレットからの鍵生成は、レコードプロトコルにおいて行われる。レコードプロトコルでは、ハンドシェイクプロトコルから受け取ったマスタシークレットから、完全性の確認に用いる MAC 鍵、暗号化に用いるセッション鍵、ブロック暗号方式の CBC モードで使用する初期ベクトル(IV)を生成する。鍵を生成するための演算処理には、PRF(Pseudo-Random Function:疑似乱数関数)を使用する。
Recordプロトコルが行う処理の概要
RecordプロトコルはSSL/TLSのセッション及びコネクションの確立プロセスにおいて、マスタシークレットから鍵やIVを生成する処理を行うほか、確立したコネクションを通じて実際にデータを送受信する際には、以下のような処理を行う
データ送信時
アプリケーションからのデータを214バイト以下のブロックに分割し、圧縮、HMACの生成、暗号化の処理を行ってSSL/LTSレコードに加工し、下位層のプロトコルに引き渡す。
データ受信時
下位層から受け取ったデータに対し、復号、HMACの検証、伸張の処理を行って上位層に引き渡す。
SSL-VPN(SSLによるインターネットVPN)
VPNとは
従来専用線でないとセキュリティ的に問題があるような拠点間通信などを、一般的なインターネットを通じて通信ができるように、通信経路の暗号化を行うもの
SSL-VPNの概要
SSL-VPNの動作は、外部と内部を取り持つリバースプロキシのような動作をする。外部からのアクセスをSSL-VPNサーバが受け取り、そのアクセスが認証されたものであるかを判断して、内部のサーバへ新たにセッションを作成する。クライアントから見ると、単に特定のサーバにSSL(https)で接続する、というシンプルなものになり、特別なソフトウェアをインストールしなくても、SSLが使えるブラウザであれば利用が可能。
SSL-VPNの特長
- SSL-VPNはセッション層でコントロールするため、IPsecとは異なりNATが利用されている場合でもセッションが確立可能。
- URLと認証情報を組み合わせて判断が可能なので、ユーザごとにどこまでの情報を見せていいのかを柔軟にコントロールできる。
【例】
ユーザ[社長]がhttps://@ITcompany.co.jp/マル秘書類/にアクセスした場合には許可
ユーザ[ゲスト]がhttps://@ITcompany.co.jp/マル秘書類/にアクセスした場合は不許可
となるように設定可能。 - SSL-VPNはSSL(https)と同じポート443番を利用して通信を行う。このポートはファイアウォールでも開放されていることが多いため、SSL-VPNを利用して社内のWebにアクセスする場合、ファイアウォールの設定を変更しなくても利用可能。
- クライアント側の最低条件はブラウザでSSLが利用できること。そのため、共用のクライアントPCでもブラウザさえあれば何もインストールすることなく社内のサーバにアクセスが可能。
SSL-VPNの留意点
セキュリティ的な問題がある
- 共用のクライアントPCでも社内のネットワークに入れてしまう
- 不特定多数の利用者のいるクライアントPCでは、ブラウザのキャッシュから大事な情報が漏れてしまう危険性がある
【対策】
SSL-VPN製品を提供しているベンダによっては、
- ブラウザのキャッシュに情報を残さないように制御する機能
- クライアントが適切にアップデートされているかを確認する機能
- インターネットではなく電話回線を利用してパスワードを入力させることで本人認証を行う
など、より強固なセキュリティを実現するようなオプションを用意している。
SSL-VPNは基本的にはWebアクセスを前提とした方式
リモートアクセスでメールが読みたい、という場合には、まずは社内のメールシステムをWebメール化する必要がある。
【対策】
SSL-VPN装置を提供しているベンダによっては、
- 専用のクライアントソフトを導入し、SSLトンネルによる通信を利用する方法を提供
- クライアントレスにはならないが、ベンダ各社はJavaアプレットやActiveXを利用して、クライアントソフト導入のハードルを低くしている。
リモートアクセスには最適、でも認証にはTPOが必要
- インターネットの世界で実績のあるSSLを利用し、多くのブラウザで利用が可能な手法で、クライアントソフトが不要なことから、リモートアクセスでの用途に向いた手法。
- SSL-VPNを導入時に、リモートアクセスを希望するユーザに対して、何をどこまで見せていいのかをきっちり定義することが必要。
SSL-VPNのポイント!
SSLをベースとしたVPN
- SSLが使えるブラウザがあれば、PDAや携帯でも利用可能
- クライアントソフトをインストールすることなく利用でき、メンテナンス/運用コストを抑えることが可能
- 基本的にはブラウザで見られるものが対象だが、ベンダによっては、トンネル化ソフトが提供されWebアプリケーション以外のソフトも利用可能
- ファイアウォールやNATの影響は少ないため、導入が簡単
導入時には本人認証/端末認証も忘れずに
- どんなPCでも接続ができてしまうので、本人認証の方法を検討することが必要
- Webベースなので、キャッシュや履歴に対するコントロールを考える必要がある
 

