「マイクロソフト系技術情報 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プロトコル | 
| トランスポート層 | 
| ... | 
 
プロトコル  †
- セッション確立のハンド・シェイク
 
- セッションの下位にコネクションがある。
 
- 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))が行われる。
 
- 暗号化されたデータを送信する。
 
 
- レコード・イメージ
色付き部分が暗号化部分
| タイプ | バージョン情報 | データ長 | 
| データ長 |  | 
| 通信データ | 
 |   | 
| HMAC | 
 | パディング | パディング長 | 
 
用語解説  †
セッションとコネクション  †
- セッション
- 共通鍵生成までのネゴシエーションのこと(仮想的概念)。
 
- 特に負荷が高いのは鍵交換処理(プリマスタシークレットの生成まで)
 
 
- コネクション
- 実際のTCP/IPコネクションで、セッションは共有する。
 
- ただし、コネクション毎、別々に暗号化/復号化パラメタを生成する。
 
 
プリマスタシークレットとマスタシークレット  †
- 以下にPRF演算を施したもの。
- プリマスタシークレット
 
- サーバランダム
 
- クライアントランダム
 
 
- さらにPRFを行って暗号化/復号化に使用するパラメタを生成
(生成したキー・ブロックから順次切り出す)
(それぞれ、クライアント用とサーバ用がある)
- MACシークレット
 
- 暗号化キー
 
- 初期ベクタ(IV)
 
 
- ランダム
Helloに含まれる
- クライアントランダム(Client Hello)
 
- サーバランダム(Server Hello)
 
 
脆弱性  †
中間者攻撃  †
基本的に、相互に信頼された認証局を使用することで、
(ルート証明書を信頼されたルート証明機関に追加し、
証明書の証明書チェーンをチェックする仕組みを使用する)
サーバ / クライアントを認証できるので中間者攻撃から守られる。
HTTP化  †
WebサーバがHTTPSを強制していても、中間者攻撃が介入することで、
WebプラウザがHTTPで接続してしまい、そこをキャプチャされれば盗聴される。
リダイレクト  †
- HTTPでアクセスされた場合、強制的にHTTPSにリダイレクトする。
 
- ただ、このリダイレクトの前のHTTPアクセスにMITMの攻撃の可能性がある。
 
HSTS  †
HSTS : HTTP Strict Transport Security
- 最初にHTTPでアクセスした時点での攻撃を防ぐ。
- Cookieを傍受し個人情情報を収集する。
 
- フィッシングサイトへHTTPアクセスする。
 
 
- だたし、HSTSでも、初回のHTTPアクセスにMITMの攻撃の可能性がある。
 
ダウングレード攻撃  †
バージョンロールバック攻撃  †
- Snap Startで、低いバージョンでTLS/SSL接続を行うよう仕向ける。
 
- Helloを改ざんし、より低い暗号強度のアルゴリズムを使用するよう仕向ける。
 
FREAK  †
- FREAK : Factoring attack on RSA-EXPORT Keys
 
- SSL/TLSの脆弱性を突いたセキュリティ・エクスプロイト
 
- RSA公開鍵を素因数分解することが可能であれば中間者攻撃が成立する。
 
- 「アメリカ合衆国からの暗号の輸出規制」により導入された
弱い暗号(規制を回避するための512ビットのRSA鍵) 
- サーバ側・クライアント側の不適切な実装
(512ビット以下のRSA鍵を受け入れてしまう) 
Logjam  †
- FREAKと同様に輸出用の512ビットの一時鍵を受け入れてしまう。
 
- しかし、こちらは、FREAKと異なり、TLSプロトコル自体の脆弱性。
 
パディングオラクル攻撃  †
Lucky Thirteen  †
POODLE  †
- POODLE : Padding Oracle On Downgraded Legacy Encryption
- ブロック暗号をCBCモードで使用した際にパディング・オラクル攻撃が可能となるもの。
 
- 平均してわずか256回のリクエストで暗号文の1バイトの解読が可能となる。
 
 
- 対処法は、
- クライアント、サーバのどちらかでSSL 3.0を無効化する。
 
- クライアント側とサーバ側でTLS_FALLBACK_SCSV対応を行う(ダウングレードを抑止する)。
 
 
実装上の脆弱性  †
Heartbleed  †
- OpenSSLライブラリのバージョン1.0.1 - 1.0.1f
の間で発見された深刻なセキュリティ脆弱性 
脆弱なソフトウェア  †
ガラケーやスマホ、タブレット、そのアプリケーションに
証明書のチェックが適切に行われていないものがあるらしい。
- OS標準の証明書ストアの利用
 
- 失効のチェック
 
- 証明書チェーンのチェック
 
- クライアントAPIの使用方法
 
参考  †
参考  †
Qiita  †
Tags: :IT国際標準, :セキュリティ, :暗号化, :インフラストラクチャ, :通信技術, :Windows, :IIS