暗号技術のすべて

【最新 – 暗号技術について理解を深めるためのおすすめ本 – 基礎知識から応用技術まで】も確認する

暗号技術を一通りわかりやすく

本書は、暗号技術を解説しています。セキュリティにおける暗号技術の役割から、古典暗号、共通鍵暗号、公開鍵暗号、ハッシュ関数など現代の通信に利用されている暗号技術が詳しく解説されています。認証コードやデジタル署名、鍵と乱数、暗号に関連した最近の話題など暗号に関連した内容が充実しています。

IPUSIRON (著)
出版社 : 翔泳社; 第1版 (2017/8/3) 、出典:出版社HP

まえがき

コンピュータやスマホが普及した現在ですが、情報セキュリティは大きな課題となっています。個人情報の漏えい、システムへの侵入、ウイルスの感染など、毎日のようにセキュリティに関するニュースが後を絶ちません。
暗号技術は、セキュリティを実現する大きな柱の1つです。例えば、インターネットショッピング、ATMの操作、ICカードでの運賃支払いなどに利用されています。一般にユーザーが意識しない裏方において、多くの暗号技術が活用されています。しかし、強力な暗号技術が使われていても、運用や実装に問題があれば、システムの安全性を破られる恐れがあります。それはちょっとしたミスや違いから引き起こされます。また、単独では安全なシステムでも、組み合わせることで安全性が損なわれることもあります。
こうした問題を解決するには、システムの設計者・開発者が個々の暗号技術について正しく理解しなければなりません。さらに、ユーザーも適切な運用をしなければなりません。サービス提供側はシステムが安全だと主張しますが、それが本当であるかわかりません。つまり、システムの安全性を鵜呑みにせず、問題の影響を最小限にするために心がける必要があります。

本書は、暗号技術の基本をひととおり紹介しています。大きな特徴は、現代暗号だけでなく、古典暗号についても解説していることです。暗号とは、通信文を秘密にすることが目的です。古典暗号と現代暗号では、その実現方法や背景が違いますが、目的は同様といえます。アルゴリズムの観点から見ることで、そういったことも理解できるはずです。
本書を読むための予備知識は、コンピュータに関する初歩と、高校レベルの数学だけで済むように配慮しました。数学的な準備が必要な場合には、数値例や図解で解説しています。これにより、直観的に理解できるはずです。

著者が暗号理論に取り組むきっかけとなったのは、情報セキュリティ大学院大学に入学したことです。そこでは、暗号理論を学習・研究する機会を与えていただきました。その結果、暗号理論に魅了されました。指導教官、ならびに教員の皆様には、この場を借りて深く感謝いたします。
最後になりますが、本書の出版に際して、株式会社翔泳社、ならびに編集者の秦和宏氏に深く感謝いたします。
2017年8月 IPUSIRON

IPUSIRON (著)
出版社 : 翔泳社; 第1版 (2017/8/3) 、出典:出版社HP

本書の特徴

古典暗号から現代暗号までを体系的に解説
本書の主なテーマは暗号技術の安全性です。まずは歴史的に重要な役割を果たした古典暗号から解説します。古典暗号といっても、そこには現代暗号のエッセンスが垣間見られます。その後、共通鍵暗号や公開鍵暗号といった現代暗号について解説します。これが暗号技術の基本となり、デジタル署名やハッシュ関数につながります。最後には暗号技術の応用アプリケーションについて紹介します。

暗号技術の絡み合いを解き明かす
暗号技術は様々な技術の組み合わせで構成されています。これをアルゴリズムという観点から解き明かします。アルゴリズムというとその内部動作ばかりに目が向きがちですが、本書ではアルゴリズムの入出力に注目します。これにより、アルゴリズムの相互関係がより明確になります。

「読める」「使える」「見える」「楽しむ」が目標
本書を通じて、暗号の基本だけでなく、暗号技術の世界に慣れることができます。その結果、以下のことを実現できます。

・「読める」…専門書や論文を読む準備ができる。
・「使える」…適切な運用や実装ができる。
・「見える」…日常に隠された暗号技術に気付く。
・「楽しむ」…古典暗号と現代暗号に魅了される。

数学も克服する
現代暗号は数学を基礎としているため、複雑な数式が登場します。数式を避けて理解するというアプローチもありますが、本書では数式を克服して理解するアプローチを採用しています。より発展的な文献を読むためには、数式の理解が必須条件であるためです。
本書では、高校レベル程度の数学を前提としていますが、必要に応じて復習しています。また、図解を多くすることによって、理解しやすくなるように配慮しました。

対象読者
・推理小説や歴史小説で暗号に興味を持った方
・基礎から暗号技術について学びたい方
・開発や運用で暗号技術に携わる方
・セキュリティ全般に興味がある方
・これまで暗号の勉強に挑戦したが、挫折してしまった方
・暗号講座を受講している学生の方
・資格試験やCTFで暗号理論の問題を得点源にしたい方

本書の読み方
基本的には1章から読むことで段階的に理解を深められる構成になっていますが、途中の項目から読むこともできます。関連項目を設けているので、他のページに行き来しやすいようになっています。
もし読み進めているときにわからない箇所があっても、そこで諦めないでください。とりあえずはそういったものだと割り切り、読み進めることをお勧めします。全体を理解することが重要です。個々の細かい内容については、必要に応じて理解すれば十分です。

「安全性/効率性/実装の容易さ」の表記について
本書では、各暗号技術について、以下の項目を★マークでランク付けしています。5段階評価で、★が多いほど以下の点に優れています。

・「安全性」…強い安全性を満たす、弱い仮定しか必要としない、現実的な環境を想定している
・「効率性」…計算処理が速い、扱うデータサイズが小さい、通信サイズや回数が小さい、並列処理ができる
・「実装の容易さ」…単純な処理で実現できる、共通処理が多い、ライブラリが普及している

なお、古典暗号と現代暗号では利用できる技術や背景が大きく異なるため、それぞれ独立して評価しています。古典暗号で安全性が★5つでも、現在のコンピュータを使えば容易に解読できます。しかし、現代暗号で★5つのものは、高性能なコンピュータを用いても、現時点では効率的な解読が不可能です。

IPUSIRON (著)
出版社 : 翔泳社; 第1版 (2017/8/3) 、出典:出版社HP

CONTENTS

まえがき
本書の特徴
ダウンロード特典について

CHAPTER1 セキュリティと暗号技術
1.1 情報セキュリティの構成要素
1.1.1 情報セキュリティの6要素
1.1.2 要素と暗号技術の関係
1.2 セキュリティを実現する暗号技術
1.2.1 暗号の基礎技術
1.3 暗号技術のアルゴリズムを意識する
1.3.1 アルゴリズムを分けて考える
1.3.2 暗号技術をアルゴリズムとしてとらえる理由
1.3.3 本書におけるアルゴリズムの表現

CHAPTER2 古典暗号
2.1 古典暗号の概要
2.1.1 古典暗号とは
2.1.2 古典暗号の平文空間
2.2 シーザー暗号
2.2.1 シーザー暗号とは
2.2.2 シーザー暗号のアルゴリズム
2.2.3 シーザー暗号の改良
2.3 コード
2.3.1 コードとは
2.3.2 コードのアルゴリズム
2.3.3 コードの解読
2.4 スキュタレー暗号
2.4.1 スキュタレー暗号とは
2.4.2 スキュタレー暗号のアルゴリズム
2.4.3 スキュタレー暗号の解読
2.5 転置式暗号
2.5.1 転置式暗号とは
2.5.2 転式暗号のアルゴリズム
2.5.3 転置式暗号の数
2.6 単一換字式暗号
2.6.1 換字式暗号とは
2.6.2 単一換字式暗号のアルゴリズム
2.6.3 単一換字式暗号の鍵数
2.6.4 アルベルティの暗号円盤
2.6.5 度分析による暗号解読
2.6.6 頻度分析への対策
2.7 多表式暗号
2.7.1 多表式暗号とは
2.7.2 トマス・ジェファーソンの暗号筒
2.7.3 ヴィジュネル暗号
2.7.4 多表式暗号の解読
2.7.5 ヴィジュネル暗号の改良

CHAPTER3 共通鍵暗号
3.1 古典暗号から現代暗号へ
3.1.1 現代暗号の発展
3.2 共通體暗号の概要
3.2.1 共通鍵暗号とは
3.3 共通鍵暗号の定義
3.3.1 共通鍵暗号の構成
3.4 共通鍵暗号の仕組み
3.4.1 共通鍵暗号のやり取り
3.4.2 共通鍵暗号の性質
3.4.3 共通鍵暗号の平文空間と暗号文空間
3.5 共通鍵暗号の安全性
3.5.1 共通鍵暗号の設計方針
3.5.2 共通鍵暗号の攻撃モデル
3.5.3 共通鍵暗号の解読モデル
3.5.4 安全な共通鍵暗号と健全数探索攻撃
3.6 共通鍵暗号の分類
3.6.1 ストリーム暗号
3.6.2 ブロック暗号
3.7 バーナム暗号
3.7.1 バーナム暗号とは
3.7.2 排他的論理和
3.7.3 ビットの共通鍵暗号
3.7.4 バーナム暗号の定義
3.7.5 バーナム暗号の計算で遊ぶ
3.7.6 バーナム暗号の安全性
3.7.7 バーナム暗号の死角を探る
3.8 ストリーム暗号
3.8.1 ストリーム暗号とは
3.8.2 ストリーム暗号の定義
3.8.3 ストリーム暗号の安全性
3.8.4 ストリーム暗号の死角を採る
3.9ブロック暗号
3.9.1 ブロック暗号の定義
3.9.2 ブロック暗号の暗号構造
3.9.3 ブロック暗号の安全性
3.9.4 ブロック暗号に対する全面的攻撃
3.9.5 ブロック暗号に対する識別攻撃
3.9.6 セキュリティマージン
3.9.7 ブロック暗号の処理時間
3.10 <ブロック暗号>DES
3.10.1 DESの概要
3.10.2 DESの定義
3.10.3 DESの死角を探る
3.10.4 S-DES
3.11 <ブロック暗号>トリプルDES
3.11.1 トリプルDESとは
3.11.2 トリプルDES定義
3.11.3 トリプルDESの特徴
3.11.4 トリプルDESの改良
3.12 <ブロック暗号>AES
3.12.1 AESとは
3.12.2 AESの種類
3.12.3 AESの定義
3.12.4 AESの特徴
3.12.5 AESの安全性
3.13 ブロック暗号の利用モード
3.13.1 利用モードとは
3.13.2 暗号化モードとは
3.13.3 暗号化モードの定義
3.13.4 暗号化モードの安全性
3.13.5 どの暗号化モードを採用するか
3.14 <暗号化モード>ECBモード
3.14.1 ECBモードとは
3.14.2 ECBモードの定義
3.14.3 ECBモードの死角を採る
3.15 <暗号化モード>CBCモード
3.15.1 CBCモードとは
3.15.2 CBCモードの定義
3.15.3 CBCモードの特徴
3.15.4 CBCモードの死角を採る
3.16 <暗号化モード>
3.16.1 CFBモード
3.16.2 CFBモードとは
3.16.3 CFBモードの定義
3.16.4 CFBモードの特徴
3.17 <暗号化モード>CFBモード
3.17.1 CFBモードとは
3.17.2 CFBモードの定義
3.17.3 CFBモードの特徴
3.18 <暗号化モード>CTRモード
3.18.1 CTRモードとは
3.18.2 CTRモードの定義
3.18.3 CTRモードの特徴
3.18.4 CTRモードの死角を採る
3.18.5 CTRモードとバーナム暗号

CHAPTER4 公開鍵暗号
4.1 公開鍵暗号の概要
4.1.1 公開鍵暗号とは
4.2 公開鍵暗号の定義
4.2.1 公開鍵暗号の構成
4.2.2 公開鍵暗号の仕組み
4.2.3 公開鍵暗号の性質
4.3 公開鍵暗号の安全性
4.3.1 公開鍵暗号の攻撃モデル
4.3.2 公開鍵暗号の解読モデル
4.3.3 公開鍵暗号の安全性の関係
4.3.4 安全性の定式化
4.4 公開鍵暗号に対する攻撃
4.4.1 公開鍵暗号に対する攻撃の分類
4.4.2 公開鍵のすり替え
4.4.3 全数探索攻撃
4.5 RSA暗号
4.5.1 RSA暗号とは
4.5.2 RSA暗号を理解するための数学知識
4.5.3 RSA暗号の定義
4.5.4 RSA暗号の計算で遊ぶ
4.5.5 RSA暗号に対する攻撃
4.5.6 素数の生成
4.5.7 RSA暗号の死角を探る
4.5.8 RSA暗号の効率化
4.6 Gamal暗号
4.6.1 Gamal暗号とは
4.6.2 Gamal暗号を理解するための数学知識
4.6.3 Gamal暗号の定義
4.6.4 Gamal暗号の計算で遊ぶ
4.6.5 Gamal暗号の死角を探る
4.6.6 Gamal暗号の改良
4.7 一般日Gamal暗号
4.7.1 一般日Gamal暗号とは
4.7.2 一般日Gamal暗号を理解するための数学知識
4.7.3 離散対数問題と群
4.7.4 一般日Gamal暗号の定義
4.7.5 一般日Gamal暗号の計算で遊ぶ
4.7.6 一般日Gamal暗号の死角を探る
4.8 Rabin暗号
4.8.1 Rabin暗号とは
4.8.2 Rabin暗号を理解するための数学知識
4.8.3 Rabin暗号の定義
4.8.4 Rabin暗号の計算で遊ぶ
4.8.5 Rabin暗号に対する攻撃
4.8.6 Rabin暗号の死角を採る
4.9 RSA-OAEP
4.9.1 RSA-OAEPとは
4.9.2 RSA-OAEPの定義
4.9.3 RSA-OAEPの計算で遊ぶ
4.9.4 RSA-OAEPに対する攻撃
4.9.5 RSA-OAEPの効率性
4.10 楕円日Gamal暗号(楕円曲線暗号)
4.10.1 楕円日Gamal暗号とは
4.10.2 楕円日Gamal暗号を理解するための数学知識
4.10.3 楕円日Gamal暗号の定義
4.10.4 精円日Gamal暗号の計算で遊ぶ
4.10.5 楕円日Gamal暗号の死角を採る
4.10.6 楕円曲線上のペアリング
4.11 IDベース暗号
4.11.1 IDベース暗号とは
4.11.2 IDベース暗号の定義
4.11.3 IDベース暗号の仕組み
4.11.4 IDベース暗号の死角を探る
4.11.5 Boneh-Franklin IDベース暗号の定義
4.11.6 Boneh-Franklin IDベース暗号の計算で遊ぶ
4.11.7 Boneh-Franklin IDベース暗号の死角を探る

CHAPTER5 ハッシュ関数
5.1 ハッシュ関数の概要
5.1.1 ハッシュ関数とは
5.2 ハッシュ関数の安全性
5.2.1 理想的なハッシュ関数
5.2.2 ハッシュ関数の標準的な安全性
5.2.3 衝突ペアが求まる条件と確率
5.2.4 3つの安全性を破るための計算回数
5.2.5 その他の安全性
5.3 ハッシュ関数の応用
5.3.1 データ改ざんの検出
5.3.2 暗号技術の構成要素としての利用
5.4 ハッシュ関数の基本設計
5.4.1 安全なハッシュ関数に必要な処理
5.4.2 撹拌処理を実現するということ
5.4.3 圧縮処理と一方向性を同時に実現するということ
5.5 反復型ハッシュ関数
5.5.1 反復型ハッシュ関数とは
5.5.2 圧縮関数
5.5.3 MD変換
5.5.4 圧縮関数の構成方法
5.5.5 反復型ハッシュ関数と圧縮関数の安全性
5.6 代用的なハッシュ関数
5.6.1 MD4/MD5
5.6.2 SHA-1/SHA-2
5.6.3 SHA-3
5.7 ハッシュ関数への攻撃
5.7.1 誕生日攻撃を超える衝突攻撃
5.7.2 伸長攻撃

CHAPTER6 メッセージ認証コード
6.1 メッセージ認証コードの概要
6.1.1 メッセージ認証の必要性
6.1.2 メッセージ認証コードの仕組み
6.1.3 メッセージ認証コードの設計方針
6.2 メッセージ認証コードの課題
6.2.1 メッセージ認証コードにできないこと
6.2.2 再送攻撃
6.3 メッセージ認証コードの安全性
6.3.1 メッセージ認証コードにおける安全性とは
6.3.2 選択メッセージ攻撃に対する偽造不可能性
6.3.3 疑似ランダム関数との識別不可能性
6.4 CBC-MAC
6.4.1 CBC-MACとは
6.4.2 CBC-MACの仕組み
6.4.3 CBC-MACの死角を探る
6.5 EMAC
6.5.1 BMACとは
6.5.2 EMACの仕組み
6.5.3 EMACの死角を探る
6.6 AMAC
6.6.1 AMACとは
6.6.2 AMACの仕組み
6.6.3 AMACの死角を探る
6.7 HMAC
6.7.1 HMACとは
6.7.2 HMACの仕組み
6.7.3 HMACの死角を探る
6.8 認証暗号
6.8.1 認証暗号とは
6.8.2 暗号化-and-MAC
6.8.3 暗号化-then-MAC
6.8.4 MAC-then-暗号化
6.8.5 認証付暗号化モード

CHAPTER7 デジタル署名
7.1 デジタル署名の概要
7.1.1 デジタル署名とは
7.2 デジタル署名の定義
7.2.1 デジタル署名の構成
7.2.2 デジタル署名の仕組み
7.2.3 デジタル署名の性質
7.3 デジタル署名と公開鍵暗号の関係
7.3.1 デジタル署名と危殆
7.3.2 公開鍵暗号からデジタル署名を作れるか
7.4 デジタル署名の安全性
7.4.1 安全なデジタル署名とは
7.4.2 デジタル署名の攻撃の種類
7.4.3 デジタル署名の偽造の種類
7.4.4 デジタル署名の安全性レベル
7.5 デジタル署名に対する攻撃
7.5.1 検証鍵の正当性と構成部品の安全性
7.5.2 中間者攻撃
7.5.3 ハッシュ関数を用いたデジタル署名に対する攻撃
7.6 RSA署名
7.6.1 RSA署名とは
7.6.2 RSA署名の定義
7.6.3 RSA暗号とRSA署名のアルゴリズムの比較
7.6.4 RSA署名の計算で遊ぶ
7.6.5 RSA署名の死角を探る
7.6.6 RSA署名の改良
7.7 RSA-FDH署名
7.7.1 RSA-FDH署名とは
7.7.2 RSA-FDH署名の定義
7.7.3 RSA-FDH署名の計算で遊ぶ
7.7.4 RSA-FDH署名の死角を探る
7.8 日Gamal署名
7.8.1 日Gamal署名とは
7.8.2 日Gamal署名の定義
7.8.3 日Gamal署名の計算で遊ぶ
7.8.4 日Gamal署名の死角を探る
7.8.5 日Gamal署名の一般化
7.9 Schnorr署名
7.9.1 Schnorr署名とは
7.9.2 Schnorr著名の定義
7.9.3 Schnarr署名の計算で遊ぶ
7.9.4 Schnorr署名の死角を探る
7.10 DSA署名
7.10.1 DSA署名とは
7.10.2 DSA署名の定義
7.10.3 DSA署名の計算で遊ぶ
7.10.4 DSA署名の死角を探る
7.11 その他の署名
7.11.1 メッセージ復元型署名
7.11.2 使い捨て署名
7.11.3 否認不可署名
7.11.4 故障停止署名
7.11.5 ブラインド署名
7.11.6 グループ署名
7.11.7 リング署名
7.11.8 検証者指定署名
7.11.9 代理署名
7.11.10 フォワード安全署名

CHAPTER8 鍵と乱数
8.1 鍵の配送
8.1.1 安全に配送する
8.1.2 事前に鍵を直接渡す
8.1.3 鍵配送センタの力を借りる
8.1.4 共通鍵暗号による鍵共有
8.1.5 公開鍵暗号による鍵共有
8.1.6 Diffie-Hellmanの健共有
8.1.7 Station-to-Stationプロトコルの鍵共有
8.1.8 楕円曲線上のDiffie-Hellmanの共有
8.1.9 ハイブリッド暗号
8.2 鍵管理
8.2.1 鍵管理の重要性
8.2.2 鍵生成
8.2.3 鍵の保存
8.2.4 鍵の寿命
8.2.5 鍵の廃棄
8.3 PKI(公開鍵基盤)
8.3.1 公開鍵の正当性
8.3.2 フィンガープリントによる公開鍵の正当性確認
8.3.3 信頼の輪モデルによる公開鍵の正当性確認
8.3.4 認証局モデルによる公開鍵の正当性確認
8.3.5 認証局
8.4 リポジトリ
8.4.1 リポジトリとは
8.5 電子証明書
8.5.1 電子証明書とは
8.5.2 証明書のフォーマット
8.5.3 証明書の種類
8.5.4 証明書の信頼性
8.5.5 証明書に対する攻撃
8.6 乱数
8.6.1 ランダム
8.6.2 乱数と乱数系列
8.6.3 乱数の周期
8.6.4 乱数の性質
8.6.5 似乱数と真性乱数
8.7 疑似乱数生成器
8.7.1 似乱数生成器とは
8.7.2 疑似乱数生成器の原理
8.7.3 線形合同法
8.7.4 線形化式
8.7.5 カーネル内の乱数生成器
8.7.6 ハードウェア乱数生成器を体験する
8.7.7 計算量的に安全な疑似乱数生成器

CHAPTER9 その他の暗号トピック
9.1 ゼロ知識証明プロトコル
9.1.1 証明プロトコルとは
9.1.2 ゼロ知識証明プロトコルとは
9.1.3 ゼロ知識証明プロトコルの性質
9.1.4 離散対数問題の困難性にもとづくゼロ知識証明プロトコル
9.1.5 Schnorrの証明プロトコル
9.1.6 対話証明から非対話証明への変換
9.1.7 非対話証明からデジタル署名への変換
9.2 秘密分散共有法
9.2.1 秘密分散共有法とは
9.2.2 秘密分散共有法の定義
9.2.3 満場一致法を採用した秘密分散共有法
9.2.4 しきい値法
9.3 電子透かし
9.3.1 電子透かしとは
9.3.2 人が識別できない情報を埋め込む理由
9.3.3 電子透かしの仕組み
9.3.4 電子透かしの実現
9.3.5 電子透かしの要件
9.3.6 電子透かしの種類
9.3.7 電子透かしで実現できる技術
9.3.8 秘密通信
9.4 SSL
9.4.1 SSLとは
9.4.2 SSL通信の仕組み
9.5 OpenSSL
9.5.1 OpenSSL
9.5.2 OpenSSLで共通鍵暗号を体験する
9.5.3 OpenSSLで公開鍵暗号を体験する
9.5.4 OpenSSLでデジタル署名を体験する
9.6 ビットコイン
9.6.1 ビットコインと暗号
9.6.2 ビットコインの単位と価値
9.6.3 P2Pネットワーク
9.6.4 ウォレット
9.6.5 ビットコインアドレス
9.6.6 ブロックチェーン
9.6.7 マイニング

巻末付録 補足資料

参考文献
索引

IPUSIRON (著)
出版社 : 翔泳社; 第1版 (2017/8/3) 、出典:出版社HP