• 検索結果がありません。

情報セキュリティ 第09回

N/A
N/A
Protected

Academic year: 2021

シェア "情報セキュリティ 第09回"

Copied!
9
0
0

読み込み中.... (全文を見る)

全文

(1)

情報セキュリティ 第09回

大久保誠也 静岡県立大学経営情報学部

2/48

はじめに

はじめに

安全な通信の目的

ハイブリッド暗号

ssh

演習

3/48

安全な通信の目的

4/48 Hello

World

Hello World

盗聴

Hello World

Bob

送信

Alice

Hello World

Hello World

Eve

盗聴

A:>

Hello World

覗き見して

やろう

Aliceから

メールが来た。

送信

外部に漏れてな いかなぁ?

5/48

改ざん

9時 集合

12時

送信

集合

12時 集合

このメールは 正しいのかな?

Mallory

通信内容を 書き換えてやれ

Alice

Bob

6/48 hogehoge

Mallory

Bob

送信

hogehoge

hogehoge

hogehoge

なりすまし

Aliceからメールが

来たけど、

本当に

Alice

なのかな?

Aliceを語って

送信だ!

(2)

7/48

シンプルな通信方法

8/48 ID

PASSWD

Alice

Bob

送信

あsdふぁsd Jlkjぇwkf

「秘密鍵」で復号

ID PASSWD

あsdふぁsd Jlkjぇwkf

「秘密鍵」で 暗号化

盗聴しても、

復号できな い……。

秘密鍵暗号を用いた通信

(1)

9/48

秘密鍵暗号による通信(2)

盗聴について:

対処されている。間に盗聴者が居ても、内容が 漏れることはない。

事前に秘密鍵を受け渡しておく必要がある。

なりすましについて:

特に対処されていないが、攻撃者が秘密鍵を 持っていないなら意味のある通信にならない。

改ざんについて:

特に対処されていないが、改ざんされても意味 のある通信にならない。

10/48 ID

PASSWD

Alice

Bob

送信

あsdふぁsd Jlkjぇwkf

「秘密鍵」で復号

ID PASSWD

あsdふぁsd Jlkjぇwkf

「公開鍵」で 暗号化

秘 公

送信

公開鍵暗号を用いた通信(1)

盗聴しても、

復号できな

公 い……。

11/48

公開鍵暗号による通信

(2)

盗聴について:

対処されている。間に盗聴者が居ても、内容が 漏れることはない。

秘密鍵を事前に共有しておく必要はない。

大きい平文を送るには、処理が重い。

なりすましについて:

特に対処されていない。渡された公開鍵が正し いものか否か、判断しておく必要がある。

改ざんについて:

特に対処されていない。

12/48

公開鍵暗号と

秘密鍵暗号を

組み合わせた通信

(3)

13/48

アイデア

秘密鍵暗号は、事前に秘密鍵を受け渡ししておく必 要がある。

どうやって、鍵を受け渡しておくのか?

公開鍵暗号は、処理が重い。

どうやって、大量の平文を通信するのか?

秘密鍵暗号と公開鍵暗号を組み合わせて使う ハイブリッド暗号

1.

平文は秘密鍵暗号で暗号化する。

2.

秘密鍵暗号の秘密鍵(共通鍵)を公開鍵暗号で

暗号化する。

14/48

通信手順

(1)

平文

Bob

Alice

AliceはBobに平文を送りたい

15/48

通信手順

(2)

平文

Bob

Alice

Bobの公開鍵を

渡しておく

16/48

通信手順

(3)

平文

Bob

Alice

Bobの公開鍵を

渡しておく

共通鍵を生成

17/48

通信手順

(4)

平文

秘暗 秘

Bob

Alice

Bobの公開鍵を

渡しておく

共通鍵を生成

秘密鍵暗号で 平文を暗号化

平文

18/48

公開鍵暗号で 共通鍵を 暗号化

通信手順

(5)

平文

秘暗 秘

Bob

Alice

共 公暗

Bobの公開鍵を

渡しておく

共通鍵を生成

秘密鍵暗号で 平文を暗号化

平文

(4)

19/48

公開鍵暗号で 共通鍵を 暗号化

通信手順

(6)

平文

秘暗

送信

秘暗 秘

Bob

Alice

共 共

公暗 公暗

Bobの公開鍵を

渡しておく

共通鍵を生成

秘密鍵暗号で 平文を暗号化

平文 平文

送信する

20/48

公開鍵暗号で 共通鍵を 暗号化

通信手順

(7)

平文

秘暗

送信

秘暗 秘

Bob

Alice

共 共

共 共

公暗 公暗

Bobの公開鍵を

渡しておく

共通鍵を生成

秘密鍵暗号で 平文を暗号化

平文 平文

送信する

公開鍵暗号で 共通鍵を復号

21/48

公開鍵暗号で 共通鍵を 暗号化

通信手順

(8)

平文

秘暗

送信

平文

秘暗 秘

Bob

Alice

共 共

共 共

公暗 公暗

Bobの公開鍵を

渡しておく

共通鍵を生成

秘密鍵暗号で 平文を暗号化

平文 平文

送信する

公開鍵暗号で 共通鍵を復号

秘密鍵 暗号で 復号

22/48

通信手順 補足

平文

秘暗 送信

平文

秘暗 秘

Bob

Alice

Aliceからの

メールが来た。

復号しよう……。

共 共

共 共

公暗 公暗

パス

+ フレーズ 公

平文 平文

実際には パスフレーズも 使用することが多い

23/48

盗聴されても

Eve

平文

平文

暗 送信

平文

平文

暗 秘

Bobの

Bobの

Bob

Alice

共 共

共 共

暗 暗

盗聴しても、

復号できな い……。

パス

+ フレーズ

24/48

通信手順

以下のような流れで行われる。

1.AliceがBobにメールを送るとする。

2.Aliceは共通鍵を生成し、平文を暗号化する。

3.Aliceは共通鍵を、Bobの公開鍵で暗号化する。

4.Aliceは2と3で生成したものを、Bobにメールする。

5.Bobは、Bobの秘密鍵とパスフレーズで、Aliceから

送られた『暗号化された共通鍵 』 を復号し、共通鍵 を取り出す。

6.Bobは、取り出した共通鍵で、『暗号化された平

文』から平文を取り出す。

Eveは、Bobの秘密鍵を知らないため、共通鍵を取り

出せず、結果として平文を入手できない。

(5)

25/48

まとめ

秘密鍵暗号と公開鍵暗号を組み合わせて使う

1.

平文は秘密鍵暗号で暗号化する。

2.

秘密鍵暗号の鍵を公開鍵暗号で暗号化する。

秘密鍵暗号は、事前に秘密鍵を受け渡ししておく必 要がある。

どうやって、鍵を受け渡しておくのか?

→ 公開鍵暗号で秘密鍵暗号の鍵を暗号化。

公開鍵暗号は、処理が重い。

どうやって、大量の平文を通信するのか?

→ 小さい秘密鍵暗号の鍵のみを暗号化。

26/48

何が守れているのか

盗聴について:

対処されている。間に盗聴者が居ても、内容が 漏れることはない。

なりすましについて:

特に対処されていないが、攻撃者が秘密鍵を 持っていないなら意味のある通信にならない。

改ざんについて:

特に対処されていないが、改ざんされても意味 のある通信にならない。

さらに認証技術等と組み合わせる必要がある

27/48

ssh

28/48

sshとは

Secure Shell の略。

リモートの計算機と安全に通信するためのプロトコ ル。パスワードを含めた全てが暗号化される。

ハイブリット暗号方式を利用している。

なりすましにも、ある程度の耐性がある。

sshは、telnetを置き換えていることが多い。

ftpを置き換えるsftp等もある。

プロトコルはバージョンが2つある。

1

の使用は推奨されていない)

29/48

telnet

ssh

telnet

の場合

ssh

の場合

通信は平文 で行われる

通信はすべて暗号化さ れて行われる

30/48

ssh

teraterm

通信するプロトコルを 選択できる

sshの場合、認証方式

を選択

(6)

31/48

プレインテキストの場合の概要

32/48

プレインテキストの場合の 概要

(1)

計算機

Alice

公 公

Aliceはリモートの計算機に

接続して利用したい

33/48

プレインテキストの場合の 概要

(2)

計算機

Alice

送信

34/48

プレインテキストの場合の 概要

(3)

公 秘

計算機

Alice

送信

共通鍵を生成

秘 公

35/48

公開鍵暗号で 共通鍵を 暗号化

プレインテキストの場合の 概要

(4)

公 秘

計算機

Alice

共 公暗

送信

共通鍵を生成

秘 公

36/48

公開鍵暗号で 共通鍵を 暗号化

プレインテキストの場合の 概要

(5)

送信

計算機

Alice

共 共

公暗 公暗

送信

共通鍵を生成

送信する

(7)

37/48

公開鍵暗号で 共通鍵を 暗号化

プレインテキストの場合の 概要

(6)

送信

計算機

Alice

共 共

共 共

公暗 公暗

送信

共通鍵を生成

送信する

公開鍵暗号で 共通鍵を復号 公

公 秘

38/48

公開鍵暗号で 共通鍵を 暗号化

プレインテキストの場合の 概要

(7)

送信

計算機

Alice

共 共

共 共

公暗 公暗

送信

共通鍵を生成

送信する

公開鍵暗号で 共通鍵を復号 公

公 秘

共通鍵暗号を使用し て、今後の通信を行う

AliceはBobに平文を送りたい

39/48

片方はホスト鍵、もう片方はサーバー鍵である

はじめて通信した際、利用者はホスト鍵を保存して おく。

2

回目以降、保存しておいたホスト鍵と送られてきた ホスト鍵を比較する。

ssh

プロトコル バージョン1 の

2本の鍵

秘 公

ホスト鍵 サーバー鍵

定期的に 作り直す 基本的に

ずっと一緒

40/48

プレインテキストの場合の

概要

2回目以降 (1)

計算機

Alice

公 公

前回保存しておいた ホスト鍵

41/48

プレインテキストの場合の 概要

2

回目以降

(2)

計算機

Alice

送信

秘 公

比較する

42/48

プレインテキストの場合の 概要

2

回目以降

(3)

計算機

Alice

送信

秘 公

比較する

同じだったら、前回と同じ

計算機に接続しようとしている

(8)

43/48

プレインテキストの場合の 概要

2

回目以降

(4)

計算機

Alice

送信

秘 公

比較する

違っていれば、前回と異なる 計算機に接続しようとしている!

なりすまし

44/48

何が守れているのか

盗聴について:

対処されている。間に盗聴者が居ても、内容が 漏れることはない。

なりすましについて:

初回に成功していれば、2回目以降はなりすまし に(ある程度)耐性がある。

改ざんについて:

特に対処されていないが、改ざんされても意味 のある通信にならない。

さらに認証技術等と組み合わせる必要がある

45/48

演習:

8

進数と

16

進数

46/48

C

言語における

k

進数

計算機は、内部では

2

進数で計算しています。

printf

は、値を表示するときに、10進数に変換して表

示する機能があります。

C言語では、8進数表記や16進数表記で、値を表示す

ることも可能です。

16進数では、10~15の値はアルファベットa~fに割り

当て(10→a, 11→b, 12→c, 13→d, 14→e, 15→f )

printf("%d¥n",135)

printf("%d¥n",135)

printf("%d %o %x¥n",135,135,135) printf("%d %o %x¥n",135,135,135)

47/48

#include<stdio.h>

int main(){

int test;

test=12; // 1100 printf("%d ¥n",test);

printf("%o ¥n",test);

printf("%x ¥n",test);

}

#include<stdio.h>

int main(){

int test;

test=12; // 1100 printf("%d ¥n",test);

printf("%o ¥n",test);

printf("%x ¥n",test);

}

使用例

1

コンパイルは

として行う。

gcc sample08a.c gcc sample08a.c

48/48

#include<stdio.h>

int main(){

int test;

test=12; // 1100 printf("%d ¥n",test);

printf("%o ¥n",test);

printf("%x ¥n",test);

}

#include<stdio.h>

int main(){

int test;

test=12; // 1100 printf("%d ¥n",test);

printf("%o ¥n",test);

printf("%x ¥n",test);

}

使用例

1

:解説

12は2進数だと 1100

で表される。

%d

10

進数で表示。

12と表示される。

%oは8進数で表示。

14と表示される。

%xは16進数で表示。

c

と表示される。

(9)

49/48

使用例

2

#include<stdio.h>

int main(){

int test;

test=1487;

printf("%d ¥n",test);

printf("%o ¥n",test);

printf("%x ¥n",test);

}

#include<stdio.h>

int main(){

int test;

test=1487;

printf("%d ¥n",test);

printf("%o ¥n",test);

printf("%x ¥n",test);

}

コンパイルは

として行う。

gcc sample08b.c gcc sample08b.c

50/48

課題の提出

以下を提出しなさい、

使用例1~2の実行結果。

使用例2において、何故、8進数と16進数だと、その ような表現になるのか、10進数から変換する過程と 共に説明しなさい。

組み込みlinuxが利用されているものに、どのような ものがあるか。

ファイル名は学籍番号の末尾にiをつけたものとする。

グループ名は『H26_情報セキュリティ』です。

参照