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

情報セキュリティ 第07回

N/A
N/A
Protected

Academic year: 2021

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

Copied!
10
0
0

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

全文

(1)

1

情報セキュリティ 第07回

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

2/59

はじめに

はじめに

今までの復習

安全な通信の目的

種々の通信プロトコル

演習

3/59

今までの復習

4/634/59

今までやってきた基礎技術

基礎技術:

秘密鍵暗号方式

公開鍵暗号方式

ハッシュ値と一方向関数

乱数

5/59

秘密鍵暗号

暗号化も復号も、同じ鍵を使用する。

秘密鍵

秘密鍵は第三者に渡してはいけない。

処理が軽いため、大きい平文を暗号化できる。

共 共

平文 暗号文 暗号文 平文

基礎技術:

秘密鍵暗号方式

公開鍵暗号方式

ハッシュ値と一方向関数

乱数

6/59

公開鍵暗号方式

暗号化と復号では、異なる鍵を使用する。

公開鍵で暗号化し、秘密鍵で復号する。

秘密鍵は第三者に渡してはいけない。

処理が重いため、基本的に小さい平文を暗号化する。

公 秘

平文 暗号文 暗号文 平文

基礎技術:

秘密鍵暗号方式

公開鍵暗号方式

ハッシュ値と一方向関数

乱数

(2)

7/59

ハッシュ値と 一方向関数

文章のテキストファイルから生成できるビット列 平文 フィンガー プリント

異なる平文が、同じ指紋を生成する確率は低い。

平文

A

フィンガー プリント

A

平文

B

フィンガー プリント

B

違う指紋に

平文と指紋を受け取り、比較することで、平文が正し いか否かを判定できる。

基礎技術:

秘密鍵暗号方式

公開鍵暗号方式

ハッシュ値と一方向関数

乱数

8/59

乱数

数列の中でも、過去の数列から、次の数が予想できな いものを、乱数列という。

つまり、x

1, x2, … , xt

から次のx

t+1

が予想できない。

一般に、計算機が使用するのは疑似乱数。

単純な例

種 処理 値1 処理 値2 処理 値3

乱数値1 乱数値2 乱数値3

処理 処理 処理

次の値は

予想できない

基礎技術:

秘密鍵暗号方式

公開鍵暗号方式

ハッシュ値と一方向関数

乱数

9/59

安全な通信の目的

10/59 Hello

World

Hello World

盗聴

Hello World

Bob

送信

Alice

Hello World

Hello World

Eve

盗聴

A:>

Hello World

覗き見して

やろう

Aliceから

メールが来た。

送信

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

11/59

改ざん

9時 集合

12時

送信

集合

12時 集合

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

Mallory

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

Alice

Bob

12/59 hogehoge

Mallory

Bob

送信

hogehoge

hogehoge

hogehoge

なりすまし

Aliceからメールが

来たけど、

本当にAliceなのかな?

Alice

を語って

送信だ!

(3)

13/59

代表的な攻撃方法と対処

盗聴

なりすまし

改ざん

14/59

シンプルな通信方法

15/59 ID

PASSWD

Alice

Bob

送信

あsdふぁsd Jlkjぇwkf

「秘密鍵」で復号

ID PASSWD

あsdふぁsd Jlkjぇwkf

「秘密鍵」で 暗号化

盗聴しても、

復号できな い

……

秘密鍵暗号を用いた通信(1)

16/59

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

盗聴について:

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

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

なりすましについて:

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

改ざんについて:

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

17/59 ID

PASSWD

Alice

Bob

送信

あsdふぁsd Jlkjぇwkf

「秘密鍵」で復号

ID PASSWD

あsdふぁsd Jlkjぇwkf

「公開鍵」で 暗号化

秘 公

送信

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

盗聴しても、

復号できな い

……

18/59

公開鍵暗号による通信(2)

盗聴について:

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

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

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

なりすましについて:

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

改ざんについて:

特に対処されていない。

(4)

19/59

公開鍵暗号と 秘密鍵暗号を 組み合わせた通信

20/59

アイデア

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

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

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

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

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

1.

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

2.

秘密鍵暗号の秘密鍵(共通鍵)を公開鍵暗号で 暗号化する。

21/59

通信手順

(1)

平文

Bob

Alice

AliceはBobに平文を送りたい

22/59

通信手順

(2)

平文

Bob

Alice

Bobの公開鍵を

渡しておく

23/59

通信手順

(3)

平文

Bob

Alice

Bobの公開鍵を

渡しておく

共通鍵を生成

24/59

通信手順

(4)

平文

秘暗 秘

Bob

Alice

Bobの公開鍵を

渡しておく

共通鍵を生成

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

平文

(5)

25/59

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

通信手順

(5)

平文

秘暗 秘

Bob

Alice

公暗 共

Bobの公開鍵を

渡しておく

共通鍵を生成

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

平文

26/59

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

通信手順

(6)

平文

秘暗

送信

秘暗 秘

Bob

Alice

共 共

公暗 公暗

Bobの公開鍵を

渡しておく

共通鍵を生成

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

平文 平文

送信する

27/59

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

通信手順

(7)

平文

秘暗

送信

秘暗 秘

Bob

Alice

共 共

共 共

公暗 公暗

Bobの公開鍵を

渡しておく

共通鍵を生成

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

平文 平文

送信する

公開鍵暗号で

共通鍵を復号

28/59

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

通信手順

(8)

平文

秘暗

送信

平文

秘暗 秘

Bob

Alice

共 共

共 共

公暗 公暗

Bobの公開鍵を

渡しておく

共通鍵を生成

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

平文 平文

送信する

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

秘密鍵 暗号で 復号

29/59

通信手順 補足

平文

秘暗 送信

平文

秘暗 秘

Bob

Alice

Aliceからの

メールが来た。

復号しよう……。

共 共

共 共

公暗 公暗

パス

+ フレーズ 公

平文 平文

実際には パスフレーズも

使用することが多い

30/59

盗聴されても…

Eve

平文

平文

暗 送信

平文

平文

暗 秘

Bobの

Bobの

Bob

Alice

共 共

共 共

暗 暗

盗聴しても、

復号できな い

……

パス

+ フレーズ

(6)

31/59

通信手順

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

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

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

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

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

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

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

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

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

Eve

は、

Bob

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

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

32/59

まとめ

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

1.

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

2.

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

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

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

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

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

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

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

33/59

何が守れているのか

盗聴について:

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

なりすましについて:

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

改ざんについて:

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

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

34/59

ssh

35/59

sshとは

Secure Shell の略。

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

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

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

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

ftp

を置き換える

sftp

等もある。

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

1

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

36/59

telnetとssh

telnet

の場合

sshの場合

通信は平文 で行われる

通信はすべて暗号化さ

れて行われる

(7)

37/59

sshとteraterm

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

38/59

ssh

プロトコル バージョン1 の 通信の概要

(1)

計算機

Alice

公 公

Alice

はリモートの計算機に

接続して利用したい

39/59

ssh

プロトコル バージョン1 の 通信の概要

(1)

計算機

Alice

送信

40/59

ssh

プロトコル バージョン1 の 通信の概要

(1)

公 秘

計算機

Alice

送信

共通鍵を生成

公 秘

41/59

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

ssh

プロトコル バージョン1 の 通信の概要

(1)

送信

計算機

Alice

公暗 共

送信

共通鍵を生成

公 秘

42/59

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

ssh

プロトコル バージョン1 の 通信の概要

(1)

送信

計算機

Alice

共 共

公暗 公暗

送信

共通鍵を生成

送信する

公 秘

(8)

43/59

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

ssh

プロトコル バージョン1 の 通信の概要

(1)

送信

計算機

Alice

共 共

共 共

公暗 公暗

送信

共通鍵を生成

送信する

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

公 秘

44/59

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

ssh

プロトコル バージョン1 の 通信の概要

(1)

送信

計算機

Alice

共 共

共 共

公暗 公暗

送信

共通鍵を生成

送信する

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

公 秘

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

Alice

Bob

に平文を送りたい

45/59

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

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

2

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

ssh

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

2本の鍵

秘 公

ホスト鍵 サーバー鍵

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

ずっと一緒

46/59

ssh

プロトコル バージョン1 の 通信の概要

2回目以降 (1)

計算機

Alice

公 公

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

47/59

ssh

プロトコル バージョン1 の 通信の概要

2回目以降 (2)

計算機

Alice

送信

秘 公

比較する

48/59

ssh

プロトコル バージョン1 の 通信の概要

2回目以降 (3)

計算機

Alice

送信

秘 公

比較する

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

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

(9)

49/59

ssh

プロトコル バージョン1 の 通信の概要

2回目以降 (3)

計算機

Alice

送信

秘 公

比較する

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

なりすまし

50/59

何が守れているのか

盗聴について:

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

なりすましについて:

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

改ざんについて:

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

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

51/59

演習:

C言語で行うシフトと

ビット演算

52/59

UNIXにログインする

今回もUNIXで演習を行いますので、smaxにログインし てください。

今回は、UNIX環境におけるC言語で

シフト演算

ビット演算 を行います。

53/59

C言語における

シフト演算とビット演算

C

言語では

>> , <<

でビットシフトを実行できる

C言語では、&, | , ~, ^ でビット毎のand, or, NOT, XOR

が計算できる。

8 >> 1;

// 100を右に1ビットシフトして010に 8 >> 1;

// 100を右に1ビットシフトして010に

8 | 1;

// 100と001にのORを計算して、101になる。

8 | 1;

// 100と001にのORを計算して、101になる。

54/59

使用例

1:

#include<stdio.h>

int main(){

short int test;

test=8; // 0000000000000100 printf("%d ¥n",test);

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

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

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

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

}

#include<stdio.h>

int main(){

short int test;

test=8; // 0000000000000100 printf("%d ¥n",test);

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

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

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

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

}

コンパイルは

として行う。

gcc sample07a.c gcc sample07a.c

(10)

55/59

使用例

1:解説

#include<stdio.h>

int main(){

int test;

test=8; // 100 printf("%d ¥n",test);

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

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

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

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

}

#include<stdio.h>

int main(){

int test;

test=8; // 100 printf("%d ¥n",test);

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

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

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

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

}

8

2

進数だと

1000

で表される。

1000の1ビット右シフトは 100。10進数の4。

1000の2ビット右シフトは10。

10

進数の

2

1000

3

ビット右シフトは

1

10

進数の

1

1000

2

ビット左シフトは

100000

10

進数の

32

56/59

使用例

2:

#include<stdio.h>

int main(){

printf("%d ¥n", 10 & 6); // 1010 & 0110 = 0010 printf("%d ¥n", 10 | 6); // 1010 | 0110 = 1110 printf("%d ¥n", 10 ^ 6); // 1010 | 0110 = 1100 }

#include<stdio.h>

int main(){

printf("%d ¥n", 10 & 6); // 1010 & 0110 = 0010 printf("%d ¥n", 10 | 6); // 1010 | 0110 = 1110 printf("%d ¥n", 10 ^ 6); // 1010 | 0110 = 1100 }

コンパイルは

として行う。

gcc sample07b.c gcc sample07b.c

57/59

使用例

2:解説

#include<stdio.h>

int main(){

printf("%d ¥n", 10 & 6); // 1010 & 0110 = 0010 printf("%d ¥n", 10 | 6); // 1010 | 0110 = 1110 printf("%d ¥n", 10 ^ 6); // 1010 | 0110 = 1100 }

#include<stdio.h>

int main(){

printf("%d ¥n", 10 & 6); // 1010 & 0110 = 0010 printf("%d ¥n", 10 | 6); // 1010 | 0110 = 1110 printf("%d ¥n", 10 ^ 6); // 1010 | 0110 = 1100 }

58/59

使用例

3:

#include<stdio.h>

int main(){

int i;

int test;

test=6; // 110 for(i=0;i<=3;i++){

printf("---i=%d ¥n",i);

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

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

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

} }

#include<stdio.h>

int main(){

int i;

int test;

test=6; // 110 for(i=0;i<=3;i++){

printf("---i=%d ¥n",i);

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

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

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

} }

コンパイルは

として行う。

gcc sample07c.c gcc sample07c.c

59/59

課題の提出

使用例1~3の実行結果に、3がどのような計算 をしてそのような出力をしたかの説明をつけて、

提出する。

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

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

参照

関連したドキュメント

腐植含量と土壌図や地形図を組み合わせた大縮尺土壌 図の作成 8) も試みられている。また,作土の情報に限 らず,ランドサット TM

2012 年 3 月から 2016 年 5 月 まで.

【原因】 自装置の手動鍵送信用 IPsec 情報のセキュリティプロトコルと相手装置の手動鍵受信用 IPsec

3. 利用者の安全確保のための遊歩道や案内板などの点検、 応急補修 4. 動植物の生息、 生育状況など自然環境の継続的観測および監視

すべての Web ページで HTTPS でのアクセスを提供することが必要である。サーバー証 明書を使った HTTPS

建築基準法施行令(昭和 25 年政令第 338 号)第 130 条の 4 第 5 号に規定する施設で国土交通大臣が指定する施設. 情報通信施設 情報通信 イ 電気通信事業法(昭和

年収 ~400万円 600~700万円 妻職業 専業主婦/派遣 専業主婦/フルタイム 住居 社宅/持家集合 賃貸集合 居住域 浦安市/印西市

※ 本欄を入力して報告すること により、 「項番 14 」のマスター B/L番号の積荷情報との関