Stand Up and Shout!

勉強したことや、思いついたことを気ままに記述します

現代暗号技術入門@デイビット・ウォン

2022年6月30日に『現代暗号技術入門』が出版されました。

目次の俯瞰

現代暗号技術入門
    はじめに
    この本について
    第1部 プリミティブ : 暗号の構成要素
        第1章 暗号とは何か
            1.1 暗号の要、 プロトコルの保護ということ
            1.2 対称暗号 対称暗号化とは何か
            1.3 ケルクホフスの原理: 秘匿されるのは鍵だけ
            1.4 非対称暗号 鍵は1つより2つ
                1.4.1 鍵交換: 共有の秘密を使う
                1.4.2 非対称暗号化と対称暗号化の違い
                1.4.3 デジタル署名 : 紙とペンを使う署名にかわるもの
            1.5 暗号の分類と抽象化
            1.6 理論暗号学と現実世界の暗号学
            1.7 理論から実践へ : 「きみならどうする」
            1.8 戒めの言葉をひとつ
            この章のまとめ
        第2章 ハッシュ関数
            2.1 ハッシュ関数とは何か
            2.2 ハッシュ関数のセキュリティ特性
            2.3 ハッシュ関数のセキュリティに関する考察
            2.4 現実世界でのハッシュ関数
                2.4.1 コミットメント
                2.4.2 サブリソース完全性
            2.4.3 BitTorrent
            2.4.4 Tor
            2.5 標準化されたハッシュ関数
                2.5.1 SHA-2ハッシュ関数
                2.5.2 SHA-3 ハッシュ関数
                2.5.3 SHAKEとcSHAKE : 2つの可変長出力関数 (XOF)
                2.5.4 TupleHashによるハッシュで曖昧さを回避する
            2.6 パスワードのハッシュ
            この章のまとめ
            16進法について
            ランダムオラクル
            誕生日限界
            標準の廃止は難しい
            排他的論理和の演算
            SHA-3はランダムオラクル
        第3章 メッセージ認証コード
            3.1 ステートレスCookie、 MACの導入となる例
            3.2 コードで見る実際の例
            3.3 MACのセキュリティ特性
                3.3.1 認証タグの捏造
                3.3.2 認証タグの長さ
                3.3.3 リプレイ攻撃
                3.3.4 一定時間で認証タグを検証する
            3.4 現実世界でのMAC
                3.4.1 メッセージの認証
                3.4.2 鍵の導出
                3.4.3 Cookieの完全性
                3.4.4 ハッシュテーブル
            3.5 メッセージ認証コード (MAC)の実際
                3.5.1 HMAC: ハッシュベースのMAC
                3.5.2 KMAC : cSHAKE ベースのMAC
            3.6 SHA-2と伸長攻撃
            この章のまとめ
            現代暗号技術入門/目次
            擬似乱数関数 (PRF)
        第4章 認証付き暗号
            4.1 暗号化アルゴリズムとは何か
            4.2 AESブロック暗号
                4.2.1 AESのセキュリティレベル
                4.2.2 AESのインターフェース
                4.2.3 AESの内部機構
            4.3 ペンギンの暗号化と、 CBDモード
            4.4 真正性の欠如、 そこから生まれたAES-CBC-HMAC
            4.5 一体型の構成法: 認証付き暗号
                4.5.1 認証付き暗号 (AEAD)とは何か
                4.5.2 AES-GCM
                4.5.3 ChaCha20-Poly1305
            4.6 その他の対称暗号
                4.6.1 鍵ラッピング
                4.6.2 ノンス悪用に耐性の高い認証付き暗号
                4.6.3 ディスク暗号化
                4.6.4 データベース暗号化
            この章のまとめ
            ビットセキュリティは上限
            ストリーム暗号
            誕生日限界を超えるセキュリティ
            ノンスとカウンターのサイズ
        第5章 鍵交換
            5.1 鍵交換とは何か
            5.2 ディフィー・ヘルマン (DH) 鍵交換
                5.2.1 群論
                5.2.2 離散対数問題: ディフィー・ヘルマンの基礎
                5.2.3 ディフィー・ヘルマンを利用している標準
            5.3 楕円曲線ディフィー・ヘルマン (ECDH) 鍵交換
                5.3.1 楕円曲線とは何か
                5.3.2 楕円曲線ディフィー・ヘルマン (ECDH) 鍵交換のしくみ
                5.3.3 楕円曲線ディフィー・ヘルマンの標準
                5.4 小部分群攻撃などのセキュリティ上の問題
            この章のまとめ
            素数とは
            計算的ディフィー・ヘルマンと決定的ディフィー・ヘルマン
            P-256は信頼できるか
        第6章 非対称暗号とハイブリッド暗号
            6.1 非対称暗号とは何か
            6.2 非対称暗号の実際と、 ハイブリッド暗号
                6.2.1 鍵交換と鍵カプセル化
                6.2.2 ハイブリッド暗号
            6.3 RSAによる非対称暗号化: 弱点とその緩和
                6.3.1 教科書どおりのRSA
                    6.3.2 RSA PKCS#1 v1.5を避けるべき理由
                6.3.3 RSA-OAEPによる非対称暗号化
            6.4 ECIES を使用するハイブリッド暗号
            この章のまとめ
            オイラーの定理
            RSA群の位数
            適応的選択暗号文攻撃
            メインジャーのパディングオラクル攻撃
            鍵交換の出力で偏りを排除する
        第7章 署名とゼロ知識証明
            7.1 署名とは何か
                7.1.1 署名とその検証の実際
                7.1.2 署名の主な用途: 認証付き鍵交換
                7.1.3 現実世界での使い方: 公開鍵基盤
            7.2 ゼロ知識証明 (ZKP) : 署名の出どころ
                7.2.1 シュノア識別プロトコル: 対話型のゼロ知識証明
                7.2.2 非対話型ゼロ知識証明としての署名
            7.3 推奨される署名と非推奨の署名
                7.3.1 RSA PKCS #1 v1.5 おすすめできない標準
                7.3.2 RSA-PSS: 向上した標準
                7.3.3 楕円曲線デジタル署名アルゴリズム (ECDSA)
                7.3.4 エドワーズ曲線デジタル署名アルゴリズム (EdDSA)
            7.4 署名方式の微妙で複雑な挙動
                7.4.1 署名に対する置換攻撃
                7.4.2 署名のトランザクション展性
            この章のまとめ
            「RSA」 が多すぎる
            PSSの証明可能な安全性
            乗法と加法のどちらの記法を使うか
            適応的選択平文攻撃における存在的偽造不可能性 (EUF-CMA)
            強力なEUF-CMA
        第8章 ランダム性と秘密
            8.1 ランダム性とは
            8.2 乱数の生成は遅いため、 擬似乱数生成器 (PRNG)を使う
            8.3 ランダム性を取得する実際の手法
            8.4 ランダム性の生成とセキュリティの関係
            8.5 公開のランダム性
            8.6 HKDFによる鍵導出
            8.7 鍵と秘密の管理
            8.8 しきい値暗号による信頼の分散
            この章のまとめ
            エントロピー
            デュアルECのバックドア問題
            RDRANDをめぐる議論
            関数が本当にランダムな出力を生成するかどうかの見極め
    第2部 プロトコル:暗号を使うレシピ
        第9章 セキュアトランスポート
            9.1 セキュアトランスポートプロトコル: SSLとTLS
                9.1.1 SSLからTLSへ
                9.1.2 実際にTLSを使う
            9.2 TLSプロトコルのしくみ
                9.2.1 TLSハンドシェイク
                9.2.2 TLS 1.3でアプリケーションデータを暗号化するしくみ
            9.3 ウェブ暗号化の現状
            9.4 その他のセキュアトランスポートプロトコル
            9.5 Noise プロトコルフレームワーク: TLSにかわる最新の技術
                9.5.1 Noiseにはハンドシェイクが多い
                9.5.2 Noiseによるハンドシェイク
            この章のまとめ
            バージョンの古いSSLとTLSは安全か
            TLS相互認証
            Web PKI について
            エピソードを紹介
            クライアントランダムとサーバーランダム
            平文の長さを隠す
        第10章 エンドツーエンド暗号化
            10.1 なぜエンドツーエンド暗号化なのか
            10.2 本来はどこにもない、「信頼の基点」
            10.3 暗号化されたメールの限界
                10.3.1 GPGかPGPか、 そのしくみは?
                10.3.2 URLユーザー間の信頼を広げる 「信頼の輪」
                10.3.3 鍵の検出
                10.3.4 PGPがだめなら、 代替の候補は?
            10.4 セキュアメッセージング : Signalに見る、エンドツーエンド暗号化の最新の形
                10.4.1 WOT よりユーザーフレンドリーなしくみ 信頼するが検証する
                10.4.2 X3DH Signal プロトコルにおけるハンドシェイク
                10.4.3 ダブルラチェット: Signalで使われるポストハンドシェイクプロトコル
            10.5 エンドツーエンド暗号化の現状
            この章のまとめ
        第11章 ユーザー認証
            11.1 認証を要約すると
            11.2 ユーザー認証、 あるいはパスワードの排除をめざす探究
                11.2.1 ひとつのパスワードが、 すべてを統べる : シングルサインオン (SSO)とパスワードマネージャー
                11.2.2 パスワードをさらしたくない場合は、 非対称パスワード認証鍵交換を使う
                11.2.3 ワンタイムパスワードはパスワードではない 対称鍵でパスワードレスを実現する
                11.2.4 非対称鍵でパスワードを置き換える
            11.3 ユーザー補助型認証: 人間を仲立ちにしてデバイスをペアリングする
                11.3.1 事前共有鍵
                11.3.2 CPaceによる対称パスワード認証鍵交換
                11.3.3 鍵交換がMITM攻撃を受けたかどうか短い認証文字列 (SAS) でチェック
            この章のまとめ
            フィッシング
            エピソードを紹介
        第12章 暗号が通貨になる?
            12.1 ビザンチン障害耐性(BFT) コンセンサスアルゴリズムの簡単な導入
                12.1.1 回復性の問題 解決策は分散プロトコル
                12.1.2 信頼の問題に対処する分散化
                12.1.3 拡張性の問題 パーミッションレスで検閲耐性を備えたネットワーク
            12.2 ビットコインのしくみ
                12.2.1 ビットコインはユーザーの残高とトランザクションをどう処理しているか
                12.2.2 デジタルの黄金時代に出現したBTCの採掘
                12.2.3 フォークの問題: マイニングにおける競合を解決する
                12.2.4 マークルツリーでブロックを小さくする
            12.3 暗号通貨の諸問題
                12.3.1 ボラティリティ (流動性)
                12.3.2 レイテンシー
                12.3.3 ブロックチェーンの大きさ
                12.3.4 機密性
                12.3.5 エネルギー消費の問題
            12.4 DiemBFT: ビザンチン障害耐性 (BFT) コンセンサスプロトコル
                12.4.1 安全性とライブネス BFTコンセンサスプロトコルの2つの特性
                12.4.2 DiemBFTプロトコルにおけるラウンド
                12.4.3 DiemBFTはどの程度までの不正に耐性があるのか
                12.4.4 DiemBFTの投票ルール
                12.4.5 トランザクションはいつファイナライズされるか
                12.4.6 DiemBFTの安全性を直観的にとらえる
            この章のまとめ
        第13章 ハードウェア暗号
            13.1 最新の暗号学的攻撃モデル
            13.2 信頼できない環境: 救いの手はハードウェア
                13.2.1 ホワイトボックス暗号賢いとはいえない発想
                13.2.2 皆さんの財布にもある : スマートカードとセキュアエレメント
                13.2.3 銀行が好むハードウェアセキュリティモジュール (HSM)
                13.2.4 トラステッドプラットフォームモジュール (TPM) :セキュアエレメントの実効的な標準化
                13.2.5 信頼できる実行環境(TEE) による機密コンピューティング
            13.3 どのソリューションが適しているか
            13.4 漏洩耐性のある暗号: ソフトウェアでサイドチャネル攻撃を低減するには
                13.4.1 一定時間のプログラミング
                13.4.2 秘密を使わない! マスキングとブラインド
                13.4.3 フォールト攻撃はどうか
            この章のまとめ
            悪意あるメイド攻撃
            銀行とレガシー暗号
        第14章 耐量子暗号
            14.1 量子コンピューターとは何か、 暗号学者を脅かしているのはなぜか
                14.1.1 極小の世界を研究する量子力学
                14.1.2 量子コンピューターの誕生から量子超越性まで
                14.1.3 グローバーとショアのアルゴリズムが暗号学にもたらす影響
                14.1.4 量子コンピューターへの対抗手段、 耐量子暗号
            14.2 ハッシュベースの署名: 必要なのはハッシュ関数だけ
                14.2.1 ランポート署名を用いるワンタイム署名 (OTS)
                14.2.2 鍵が小さくなる、 ヴィンターニッツのワンタイム署名 (WOTS)
                14.2.3 XMSSとSPHINCS+による多数回署名
            14.3 鍵と署名が短くなる、 格子暗号
                14.3.1 格子とは何か
                14.3.2 LWE(誤差を伴う学習) は暗号の基礎になりうるか
                14.3.3 Kyber : 格子ベースの鍵交換
                14.3.4 Dilithium: 格子ベースの署名方式
            14.4 パニクる必要はあるか
            この章のまとめ
        第15章 次世代の暗号技術
            15.1 大勢のほうが楽しい : セキュアマルチパーティ計算 (MPC)
                15.1.1 プライベートセット交差 (PSI)
                15.1.2 汎用 MPC
                15.1.3 MPCの現状
            15.2 完全準同型暗号 (FHE) と、 クラウドでの暗号の将来性
                15.2.1 RSA暗号に見る準同型暗号の例
                15.2.2 さまざまな準同型暗号
                15.2.3 完全準同型暗号への鍵、 ブートストラップ
                15.2.4 LWE問題に基づくFHE
                15.2.5 どこで使われているのか
            15.3 汎用ゼロ知識証明 (ZKP)
                15.3.1 zk-SNARKのしくみ
                15.3.2 証明の一部を隠す準同型コミットメント
                15.3.3 準同型コミットメントを改良できる、 双線形ペアリング
                15.3.4 簡潔性の由来
                15.3.5 プログラムから多項式へ
                15.3.6 プログラムはコンピューターのためのもの: 人には演算回路が必要
                15.3.7 演算回路からR1CSへ
                15.3.8 R1CSから多項式へ
                15.3.9 指数を隠している多項式の評価には2人が必要
            この章のまとめ
        第16章 暗号が破綻するとき
            16.1 適切な暗号プリミティブや暗号プロトコルを見いだすのは、退屈な作業
            16.2 暗号プリミティブまたは暗号プロトコルをどう使うか。 礼儀正しい標準と形式的検証
            16.3 適切なライブラリはどこにあるか
            16.4 暗号の誤用: 開発者は敵と思え
            16.5 やり方を間違える: ユーザブルセキュリティ
            16.6 暗号は単独で存在するわけではない
            16.7 暗号を実際に扱う者としての責任 独自の暗号を作るなかれ
            この章のまとめ
    お別れの前に
    KRACK攻撃
    エピソードを紹介