目次
第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]ブロックチェーン
- 暗号化は必要か
- 常時暗号化
- 暗号化への規制
- 監視社会と暗号
- 終わりに