目次
第1章 SSL/TLSの世界へようこそ
- 暗号化の役割と重要性- インターネットに暗号化が必要な理由
- 情報の秘匿
- 認証
 
- SSL/TLSの歴史- 暗号技術の成り立ち
- SSLの誕生
- [colomn]公開鍵暗号のたとえ
- TLSへの進化
- TLS 1.3の登場
 
- SSL/TLSの定義- 主な役割
- プロトコルスタック
- 活用例
 
- SSL/TLSの構成要素- 暗号アルゴリズム
- プロトコル
- PKI──公開鍵基盤
 
- 終わりに
第2章 暗号アルゴリズムと鍵
- 検証環境- 利用するソフトウェア
- Dockerの導入
- OpenSSLを含むDockerコンテナの導入
 
- 共通鍵暗号- ビット演算による暗号化
- 真正乱数と擬似乱数
 
- ストリーム暗号- RC4──初期のストリーム暗号
- ChaCha20──標準的ストリーム暗号
 
- ブロック暗号- SPN型とFeistel型
- DES──初期の共通鍵暗号
- AES──標準的共通鍵暗号
- 暗号利用モード
- IV
- パディング
 
- ハッシュ関数- ハッシュ関数の性質
- MD5──初期のハッシュ関数
- SHA──標準的ハッシュ関数
- CMAC とHMAC──暗号とハッシュによる認証コード
 
- 認証付き暗号- 認証コードの必要性
- AES-GCM──認証コード付きブロック暗号
- AES-CCM
- [colomn]有限体における演算
- Poly1305──可変長メッセージの認証コード
 
- 公開鍵暗号- 公開鍵暗号の誕生
- [colomn]USSプエブロ号事件.
- 鍵共有
- P ≠ NP 予想
- RSA暗号──素因数分解による公開鍵暗号
- DH──鍵交換アルゴリズム
- ECDH──楕円曲線による鍵交換
- ECDHE──前方秘匿性を考慮した鍵交換
 
- デジタル署名- 認証の機能を実現する方法
- RSA署名──素因数分解による署名
- ECDSA──楕円曲線による署名
- EdDSA──エドワーズ曲線による署名
 
- 暗号鍵- 共通鍵暗号の鍵
- 公開鍵暗号の鍵
- 暗号鍵の要件
 
- 鍵生成- 従来の鍵導出手法
- 拡張マスターシークレット
- PRF──擬似乱数生成器
- [colomn]HMACによる乱数生成
- エントロピーソース──乱雑さの源泉
- RSAと素数判定
- 楕円曲線暗号の鍵
- [colomn]エドワーズ曲線の採用の経緯
 
- 鍵管理- TLSにおける鍵の管理
- 鍵の使いまわしの危険性
- 鍵の秘匿
- SP800-130と鍵管理ガイドライン
 
- 終わりに
第3章 SSL/TLSの各プロトコル詳細──Wiresharkによる解析
- 検証環境- 利用するソフトウェア
- Docker Composeの導入
- サーバ,クライアント環境の構築と設定
- Wiresharkの導入
 
- 最も代表的なプロトコル──Handshakeプロトコル- ハンドシェイクとは
- フルハンドシェイクとセッション再開
 
- フルハンドシェイクの解析- TLS 1.2のフルハンドシェイク
- TLS 1.3のフルハンドシェイク
 
- セッション再開の解析- TLS 1.2のセッション再開
- TLS 1.3のセッション再開
 
- その他のプロトコル──Record,ChangeCipherSpec,Alert,Application Dataプロトコル- Recordプロトコルの役割
- ChangeCipherSpecプロトコルの役割
- Alertプロトコルの役割
- Application Dataプロトコルの役割
- TLS 1.2とTLS 1.3の違い
 
- TLS 1.3特有の仕組み- HRR(Hello Retry Request)
- Middlebox Compatibility Mode
- 0-RTT(Early Data)
 
- 終わりに
第4章 SSL/TLSの標準規格とPKI
- 検証環境- 利用するソフトウェア
- OpenSSLを使った実践
 
- 符号化とフォーマット- ASN.1──通信向けデータ構造記法
- DER──バイナリ符号化ルール
- PEM──Base64変換したバイナリデータ
 
- PKCS──公開鍵暗号標準- PKCS #1──RSA鍵,パディング
- PKCS #3──DH鍵共有
- PKCS #5──パスワード暗号化(PBKDF2),ブロック暗号パディング
- PKCS #7──暗号メッセージフォーマット,パディング
- PKCS #8──秘密鍵暗号化
- PKCS #10──証明書署名要求
- PKCS #11──暗号トークン/HSM
- PKCS #12──鍵ペアのエクスポート
 
- PKI──公開鍵基盤- PKIの構成要素
- 証明書
- 認証局(CA)
- 登録局(RA)
- X.509──PKIの国際標準
- サーバ証明書とクライアント証明書
- 証明書チェーン
- 中間CAとルートCA
 
- PKIの利用──証明書のライフサイクル- 登録・発行──証明書署名要求(CSR)と単純証明書登録プロトコル(SCEP)
- 利用・検証──公開鍵と署名検証
- 失効──証明書失効リスト(CRL)と失効状態の取得プロトコル(OCSP)
- [colomn]証明書の有効期間について
 
- 終わりに
第5章 OpenSSLによるSSL/TLSプログラミング入門
- 開発環境の構築- これから作成するプログラムの概要
- ビルド環境の構築
- OpenSSLライブラリの概要
 
- フルハンドシェイクの実装- クライアント側
- サーバ側
 
- セッション再開の実装- クライアント側
- サーバ側
 
- HRRの実装- クライアント側
- サーバ側
 
- 0-RTT(Early Data)の実装- クライアント側
- サーバ側
 
- 終わりに
第6章 脅威・脆弱性
- 中間者攻撃──MITM(Man-In-The-Middleattack)- 攻撃者の攻撃手法
- 有効な対策──安全な再ネゴシエーションとクライアント証明書
 
- BEAST攻撃──ブロック暗号のIVを狙った攻撃- 攻撃者の攻撃手法
- 有効な対策──ストリーム暗号やTLS 1.1以降の採用
 
- パディングオラクル攻撃──ブロック暗号のパディングを狙った攻撃- 攻撃者の攻撃手法
- 有効な対策──メッセージ認証コード(MAC)の付与,Lucky 13攻撃への対策,POODLE攻撃への対策と続く歴史
 
- Lucky 13攻撃──タイミング攻撃,暗号アルゴリズムの実行時間に対する攻撃- 攻撃者の攻撃手法
- 有効な対策──認証付き暗号の利用
 
- POODLE攻撃──SSL 3.0のパディングチェック方式を狙った攻撃- 攻撃者の攻撃手法
- 有効な対策──SSL 3.0の無効化
 
- CRIME攻撃──サイドチャネル攻撃,その他の物理的特性に対する攻撃- 攻撃者の攻撃手法
- 有効な対策──圧縮機能の無効化
 
- 危殆化- 危殆化の歴史
- 危殆化対策への考え方──積極的移行と消極的移行
 
- 量子コンピュータによる暗号解読の可能性- 期待される対策
- [colomn]脆弱性の管理
 
- 終わりに
第7章 性能の測定
- 性能測定の目的──時代に合わせた選択をするため- 性能と安全性の関係
- 性能と安全性に影響する要素
 
- 測定環境の構築- Dockerによる構築
- 測定環境用のスクリプト
 
- プロトコルの性能- フルハンドシェイクの測定
- セッション再開の測定
 
- 暗号アルゴリズムの性能──AES-GCMとChaCha20-Poly1305の測定- ハードウェアサポートの解説──AES-NI,SIMD
- 測定手順
- 測定結果の比較と考察
 
- 署名,鍵交換の性能- 楕円曲線暗号の種類
- その他の楕円曲線
 
- 終わりに
第8章 SSL/TLSが抱える課題と展望
- 仕様変更と普及の問題- 鍵フォーマット
- FIPS 186-2とFIPS 186-4,そしてFIPS 186-5へ
- 中国剰余定理──RSAの高速化
- 楕円曲線暗号にまつわる問題
- PKCS #8の秘密鍵
- プロトコルの普及
- 仕様差が生む問題
- SSL Pulse──SSL/TLS調査サイトから見える現状
- 日本におけるWeb通信の暗号化状況
 
- PKIにおける課題- 証明書運用の問題
- ワイルドカード証明書──任意ドメインに対する証明
- SAN──Subject Alternative Name(複数ドメインの証明)
- クロスルート証明書──中間証明書による別ルート証明書への接続
- [colomn]Mixed-Content──HTTPSとHTTPの混合コンテンツ
 
- 証明書の信頼性- EV,OV,DV論争──ドメイン認証,組織認証,拡張認証
- Let's Encrypt──フリーのSSL/TLS証明書
- [colomn]Let's Encryptの証明書大量失効
- CTの現状
- ルート証明書の信頼性
 
- SSL/TLSの展望- トラフィックとリソースの爆発的増加
- 暗号活用の多様化とクリプトアジリティ
- 耐量子計算機暗号
- セキュリティとトラストの自動化
- [colomn]ブロックチェーン
 
- 暗号化は必要か- 常時暗号化
- 暗号化への規制
- 監視社会と暗号
 
- 終わりに




