第1章 セキュリティの概要 |
1.1 はじめに 2 |
1.2 インターネット脅威モデル 2 |
1.3 登場人物について 4 |
1.4 セキュリティ技術が目指すこと 4 |
1.4.1 機密性 4 |
1.4.2 メッセージ完全性 4 |
1.4.3 エンドポイント真正性 5 |
1.4.4 実社会での例 5 |
1.5 セキュリティ確保のための道具 7 |
1.5.1 暗号化 7 |
1.5.2 メッセージダイジェスト 9 |
1.5.3 MAC 10 |
1.5.4 鍵の管理問題 10 |
1.5.5 鍵の配布 10 |
1.5.6 公開鍵暗号化方式 11 |
1.5.7 証明 12 |
1.5.8 識別名 14 |
1.5.9 拡張 15 |
1.5.10 証明書の失効 15 |
1.5.11 ASN.1・BER・DER 16 |
1.6 組み合わせて使用 17 |
1.7 シンプルなセキュアメッセージングシステム 18 |
1.8 安全でシンプルな通信路 20 |
1.8.1 簡単なハンドシエイク 21 |
1.8.2 簡単なデータ転送プロトコル 22 |
1.8.3 鍵の作成 23 |
1.8.4 データレコード 23 |
1.8.5 シーケンス番号 25 |
1.8.6 制御情報 26 |
1.8.7 ここまでのまとめ 27 |
1.9 輸出状況 28 |
1.9.1 石器時代 28 |
1.9.2 中世 29 |
1.9.3 現代 29 |
1.10 暗号技術に関するアルゴリズムの実際 30 |
1.11 共通鍵暗号化方式(ストリーム暗号) 30 |
1.11.1 RC4 32 |
1.12 共通鍵暗号化方式(ブロック暗号) 32 |
1.12.1 DES 34 |
1.12.2 3DES 35 |
1.12.3 HC2 36 |
1.12.4 AES 37 |
1.12.5 ここまでのまとめ 37 |
1.13 ダイジェストアルゴリズム 38 |
1.14 鍵の確立 39 |
1.14.1 RSA 39 |
1.14.2 DH 41 |
1.15 電子署名 43 |
1.15.1 RSA 43 |
1.15.2 DSS 43 |
1.15.3 ここまでのまとめ 44 |
1.16 MAC 46 |
1.17 鍵長 46 |
1.17.1 共通鍵暗号化アルコリズム 47 |
1.17.2 公開鍵暗号化アルゴリズム 47 |
1.18 まとめ 48 |
第2章 SSLの概要 |
2.1 はじめに 52 |
2.2 標準と標準化団体 52 |
2.3 SSLの概要 53 |
2.4 SSL/TLSの設計目標 54 |
2.4.1 SSLv2の設計目標 54 |
2.4.2 SSLv3の設計目標 55 |
2.5 SSLとTCP/IPプロトコルスイート 55 |
2.6 SSLの歴史 57 |
2.6.1 PCT 57 |
2.6.2 SSLv3 58 |
2.6.3 TLS 59 |
2.7 WebのためのSSL 62 |
2.8 SSL上でのプロトコル 63 |
2.9 SSLの入手 64 |
2.9.1 実装の内容 65 |
2.10 まとめ 66 |
第3章 SSLの基礎的な技術 |
3.1 はじめに 68 |
3.2 SSLの概要 68 |
3.3 HandShake 69 |
3.3.1 Handshakeメッセージ 71 |
3.4 SSLRecordプロトコル 72 |
3.4.1 Recordヘッダ 72 |
3.4.2 コンテントタイプ 73 |
3.5 部品の組み立て 74 |
3.6 接続の実際 75 |
3.7 接続の詳細 77 |
3.8 SSLの仕様記述言語 79 |
3.8.1 基本型 79 |
3.8.2 ベクタ型 79 |
3.8.3 列挙型 80 |
3.8.4 構造体型 81 |
3.8.5 バリアント型 81 |
3.9 Handshakeメッセージの構造 82 |
3.10 Handshakeメッセージ 83 |
3.10.1 ClientHelloメッセージ 83 |
3.10.2 ServerHelloメッセージ 87 |
3.10.3 Certificateメッセージ 88 |
3.10.4 ServerHelloDoneメッセージ 90 |
3.10.5 ClientKeyExchangeメッセージ 90 |
3.10.6 ChangeCipherSpecメッセージ 92 |
3.10.7 Finishedメッセージ 93 |
3.10.8 Finishedメッセージ処理のプログラミング上の注意 94 |
3.11 鍵の生成 96 |
3.11.1 PRF 96 |
3.11.2 輸出可能なアルゴリズム 98 |
3.11.3 SSLv3における鍵の生成 99 |
3.12 Recordプロトコル 100 |
3.12.1 ストリーム暗号 103 |
3.12.2 ブロック暗号 103 |
3.12.3 Null暗号 103 |
3.13 AIertと終了 104 |
3.13.1 終了 105 |
3.13.2 その他のAlert 105 |
3.14 まとめ 106 |
第4章 SSLの高度な技術 |
4.1 はじめに 108 |
4.2 セッション再開 108 |
4.2.1 セッションvs.コネクション 109 |
4.2.2 セッション再開の仕組み 109 |
4.3 クライアント認証 110 |
4.4 一時的RSA 111 |
4.5 再Handshake 112 |
4.6 Server Gated Cryptography 113 |
4.7 DSSとDH 115 |
4.8 楕円曲線暗号スイート 116 |
4.9 Kerberos 117 |
4.10 FORTEZZA 118 |
4.11 ここまでのまとめ 120 |
4.12 セッション再開の詳細 120 |
4.12.1 セッションIDの検索 121 |
4.13 クライアント認証の詳細 122 |
4.13.1 CertificateRequestメッセージ 122 |
4.13.2 Certificateメッセージ 124 |
4.13.3 CertificateVerifyメッセージ 124 |
4.13.4 エラー状況 126 |
4.14 一時的RSAの詳細 126 |
4.15 SGCの詳細 129 |
4.15.1 Step-Up 129 |
4.15.2 SGC 132 |
4.16 DH/DSSの詳細 136 |
4.16.1 ClientKeyExchangeメッセージ 137 |
4.16.2 長期的DH鍵 138 |
4.17 FORTEZZAの詳細 138 |
4.18 エラーAlert 141 |
4.19 SSLv2との下位互換性 148 |
4.19.1 バージョン 149 |
4.19.2 乱数 149 |
4.19.3 セッションID 149 |
4.19.4 暗号スイート 149 |
4.19.5 ロールバック保護 150 |
4.19.6 互換性 151 |
4.20 まとめ 151 |
第5章 SSLのセキュリティ |
5.1 はじめに 154 |
5.2 SSLの機能 154 |
5.3 master-secretの保護 155 |
5.4 サーバの秘密鍵の保譲 155 |
5.5 良質の乱数の利用 156 |
5.6 証明書チェーンの確認 157 |
5.7 アルゴリズムの選択 158 |
5.8 ここまでのまとめ 158 |
5.9 master-secretの危殆化 159 |
5.9.1 機密性に対する攻撃 160 |
5.9.2 完全性に対する攻撃 160 |
5.9.3 ここまでのまとめ 161 |
5.10 メモリ内の秘密情報の保護 161 |
5.10.1 ディスクストレージ 162 |
5.10.2 メモリのロック 162 |
5.10.3 コアダンプ 162 |
5.11 サーバの秘密鍵のセキュリティ 163 |
5.11.1 長期的な鍵 163 |
5.11.2 一時的な鍵 163 |
5.11.3 秘密鍵の保存 165 |
5.11.4 パスワードに基づく暗号化 166 |
5.11.5 ストレージを使用しない鍵の復元 168 |
5.11.6 ハードウエアを用いた暗号 168 |
5.11.7 パスフレーズの入力 170 |
5.11.8 バイオメトリクス 170 |
5.11.9 結論 171 |
5.12 乱数生成 171 |
5.12.1 疑似乱数生成器 172 |
5.12.2 ハードウエアの乱数生成器 173 |
5.13 証明書チェーンの検証 174 |
5.13.1 サーバの本人性 174 |
5.13.2 クライアントの本人性 175 |
5.13.3 ルートの選択 175 |
5.13.4 証明書チエーンの深さ 176 |
5.13.5 KeyUsage拡張領域 178 |
5.13.6 その他の証明書の拡張領域 179 |
5.1 部分的な危殆化 180 |
5.14.1 電子署名アルゴリズム 181 |
5.14.2 鍵確立アルゴリズム 181 |
5.14.3 失効 182 |
5.14.4 暗号化アルゴリズム 182 |
5.14.5 ダイジェストアルゴリズム 183 |
5.14.6 最弱のリンクの原則 184 |
5.15 既知の攻撃手法 185 |
5.16 タイミング暗号解析 185 |
5.16.1 攻撃の概要 185 |
5.16.2 適用の可能性 186 |
5.16.3 対策 187 |
5.17 ミリオンメッセージ攻撃 187 |
5.17.1 攻撃の概要 187 |
5.17.2 適用の可能性 188 |
5.17.3 対策 189 |
5.18 小さな部分群攻撃 189 |
5.18.1 攻撃の概要 189 |
5.18.2 適用の可能性 190 |
5.18.3 対策 190 |
5.19 輸出方式へのダウングレード 191 |
5.19.1 攻撃の概要 191 |
5.19.2 適用の可能性 191 |
5.19.3 対策 192 |
5.19.4 類似の攻撃手口 192 |
5.20 まとめ 193 |
第6章 SSLのパフォーマンス |
6.1 はじめに 196 |
6.2 SSLは遅い 196 |
6.3 パフォーマンスに関する原則 197 |
6.3.1 Amdahlの法則 197 |
6.3.2 90/10の法則 198 |
6.3.3 I/Oのコスト 198 |
6.3.4 遅延vs.スループット 199 |
6.3.5 サーバvs.クライアント 200 |
6.4 暗号技術に関する処理は高コスト 201 |
6.4.1 サーバのHandshake 201 |
6.4.2 クライアントのHandshake 201 |
6.4.3 ボトルネック 202 |
6.4.4 データ転送 202 |
6.5 セッション再開 203 |
6.5.1 セッション再開のコスト 203 |
6.6 Handshakeのアルゴリズムと鍵選択 204 |
6.6.1 RSA vs. DSA 204 |
6.6.2 高速か強度かの選択 205 |
6.6.3 一時的RSA 205 |
6.7 バルクデータの転送 206 |
6.7.1 アルゴリズムの選択 206 |
6.7.2 最適なレコードサイズ 206 |
6.8 SSLのパフォーマンスに関する基本方針 206 |
6.9 ここまでのまとめ 207 |
6.10 Handshakeの時間配分 207 |
6.10.1 テスト環境 207 |
6.10.2 並列処理 208 |
6.11 通常のRSAモード 209 |
6.11.1 Ce1ificateメッセージ(クライアント) 210 |
6.11.2 ClientKeyExchangeメッセージ(クライアント) 211 |
6.11.3 ClientKeyExchangeメッセージ(サーバ) 211 |
6.12 クライアント認証を伴うRSAモード 211 |
6.13 一時的RSA 213 |
6.13.1 ServerKeyExchangeメッセージ(サーバ) 213 |
6.13.2 ServerKeyExchangeメッセージ(クライアント) 214 |
6.13.3 ClientKeyExchangeメッセージ(クライアント) 214 |
6.13.4 ClientKeyExchangeメッセージ(サーバ) 214 |
6.14 DHE/DSS 215 |
6.14.1 ServerKeyExchangeメッセージ(サーバ) 215 |
6.14.2 certificateメッセージ(クライアント) 216 |
6.14.3 ServerKeyExchangeメッセージ(クライアント) 216 |
6.14.4 ClientKeyExchangeメッセージ(クライアント) 216 |
6.14.5 ClientKeyExchangeメッセージ(サーバ) 217 |
6.15 クライアント認証を伴うDHE/DSS 217 |
6.16 DHによるパフォーマンスの向上 218 |
6.16.1 小さな秘密鍵の使用 218 |
6.16.2 一時的な鍵の再利用 219 |
6.16.3 DH鍵生成のための事前計算 220 |
6.16.4 長期的DH 220 |
6.17 レコードの処理 221 |
6.17.1 アルゴリズムの選択 221 |
6.17.2 レコードの最適サイズ 222 |
6.18 Java 223 |
6.18.1 0S 223 |
6.18.2 ネイティブコードによる高速化 224 |
6.19 負荷のかかった状況におけるSSLサーバ 225 |
6.20 ハードウェアアクセラレーション 228 |
6.21 インラインハードウェアアクセラレータ 229 |
6.21.1 構成 230 |
6.21.2 複数のアクセラレータ 230 |
6.21.3 チェーン化されたアクセラレータ 231 |
6.21.4 クラスタ化されたアクセラレータ 231 |
6.22 ネットワーク遅延 233 |
6.23 Nagleアルゴリズム 236 |
6.23.1 Nagleアルゴリズムの無効化 237 |
6.23.2 正しいレイヤ 237 |
6.24 Handshakeのバッファリング 238 |
6.24.1 並列化の推進 240 |
6.25 SSLの高度な機能を利用する際のパフォーマンスの原則 241 |
6.26 まとめ 241 |
第7章 SSLを用いた設計 |
7.1 はじめに 244 |
7.2 何を守るのかを考える 244 |
7.2.1 機密性 245 |
7.2.2 メッセージ完全性 245 |
7.2.3 サーバ認証 245 |
7.2.4 クライアント認証 246 |
7.2.5 経験則 246 |
7.3 クライアント認証の方式 246 |
7.3.1 ユーザ名とパスワード 246 |
7.3.2 ユーザ名とパスワードの変形 247 |
7.3.3 SSLクライアント認証 247 |
7.3.4 経験則 247 |
7.4 参照情報における整合性 248 |
7.4.1 サーバ識別情報 248 |
7.4.2 セキュリティ特性 248 |
7.4.3 経験則 249 |
7.5 SSLに向かない処理 249 |
7.5.1 否認防止 249 |
7.5.2 エンドツーエンドのセキュリティ 250 |
7.6 プロトコルの選択 250 |
7.6.1 ポートの分離 251 |
7.6.2 上方向ネコシエーション 251 |
7.6.3 経験則 253 |
7.7 Handshakeオーバヘッドの軽減 253 |
7.8 設計戦略 253 |
7.9 ここまでのまとめ 254 |
7.10 ポートの分離 255 |
7.11 上方向ネゴシエーション 256 |
7.12 ダウングレード攻撃 257 |
7.12.1 ポートの分離 257 |
7.12.2 上方向ネゴシエーション 258 |
7.12.3 対抗策 260 |
7.13 参照情報における整合性 260 |
7.13.1 IPアドレス 261 |
7.13.2 代替DNS名 261 |
7.13.3 人間が理解できる名前 263 |
7.14 ユーザ名とパスワードを用いた認証方式 263 |
7.14.1 ユーザ名とパスワード 263 |
7.15 SSLクライアント認証 264 |
7.15.1 証明書の発行 264 |
7.15.2 アクセス制御 265 |
7.15.3 失効 266 |
7.15.4 ホスト間通信 266 |
7.16 ユーザ名とパスワードを用いた相互認証 267 |
7.16.1 man-in-the-midd1e攻撃 267 |
7.16.2 効果がないアプローチ 267 |
7.16.3 有効なアプローチ 269 |
7.16.4 能動的辞書攻撃 270 |
7.17 再Handshake 271 |
7.17.1 クライアント認証 271 |
7.17.2 暗号スイートのアップグレード 272 |
7.17.3 鍵素材の補給 272 |
7.17.4 クライアントの振る舞い 273 |
7.18 2番目の通信路 273 |
7.19 接続の終了 274 |
7.19.1 不完全な終了 274 |
7.19.2 未完遂な終了 276 |
7.20 まとめ 277 |
第8章 SSLのコーディング |
8.1 はじめに 280 |
8.2 SSLの実装 280 |
8.3 サンプルプログラム 280 |
8.3.1 プラットフォームに関する情報 281 |
8.3.2 クライアントプログラム 281 |
8.3.3 サーバプログラム 282 |
8.3.4 プログラムの振る舞い 282 |
8.3.5 プログラムの表記に関して 283 |
8.4 コンテキストの初期化 283 |
8.4.1 クライアントの初期化 284 |
8.4.2 サーバの初期化 284 |
8.4.3 初期化(Java) 285 |
8.4.4 初期化(C) 286 |
8.4.5 Cによるサンプルに共通のコード 288 |
8.4.6 サーバの初期化 289 |
8.5 クライアントの接続 289 |
8.5.1 クライアントの接続(Java) 289 |
8.5.2 クライアントの接続(C) 291 |
8.5.3 クライアントのSSL Handshake(C) 292 |
8.6 サーバでの接続の受け入れ 294 |
8.6.1 サーバでの接続の受け入れ(Java) 294 |
8.6.2 サーバでの接続の受け入れ(C) 295 |
8.7 単純なI/O処理 296 |
8.8 スレッドを使った多重化I/O 300 |
8.9 select()を使った多重化I/O 304 |
8.9.1 読み取り 304 |
8.9.2 書き込み 307 |
8.9.3 OpenSSLの書き込み処理 308 |
8.9.4 もう1つの非ブロック手法 309 |
8.9.5 select()を用いた完全な解決法 310 |
8.10 終了 312 |
8.10.1 終了(OpenSSL) 312 |
8.10.2 終了(PUreTLS) 313 |
8.11 セッション再開 315 |
8.11.1 セッション再開(Java) 315 |
8.11.2 セッション再開(C) 316 |
8.12 補足 317 |
8.12.1 より優れた証明書チェック 317 |
8.12.2 /dev/random 318 |
8.12.3 並列化処理 318 |
8.12.4 優れたエラー処理 318 |
8.13 まとめ 319 |
第9章 HTTP over SSL |
9.1 はじめに 322 |
9.2 Webを安全にする 322 |
9.2.1 基本的な技術 323 |
9.2.2 実際上の考慮事項 323 |
9.3 HTTP 325 |
9.3.1 リクエスト 325 |
9.3.2 レスポンス 326 |
9.4 HTML 328 |
9.4.1 アンカー 328 |
9.4.2 インライン画像 328 |
9.4.3 フォーム 329 |
9.4.4 動的なコンテンツ 330 |
9.5 URL 330 |
9.5.1 URLの例 331 |
9.5.2 URI vs. URL 331 |
9.6 HTTP接続の振る舞い 332 |
9.7 プロキシ 332 |
9.7.1 キャッシュプロキシ 333 |
9.7.2 ファイアウォールプロキシ 334 |
9.8 仮想ホスト 334 |
9.9 プロトコルの選択 335 |
9.10 クライアント認証 335 |
9.11 参照情報における整合性 336 |
9.11.1 接続のセマンティクス 336 |
9.12 HTTPS 337 |
9.13 HTTPSの概要 337 |
9.14 URLと参照情報における整合性 340 |
9.14.1 ダウングレード攻撃 340 |
9.14.2 エンドポイント真正性 341 |
9.14.3 失敗の際の振る舞い 342 |
9.14.4 ユーザ優先の選択 343 |
9.14.5 参照情報のソース 346 |
9.14.6 クライアントの識別情報 346 |
9.15 接続の終了 346 |
9.15.1 セッション再開 347 |
9.15.2 エラー処理 347 |
9.15.3 プログラミングエラーと思われるもの 347 |
9.15.4 強制切断攻撃 348 |
9.16 プロキシ 349 |
9.16.1 CONNECTメソッド 349 |
9.16.2 man-in-the-middleプロキシ 351 |
9.16.3 暗号スイートの変換 352 |
9.17 仮想ホスト 353 |
9.17.1 複数の名前 354 |
9.18 クライアント認証 355 |
9.18.1 パフォーマンスへの影響 358 |
9.18.2 そのほかの方法 359 |
9.19 Referrefヘッダ 360 |
9.20 置換攻撃 360 |
9.20.1 ユーザによる上書き 361 |
9.21 アップグレード 361 |
9.21.1 クライアントが要求するアップグレード 361 |
9.21.2 サーバが要求するアップグレード 362 |
9.21.3 プロキシとの相性 363 |
9.21.4 専用の参照がない 363 |
9.22 プログラミングの問題 365 |
9.23 プロキシのCONNECT 365 |
9.23.1 書き込み関数 367 |
9.23.2 読み取り関数 368 |
9.23.3 プロキシに接続する 368 |
9.23.4 リクエストを書き込む 368 |
9.23.5 レスポンスを読み取る 368 |
9.23.6 main() 368 |
9.24 複数のクライアントの処理 369 |
9.24.1 マルチプロセスサーバ 370 |
9.24.2 SSLを使用したマルチブロセスサーバ 371 |
9.24.3 SSLセッションキャッシュ 372 |
9.24.4 マルチブロセスサーバのセッションキャッシュ 373 |
9.24.5 サーバの高度な構成 374 |
9.25 まとめ 375 |
第10章 SMTP over TLS |
10.1 はじめに 378 |
10.2 インターネットメールのセキュリティ 378 |
10.2.1 基本的な技術 379 |
10.2.2 実際上の考慮事項 379 |
10.2.3 セキュリティ上の考慮事項 380 |
10.3 インターネットメールの概要 381 |
10.4 SMTP 382 |
10.5 RFC822とMIME 385 |
10.5.1 Received行 386 |
10.5.2 送信者の識別情報 386 |
10.6 電子メールアドレス 387 |
10.7 メールの中継 388 |
10.7.1 部署ごとのサーバ 388 |
10.7.2 スマートホスト 389 |
10.7.3 オープンリレー 390 |
10.8 仮想ホスト 391 |
10.9 MXレコード 391 |
10.10 クライアントからのメールアクセス 393 |
10.11 プロトコルの選択 393 |
10.12 クライアント認証 393 |
10.13 参照情報における整合性 394 |
10.14 接続のセマンティクス 394 |
10.15 STARTTLS 395 |
10.16 STARTTLSの概要 395 |
10.17 接続の終了 399 |
10.17.1 その他の状況 399 |
10.17.2 再開 399 |
10.18 TLSを要求する場合 400 |
10.18.1 送信にTLSを要求する場合 400 |
10.18.2 受信にTLSを要求する場合 400 |
10.19 仮想ホスト 401 |
10.20 セキュリティインジケータ 401 |
10.20.1 インジヶータの解釈 402 |
10.20.2 最終ホップ 402 |
10.21 認証された中継 403 |
10.22 送信元の認証 404 |
10.23 参照情報における整合性の詳細 405 |
10.23.1 安全な参照情報 405 |
10.23.2 セキュリティの強制 406 |
10.23.3 中継 vs. セキュリティ 406 |
10.24 CONNECTを使えない理由 408 |
10.24.1 技術上の問題 408 |
10.24.2 管理上の問題 409 |
10.25 STARTTLSの利点 409 |
10.25.1 パッシブ攻撃 410 |
10.25.2 送信側認証の欠如 410 |
10.26 プログラミングの問題 411 |
10.27 STARTTLSの実装 411 |
10.27.1 状態 411 |
10.27.2 ネットワークアクセス 411 |
10.28 サーバの起動 412 |
10.28.1 錠素材 413 |
10.28.2 高速な初期化 413 |
10.29 まとめ 414 |
第11章 さまざまな手法との比較 |
11.1 はじめに 416 |
11.2 エンドツーエンド通信の特性 416 |
11.3 エンドツーエンドの議論とSMTP 417 |
11.3.1 最終ホップ配送 417 |
11.3.2 中継 418 |
11.3.3 エンドツーエンドによる解決策 418 |
11.4 その他のプロトコル 418 |
11.5 IPsec 419 |
11.5.1 注釈 420 |
11.6 Security Association 420 |
11.7 ISAKMPとIKE 420 |
11.7.1 識別情報の保護 421 |
11.7.2 2つのフェーズによる処理 422 |
11.7.3 ISAKMPの転送 423 |
11.8 AHとESP 423 |
11.8.1 AH 423 |
11.8.2 ESP 424 |
11.8.3 トンネルモード 424 |
11.9 IPsecの全体像 425 |
11.9.1 ポリシー 425 |
11.10 IPsec vs. SSL 426 |
11.10.1 エンドポイント真正性 427 |
11.10.2 中間媒体 427 |
11.10.3 仮想ホスト 427 |
11.10.4 NAT 428 |
11.10.5 結論 428 |
11.11 SecureHTTP 429 |
11.11.1 メッセージ形式 430 |
11.11.2 暗号化オプション 430 |
11.11.3 注釈 430 |
11.12 CMS 431 |
11.12.1 SignedData 431 |
11.12.2 EnvelopedData 431 |
11.12.3 署名と暗号化 432 |
11.13 メッセージ形式 432 |
11.14 暗号技術に関するオプション 433 |
11.14.1 鍵素材 433 |
11.14.2 ネゴシエーションヘッダ 434 |
11.15 S-HTTPの全体像 435 |
11.15.1 クライアント認証 437 |
11.15.2 参照'青報における整合性 437 |
11.15.3 自動オプション生成 438 |
11.15.4 ステートレスな操作 438 |
11.16 S-HTTPVS vs. HTTPS 439 |
11.16.1 柔軟性 439 |
11.16.2 否認防止 440 |
11.16.3 プロキシ 440 |
11.16.4 仮想ホスト 440 |
11.16.5 ユーザにとっての使い勝手 441 |
11.16.6 実装の容易さ 441 |
11.16.7 結論 442 |
11.17 S/MIME 443 |
11.17.1 注釈 443 |
11.18 基本的なS/MIME形式 444 |
11.19 署名のみ 444 |
11.19.1 multipart/signed 445 |
11.19.2 S/MIMEとS-HTTP 446 |
11.20 アルゴリズムの選択 446 |
11.20.1 能力属性 446 |
11.20.2 アルゴリズムの選択 447 |
11.20.3 能力属性ディスカバリー 447 |
11.21 S/MIMEの全体像 448 |
11.21.1 エンドポイントの識別 448 |
11.21.2 メッセージの送信 448 |
11.21.3 送信者の認証 449 |
11.21.4 複数の署名者 449 |
11.21.5 複数の受信者 449 |
11.21.6 開封確認 450 |
11.22 普及の障害 450 |
11.22.1 証明書 450 |
11.22.2 証明書の入手 451 |
11.23 S/MIME vs. SMTP over TLS 451 |
11.23.1 エンドツーエンドのセキュリティ 451 |
11.23.2 否認防止 452 |
11.23.3 中継ホスト 452 |
11.23.4 仮想ホスト 452 |
11.23.5 結論 453 |
11.24 適切な解決策の選択 453 |
11.24.1 直接接続 453 |
11.24.2 TCPのみの場合 453 |
11.24.3 二者問のみの通信 454 |
11.24.4 単純なセキュリティサービス 454 |
11.25 まとめ 455 |
付録A サンプルコード |
A.1 第8章のサンプルコード 458 |
A1.1 Cによるサンプルプログラム 458 |
A1.2 Javaによるサンプルプログラム 467 |
A.2 第9章のサンプルコード 472 |
A.2.1 HTTPSの例 472 |
A.2.2 mod_sslセッションのキャッシュ 475 |
付録B SSLv2 |
B.1はじめに 490 |
B.2 SSLv2の概要 490 |
B.2.1 セッションの再開 492 |
B.2.2 クライアント認証 492 |
B.2.3 データ転送 492 |
B.3 欠けている機能 493 |
B.3.1 証明書のチェーン 493 |
B.3.2 米国内用と輸出対応用のクライアントに同じRSA鍵を利用する 493 |
B.4 セキュリティ上の問題 494 |
B.4.1 輸出可能なバージョンのメッセージ認証 494 |
B.4.2 脆弱なMAC 494 |
B.4.3 ダウングレード 494 |
B.4.4 強制終了攻撃 495 |
B.4.5 クライアント認証の転写 495 |
B.5 PCT 497 |
B.5.1 Verify Preludeフィールド 497 |
B.5.2 メッセージ完全性の強化 497 |
B.5.3 クライアント認証の改善 497 |
B.5.4 分離された暗号スイート 498 |
B.5.5 下位互換性 498 |
B.5.6 結論 499 |
B.6 SSLv1について 500 |
参考文献 501 |
索引 511 |