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

情報セキュリティ 第03回

N/A
N/A
Protected

Academic year: 2021

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

Copied!
7
0
0

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

全文

(1)

1

情報セキュリティ 第03回

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

2/28

はじめに

情報セキュリティの技術

暗号

古典的な暗号

演習:シーザー暗号

演習の解説

3/28

本日の資料

今日の資料は

http://flute.u-shizuoka-ken.ac.jp/~s-okubo/

の『授業関係』から取ることができます。

5

回から

smax

を利用するので、

アカウントを思い出しておくこと

4/28

情報セキュリティの技術

5/28

情報理論と暗号

情報理論の応用

情報圧縮

画像や音楽のデジタルデータを圧縮

00000...000000000011111111111111….11111 0が1個,1が200個

誤り訂正

通信路上で誤りが起きたとき、検出・訂正 Alice ----→Bob

000 通信 010

↑間違いを検出・訂正

暗号 今回の話

6/28

この授業で出てくる内容

基礎的な部分

2進数と計算(他の科目でやっているはず)

16進数

一方向関数とハッシュ値

疑似乱数

応用的な部分

暗号技術

認証技術

実際の通信で何が行われているか

(2)

7/28

10 進数とは

"ブロック"10個で、(違う大きさの) "ブロック"となる。

 14510の意味することは、

1 4 5

10

「10個のブロックが 10個集まったもの」が1つ

「10個のブロックが 集まったもの」が4つ

「1個のブロック」

が5つ

1

×

10

210

4

×

10

110

5

×

10

010

8/28

2 進数とは

 "ブロック"2個で、(違う大きさの)"ブロック"となる。

 11112の意味することは、

1 1 1 1

2

「1個のブロック」

1

1

×

2

010

「1個のブロックが 2個集まった ブロック」

が1つ

1

×

2

110

2個のブロック が2個集まった ブロック」が1つ

1

×

2

210

「2個のブロックが 2個集まった ブロックが 2個集まった ブロック」が1

1

×

2

310

9/28

16進数とは

 "ブロック"16個で、(違う大きさの)"ブロック"となる。

 0~9とA~Fまでの16個の記号で表現する。

3 3

4 4

1 1

0 0

2 2

10進数 16進数

8 8

9 9

7 7

5 5

6 6

10進数 16進数

D 13

E 14

F 15

B 11

A 10

C 12

10進数 16進数

10/28

16進数への変換

16進数から10進数:

2進数から10進数と同様

10進数から16進数:

2進数から10進数と同様

16進数から2進数:

右の表のようになる

2進数から16進数:

4桁毎に区切って、

右の表。

1010 A

1011 B

0101 5

0110 6

0111 7

1000 8

1001 9

0000 0

0001 1

0010 2

0011 3

0100 4

1100 C

2進数 16進数

2進数 16進数

1111 F

1110 E

1101 D

11/28

排他的論理和

2つの値のうち、

片方のみが1のときに1、

両方が0もしくは1のときには0 となる計算。

XOR、EORともいう。

記号は

1 1

0

0 0

0

0 1

1

1 0

1

y xx y

12/28 Hello

World

Hello World

盗聴

Hello World

Bob 送信

Alice

Hello World

Hello World

Eve 盗聴

A:>

Hello World 覗き見して

やろう

Aliceから メールが来た。

送信

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

(3)

13/28

改ざん

9時 集合

12時

送信 集合

12時 集合

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

Mallory

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

Bob

14/28 hogehoge

Mallory

Bob

送信

hogehoge

hogehoge

hogehoge

なりすまし

Aliceからメールが 来たけど、

本当にAliceなのかな?

Aliceを語って 送信だ!

15/28

暗号技術

16/28

Bobに

メールを…… Hello

World

Hello World

電子メールは 非常に便利

Hello

World Bob

送信

Alice

Hello World

早い。

安い。

簡単。

情報化社会に 欠かせないツールに

Aliceから メールが来た。

17/28 Hello

World

Hello World

電子メールは

危険な場合も ……(1)

Hello

World Bob

送信

Alice

Hello World

盗聴

Hello World

Eve 盗聴

A:>

Hello World

覗き見 してやろう

文章がそのまま 流れるので、

悪い人に情報が 漏れる!

Aliceから メールが来た。

送信

18/28

電子メールは

危険な場合も ……(2)

Bob

なりすまし

Hello World

Eve

A:>

Alice

Hello World

Aliceの名 を語って メールを 送信だ!

他人を語って メールを投げら れる!。

本当に本人から 来たのか?。

Hello World

送信

Hello World

Aliceから メールが来た。

(4)

19/28

電子メールの

危険な部分 - まとめ

盗聴の危険性

文章内容がそのままネット上を流れる!。

間に悪意のある人がいると、情報が覗かれる!。

なりすましの危険性

他人になりすますことが容易!。

本当に、その人からメールが来たのか、確認でき ない!。

暗号の技術で、すべて解決!

20/28

暗号の目的

平文(送りたい文)を暗号化し、暗号文にする。

この際、鍵を使用する。

This is a pen.

16進数表記)

5468697320697320612070656E2E0A 平文

test

(16進数表記)

883BC0A17AA746D3DCADCE425C6A10AC

;zB¥j

暗号文

暗号化されていると、

元の文章がわからない。

21/28

対策:暗号化

極秘

暗号化されていて、

よくわからんなぁ

Bob

Alice

暗号化することで機密性を保てる あ!

送り間違えた!

極秘 送信

暗号化:

第三者が見ても わからないように 変換すること

22/28

暗号の歴史(1)

シーザー暗号

文字ずらすことで暗号化・復号

ex 暗号化:DOG → GRJ

(各文字を、3文字分後にずらす)

復号 :GRJ →

DOG

(各文字を、3文字分前にずらす)

単純換字暗号

文字を置き換える表に従って暗号化・復号

ex 表:a→v, b→d, c→a

暗号化:abc

vda

(テーブルの対応に従って各文字を置き換え)

復号 :vda

abc

(テーブルの対応に従って各文字を置き換え)

23/28

暗号の歴史 (2)

多表式換字暗号

文字を置き換える表を複数使用する

転置式暗号

文字の並ぶ順番を入れ替える

ex: 1文字目を3文字目に、2文字目を1文字目に、

3文字目を4文字目に、4文字目を2文字目に置く。

暗号化:cats →

asct

復号 :asct

cats

スーパー暗号

これらの方式を組み合わせた物。

現代暗号へ 24/28

演習:シーザー暗号

(5)

25/28

シーザー暗号

文字ずらすことで暗号化・復号

ex 暗号化:DOG → GRJ

(各文字を、

3

文字分後にずらす)

復号 :

GRJ

DOG

(各文字を、3文字分前にずらす)

文字を

3

文字ずらす処理を,

MS-Excel で行えれば良い

シーザー暗号で行いたいこと

26/28

文字と文字コード

各文字は文字コードというコードにより、計算機内部で は扱われている。

さまざまなコードの割り当て方が存在している

SHIFT_JIS :94 4c

ISO-2022-JP(JIS) :47 2d

EUC-JP :c7 ad

UTF-8 :e7 8c ab

”猫”という文字は、

このように表現。

27/28

出てくるExcelの関数

CODE(x)

(文字列x の先頭文字の)文字コードを返す。

CHAR(x)

コード番号x に対応した文字を返す。

MOD(x, y)

xy で除算した余りを返す。

28/28

演習:シーザー暗号(1)

文字を入力

3を入力

aを入力

=CODE(B3) を入力

=MOD(B4-97+$B$2,26)+97 を入力

=CHAR(B5)を入力

29/28

文字を入力

3を入力

aを入力

=CODE(B3) を入力

=MOD(B4-97+$B$2,26)+97 を入力

=CHAR(B5)を入力

何文字分 ずらすか

平文

(暗号化した い文字)

演習:シーザー暗号 (1)

30/28

文字を入力

3を入力

aを入力

=CODE(B3) を入力

=MOD(B4-97+$B$2,26)+97 を入力

=CHAR(B5)を入力 B3にある文字の文

字コードを求める

aは97、 eは101、

bは98、 …

c99

dは100、 zは122

演習:シーザー暗号 (1)

(6)

31/28

文字を入力

3を入力

aを入力

=CODE(B3) を入力

=MOD(B4-97+$B$2,26)+97 を入力

=CHAR(B5)を入力

演習:シーザー暗号 (1)

B2の文字数ずらした文字を求める。

B4-97 :

B4の文字がaから何文字あと かを計算

B4-97+3:

3文字ずらす MOD(略, 26):

zの次はaにする必要がある ので、26のあまりを求める MOD(略)+97:

“a”の文字コード(97)を足す。

32/28

文字を入力

3を入力

aを入力

=CODE(B3) を入力

=MOD(B4-97+$B$2,26)+97 を入力

=CHAR(B5)を入力 文字コードを

文字にする

演習:シーザー暗号 (1)

33/28

演習:シーザー暗号(2)

セルの内容を右のセルにもコピー

34/28

演習:シーザー暗号(3)

文字を1文字ずつ入力してみよう

3文字ずれた暗号文が生成されたか確認しよう

35/28

演習:シーザー暗号 (4)

値を変えてみましょう

さっきとは異なった暗号文が生成されたか確認しよう

36/28

課題の提出

今日のMS-Excelのファイルを経情グループウェアか ら提出する。

ファイル名は 学籍番号c.xls とすること。

(学籍番号は自分の学籍番号を入力すること)

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

ユーザーIDとパスワードは、ユニバーサルパスポート 等と同じです。

(7)

37/28

Visual Studio で(前半)

#include<stdio.h>

int main(){

int i,key;

char plain_text[20],cipher_text[20];

printf("文字列を入力してください。¥n");

scanf("%s",plain_text);

printf("ずらす文字数を入力してください。¥n");

scanf("%d",&key);

#include<stdio.h>

int main(){

int i,key;

char plain_text[20],cipher_text[20];

printf("文字列を入力してください。¥n");

scanf("%s",plain_text);

printf("ずらす文字数を入力してください。¥n");

scanf("%d",&key);

その1/2 01 02 03 04 05 06 07 08 09 10 01 02 03 04 05 06 07 08 09 10

38/28

Visual Studio で(後半)

その2/2

for(i=0;i<strlen(plain_text);i++){

cipher_text[i]='a'+(plain_text[i]-'a'+key)%26;

printf("%c->%c¥n",plain_txt[i],cipher_txt[i]);

}

cipher_text[i]='¥0';

printf("暗号文は %s です。¥n",cipher_text);

}

for(i=0;i<strlen(plain_text);i++){

cipher_text[i]='a'+(plain_text[i]-'a'+key)%26;

printf("%c->%c¥n",plain_txt[i],cipher_txt[i]);

}

cipher_text[i]='¥0';

printf("暗号文は %s です。¥n",cipher_text);

} 11 12 13 14 15 16 17 18 11 12 13 14 15 16 17 18

C

言語における文字列

(1)

st[0]

t

st[1] st[2] st[3] st[4] st[5] st[6] st[7] st[8] st[9]

e s t ¥0

文字列の最後には、NULL がつきます。

(「つきます」というか、「つけます」)

C言語では、文字列は配列として扱うことができる。

例えば、文字列

"test" が、サイズ10の文字型の配列 stに保存されているなら、

40/28

C言語における文字列(2)

NULLがないと、どうなるのか?

st[0]

t

st[1] st[2] st[3] st[4] st[5] st[6] st[7] st[8] st[9]

e s t ¥0

文字列は test と。

計算機

g o m i ¥0

st[0]

t

st[1] st[2] st[3] st[4] st[5] st[6] st[7] st[8] st[9]

e s t -

文字列は test-test と。

計算機

g o m i ¥0

この¥0 が違う文字だと… …

文字列を扱うときには、文字列の末尾に NULLがついているかどうかが重要になる

41/28

解説 (1)

#include<stdio.h>

int main(){

int i,key;

char plain_text[20],cipher_text[20];

printf("文字列を入力してください。¥n");

scanf("%s",plain_text);

printf("ずらす文字数を入力してください。¥n");

scanf("%d",&key);

#include<stdio.h>

int main(){

int i,key;

char plain_text[20],cipher_text[20];

printf("文字列を入力してください。¥n");

scanf("%s",plain_text);

printf("ずらす文字数を入力してください。¥n");

scanf("%d",&key);

その1/2:

01 02 03 04 05 06 07 08 09 10 01 02 03 04 05 06 07 08 09 10

平文と暗号文を 保存する配列を準備

平文を読み込み。

42/28

解説 (2)

その2/2:

for(i=0; i<strlen(plain_text); i++){

cipher_text[i]='a'+(plain_text[i]-'a'+key)%26;

printf("%c->%c¥n",plain_txt[i],cipher_txt[i]);

}

cipher_text[i]='¥0';

printf("暗号文は %s です。¥n",cipher_text);

}

for(i=0; i<strlen(plain_text); i++){

cipher_text[i]='a'+(plain_text[i]-'a'+key)%26;

printf("%c->%c¥n",plain_txt[i],cipher_txt[i]);

}

cipher_text[i]='¥0';

printf("暗号文は %s です。¥n",cipher_text);

} 11 12 13 14 15 16 17 18 11 12 13 14 15 16 17 18

strlen()は、文字列の長さを返す関数

Excelのときと同様にして3文字ずらす

暗号文の末尾にNULLを付加

参照

関連したドキュメント

2021] .さらに対応するプログラミング言語も作

• ネット:0個以上のセルのポートをワイヤーを使って結んだも

WAKE_IN ピンを Low から High にして DeepSleep モードから Active モードに移行し、. 16ch*8byte のデータ送信を行い、送信完了後に

自分は超能力を持っていて他人の行動を左右で きると信じている。そして、例えば、たまたま

事 業 名 夜間・休日診療情報の多言語化 事業内容 夜間・休日診療の案内リーフレットを多言語化し周知を図る。.

しかし,物質報酬群と言語報酬群に分けてみると,言語報酬群については,言語報酬を与

• AF/AE ロック機能を使って、同じ距離の他の被写体にピントを 合わせてから、構図を変えてください(→ 43 ページ)。. •

 ファミリーホームとは家庭に問題がある子ど