著者:結城 浩[ゆうき・ひろし](1963-)
カバーデザイン:米谷テツヤ
本文デザイン:花本 浩一(麒麟三隻館)
組版:スタヂオ・ポップ
NDC:007.1 情報科学
(2008年刊行)『新版暗号技術入門——秘密の国のアリス』
暗号技術入門 第3版 | SBクリエイティブ
【目次】
はじめに [iii]
本書の特徴 [iv]
暗号技術をわかりやすく解説
暗号技術の相互関係を解説
「暗号の常識」を解説
対象読者
数学が苦手な人にもわかりやすく
クイズで理解を確認する
本書の構成 [v-vi]
第I部 暗号
第II部 認証
第III部 鍵・乱数・応用技術
謝辞(2003年8月 横浜にて 結城浩) [vi-vii]
新版の刊行にあたって(2008年11月 横浜にて 結城浩) [vii]
CONTENTS [ix-xxii]
第I部 暗号
第1章 暗号の世界ひとめぐり
この章で学ぶこと 004
暗号 004
アリスとボブ
送信者・受信者・盗聴者
暗号化と復号化
暗号は機密性を守る
解読
対称暗号と公開鍵暗号 008
暗号アルゴリズム
鍵
対称暗号と公開鍵暗号
ハイブリッド暗号システム
そのほかの暗号技術 011
一方向ハッシュ関数
メッセージ認証コード
デジタル署名
擬似乱数生成器
暗号学者の道具箱 013
ステガノグラフィと電子透かし 014
暗号とセキュリティの常識 015
秘密の暗号アルゴリズムを使うな
暗号アルゴリズムの秘密は必ず暴かれる
強い暗号アルゴリズムを生み出すことは非常に困難
弱い暗号は暗号化しないよりも危険である
どんな暗号もいつかは解読される
暗号はセキュリティのほんの一部である
この章のまとめ 018
クイズの解答 019
第2章 歴史上の暗号――他人が読めない文章を作る
この章で学ぶこと 022
シーザー暗号 022
シーザー暗号とは何か
シーザー暗号の暗号化
シーザー暗号の復号化
ブルートフォースアタックによる解読
单一換字暗号 026
単一換字暗号とは何か
単一換字暗号の暗号化
単一換字暗号の復号化
単一換字暗号の鍵空間
頻度分析による解読
エニグマ 034
エニグマとは何か
エニグマによる暗号通信
エニグマの構造
エニグマの暗号化
(1) エニグマの設定
(2) 通信鍵の暗号化
(3) エニグマの再設定
(4) メッセージの暗号化
(5) 結合
「日替わり鍵」と「通信鍵」
通信エラーの回避
エニグマの復号化
(1) 分解
(2) エニグマの設定
(3) 通信鍵の復号化
(4) エニグマの再設定
(5) メッセージの復号化
エニグマの弱点
エニグマの解読
考えてみよう 042
なぜ暗号アルゴリズムと鍵とを分けるのか
シーザー暗号
単一換字暗号
エニグマ(通信鍵の暗号化)
エニグマ(通信文の暗号化)
この章のまとめ 044
クイズの解答 045
第3章 対称暗号を(共通鍵暗号)―― 1つの鍵で暗号化し、同じ鍵で復号化する
スクランブルエッグと対称暗号 048
この章で学ぶこと 048
文字の暗号からビット列の暗号へ 049
符号化
XOR
1ビットのXOR
ビット列のXOR
使い捨てパッド――絶対に解読できない暗号 052
使い捨てパッドとは
使い捨てパッドの暗号化
使い捨てパッドの復号化
使い捨てパッドは解読できない
使い捨てパッドはなぜ使われないのか
鍵の配送
鍵の保存
鍵の再利用
鍵の同期
鍵の生成
DES[Date Encryption Standard] 056
DESとは何か
暗号化・復号化
DESの構造(ファイステルネットワーク)
トリプルDES 064
トリプルDESとは何か
トリプルDESの暗号化
トリプルDESの復号化
トリプルDESの現状
AES[Advanced Encryption Standard]の選定プロセス 068
AESとは何か
AESの選定プロセス
AES最終候補の絞り込みとAESの決定
Rijndael〔ラインダール〕 070
Rijndaelとは何か
Rijndaelの暗号化と復号化
Rijndaelの解読
どの対称暗号を使えばよいのか
この章のまとめ 074
クイズの解答 075
第4章 ブロック暗号のモード――ブロック暗号をどのように繰り返すか
この章で学ぶこと 078
ブロック暗号のモード 079
ブロック暗号とストリーム暗号
モードとは何か
平文ブロックと暗号文ブロック
能動的な攻撃者マロリー
ECBモード 081
ECBモードとは何か
ECBモードの特徴
ECBモードへの攻撃
CBCモード 085
CBCモードとは何か
初期化ベクトル
CBCモードの特徴
CBCモードへの攻撃
CBCモードの利用例
CFBモード 091
CFBモードとは何か
初期化ベクトル
CFBモードとストリーム暗号
CFBモードの復号化
CFBモードへの攻撃
OFBモード 095
OFBモードとは何か
初期化ベクトル
CFBモードとOFDモードの比較
CTRモード 097
カウンタの作り方
OFBモードとCTRモードの比較
CTRモードの特徴
エラーと機密性
どのモードを使うべきか 100
この章のまとめ 102
クイズの解答 103
第5章 公開鍵暗号――公開鍵で暗号化し、プライベート鍵で復号化する
コインロッカーの使い方 106
この章で学ぶこと 106
鍵配送問題 106
鍵配送問題とは
鍵の事前共有による鍵配送問題の解決
鍵配布センターによる鍵配送問題の解決
Diffie-Hellma鍵交換による鍵配送問題の解決
公開鍵暗号による鍵配送問題の解決
公開鍵暗号 111
公開鍵暗号とは
公開鍵暗号の歴史
公開鍵を使った通信の流れ
さまざまな用語
公開鍵暗号でも解決できない問題
時計演算 116
加算
modの計算
减算
乘算
除算
累乗
対数
時計の針からRSA
RSA 125
RSAとは何か
RSAによる暗号化
RSAによる復号化
鍵ペアを作る
(1) Nを求める
(2) Lを求める
(3) Eを求める
(4) Dを求める
具体的にやってみよう
鍵ペアの生成
暗号化
復号化
RSAへの攻撃 134
暗号文から平文を求める
ブルートフォースアタックでDを見つける
EとNからDを求める
Nを素因数分解する攻撃
pとqを推測する攻撃
その他の攻撃
man-in-the-middle攻撃
他の公開鍵暗号 139
EIGamal方式
Rabin方式
楕円曲線暗号
公開鍵暗号に関するQ&A 140
公開鍵暗号の機密性
疑問
答え
公開鍵暗号と対称暗号の鍵長
疑問
答え
対称暗号の未来
疑問
答え
RSAと素数
疑問
答え
RSAと素因数分解
疑問
答え
RSAのビット長
疑問
答え
この章のまとめ 143
クイズの解答 144
第6章 ハイブリッド暗号システム――対称暗号でスピードアップし、公開鍵暗号でセッション鍵を守る
ハイブリッド車 148
この章で学ぶこと 148
ハイブリッド暗号システム 148
対称暗号と公開鍵暗号
ハイブリッド暗号システム
暗号化
平文・鍵・暗号文
メッセージの暗号化
セッション鍵の暗号化
結合
復号化
分割
セッション鍵の復号化
メッセージの復号化
ハイブリッド暗号システムの具体例
強いハイブリッド暗号システムとは 154
擬似乱数生成器
対称暗号
公開鍵暗号
鍵長のバランス
暗号技術の組み合わせ 155
この章のまとめ 156
クイズの解答 157
第II部 認証
第7章 一方向ハッシュ関数――メッセージの「指紋」をとる
この章で学ぶこと 162
一方向ハッシュ関数[one-way hash function]とは何か 162
このファイルは本物かしら
一方向ハッシュ関数とは
一方向ハッシュ関数の性質
任意長のメッセージから固定長のハッシュ値を計算する
ハッシュ値を高速に計算できる
メッセージが異なればハッシュ値も異なる
一方向性を持つ
用語について
一方向ハッシュ関数の応用例 172
ソフトウェアの改検出
パスワードを元にした暗号化
メッセージ認証コード
デジタル署名
擬似乱数生成器
ワンタイムパスワード
一方向ハッシュ関数の具体例 175
MD4,MD5
SHA-1,SHA-256,SHA-384,SHA-512
RIPEMD-160
AHS(Advanced Hash Standard)とSHA-3
一方向ハッシュ関数 SHA-1 176
全体の流れ
(1) SHA-1:パディング
(2) SHA-1:W_0〜W_79の計算
(3) SHA-1:ブロックの処理
(4) SHA-1:1ステップの処理
一方向ハッシュ関数への攻撃 184
ブルート・フォース・アタック(攻撃のストーリー1)
誕生日攻撃(攻撃のストーリー2)
一方向ハッシュ関数で解決できない問題 189
この章のまとめ 189
クイズの解答 190
第8章 メッセージ認証コード――メッセージは正しく送られてきたか
この章で学ぶこと 194
メッセージ認証コード 194
これは正しい送金依頼か
メッセージ認証コードとは何か
メッセージ認証コードの利用手順
メッセージ認証コードの鍵配送問題
メッセージ認証コードの利用例 198
SWIFT
IPsec
SSL/TLS
メッセージ認証コードの実現方法 198
一方向ハッシュ関数を使って実現
ブロック暗号を使って実現
その他の方法で実現
HMACの詳細 199
HMACとは何か
HMACの手順
メッセージ認証コードに対する攻撃 202
再生攻撃
シーケンス番号
タイムスタンプ
ノンス[nonce]
鍵の推測による攻撃
メッセージ認証コードで解決できない問題 204
第三者に対する証明
否認防止
この章のまとめ 206
クイズの解答 207
第9章 デジタル署名――このメッセージを書いたのは誰か
おかあさんヤギの認証 210
この章で学ぶこと 210
デジタル署名 210
アリスの借用書
メッセージ認証コードからデジタル署名へ
メッセージ認証コードの限界
デジタル署名による解決
署名の作成と署名の検証
公開鍵暗号とデジタル署名
デジタル署名の方法 216
メッセージに直接署名する方法
メッセージのハッシュ値に署名する方法
デジタル署名に対する疑問 221
暗号文がなぜ署名として使えるのか
疑問
答え
機密性が保てないのではないか
疑問
答え
コピーが作れるのではないか
疑問
答え
書き換えができるのではないか
疑問
答え
署名だけ再利用できてしまうのではないか
疑問
答え
署名を削除しても「契約破棄」できないのではないか
疑問
答え
どうして否認防止になるのか
疑問
答え
デジタル署名は本当に署名の代わりになるのか
疑問
答え
デジタル署名の利用例 226
セキュリティ情報のアナウンス
ソフトウェアのダウンロード
公開鍵の証明書
SSL/TLS
RSA によるデジタル署名 228
RSA による署名の作成
RSAによる署名の検証
具体的にやってみよう
他のデジタル署名 230
EIGamal方式
DSA
Rabin TIC
デジタル署名に対する攻撃 231
man-in-the-middle 攻撃
一方向ハッシュ関数に対する攻撃
デジタル署名を使って公開鍵暗号を攻撃
その他の攻撃
比較してみよう 234
メッセージ認証コードとデジタル署名
ハイブリッド暗号システムとハッシュ値へのデジタル署名
デジタル署名で解決できない問題 235
この章のまとめ 236
クイズの解答 236
第10章 証明書――公開鍵へのデジタル署名
この章で学ぶこと 238
証明書 238
証明書とは何か
証明書を使うシナリオ
証明書を作ってみよう 241
ベリサインの無料お試しサービス
証明書の作成
証明書をWebブラウザからエクスポートする
証明書の内容
証明書の標準規格X.509
公開鍵基盤(PKI) 247
公開鍵基盤(PKI)とは何か
PKIの構成要素
利用者
認証局(CA)
リポジトリ
認証局の仕事
鍵ペアの作成
証明書の登録
証明書の破棄とCRL
階層になった証明書
さまざまなPKI
証明書に対する攻撃 255
公開鍵の登録前を攻撃
似た人間を登録する攻撃
認証局のプライベート鍵を盗み出す攻撃
攻撃者自身が認証局になる攻撃
CRLの隙を突く攻撃(1)
CRLの隙を突く攻撃(2)
証明書に対するQ&A 259
証明書がなぜ必要なのか
疑問
答え
独自の認証方法を使ったほうが安全ではないか
疑問
答え
認証局はどうやって信頼するか
疑問
答え
この章のまとめ 263
クイズの解答 264
第III部 鍵・乱数・応用技術
第11章 鍵――秘密のエッセンス
この章で学ぶこと 268
鍵とは何か 268
鍵はとても大きな数
鍵は平文と同じ価値を持つ
暗号アルゴリズムと鍵
さまざまな鍵 270
対称暗号の鍵と公開鍵暗号の鍵
メッセージ認証コードの鍵とデジタル署名の鍵
機密性のための鍵と認証のための鍵
セッションとマスター鍵
コンテンツを暗号化する鍵と、鍵を暗号化する鍵
鍵を管理する 275
鍵を作る
乱数から鍵を作る
パスワードから鍵を作る
鍵を配送する
鍵を更新する
鍵を保存する
鍵は記憶できない
鍵を暗号化することの意味
鍵を捨てる
なぜ鍵を捨てなければならないか
どうやって捨てるのか
鍵をなくしたらどうなるか
Diffie-Hellman 鍵交換 280
Diffie-Hellman 鍵交換とは何か
Diffie-Hellman 鍵交換の手順
イブは鍵を計算できないのか
生成元の意味
具体的にやってみよう
パスワードを元にした暗号(PBE) 285
パスワードを元にした暗号とは何か
PBEの暗号化
(1) KEYの生成
(2) セッション鍵の生成と暗号化
(3) メッセージの暗号化
PBEの復号化
(1) KEYの復元
(2) セッション鍵の復号化
(3) メッセージの復号化
ソルトの役割
パスワードの役割
PBEの改良
安全なパスワードを作るには 292
自分だけが知り得る情報を使うこと
複数のパスワードを使い分けること
メモを有効に使うこと
パスワードの限界を知ること
この章のまとめ 295
クイズの解答 296
第12章 乱数――予測不可能性の源
ロバの錠前屋 298
この章で学ぶこと 298
乱数が使われる暗号技術 298
乱数は何に使われるか
乱数の性質 299
乱数の性質を分類する
無作為性
予測不可能性
再現不可能性
擬似乱数生成器 302
擬似数生成器の構造
擬似数生成器の内部状態
擬似数生成器の「種」
具体的な擬似乱数生成器 303
でたらめな方法
線形合同法
一方向ハッシュ関数を使う方法
暗号を使う方法
ANSI X9.17
擬似乱数生成器に対する攻撃 314
種に対する攻撃
ランダムブールに対する攻撃
この章のまとめ 315
クイズの解答 316
第13章 PGP ――暗号技術を組み合わせる職人芸 317
この章で学ぶこと 318
PGP[Pretty Good Privacy]の概要 318
PGPとは何か
PGPの機能
対称暗号
公開鍵暗号
デジタル署名
一方向ハッシュ関数
証明書
圧縮
テキストデータ
大きなファイルの分割と結合
鍵リングの管理
鍵ペアの作成 321
暗号化と復号化 321
暗号化
セッション鍵の生成と暗号化
メッセージの圧縮と暗号化
復号化
プライベート鍵の復号化
セッション鍵の復号化
メッセージの復号化と伸張
デジタル署名の作成と検証 328
デジタル署名の作成
プライベート鍵の復号化
デジタル署名の作成
デジタル署名の検証
送られてきたハッシュ値の復元
ハッシュ値の比較
「デジタル署名の作成と暗号化」および「復号化とデジタル署名の検証」 333
デジタル署名の作成と暗号化
デジタル署名の作成
暗号化
復号化とデジタル署名の検証
復号化
デジタル署名の検証
信頼の網 337
公開鍵の正当性
ケース1:自分自身のデジタル署名によって確認する
ケース2:自分が常に信頼している人のデジタル署名によって確認する
ケース3:自分が部分的に信頼している人たちのデジタル署名によって確認する
公開鍵の正当性と所有者信頼は別
所有者信頼の値は個人的なもの
この章のまとめ 343
クイズの解答 343
第14章 SSL/TLS ――セキュアな通信のために 345
この章で学ぶこと 346
SSL/TLSとは何か 346
アリスがボブ書店で本を買う
クライアントとサーバ
HTTPをSSL/TLS の上に乗せる
SSL/TLSの仕事
SSL/TLS は他のプロトコルも守ることができる
暗号スイート
SSLとTLSの違い
SSL/TLSを使った通信 351
階層化されたプロトコル
1 TLS レコードプロトコル
2-1 ハンドシェイクプロトコル
2-2 暗号仕様変更プロトコル
2-3 警告プロトコル
2-4 アプリケーションデータプロトコル
1 TLS レコードプロトコル
2-1 ハンドシェイクプロトコル
(1) ClientHello
(2) ServerHello
(3) Certificate
(4) ServerKeyExchange
(5) CertificateRequest
(6) ServerHelloDone
(7) Certificate
(8) ClientKeyExchange
(9) CertificateVerify
(10) ChangeCipherSpec
(11) Finished
(12) ChangeCipherSpec
(13) Finished
(14) アプリケーションデータプロトコルへ
2-2 暗号仕様変更プロトコル
2-3 警告プロトコル
2-4 アプリケーションデータプロトコル
マスターシークレット
マスターシークレットの計算
マスターシークレットの目的
TLSで使われている暗号技術のまとめ
SSL/TLSへの攻撃 364
個々の暗号技術への攻撃
擬似乱数生成器に対する攻撃
証明書の隙を突く攻撃
SSL/TLSのユーザへの注意 365
証明書の意味を勘違いしないように
暗号通信前のデータは守られていない
暗号通信後のデータは守られていない
この章のまとめ 367
クイズの解答 368
第15章 暗号技術と現実社会――不完全なセキュリティの中で生きる私たち 369
この章で学ぶこと 370
暗号技術のまとめ 370
暗号学者の道具箱
暗号と認証
暗号技術のフレームワーク化
暗号技術は圧縮技術
完全な暗号技術を夢見て 375
量子暗号
量子コンピュータ
どちらが先に実用化されるか
暗号技術が完全になっても、人間は不完全 377
理論が完全でも、現実は不完全
防御は完全でなければならないが、攻撃は一点を破ればよい
攻撃例1:PGPで暗号化されたメールに対して
攻撃例2:SSL/TLSで暗号化されたクレジットカード番号に対して
この章のまとめ 381
付録 暗号技術確認クイズ 383
参考文献 [395-396]
索引 [397-403]
著作 [404]