情報セキュリティスペシャリスト
情報技術者試験まとめへ

通信の暗号化(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」で表される
【特徴】

【目的】

SSLとは
Webサーバとのやりとりを暗号化してくれるもの。
●やりとりを盗聴されていないこと
●相手が偽物ではないこと
●やりとりを誰かが改ざんしていないこと
を証明してくれる

≪SSLの証明書≫

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プロトコルから構成される

SSL/TLSを構成するプロトコルの概要
プロトコル名概要
Recordプロトコル上位層からのデータをブロックに分割し、圧縮、MAC生成、暗号化処理を行って送信する。データ受信の際は、複合、MAC検証、伸張処理を行って上位層に引き渡す。
Handshakeプロトコル新たなセッションの確立、既存のセッションの再開の際に暗号化アルゴリズム、鍵、デジタル証明書などの通信に必要なパラメータを決定する
Change Cipher Specプロトコルパラメータの変更などを通信相手に通知するために用いる
Alertプロトコル通信中に発生したイベントやエラーを通信相手に通知する。Warning(警告)とFatal(致命的)がある
Application DataプロトコルHandshakeプロトコルによって決定したパラメータに従ってアプリケーションデータを送信する

SSL通信の流れ、通信シーケンス


日頃から何気なく使っているhttps通信。ネットサーフィンをしていると、httpなのかhttpsなのかどうかも意識しないことが多。実際には、複雑な処理が行われていが、これらの処理は自動で行われているので、私たちが意識することはない。
大雑把に言うと、
@サーバ証明書で、サーバの正当性を確認する
A証明書の公開鍵を使ってサーバとクライアントの共通鍵を作り、その鍵で暗号化通信をする。

SSL通信の流れ


@Client Hello
通信の開始をサーバに通知、クライアントが利用可能な、暗号化と圧縮のアルゴリズムの一覧を送信
AServer Hello
使用する暗号化と圧縮のアルゴリズムを決定し、クライアントに通知
BCertificate
サーバの証明書を、ルートCAまでの証明書のリスト(証明書チェーン)を含めて送信
CServer Key Exchange(省略可)
一時的なRSA鍵かDH鍵を生成し、サーバの署名をつけて送信 サーバが証明書を持たない or Certificateで送信したサーバの証明書に、鍵交換可能な公開鍵(RSAおよびDH)が含まれない場合の代替として使用
DCertificate Request(省略可)
サーバが信頼するルートCA の一覧を付与し、証明書の提示を要求(クライアントの認証を行う)
EServer Hello Done
クライアントに対して、Server Hello から始まる一連のメッセージが完了したことを通知
FCertificate (省略可)
クライアント証明書をサーバに送付。Bと同様に証明書チェーンも送信
GClient Key Exchange
暗号化に使用するセッション鍵を生成するための情報(プリマスタシークレット)を生成・暗号化、サーバに送信
※プリマスタシークレットの暗号化には、サーバの証明書に含まれる公開鍵を使用
HCertificate Verify (省略可)
クライアントは、Client Helloから直前までの受信内容のダイジェストからデジタル署名(Certificate Verify)を生成、サーバに送信
受信したサーバは、クライアントから受け取った証明書(CertificateF)を使い、署名の検証を行う(その証明書が間違いなくクライアントのものであることを確認可能)
I[Change Cipher Spec]※
クライアントは、生成したプリマスタシークレット(G)からマスタシークレットを生成、さらにマスタシークレットからセッション鍵(A)を生成。
使用する暗号アルゴリズムの準備が整ったことをサーバに通知
JFinished
鍵交換と認証処理が成功したことをサーバに通知。交換したセッション鍵を使い、メッセージを暗号化して送信。
K[Change Cipher Spec]※
サーバは、クライアントから受信した暗号化済プリマスタシークレット(G)を、自身の秘密鍵を使い復号。復号したプリマスタシークレットからマスタシークレットを生成後、マスタシークレットからセッション鍵(共通鍵)(B)を生成。(A)=(B) 使用する暗号アルゴリズムの準備が整ったことをクライアントに通知
LFinished
鍵交換と認証処理が成功したことをクライアントに通知。交換したセッション鍵を使い、メッセージを暗号化して送信。

以降は、アプリケーションのデータを、暗号化された状態で送受信する。
※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の留意点
セキュリティ的な問題がある

【対策】
 SSL-VPN製品を提供しているベンダによっては、

など、より強固なセキュリティを実現するようなオプションを用意している。

SSL-VPNは基本的にはWebアクセスを前提とした方式

リモートアクセスでメールが読みたい、という場合には、まずは社内のメールシステムをWebメール化する必要がある。
【対策】
 SSL-VPN装置を提供しているベンダによっては、

リモートアクセスには最適、でも認証にはTPOが必要
SSL-VPNのポイント!

SSLをベースとしたVPN

導入時には本人認証/端末認証も忘れずに

 

ページトップへ 次へ