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

情報セキュリティ 第07回

N/A
N/A
Protected

Academic year: 2021

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

Copied!
7
0
0

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

全文

(1)

情報セキュリティ 第07回

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

2/36

はじめに

前回の復習

一方向関数とハッシュ値

演習:ハッシュ値

はじめに

3/36

前回の復習

4/36

計算機と乱数:疑似乱数とは

計算機は、基本的に「決まったことしかしない」もの。

乱数のように「予想できないもの」を取り扱うことは できない。

計算機で使用する乱数の多くは疑似乱数。

疑似乱数は、計算機が内部で計算して「乱数っぽいも の」を生成したもの。

疑似乱数は本当の意味での乱数にはなっていない。

疑似乱数をどのように生成するか、いろいろな手法が 検討・提案されている。

5/36

疑似乱数:多くの場合の例

多くの疑似乱数は、種(seed)から、乱数列を生成する。

今までの値を元に、何らかの処理を行い、乱数を生成。

単純な例

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

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

処理 処理 処理

6/36

srand()

乱数の種(

seed

)から乱数系列を設定する関数。

rand()

乱数値を生成する関数。

UNIX での乱数値の生成

srand(unsigned int seed) srand(unsigned int seed)

rand() rand()

処理 値1 値2 値3

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

srand(略) 1回目の

rand() 2回目の

rand() 3回目の

rand()

1

(2)

7/36

今回の内容

基礎技術:

秘密鍵暗号方式

暗号化

ブロック暗号とストリーム暗号

公開鍵暗号方式

暗号化と認証

ハッシュ値と一方向関数

乱数

実際の実装:

RSA暗号の仕組み

8/36

一方向関数と メッセージダイジェスト

9/36

こういう場合はどうする?

Hello World

Hellow World

送信 Bob

Hellow World

ファイルをダウンロードしてき たけど、正しくダウンロードで

きたかなぁ なんとかして

検証したい

10/36

一方向関数とは

ある関数

f

が、

任意の

x

が与えられたとき、

f(x)

の値を求めること は簡単、

任意の

y

が与えられたとき、

y=f(x)

となる

x

を求 めることは難しい

とき、この関数は一方向関数であるという。

元の値 計算結果

簡単

難解

11/36

メッセージダイジェストとは

ファイルの中身に対応して生成した固定長のbit列

フィンガープリント、ファイルの指紋、ハッシュ値とも

異なる中身の場合、同じメッセージダイジェストになる 可能性は低い(ゼロではない)。

一方向関数である。

暗号と違い、復号はできない。

eee0ca57643e4b59 815847fdd152cd5c

This is a pen.

平文

フィンガープリント

639c7143c6937907 ef3bfbed7501d898

This is a book.

12/36

メッセージダイジェストの利用 (1)

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

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

平文

A

フィンガー プリント

A

平文

B

フィンガー プリント

B

違う指紋に

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

2

(3)

13/36

メッセージダイジェストの利用 (2)

Hello World

Bob

1)送信

メッセージ ダイジェスト

B Hellow

World

Hellow

World メッセージ

ダイジェスト A メッセージ

ダイジェスト A メッセージ

ダイジェスト A

3)比較したら 違う値に!

失敗 している!

2)メッセージ ダイジェストを 計算

14/36

メッセージダイジェストの利用 (3)

多くのサイトで、ファイルの検証用にMD5値が置かれ ています。

http://www.tnlab.inf.uec.ac.jp/daihinmin/announce/180525.html

15/36

メッセージダイジェストの利用(4)

 httpsでも使用されています。

 Firefox

では、httpsでの通信 を行っているサイトで、

1.

上の青い部分を押す。

2.

詳細を表示を押す。

3.

証明書を表示を押す ことで確認できます。

16/36

メッセージダイジェストの利用(5)

 UNIXのパスワード認証は、実際にはパスワードは

保存されていません。

保存されているのは、パスワードのハッシュ値を保 存しています。

パスワードを入力すると、

1.

入力されたパスワードのハッシュ値を計算。

2.

保存してあるハッシュ値と一致するか検証。

3.

一致していたら認証を通過。

となります。

ようするに、ハッシュ値が同じになるパスワードなら、

パスワードが異なっていても、認証を通ります。

17/36

広く使われている メッセージダイジェスト

メッセージダイジェストの代表的なものとして、MD5や

SHA等があります。

メッセージダイジェストは、いろいろなところで使用さ れています。

 OpenOffice.org

のような、ファイルのダウンロード の検証のため。

 Windows

UNIX

におけるパスワード認証。

 https等の暗号化プロトコル。

メールの暗号化プロトコルである

PGP。

メールの認証プロトコルである

apop

18/36

メッセージダイジェストの利用 (6)

ニュースにも(それらしきものが)登場します。

3

(4)

19/36

強衝突耐性と弱衝突耐性

弱衝突耐性:

x が与えられたとき、 f(x) = f(y)なるy (

ただし

y

≠x) を発見することは難しい。

強衝突耐性:

f(x) = f(y)なる x と y (ただし x≠y) を発見すること

は難しい。

 MD5は強衝突耐性は無いことが知られている。

20/36

演習:乱数

21/36

本日の課題の概要

今回はUNIXでも演習を行います。

使用するのはsmaxではなく、次の計算機です。

fuko.u-shizuoka-ken.ac.jp

今回は、

UNIX環境での

乱数生成関数rand()を利用した乱数列生成

線形合同法を用いた乱数列生成 を行います。

22/36

fukoへのログイン

Teratermを使用します。

ログイン先は、

fuko.u-shizuoka-ken.ac.jp

ID: b16xxx (←自分のIDを入力)

パスワード:

b16xxxb16xxx (←自分のIDを2回入力)

ログインしたら、パスワードを変更すること。コマンドは

passwd

23/36

Excel での乱数使用

Excelには、乱数値を生成する rand() 関数がありま

す。

種を明示的に設定することはできません。

以下のことをやってみましょう

1.

数個のセルに

rand() を書く。

2. 0~1の乱数値が生成されたことを確認する

3. F9 を押すと、乱数値が

更新されることを確認する。

24/36

srand()

乱数の種(

seed

)から乱数系列を設定する関数。

rand()

乱数値を生成する関数。

UNIX での乱数値の生成

srand(unsigned int seed) srand(unsigned int seed)

rand() rand()

処理 値1 値2 値3

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

srand(略) 1回目の

rand() 2回目の

rand() 3回目の

rand()

4

(5)

25/36

使用例:

#include<stdio.h>

#include<stdlib.h>

int main(){

int i;

int seed = 10;

srand(seed);

for(i=0;i<10;i++){

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

} }

#include<stdio.h>

#include<stdlib.h>

int main(){

int i;

int seed = 10;

srand(seed);

for(i=0;i<10;i++){

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

} }

コンパイルは

として行う。

gcc sample02.c gcc sample02.c

26/36

使用例:解説

#include<stdio.h>

#include<stdlib.h>

int main(){

int i;

int seed = 10;

srand(seed);

for(i=0;i<10;i++){

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

} }

#include<stdio.h>

#include<stdlib.h>

int main(){

int i;

int seed = 10;

srand(seed);

for(i=0;i<10;i++){

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

} }

seedの設定

乱数の生成と表示

処理

値1 値2 値3

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

srand(略) 1回目の

rand() 2回目の

rand() 3回目の

rand()

27/36

疑似乱数の式:線形合同法

#include<stdio.h>

#include<stdlib.h>

int main(){

int i;

int seed=10, A=1103515245,C=12345;

long x;

x=seed;

for(i=0;i<10;i++){

x=A*x+C;

printf("%d¥n",(int)(x>>16)&32767);

} }

#include<stdio.h>

#include<stdlib.h>

int main(){

int i;

int seed=10, A=1103515245,C=12345;

long x;

x=seed;

for(i=0;i<10;i++){

x=A*x+C;

printf("%d¥n",(int)(x>>16)&32767);

} }

コンパイルは

として行う。

gcc sample03.c gcc sample03.c

28/36

プログラムの説明

#include<stdio.h>

#include<stdlib.h>

int main(){

int i;

int seed=10, A=1103515245,C=12345;

long x;

x=seed;

for(i=0;i<10;i++){

x=A*x+C;

printf("%d¥n",(int)(x>>16)&32767);

} }

#include<stdio.h>

#include<stdlib.h>

int main(){

int i;

int seed=10, A=1103515245,C=12345;

long x;

x=seed;

for(i=0;i<10;i++){

x=A*x+C;

printf("%d¥n",(int)(x>>16)&32767);

} }

各種の値の設定

種を初期値にする

xをA倍してCを足した

ものを、

x

の新しい値に

x

16bit

右シフトしたものの下位

15bit

を乱数値として出力

29/36

補足説明 (1)

x>>16 は何をしているのか?

>> は"ビットシフト"を行う演算です。

ローテイトではないので、外に押し出された部分は

消滅します。

空いた部分には0が入ります。

0 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 0 0 0

3ビットシフトの例

30/36

補足説明 (2)

&32767は何をしているのか?

& は"ビット毎の論理和"を行う演算です。

10進数の32767は、2進数だと111111111111111

(1が15個)です。

たとえば、変数xがあったとして

&32767

は、

x の下位15ビットのみを残す処理になります。

&00000000000000000111111111111111 01100100101011100101011110011011 00000000000000000101011110011011

5

(6)

31/36

他の乱数生成関数

他にも、

drand48()

random()

等の関数が利用できる。

インストールされていれば、メルセンヌ・ツイスタ等も利 用できる。

32/36

課題の提出

学籍番号7桁をseedとして乱数値を10個生成し、その 結果をMS-Wordもしくはテキストファイルに貼り付け、

経情グループウェアから提出しなさい。

MS-Excel、sample02.c、sample03.cのそれぞれにつ

いて行うこと。

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

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

33/36

演習:一方向関数とハッシュ値

34/36

Windowsでハッシュ値

certutil

を利用することで各種ハッシュ値を求めること ができます。

使用例:コマンドプロンプトで次のように入力

指定したファイルのハッシュ値を出力します。

MD5の部分は、SHA1 や SHA256を指定することもで

きます。(大文字で書きます)

certutil -hashfile ファイル名 MD5 certutil -hashfile ファイル名 MD5

35/36

Windows で行う MD5 :実行 (1)

今回は、コマンドプロンプトで実行します。

コマンドプロンプトを立ち上げます。

すべての プログラム

「アクセサリ」

の中の

「コマンドプロンプト」

36/36

Windows で行う MD5 :実行 (2)

1. certutil -hashfile

と入力します。

2.

ハッシュ値を求めたいファイルをコマンドプロンプトに ドラッグします。(ファイル名がフルパスで入ります)

3.

最後に

MD5(もしくはSHA1かSHA256)と入力して、エ

ンターする。

6

(7)

37/36

コマンドプロンプトからのコピー

左上を クリック

『編集』

を選択

『範囲指定』

『コピー』等を 利用

38/36

fuko でのフィンガープリント (1)

1. fukoにログインする。

2. Solaris では digest コマンドでMD5の値を求めること

ができる。

として、ファイルのMD5の値を出力してみましょう。

3.

とすることで、ファイルのsha1の値を出力してみま しょう。

%/> digest –a md5 ファイル名

%/> digest –a md5 ファイル名

%/> digest –a sha1 ファイル名

%/> digest –a sha1 ファイル名

39/36

課題でやること

1.

テキストファイルを作成する。中身は以下の通り。

2. md5とsha1のハッシュ値を計算する。

3.

テキストファイルを作成する。中身は以下の通り。

4. md5とsha1のハッシュ値を計算する。

5.

中身が異なっていることを確認する。

catcat

cutcut

40/36

課題でやること

1.

さまざまな単語等のMD5値を求め、近い値が出るか 挑戦しましょう。(注:出ません)

2.

入力した単語と、そのMD5値をレポートにまとめてく ださい。

各結果をテキストファイルもしくはWordファイルにま とめ、経情グループウェアから提出しなさい。

ファイル名は学籍番号の末尾に

g をつけたもの。

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

7

参照

関連したドキュメント

テキストマイニング は,大量の構 造化されていないテキスト情報を様々な観点から

  まず適当に道を書いてみて( guess )、それ がオイラー回路になっているかどうか確かめ る( check

次に、第 2 部は、スキーマ療法による認知の修正を目指したプログラムとな

タップします。 6通知設定が「ON」になっ ているのを確認して「た めしに実行する」ボタン をタップします。.

と言っても、事例ごとに意味がかなり異なるのは、子どもの性格が異なることと同じである。その

Google マップ上で誰もがその情報を閲覧することが可能となる。Google マイマップは、Google マップの情報を基に作成されるため、Google

上であることの確認書 1式 必須 ○ 中小企業等の所有が二分の一以上であることを確認 する様式です。. 所有等割合計算書

63―9 法第 63 条第 3 項に規定する確認は、保税運送の承認の際併せて行って