「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
- デジタル証明書を使用してエンドポイントを証明し通信の暗号化を行う。
- エンドポイントには、クライアント、サーバなどがあり、
対応する証明書にクライアント証明書、サーバ証明書がある。
- しかし、ICカードなどに格納して、
特定のマシンに限定しない使用方法もある。
経緯 †
歴史的経緯について。
SSL †
- Netscape Communications社が開発した。
- 標準化はされていない。
- 歴史的文書と言う形で後日、RFCが公開された。
TLS †
- SSL3.0を標準化したもの。
- SSLを継承するものと言う位置付け。
脆弱性 †
- SSLの全バージョンと
- TLSの1.0と1.1の実装の一部には
脆弱性が発見され、TLS1.2以上への移行が促されている。
X over SSL/TLS †
SSL/TLSはアプリケーション層とトランスポート層のプロトコルなので、
アプリケーション層プロトコルへ多数、適用がされている。
HTTPS †
- HTTPS over SSL/TLS
- SSL/TLSの最も多いユースケース
- HTTPの下位スタックにSSL/TLSを使用する。
その他 †
- SMTPS(SMTP)
- LDAPS(LDAP)
- FTPS(FTP)
- IMAPS(IMAP)
- POP3S(POP3)
機能 †
証明 †
サーバー証明書やクライアント証明書を用い、
サーバー認証やクライアント認証を行う。
暗号化 †
上記の証明書を使用して鍵の生成と交換を行い暗号化通信を行う。
メッセージ認証 †
MACによるメッセージ認証を行う。
詳細 †
プロトコル構造 †
スタック †
アプリケーション層 |
Hand Shakeプロトコル | Change Cipher Specプロトコル | Alertプロトコル | Application Dataプロトコル |
Recordプロトコル |
トランスポート層 |
... |
プロトコル †
- Hand Shakeプロトコル
- ネゴシエーション
- セッション確立のハンド・シェイク
- Change Cipher Specプロトコル
- 暗号化に関するパラメタの決定
- 若しくは、パラメタの変更通知
- Alertプロトコル
通信中に発生したエラーを相手に通知する。
- Application Dataプロトコル
ネゴシエーションのパラメタに従い、透過的に送受信
- Recordプロトコル
- ブロック暗号化されたペイロード部分
- 2^14バイト以下のブロックに分割される。
- 圧縮、MACの生成、暗号化が行われる。
シーケンス †
コネクション確立 †
- プロトコル
- Hand Shakeプロトコル
- Change Cipher Specプロトコル
- Alertプロトコル
- Application Dataプロトコル
# | クライアント | 方向 | サーバ | 説明 |
1 | | ← | Hello Request | Client Helloをリクエスト |
2 | Client Hello | → | | Client Helloをレスポンス(暗号化/圧縮アルゴリズムの一覧) |
3 | | ← | Server Hello | Client Helloに対するServer Hello(暗号化/圧縮アルゴリズムの選択) |
4 | | ← | Server Certificate | サーバ証明書を送信(証明書チェーンを含む) |
5 | | ← | Server Key Exchange | 鍵交換メッセージその1(RSAかDHで) |
6 | | ← | Certificate Request | クライアント証明書を要求 |
7 | | ← | Server Hello Done | サーバからの送信終了を示すエンドマーク |
8 | Client Certificate | → | | クライアント証明書を送信 |
9 | Client Key Exchange | → | | 鍵交換メッセージその2(その1の続き) |
10 | Certificate Verify | → | | クライアントが正しい秘密鍵を持っていることを 証明するための署名を送付(サーバの公開鍵で検証) |
11 | Change Cipher Spec | → | | 無暗号通信の終了を示すエンドマーク (共通鍵から暗号化/復号化に使用するパラメタを生成) |
12 | Finished | → | | Client Hello からのメッセージを暗号化して送信 |
13 | | ← | Change Cipher Spec | 無暗号通信の終了を示すエンドマーク (共通鍵から暗号化/復号化に使用するパラメタを生成) |
14 | | ← | Finished | Server Helloからのメッセージを暗号化して送信 |
15 | Application Data | ⇔ | Application Data | 暗号通信 |
データ送受信 †
- 暗号化
- データを2^14バイト以下のブロックに分割
- 分割されたブロックを圧縮
- HMAC(MACシークレット)によるMACの生成
- 連結とパディング
- 暗号化(暗号化キー+初期ベクタ(IV))が行われる。
- 暗号化されたデータを送信する。
用語解説 †
セッションとコネクション †
- セッション
- 共通鍵生成までのネゴシエーションのこと(仮想的概念)。
- 特に負荷が高いのは鍵交換処理(プリマスタシークレットの生成まで)
- コネクション
- 実際のTCP/IPコネクションで、セッションは共有する。
- ただし、コネクション毎、別々に暗号化/復号化パラメタを生成する。
プリマスタシークレットとマスタシークレット †
- 以下にPRF演算を施したもの。
- プリマスタシークレット
- サーバランダム
- クライアントランダム
- さらにPRFを行って暗号化/復号化に使用するパラメタを生成
(生成したキー・ブロックから順次切り出す)
(それぞれ、クライアント用とサーバ用がある)
- MACシークレット
- 暗号化キー
- 初期ベクタ(IV)
- ランダム
Helloに含まれる
- クライアントランダム(Client Hello)
- サーバランダム(Server Hello)
脆弱性 †
バージョンロールバック攻撃 †
Heartbleed †
POODLE †
FREAK †
参考 †
参考 †
Qiita †
Tags: :IT国際標準, :セキュリティ, :暗号化, :インフラストラクチャ, :通信技術, :Windows, :IIS