登録は簡単!. 無料です
または 登録 あなたのEメールアドレスで登録
Rocket clouds
暗号技術 により Mind Map: 暗号技術

1. 4つのセキュリティ脅威

1.1. 盗聴リスク

1.1.1. 対策

1.1.1.1. 公開鍵暗号方式

1.1.1.2. 共通鍵暗号方式

1.2. 改竄リスク

1.2.1. 対策

1.2.1.1. 一方向ハッシュ関数

1.2.1.2. メッセージ認証コード

1.3. なりすましリスク

1.3.1. 対策

1.3.1.1. メッセージ認証コード

1.3.1.2. デジタル署名

1.4. 否認リスク

1.4.1. 対策

1.4.1.1. デジタル署名

2. 暗号化の歴史

2.1. 主要な暗号技術

2.1.1. シーザー暗号方式

2.1.2. 単一換字方式

2.1.3. エニグマ

3. 対称暗号方式

3.1. 平文の暗号化と復号化を同じ鍵を使って行う

3.2. 暗号化方式

3.2.1. XOR

3.2.1.1. 乱数で生成されたビットパターンを、ビットパターンに 変換した平文に当てはめて暗号化を行う方法

3.2.1.2. 解読時には、乱数で生成したビットパターンを取り除くことに よって復号化する

3.2.1.3. 世界標準の対称暗号アルゴリズム

3.2.1.3.1. DES

3.2.1.3.2. トリプルDES

3.2.1.3.3. AES

3.3. 問題点

3.3.1. 鍵を受信者にうまく運ぶにはどうすればいいか

3.3.1.1. 公開鍵暗号方式を組み合わせて使う

4. 公開鍵暗号方式

4.1. 鍵配送問題を解決する一つの方法に公開鍵暗号方式が存在する

4.1.1. 鍵配送問題

4.1.1.1. 対称鍵暗号方式で平文を暗号化しても、復号化のための鍵の共有(受信者との)が難しい 理由: 暗号化した文章と共に受信者に送信すると盗聴者にどちらも盗まれてしまう可能性

4.1.1.1.1. 公開鍵方式での解決手順

4.2. 現在広く使われている暗号方式

4.2.1. SSH通信などで使用されている

4.3. コインロッカーに例えると、 ・ロッカーをロックするための鍵がコイン(便宜上100円玉) ・ロッカーを解錠するための鍵がロッカー毎の鍵 ・ロッカーをロックする鍵が100円玉であればどれでもいいが、 そのロッカーを解錠するにはそのロッカー固有の鍵が必要

4.4. 公開鍵暗号アルゴリズム

4.4.1. RSA

4.4.1.1. 1. 公開鍵暗号方式 2. デジタル署名 上記2つで使用されている

4.4.1.2. 計算式

4.4.1.2.1. 暗号化: x^e mod n 復号化: x^d mod n

4.4.1.3. RSA-OAEP

4.4.1.3.1. 選択暗号文攻撃に対処するため に作られたRSAの拡張版

4.4.1.4. もっとも普及している公開鍵暗号アルゴリズム

4.4.1.5. その他のアルゴリズム

4.4.1.5.1. Elgamal方式

4.4.1.5.2. Rabin方式

4.4.1.5.3. 楕円曲線暗号

4.5. Man in the middle 問題

4.5.1. 送信者と受信者の間に悪意を持った人物(マロリー)が入り、 送信者と受信者の通信を偽装する方法

4.5.1.1. 1. 送信者が受信者に公開鍵を送信

4.5.1.2. 2. 送信者に送られるはずの公開鍵をマロリーが盗み、 マロリー自身の公開鍵を受信者に偽装送信

4.5.1.3. 3. 受信者に送信者の公開鍵(実はマロリーの公開鍵) が届く

4.5.1.4. 4. 受信者は受け取った公開鍵を送信者のものだと思い込み、 実はマロリーの公開鍵で情報を暗号化し送信者に送信

4.5.1.5. 受信者が送信者に送信した暗号化された情報(マロリーの公開鍵で)を マロリーはまたも盗み取り、自分の秘密鍵で暗号を復元し情報を盗む

5. どれも解読されている

6. 固定長ビットの平文しか暗号化出来ない (ブロック暗号)

6.1. 任意の長さの平文を暗号化するためには ブロック暗号を繰り返す必要がある(ブロック暗号のモード)

7. 以上の問題を解決するために 送信者が受信者に送った公開 鍵が本当に送信者のものなのか 認証する作業が必要

8. ハイブリッド暗号システム

8.1. 両者のメリットを組み合わせたもの

8.1.1. 対称暗号で暗号化し、 対称暗号の暗号化で 使った鍵を公開鍵暗号 で暗号化する方法

8.1.2. 公開鍵暗号のデメリット

8.1.2.1. 1. 対称暗号に比べて処理が遅い

8.1.2.2. 2. man in the middle攻撃に弱い

8.1.2.2.1. ※ハイブリット暗号はman in the middle に対処できるものではなく、これを解決 するには公開鍵の[認証]が必要になる

8.1.3. 対称暗号のデメリット

8.1.3.1. 鍵配送問題

8.2. SSL/TLSで使われている

9. 一方向ハッシュ関数

9.1. Aさんのファイルは本当にAさんが 作成したものなのかはAさん本人にも わからない

9.1.1. 物理的にAさんのファイルを他人が書き換えたり、 ネットワークを通じてAさんのPCに侵入し、 ファイルを書き換えられている可能性がある つまり、正真性を証明するのは難しい

9.1.1.1. それを解決するのが一方向ハッシュ関数

9.1.1.1.1. 1. Aさんはファイルのハッシュ値を算出する

9.1.1.1.2. 2. そのハッシュ値を安全な場所に保管する (ハッシュ値のサイズは32バイトと固定なので 保管もしやすい)※SHA-256

9.1.1.1.3. 3. 後日、もう一度同じファイルのハッシュ値を計算する

9.1.1.1.4. 4. もし最初に算出したハッシュ値と同じハッシュ値であれば高確率で同じものと言える

9.2. 入力 (メッセージ)

9.3. 出力 (ハッシュ値)

9.3.1. メッセージの正真性のチェックに使う

9.3.2. 入力サイズがいくら大きくても、 ハッシュ値は常に固定

9.4. 衝突

9.4.1. 複数の異なる入力が同じ出力になること

9.4.1.1. 耐衝突性を持つ必要がある

9.4.1.2. 弱衝突耐性

9.4.1.2.1. そのハッシュ値を持つ別の入力を見つけ 出すことが非常に困難な状態

9.4.1.3. 強衝突耐性

9.4.1.3.1. ハッシュ値が一致する複数の入力を見つ け出すことが非常に困難な状態

9.5. 一方向性

9.5.1. 入力からハッシュ値を導き出せても その逆はできないようなものである 必要がある

9.6. 応用例

9.6.1. ソフトウェアの改竄検出

9.6.2. パスワードを元にした暗号化

9.6.3. メッセージ認証コード

9.6.4. デジタル署名

9.6.5. 擬似乱数生成器

9.6.6. ワンタイムパスワード

9.7. 一方向ハッシュ関数を成す アルゴリズムの種類

9.7.1. SHA-1

9.7.1.1. 破られた過去がある

9.7.2. SHA-2 (SHA-256, SHA-224 etc)

9.7.2.1. 現在まで破られていない

9.7.3. SHA-3 (Keccack)

9.7.3.1. NISTによりコンペ方式で採用されたアルゴリズム

9.7.3.2. 現在まで破られていない

9.7.4. MD5

9.7.4.1. 破られた過去がある

9.8. 一方向ハッシュ関数では解決できない問題

9.8.1. なりすましを検出できない

9.8.1.1. ファイルの正真性を調べるだけでなく、 そのファイルが本当に本人により作られた ものなのかを認証する必要がある

9.8.1.1.1. 解決手段

10. メッセージ認証コード

10.1. メッセージは正しく送られてきたか

10.2. MAC(message authentication code)ともいう

10.3. 鍵に依存した一方向ハッシュ関数

10.3.1. 任意長のメッセージと、送信者と受信者が共有する鍵(対称暗号鍵) という入力を元にして、固定ビット長の出力を計算する(MAC値)。

10.4. 認証手順

10.4.1. 1. 送信者と受信者は前もって鍵を共有する

10.4.2. 2. 送信者は送信内容メッセージを元にしてMAC値を計算 (共有鍵と送信内容メッセージを元にしてMAC値を計算)

10.4.3. 3. 送信者は受信者に対して、メッセージとMAC値を送信

10.4.4. 4. 受信者は受信したMAC値と、計算(受信者の鍵と送られて きたメッセージを元にして計算)して算出したMAC値を比較

10.4.5. 5. 二つのMAC値が等しければ認証成功

10.5. 利用例

10.5.1. 銀行間送金

10.5.2. SSL/TLS

10.5.3. IPsec

10.6. 暗号化方式

10.6.1. GCM

10.6.2. GMAC

10.6.3. HMAC

10.7. メッセージ認証コードに対する攻撃

10.7.1. リプレイアタック(再生攻撃)

10.7.1.1. 1. マロリーはA銀行に行き、B銀行にある自分の口座に100万円を入金する

10.7.1.2. 2. A銀行は"マロリーの口座に100万円を入金せよ"というメッセージを作成する

10.7.1.3. 3. この入金依頼のメッセージの正しいMAC値を計算し、メッセージにMAC値を付加してB銀行へ送信する

10.7.1.4. 4. この送信メッセージをマロリーは盗聴し、A銀行のメッセージとMAC値を盗み保存する

10.7.1.5. 5. B銀行にA銀行からのメッセージが届き、MAC値を計算しマロリーの口座に100万円を入金する

10.7.1.6. マロリーは自分の手元にあるA銀行のメッセージとMAC値をB銀行に100回送信する

10.7.1.7. 6. B銀行は2回目以降のA銀行からのメッセージ(本当はマロリーが送ったもの)を元に MAC値の正当性を確認し100回マロリーの口座に100万円を入金する

10.7.1.8. 対処法

10.7.1.8.1. シーケンス番号をMAC値に付加する

10.7.1.8.2. タイムスタンプを付加する

10.7.1.8.3. ノンスを付加する

10.7.2. 総当たり攻撃

10.7.3. 誕生日攻撃

10.8. 解決できない問題

10.8.1. デジタル署名で解決できる

10.8.2. 第三者に対する証明

10.8.2.1. AとBのやりとりの内容を、Cに証明しようとしてもできない (Cからすると、AとBのMAC値が性格だとしても、本当にAと Bがやりとりしていたかまではわからない。例えば、Aの発信 機を盗んだXがBと通信していたかもしれないなど)

10.8.3. 否認防止

10.8.3.1. 第三者にAとBのやりとりを証明できない。 例えば、AとBの間でメッセージ認証コー ドを使用して約束事をしていたとする。 それを第三者に証明しようとした時、 AとBのどちらかがその事実を否認しても 第三者からは判断できない。

11. デジタル署名

11.1. 印鑑の捺印やサインに相当することを デジタルで行う

11.2. 否認を阻止するための暗号方式

11.2.1. デジタル署名や、公開鍵暗号方式などでやりとりする 内容は、確かに改ざんやなりすましを阻止できる が、否認に対する対策はできない

11.3. 二つの鍵

11.3.1. 署名用の鍵

11.3.1.1. 署名用の鍵で送信者がメッセージに署名を作成する(暗号化)

11.3.1.1.1. 公開鍵方式でいうプライベートキー

11.3.2. 検証用の鍵

11.3.2.1. 検証用の鍵で受信者がメッセージを検証する(復号化)

11.3.2.1.1. 公開鍵方式でいうパブリックキー

11.3.3. 二つの方法

11.3.3.1. メッセージ全体を暗号化する

11.3.3.1.1. 任意長のメッセージを暗号化するので、暗号化する際に 計算時間が長くなる

11.3.3.2. ハッシュ値を暗号化する

11.3.3.2.1. 一方向ハッシュ関数でメッセージのハッシュ値を求め そのハッシュ値を暗号化する

11.3.4. デジタル署名は、”プライベートキーをもっているのは常にその鍵を作り出した 個人だから、鍵をもっている人にしか作り出せない”という考えのもと利用されている

11.4. 利用例

11.4.1. ソフトウェアのダウンロード

11.4.2. 公開鍵の証明書

11.4.3. TLS/SSL

11.5. 暗号化方式アルゴリズム

11.5.1. RSA

11.5.2. ElGamal

11.5.3. DSA

11.5.4. ECDSA

11.5.5. Rabin

11.6. デジタル署名に対する攻撃

11.6.1. man in the middle

11.6.2. 一方向ハッシュ関数に対する攻撃

11.6.3. デジタル署名を使って公開鍵暗号を攻撃

11.7. 解決できない問題

11.7.1. 改ざんされていない公開鍵を、なりすましされていない送信者 からどうやって受け取るのか

11.7.1.1. 解決策

11.7.1.1.1. 公開鍵の証明書を発行(本質的な問題解決策ではない)

12. 証明書

12.1. 公開鍵が正しいかどうかを証明する

12.2. 公開鍵の証明書を作成する (送信者, 受信者, 信頼できる認証局)

12.2.1. 1. メッセージの受信者は、まず公開鍵暗号方式で鍵ペアを作成

12.2.2. 2. 受信者はは自身の公開鍵を認証局に登録

12.2.3. 3. 認証局は受信者はの公開鍵に自局のプライベートキーで デジタル署名を行い、証明書を作成

12.2.4. 4. 送信者は認証局のデジタル署名がついた受信者の公開鍵(証明書)を入手

12.2.5. 5. 送信者は認証局の公開鍵を使いデジタル署名を検証し、 受信者の公開鍵正しいことを確認

12.2.6. 6. 送信者は受信者の公開鍵でメッセージを暗号化し、受信者に送信

12.2.7. 7. 受信者は自身のプライベートキーで復号化し、 メッセージを読む

12.3. 証明書に対する攻撃

12.3.1. 公開鍵の登録前を攻撃

12.3.1.1. 対策

12.3.1.1.1. 認証局の公開鍵で自身の公開鍵を暗号化する

12.3.2. 似た人間を登録する攻撃

12.3.2.1. 悪意を持った人間が特定の人物になりすまし (特定の人物が認証局に登録するときに、仮に Bobという名前で登録したとする。 同じように悪意を持った人間も認証局に自身を登録す るが、そのときBOBという全て大文字の名前で登録する。 そうすると、証明書を受理する人間は本物のBobからの メッセージであると誤認してしまい、悪意を持った 人間とその後やりとりをすることになる可能性 がある)

12.3.2.1.1. 対策

12.3.3. 認証局のプライベートキーを盗む攻撃

13. SSL/TLS

13.1. 世界で最も使われている暗号通信

13.1.1. WEBサーバーによって広く使われている

13.2. "https://....."

13.3. HTTP通信をSSL/TLSの上に乗せる

13.3.1. リクエストやレスポンスの内容を暗号化し、セキュアな通信を実現

13.3.2. HTTP以外の通信プロトコルでもSSL/TLSを使用可能

13.4. 暗号技術のフレームワークである

13.4.1. 対称暗号、公開鍵暗号、擬似乱数生成器、 メッセージ認証コード、一方向ハッシュ関数、 デジタル署名を組み合わせている

13.5. SSL/TLSに対する攻撃

13.5.1. ここの暗号技術への攻撃

13.5.2. 擬似乱数生成器への攻撃

13.5.3. 証明書の隙をつく攻撃

14. PGP

14.1. pretty good privacy

14.2. 暗号ソフトウェア

14.2.1. 暗号技術のパッケージ

14.3. 種類

14.3.1. OpenPGP

14.3.2. GNU Privacy Guard