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

情報セキュリティ 第08回

N/A
N/A
Protected

Academic year: 2021

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

Copied!
7
0
0

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

全文

(1)

1

情報セキュリティ 第08回

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

2/63

はじめに

はじめに

復習

公開鍵暗号方式のもう一つの使い方

なりすましの防止と電子署名

演習

3/63

今までの復習

4/63

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

基礎技術:

秘密鍵暗号方式

公開鍵暗号方式

ハッシュ値と一方向関数

乱数

5/63

秘密鍵暗号

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

秘密鍵

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

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

平文 暗号文 暗号文 平文

基礎技術:

秘密鍵暗号方式

公開鍵暗号方式

ハッシュ値と一方向関数

乱数

6/63

公開鍵暗号方式

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

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

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

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

平文 暗号文 暗号文 平文

基礎技術:

秘密鍵暗号方式

公開鍵暗号方式

ハッシュ値と一方向関数

乱数

(2)

7/63

ハッシュ値と 一方向関数

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

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

平文 A

フィンガー プリント

A

平文 B

フィンガー プリント

B 違う指紋に

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

基礎技術:

秘密鍵暗号方式

公開鍵暗号方式

ハッシュ値と一方向関数

乱数

8/63

乱数

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

つまり、x1, x2, … , xtから次のxt+1が予想できない。

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

単純な例

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

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

処理 処理 処理

次の値は

予想できない

基礎技術:

秘密鍵暗号方式

公開鍵暗号方式

ハッシュ値と一方向関数

乱数

9/63

RSA 暗号のもう一つの特徴

10/63

復習:公開鍵暗号の鍵 (1)

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

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

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

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

平文 暗号文 暗号文 平文

11/63

公開鍵暗号の鍵 (2)

提案されている実現方法は、秘密鍵で暗号化し、公 開鍵で復号できる公開鍵暗号方式が多い。

この性質は、「認証」を実現する際に利用されている。

前回のRSA暗号も、この性質を備えている。

平文 暗号文 暗号文 平文

12/63

直感的なイメージ (1)

Hello World

Hello World Hello

World Bob

送信

Alice

Hello World

送信

このファイル、本当にAliceか ら送られてきたのかなぁ...

(3)

13/63

公開鍵暗号方式と認証

「Aliceの公開鍵」で復号できる暗号文なら、その暗号 文は「Aliceの秘密鍵」で作成したに違いない。

Aliceの秘密鍵」で暗号化できるのは、秘密鍵を持っ

ているAliceだけ。

「Aliceの公開鍵」で復号できるものは、

Aliceのファイルに違いない!

14/63 hogehoge

Alice

Bob

送信

あsdふぁsd Jlkjぇwkf

暗号文を「Aliceの公開鍵」で 復号

hogehoge

あsdふぁsd Jlkjぇwkf

平文を

「Aliceの秘密鍵」で 暗号化

直感的なイメージ (2)

Aliceの公開鍵で復号できた!

暗号文を作れるのはAliceだ けだから、このファイルはAlice

のだ!

15/63 hogehoge

Mallory

Bob

送信

Asdfasdfasdf adfasdf

暗号文を「Aliceの公開鍵」で 復号

sdlakfjl Hoaslkjlsalf;j;

Asdfasdfasdf adfasdf

平文を

「Malloryの秘密鍵」で 暗号化

直感的なイメージ (3)

Aliceの公開鍵で復号に失敗!

このファイルは、Aliceのもので はない!?

Aliceを語って

送信だ! 16/63

なりすましの防止と 電子署名

17/63

認証と秘密鍵

なりすましを防止するには、どうすればよいか?

→ ようするに、相手が本当に本人か確認したい!

認証・署名

実世界では、印鑑やサイン、パスワードで本人確認。

本人確認は、「本人しか持っていない情報を持ってい るか」で確認する。

秘密鍵は「本人しか持っていない情報」 18/63

なりすまし防止の アイディア (1)

Aliceの

Bob

Alice

AliceからBobにファイルを送るので、

BobはAliceからのファイルかを 検証したい

(4)

19/63

なりすまし防止の アイディア (2)

送信

Aliceの

Aliceの

Bob

Alice

Aliceの公開鍵を

事前に渡しておく

20/63

なりすまし防止の アイディア (3)

平文

フィンガー プリント

Aliceの Aliceの

Bob

Alice

ハッシュ値 を計算

公開鍵を 事前に渡しておく

21/63

なりすまし防止の アイディア (4)

平文

フィンガー プリント

Aliceの Aliceの

Bob

Alice

ハッシュ値 を計算

フィンガー プリント 公暗

秘密鍵で 暗号化

公開鍵を

事前に渡しておく 22/63

なりすまし防止の アイディア (5)

平文

フィンガー プリント

Aliceの Aliceの

Bob

Alice

ハッシュ値 を計算

フィンガー プリント 公暗

秘密鍵で 暗号化

公開鍵を 事前に渡しておく

送信

送信

平文

フィンガー プリント

公暗

送信

送信

23/63

なりすまし防止の アイディア (6)

平文

フィンガー プリント

Aliceの Aliceの

Bob

Alice

ハッシュ値 を計算

フィンガー プリント 公暗

秘密鍵で 暗号化

公開鍵を 事前に渡しておく

送信

送信

平文

フィンガー プリント

公暗

送信

送信

フィンガー

プリント 復号する Aliceからの

メールか 検証しよう……

24/63

なりすまし防止の アイディア (7)

平文

フィンガー プリント

Aliceの Aliceの

Bob

Alice

ハッシュ値 を計算

フィンガー プリント 公暗

秘密鍵で 暗号化

公開鍵を 事前に渡しておく

送信

送信

平文

フィンガー プリント

公暗

送信

送信

フィンガー

プリント 復号する フィンガー

プリント

ハッシュ値を計算 Aliceからの

メールか 検証しよう……

(5)

25/63

なりすまし防止の アイディア (8)

平文

フィンガー プリント

Aliceの Aliceの

Bob

Alice

ハッシュ値 を計算

フィンガー プリント 公暗

秘密鍵で 暗号化

公開鍵を 事前に渡しておく

送信

送信

平文

フィンガー プリント

公暗

送信

送信

フィンガー

プリント 復号する フィンガー

プリント

ハッシュ値を計算

⑦ 比較して同じなら Aliceからの メールだ!

Aliceからの メールか 検証しよう……

26/63 フィンガー

プリント フィンガー プリント

なりすまされた場合 (1)

平文

Eveの

Bob

Aliceからの メールか 検証しよう……

なりすまし

Eve パス

フレーズ

公開鍵を 事前に渡しておく EveがAliceの名前を騙って、

Bobにファイルを送る。

BobはAliceのファイルか検証したい

27/63 フィンガー

プリント

フィンガー プリント フィンガー

プリント フィンガー プリント

なりすまされた場合 (2)

平文

送信

送信

平文

異なる 何か

Aliceの Eveの

Bob

Aliceからの メールか 検証しよう……

Aliceの公開鍵で 元に戻せない!。

Aliceからの メールじゃない!

なりすまし

Eve

28/63 フィンガー

プリント

フィンガー プリント フィンガー

プリント フィンガー プリント

なりすまされた場合 (3)

平文

送信

送信

平文

異なる 何か

Aliceの Eveの

Bob

Aliceからの メールか 検証しよう……

Aliceの公開鍵で 元に戻せない!。

Aliceからの メールじゃない!

なりすまし

Eve

Eveは Aliceの秘密鍵を

知らないので、

Aliceの公開鍵で 復号できる 暗号化済み指紋を

作れない。

29/63 フィンガー

プリント フィンガー プリント

改竄された場合 (1)

平文

送信

送信

Aliceの

Bob

Aliceからの メールか 検証しよう……

送信中に、

データが変わって しまった!

パス

フレーズ Aliceの

Alice 30/63

異なる フィンガー

プリント

フィンガー プリント フィンガー

プリント フィンガー プリント

改竄された場合 (2)

平文

送信

送信

異なる 平文

フィンガー プリント

Aliceの

Bob

Aliceからの メールか 検証しよう……

Aliceの公開鍵で 元に戻せない!。

正常に通信できて ない!

パス

フレーズ Aliceの

Alice

(6)

31/63 異なる

フィンガー プリント

フィンガー プリント フィンガー

プリント フィンガー プリント

改竄された場合 (3)

平文

送信

送信

平文

フィンガー プリント

Aliceの

Bob

Aliceからの メールか 検証しよう……

Aliceの公開鍵で 元に戻せない!。

正常に通信でき ていない!

Aliceの

Alice

指紋の値が異なるので、

正常に通信できていないことが わかる。

32/63

なりすまし防止のアイディア (4)

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

1.Aliceは平文のフィンガープリントを作成する。

2.AliceはAliceの秘密鍵とパスフレーズでフィンガープ リントを暗号化

3.Aliceは、平文と3で生成したものを、Bobにメール 4.Bobは、Aliceの公開鍵でAliceから送られた『暗号化

されたフィンガープリントを復号する。

5.Bobは、『Aliceから送られてきた平文から作ったフィ ンガープリントと、4のフィンガープリントを比較する。

33/63

何が守れているのか

盗聴について:

対処されていない。

なりすましについて:

対処されている。

ただし、改竄と区別は付かない。

改竄について:

対処されている。

ただし、なりすましと区別は付かない。

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

34/63

次のステップ

暗号技術で盗聴に、認証技術でなりすましや改竄を 防止することができる。

説明のあちこちにある「公開鍵を事前に渡しておく」

の具体的な方法が、今のところノータッチ。

偽物の公開鍵を掴まされたりしないか?

直に会えば確実だけど、相手が地球の裏側に居 たりするなら、どうするの?

暗号技術と認証技術を組み合わせれば、

これらすべてに対処できる(はず)!

35/63

演習:

C

言語で行うシフトと ビット演算

36/63

UNIX にログインする

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

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

シフト演算

ビット演算 を行います。

(7)

37/63

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になる。

38/63

使用例 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 sample08a.c gcc sample08a.c

39/63

使用例 1 :解説

#include<stdio.h>

int main(){

int test;

test=8; // 1000 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; // 1000 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ビット右シフトは 10010進数の4

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

10進数の2。

1000の3ビット右シフトは1。

10進数の1 1000の2ビット左シフトは

100000。10進数の32。 40/63

使用例 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 sample08b.c gcc sample08b.c

41/63

使用例 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 sample08c.c gcc sample08c.c

42/63

課題の提出

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

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

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

参照

関連したドキュメント

製品開発者は、 JPCERT/CC から脆弱性関連情報を受け取ったら、ソフトウエア 製品への影響を調査し、脆弱性検証を行い、その結果を

7.法第 25 条第 10 項の規定により準用する第 24 条の2第4項に定めた施設設置管理

「系統情報の公開」に関する留意事項

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

3.5 今回工認モデルの妥当性検証 今回工認モデルの妥当性検証として,過去の地震観測記録でベンチマーキングした別の

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

FSIS が実施する HACCP の検証には、基本的検証と HACCP 運用に関する検証から構 成されている。基本的検証では、危害分析などの

*2 施術の開始日から 60 日の間に 1