暗号技術入門 秘密の国のアリス 新版
ソフトバンククリエイティブ
著者:結城浩
はじめに
本書の特徴
本書の構成
謝辞
新版の刊行にあたって
第I部 暗号
第1章 暗号の世界ひとめぐり
この章で学ぶこと
暗号
アリスとボブ
送信者・受信者・盗聴者
暗号化と復号化
暗号は機密性を守る
解読
対称暗号と公開鍵暗号
暗号アルゴリズム
鍵
対称暗号と公開鍵暗号
ハイブリッド暗号システム
そのほかの暗号技術
一方向ハッシュ関数
メッセージ認証コード
デジタル署名
疑似乱数生成器
暗号学者の道具箱
ステガノグラフィと電子透かし
暗号とセキュリティの常識
秘密の暗号アルゴリズムを使うな
弱い暗号は暗号化しないよりも危険である
どんな暗号もいつかは解読される
暗号はセキュリティのほんの一部である
この章のまとめ
クイズの解答
第2章 歴史上の暗号-他人が読めない文章を作る
この章で学ぶこと
シーザー暗号
シーザー暗号とは何か
シーザー暗号の暗号化
シーザー暗号の復号化
ブルート・フォース・アタックによる解読
単一換字暗号
単一換字暗号とは何か
単一換字暗号の暗号化
単一換字暗号の復号化
単一換字暗号の鍵空間
頻度分析よる解読
エニグマ
エニグマとは何か
エニグマによる暗号通信
エニグマの構造
エニグマの暗号化
「日替わり鍵」と「通信鍵」
通信エラーの回避
エニグマの復号化
エニグマの弱点
エニグマの解読
考えてみよう
なぜ暗号アルゴリズムと鍵とを分けるのか
この章のまとめ
クイズの解答
第3章 対称暗号(共通鍵暗号)-1つの鍵で暗号化し、同じ鍵で復号化する
スクランブルエッグと対称暗号
この章で学ぶこと
文字の暗号からビット配列の暗号へ
符号化
XOR
使い捨てパッド-絶対に解読できない暗号
使い捨てパッドとは
使い捨てパッドの暗号化
使い捨てパッドの復号化
使い捨てパッドは解読できない
使い捨てパッドはなぜ使われないのか
DES
DESとは何か
暗号化・復号化
DESの構造(ファイルシステムネットワーク)
トリプルDES
トリプルDESとは何か
トリプルDESの暗号化
トリプルDESの復号化
トリプルDESの現状
AESの選定プロセス
AESとは何か
AESの選定プロセス
AES最終候補の絞り込みとAESの決定
Rijndael
Rijndaelとは何か
Rijndaelの暗号化と復号化
Rijndaelの解読
どの対称暗号を使えばよいのか
この章のまとめ
クイズの解答
第4章 ブロック暗号のモード-ブロック暗号をどのように繰り返すか
この章で学ぶこと
ブロック暗号のモード
ブロック暗号とストリーム暗号
モードとは何か
平文ブロックと暗号文ブロック
能動的な攻撃者マロリー
ECBモード
ECBモードとは何か
ECBモードの特徴
ECBモードへの攻撃
CBCモード
CBCモードとは何か
初期化ベクトル
CBCモードの特徴
CBCモードへの攻撃
CBCモードの利用例
CFBモード
CFBモードとは何か
初期化ベクトル
CFBモードとストリーム暗号
CFBモードの復号化
CFBモードへの攻撃
OFBモード
OFBモードとは何か
初期化ベクトル
CFBモードとOFBモードの比較
CTRモード
カウンタの作り方
OFBモードとCTRモードの比較
CTRモードの特徴
エラーと機密性
どのモードを使うべきか
この章のまとめ
クイズの解答
第5章 公開鍵暗号-公開鍵で暗号化し、プライベート鍵で復号化する
コインロッカーの使い方
この章で学ぶこと
鍵配送問題
鍵配送問題とは
鍵の事前共有による鍵配送問題の解決
鍵配布センターによる鍵配送問題の解決
Diffie-Hellman鍵交換による鍵配送問題の解決
公開鍵暗号による鍵配送問題の解決
公開鍵暗号
公開鍵暗号とは
公開鍵暗号の歴史
公開鍵を使った通信の流れ
さまざまな用語
公開鍵暗号でも解決できない問題
時計演算
加算
減算
乗算
除算
累乗
対数
時計の針からRSAへ
RSA
RSAとは何か
RSAによる暗号化
RSAによる復号化
鍵ペアを作る
具体的にやってみよう
RSAへの攻撃
暗号文から平文を求める
ブルート・フォース・アタックでDを見つける
EとNからDを求める
man-in-the-middle攻撃
他の公開鍵暗号
ElGamal方式
Rabin方式
楕円曲線暗号
公開鍵暗号に関する Q&A
公開鍵暗号の機密性
公開鍵暗号と対称暗号の鍵長
対称暗号の未来
RSAと素数
RSAと素因数分解
RSAのビット長
この章のまとめ
クイズの解答
第6章 ハイブリッド暗号システム-対称暗号でスピードアップし、公開鍵暗号でセッション鍵を守る
ハイブリッド車
この章で学ぶこと
ハイブリッド暗号システム
対称暗号と公開鍵暗号
ハイブリッド暗号システム
暗号化
復号化
ハイブリッド暗号システムの具体例
強いハイブリッド暗号システムとは
疑似乱数生成器
対称暗号
公開鍵暗号
鍵長のバランス
暗号技術の組み合わせ
この章のまとめ
クイズの解答
第II部 認証
第7章 一方向ハッシュ関数-メッセージの「指紋」をとる
この章で学ぶこと
一方向ハッシュ関数とは何か
このファイルは本物かしら
一方向ハッシュ関数とは
一方向ハッシュ関数の性質
用語について
一方向ハッシュ関数の応用例
ソフトウェアの改竄検出
パスワードを元にした暗号化
メッセージ認証コード
デジタル署名
疑似乱数生成器
ワンタイムパスワード
一方向ハッシュ関数の具体例
MD4、MD5
SHA-1、SHA-256、SHA-384、SHA-512
RIPEMD-160
AHS(Advanced Hash Standard)とSHA-3
一方向ハッシュ関数:SHA-1
全体の流れ
(1)SHA-1:パディング
(2)SHA-1:W0~W79の計算
(3)SHA-1:ブロックの処理
(4)SHA-1:1ステップの処理
一方向ハッシュ関数への攻撃
ブルート・フォース・アタック(攻撃のストーリー1)
誕生日攻撃(攻撃のストーリー2)
一方向ハッシュ関数で解決できない問題
この章のまとめ
クイズの解答
第8章 メッセージ認証コード-メッセージは正しく送られてきてか
この章で学ぶこと
メッセージ認証コード
これは正しい送金依頼か
メッセージ認証コードとは何か
メッセージ認証コードの利用手順
メッセージ認証コードの鍵配送問題
メッセージ認証コードの利用例
SWIFT
IPsec
SSL/TLS
メッセージ認証コードの実現方法
一方向ハッシュ関数を使って実現
ブロック暗号を使って実現
その他の方法で実現
HMACの詳細
HMACとは何か
HMACの手順
メッセージ認証コードに対する攻撃
再生攻撃
鍵の推測による攻撃
メッセージ認証コードで解決できない問題
第三者に対する証明
否認防止
この章のまとめ
クイズの解答
第9章 デジタル署名-このメッセージを書いたのは誰か
あかあさん ヤギの証明
この章で学ぶこと
デジタル署名
アリスの借用書
メッセージ認証コードからデジタル署名へ
署名の作成と署名の検証
公開鍵暗号とデジタル署名
デジタル署名の方法
メッセージに直接署名する方法
メッセージのハッシュ値に署名する方法
デジタル署名に対する疑問
暗号文がなぜ署名として使ええるのか
機密性が保てないのではないか
コピーが作れるのではないか
書き換えができるのではないか
署名だけ再利用できてしまうのではないか
署名を削除しても「契約破棄」できないのではないか
どうして否認防止になるのか
デジタル署名は本当に署名の代わりになるのか
デジタル署名の利用例
セキュリティ情報のアナウンス
ソフトウェアのダウンロード
公開鍵の証明書
SSL/TLS
RSAによるデジタル署名
RSAによる署名の作成
RSAによる署名の検証
具体的にやってみよう
他のデジタル署名
ElGamal方式
DSA
Rabin方式
デジタル署名に対する攻撃
main-in-the-middle攻撃
一方向ハッシュ関数に対する攻撃
デジタル署名を使って公開鍵暗号を攻撃
その他の攻撃
比較してみよう
メッセージ認証コードとデジタル署名
ハイブリッド暗号システムとハッシュ値へのデジタル署名
デジタル署名で解決できない問題
この章のまとめ
クイズの解答
第10章 証明書-公開鍵へのデジタル署名
この章で学ぶこと
証明書
証明書とは何か
証明書を使うシナリオ
証明書を作ってみよう
ベリサインの無料お試しサービス
証明書の作成
証明書をWebブラウザからエクスポートする
証明書の内容
証明書の標準規格X.509
公開鍵基盤(PKI)
公開鍵基盤(PKI)とは何か
PKIの構成要素
認証局の仕事
階層になった証明書
さまざまなPKI
証明書に対する攻撃
公開鍵の登録前を攻撃
似た人間を登録する攻撃
認証局のプライベート鍵を盗み出す攻撃
攻撃者自身が認証局になる攻撃
CRLの隙を突く攻撃(1)
CRLの隙を突く攻撃(2)
証明書に対するQ&A
証明者がなぜ必要なのか
独自の認証方法を使ったほうが安全ではないか
認証局はどうやって信頼するか
この章のまとめ
クイズの解答
第III部 鍵・乱数・応用技術
第11章 鍵-秘密のエッセンス
この章で学ぶこと
鍵とは何か
鍵はとても大きな数
鍵は平文と同じ価値を持つ
暗号アルゴリズムと鍵
さまざまな鍵
対称暗号の鍵と公開鍵暗号の鍵
メッセージ認証コードの鍵とデジタル署名の鍵
機密性のための鍵と認証のための鍵
セッション鍵とマスター鍵
コンテンツを暗号化する鍵と、鍵を暗号化する鍵
鍵を管理する
鍵を作る
鍵を配送する
鍵を更新する
鍵を保存する
鍵を捨てる
Diffie-Hellman鍵交換
Diffie-Hellman鍵交換とは何か
Diffie-Hellman鍵交換の手順
イブは鍵を計算できないのか
生成元の意味
具体的にやってみよう
パスワードを元にした暗号(PBE)
パスワードを元にした暗号とは何か
PBEの暗号化
PBEの復号化
ソルトの役割
パスワードの役割
PBEの改良
安全なパスワードを作るには
自分だけが知り得る情報を使うこと
複数のパスワードを使い分けること
メモを有効に使うこと
パスワードの限界を知ること
この章のまとめ
クイズの解答
第12章 乱数-予測不可能性の源
ロバの鍵前屋
この章で学ぶこと
乱数が使われる暗号技術
乱数は何に使われるか
乱数の性質
乱数の性質を分類する
無作為性
予測不可能性
再現不可能性
疑似乱数生成器
疑似乱数生成器の構造
具体的な疑似乱数生成器
でたらめな方法
線形合同法
一方向ハッシュ関数を使う方法
暗号を使う方法
ANSI X9.17
疑似乱数生成器に対する攻撃
種に対する攻撃
ランダムプールに対する攻撃
この章のまとめ
クイズの解答
第13章 PGP-暗号技術を組み合わせる職人芸
この章で学ぶこと
PGPの概要
PGPとは何か
PGPの機能
鍵ペアの作成
暗号化と復号化
暗号化
復号化
デジタル署名の作成と検証
デジタル署名の作成
デジタル署名の検証
「デジタル署名の作成と暗号化」および「復号化とデジタル署名の検証」
デジタル署名の作成と暗号化
復号化とデジタル署名の検証
信頼の綱
公開鍵の正当性
ケース1:自分自身のデジタル署名によって確認する
ケース2:自分が常に信頼している人のデジタル署名によって確認する
ケース3:自分が部分的に信頼している人たちのデジタル署名によって確認する
公開鍵の正当性と所有者信頼は別
所有者信頼の値は個人的なもの
この章のまとめ
クイズの解答
第14章 SSL/TLS-セキュアな通信のために
この章で学ぶこと
SSL/TLSとは何か
アリスがボブ書店で本を買う
クライアントとサーバ
HTTPをSSL/TLSの上に乗せる
SSL/TLSの仕事
SSL/TLSは他のプロトコルも守ることができる
暗号スイート
SSLとTLSの違い
SSL/TLSを使った通信
階層化されたプロトコル
1 TLSレコードプロトコル
2-1 ハンドシェイクプロトコル
2-2 暗号仕様変更プロトコル
2-3 警告プロトコル
2-4 アプリケーションデータプロトコル
マスターシークレット
TLSで使われている暗号技術のまとめ
SSL/TLSへの攻撃
個々の暗号技術への攻撃
疑似乱数生成器に対する攻撃
証明書の隙を突く攻撃
SSL/TLSのユーザへの注意
証明書の意味を勘違いしないように
暗号通信前のデータは守られていない
暗号通信後のデータは守られていない
この章のまとめ
クイズの解答
第15章 暗号技術と現実社会-不完全なセキュリティの中で生きる私たち
この章で学ぶこと
暗号技術のまとめ
暗号学者の道具箱
暗号と認証
暗号技術のフレームワーク化
暗号技術は圧縮技術
完全な暗号技術を夢見て
量子暗号
量子コンピュータ
どちらが先に実用化されるか
暗号技術が完全になっても、人間は不完全
理論が完全でも、現実は不完全
防御は完全でなければならないが、攻撃は一点を破ればいい
攻撃例1:PGPで暗号化されたメールに対して
攻撃例2:SSL/TLSで暗号化されたクレジットカード番号に対して
この章のまとめ
付録
暗号技術確認クイズ
参考文献
索引