47
Chapter 5 해해 해해

Chapter 5 해쉬 함수

Embed Size (px)

DESCRIPTION

Chapter 5 해쉬 함수. 해쉬 함수 (hash function)?. 해쉬 함수는 데이터 ( 입력 ) 를 비교적 작은 크기의 스트링 ( 출력 ) 으로 만드는 방법이다 . 해쉬 함수의 출력값은 입력된 데이터의 디지털 “ 지문 ” 의 역할을 한다. 암호 해쉬 함수 (Crypto Hash function) 특정한 추가적인 보안의 특성을 갖는 해쉬 함수. 왜 해쉬 함수를 사용하는가 ?. Alice 가 메시지 M 에 서명을 한다고 하자 . Alice 는 M 과 S = [M] Alice 를 Bob 에게 보낸다 . - PowerPoint PPT Presentation

Citation preview

Page 1: Chapter 5 해쉬 함수

Chapter 5해쉬 함수

Page 2: Chapter 5 해쉬 함수

해쉬 함수 (hash function)?

해쉬 함수는 데이터 ( 입력 ) 를 비교적 작은 크기의 스트링 ( 출력 ) 으로 만드는 방법이다 . 해쉬 함수의 출력값은 입력된 데이터의 디지털 “ 지문”

의 역할을 한다 .

Chapter 5 Hash Function 2

암호 해쉬 함수 (Crypto Hash function)

특정한 추가적인 보안의 특성을 갖는 해쉬 함수

Page 3: Chapter 5 해쉬 함수

왜 해쉬 함수를 사용하는가 ?

Alice 가 메시지 M 에 서명을 한다고 하자 . Alice 는 M 과 S = [M]Alice 를 Bob 에게 보낸다 . Bob 은 M = {S}Alice 을 증명한다 .

단순히 S 를 보내는 것은 괜찮은가 ? 만약 M 이 크다면 , [M]Alice 을 계산하는데 많은

시간이 필요하다 . 대신에 , Alice 가 h(M) 에 서명을 한다면 어떨

까 ? h(M) 은 M 보다 훨씬 길이가 작다 . Alice 는 M 과 S = [h(M)]Alice 를 Bob 에게 보낸다 . Bob 은 h(M) = {S}Alice 을 증명한다 .

3Chapter 5 Hash Function

Page 4: Chapter 5 해쉬 함수

암호 해쉬 함수 (Crypto Hash Function)

암호 해쉬 함수 h(x) 는 다음과 같은 성질을 가져야 한다 .

압축 (Compression) 출력 메시지의 길이는 입력 메시지의 길이보다

작다 . 효율성 (Efficiency)

h(x) 는 어떤 x 에 대해서도 계산하기 쉬워야 한다 .

단방향 (One-way) y 가 주어졌을 때 h(x) = y 에 해당하는 x 를

찾는 것은 실행 불가능 (infeasible) 해야 한다 .4Chapter 5 Hash Function

Page 5: Chapter 5 해쉬 함수

암호 해쉬 함수

약한 충돌 방지 (Weak collision resistance) x 와 h(x) 가 주어졌을 때 h(y) = h(x) 인 y ( x)

를 찾는 것은 실현 불가능하다 . 강한 충돌 방지 (Strong collision

resistance) h(x) = h(y) 인 x 와 y (x y) 를 찾는 것은 실현

불가능하다 . 많은 충돌이 존재하겠지만 이것을 찾는 것은

힘들어야 한다 .5Chapter 5 Hash Function

Page 6: Chapter 5 해쉬 함수

생일 문제에 들어가기 전에…

N 명이 한 방에 있다고 하자 . 어떤 사람의 생일이 나의 생일과 같을

확률이 ½ 보다 크기 위해서 N 이 얼마나 커야 하는가 ? 해법 : 1/2 = 1 (364/365)N for N 해답 : N = 253

6Chapter 5 Hash Function

Page 7: Chapter 5 해쉬 함수

생일 문제 (Birthday Problem)

한 방에 있는 사람들 중에 2 명 또는 그 이상이 같은 생일일 확률이 ½ 보다 크기 위해서는 얼마나 많은 사람들이 있어야 하나 ? 1 365/365 364/365 (365N+1)/365

위의 값이 ½ 과 같기 위해서는 N = 23 (n=22 일 때 P≈0.475, n=23 일 때 Pn≈0.506)

놀라운가 ? 역설적인가 (paradox)?

아니다 : “ 그렇게 되어야만 한다” x 와 y 의 모든 쌍들을 비교해야 하기 때문에 365 의 제곱근이 근사값이 된다 . 7Chapter 5 Hash Function

Page 8: Chapter 5 해쉬 함수

생일 문제

8Chapter 5 Hash Function

Page 9: Chapter 5 해쉬 함수

해쉬와 생일

h(x) 가 N 비트이면 , 2N 개의 다른 해쉬 값들이 가능하다 .

sqrt(2N) = 2N/2

따라서 , 약 2N/2 개의 랜덤값들을 해쉬하면 충돌이 발생할 수 있다 .

의미 : 안전한 N 비트의 대칭키를 “ 깨기”위해서는 2N1 번의 작업이 필요하다 . 반면에 안전한 N 비트의 해쉬를 “ 깨기” 위해서는 2N/2

번의 작업이 필요하다 .9

Page 10: Chapter 5 해쉬 함수

비암호 해쉬 (Non-Crytpo Hash)

Chapter 5 Hash Function 10

Page 11: Chapter 5 해쉬 함수

비암호 해쉬 (1)

데이터 : X = (X0,X1,X2,…,Xn-1), Xi 는 바이트 hash(X) = X0+X1+X2+…+Xn-1 mod 256 이라고

하자 . 출력 결과는 항상 8 bits

이것은 안전한가 ? 예 :

X = (10101010, 00001111) = 170+15 = 185 = 10111001Hash of X = 10111001하지만 Hash of Y = (00001111,10101010)

쉽게 충돌을 찾을 수 있다 . 따라서 안전하지 않다 .

11Chapter 5 Hash Function

Page 12: Chapter 5 해쉬 함수

비암호 해쉬 (2)

데이터 : X = (X0,X1,X2,…,Xn-1) hash 는 다음과 같다고 하자 .

h(X) = nX0+(n-1)X1+(n-2)X2+…+1Xn-1 mod 256

이 해쉬는 안전한가 ? 적어도 ,

h(10101010, 00001111)h(00001111, 10101010) 하지만 hash of (00000001, 00001111) 는

hash of (00000000, 00010001) 와 같다 . 안전하지는 않지만 이 해쉬는 비암호 응용 분야인

resync 에서 성공적으로 사용되고 있다 .

12Chapter 5 Hash Function

Page 13: Chapter 5 해쉬 함수

RSYNC

rsync is a free software computer program for Unix systems which synchronizes files and directories from one location to another while minimizing data transfer using delta encoding when appropriate.

Chapter 5 Hash Function 13

Page 14: Chapter 5 해쉬 함수

비암호 해쉬 (3)

중복 검사 (Redundancy check) 별도의 데이터가 에러 검출 혹은 정정을 위해서

메시지에 첨가된다 . 어떤 해쉬 함수도 중복 검사에 사용될 수 있다 .

간단한 예 : 패러티 검사 (parity check)

검사합 (Checksum) 중복 검사의 한 형태 IP 프로토콜에서 사용

14Chapter 5 Hash Function

Page 15: Chapter 5 해쉬 함수

비암호 해쉬 (4)

순환 중복 검사 (Cyclic Redundancy Check: CRC)

CRC 와 유사한 중복 검사 방법들은 전송 에러를 검출하기 위한 목적으로 만들어졌다 .

의도적으로 데이터를 손상시키는 것을 발견하기 위한 것은 아니다 .

하지만 CRC 는 가끔 암호 응용 분야에 잘못 사용되는 경우가 있다 . ( 예 : WEP)

15Chapter 5 Hash Function

Page 16: Chapter 5 해쉬 함수

WEP

WEP: Wired Equivalent Privacy IEEE 802.11 무선 네트워크의 보안

프로토콜 WEP 은 기밀성을 위해서 스트림 암호 RC4

을 사용하고 무결성을 위해서 CRC-32 checksum 을 사용한다 .

Chapter 5 Hash Function 16

Page 17: Chapter 5 해쉬 함수

암호 해쉬 (Crytpo Hash)

Chapter 5 Hash Function 17

Page 18: Chapter 5 해쉬 함수

암호 해쉬 설계 (1)

충돌 방지 충돌을 방지할 수 있으면 해쉬 함수는

안전하다고 한다 . 입력값의 변화는 출력값과는 상관 관계가

없어야 한다 . 바람직한 특성 : 눈사태 효과

입력값 1 비트를 바꾸면 출력값의 반이 변경되어야 한다 .

눈사태 효과는 회전 (round) 이 거의 없더라도 발생해야 한다 .

18Chapter 5 Hash Function

Page 19: Chapter 5 해쉬 함수

암호 해쉬 설계 (2)

효율성 효율적이지 않으면 ( 시간이 많이 걸린다면 )

암호를 목적으로 해쉬를 사용하는 의미가 없다 . 암호 해쉬 함수는 여러 번의 회전 (rounds)

으로 구성된다 . 블록 암호의 설계와 비슷하다 . 블록 암호의 반복과 마찬가지로 상호 교환

(tradeoff) 이 존재한다 .계산 속도 vs. 안전도

19Chapter 5 Hash Function

Page 20: Chapter 5 해쉬 함수

대표적인 암호 해쉬들

MD(Message Digest) 5 Rivest 가 개발 입력 블록 : 512bits, 출력 : 128 bits MD2 → MD4 → MD5 MD2 와 MD4 는 충돌이 발견되어서 더 이상

안전하지 않다 . 주목 ! MD5 조차도 최근에 충돌이

발견되었다 .

20Chapter 5 Hash Function

Page 21: Chapter 5 해쉬 함수

대표적인 암호 해쉬들 (2)

SHA(Secure Hash Algorithm)-1 미국 정부 표준 (MD5 와 유사 ) “ 세상에서 가장 인기 있는 해쉬 함수” 입력 블록 : 512bits, 출력 : 180 bits SHA-0 → SHA-1

다른 많은 해쉬가 있지만 , MD5 와 SHA-1 이 가장 널리 사용되고 있다 .

21Chapter 5 Hash Function

Page 22: Chapter 5 해쉬 함수

대표적인 암호 해쉬들 (3)

여기서는 MD5 or SHA-1 대신에 Tiger hash 알고리즘을 살펴 본다 .

왜냐하면 Tiger 가 MD5 or SHA-1 보다 훨씬 구조적으로 설계되어 있다 .

22Chapter 5 Hash Function

Page 23: Chapter 5 해쉬 함수

Tiger Hash

Chapter 5 Hash Function 23

Page 24: Chapter 5 해쉬 함수

Tiger Hash

Ross Anderson & Eli Biham 이 개발 이름이 의미하는 것처럼 “ Fast and

strong” 설계 기준

안전 64-bit 프로세서에 최적화 MD5 혹은 SHA-1 로 쉽게 대체

24Chapter 5 Hash Function

Page 25: Chapter 5 해쉬 함수

Tiger Hash

MD5/SHA-1 과 같이 , 입력값은 512 bit 블록으로 나누어진다 . ( 마지막 블록은 패딩된다 .)

MD5/SHA-1 와 다르게 출력값은 192 bits ( 세 개의 64-bit words) 비교 MD5: 128 bit, SHA-1: 180 bit 만약 MD5 혹은 SHA-1 로 대체한다면 출력값을 짜르면

된다 . 중간의 회전 (round) 은 모두 192 bits 4 S-boxes, 각각은 8 bits 를 64 bits 로 “key schedule” 이 사용된다 .

25Chapter 5 Hash Function

Page 26: Chapter 5 해쉬 함수

Tiger 외부 회전

F7

F9

W

ca b

ca b

F5

key schedule

key schedule

Input : X X = (X0,X1,…,Xn-1) Xi : 512 bits

There are n iterations of diagram at left One for each input block

초기 (a,b,c) : 상수 최종 (a,b,c) : hash 블록 암호와 비슷하다 !

ca b

W

W

Xi

26Chapter 5 Hash Function

c a b

64 64 64

Page 27: Chapter 5 해쉬 함수

Tiger 내부 회전

fm,0

fm.1

fm,2

fm,7

w0

w1

w2

w7

ca b

ca b

각각의 Fm 은 정확히 8개 회전으로 구성된다 .

Fm 에 512 bit 입력 W W=(w0,w1,…,w7)

wi : 64bits

W is 입력 블록 Xi 중 하나 모든 선은 64 bits fm,i 은 다음 장의 S-

boxes 에 의해 달라진다 .

27Chapter 5 Hash Function

Page 28: Chapter 5 해쉬 함수

Tiger Hash: One Round

fm,i 는 a, b, c, wi, m 의 함수 이전 회전 (round) 의 출력값 a,b,c 는 이번 회전의

입력값이 된다 . wi : 64-bit 블록 , W=(w0,w1,…,w7) m : multiplier c = (c0,c1,…,c7): ci 는 1 바이트

fm,i 의 출력 c = c wi a = a (S0[c0] S1[c2] S2[c4] S3[c6]) b = b + (S3[c1] S2[c3] S1[c5] S0[c7]) b = b m

Si 는 S-box: 8 bits 가 64 bits 로 매핑된다 .28Chapter 5 Hash Function

Page 29: Chapter 5 해쉬 함수

Tiger Hash Key Schedule

입력 : X X=(x0,x1,

…,x7) X 의 값에

조그만 변화도 키 스케쥴 출력값은 크게 변한다 .

x0 = x0 (x7 0xA5A5A5A5A5A5A5A5)

x1 = x1 x0 , x2 = x2 x1

x3 = x3 (x2 ((~x1) << 19))

x4 = x4 x3 , x5 = x5 +x4

x6 = x6 (x5 ((~x4) >> 23))

x7 = x7 x6 ,

x0 = x0 +x7

x1 = x1 (x0 ((~x7) << 19))

x2 = x2 x1 , x3 = x3 +x2

x4 = x4 (x3 ((~x2) >> 23))

x5 = x5 x4 , x6 = x6 +x5

x7 = x7 (x6 0x0123456789ABCDEF)

29Chapter 5 Hash Function

Page 30: Chapter 5 해쉬 함수

Tiger Hash 요약 (1)

해쉬값과 중간값은 192 bits 24 (3-outer X 8-inner) 회전 (rounds)

S-boxes: 각 입력 비트는 3 회전 후에 a, b, c에 영향을 미치도록 설계되었다 .

Key schedule: 메시지에 조그만 차이가 생기면 중간 해쉬값의 많은 비트에 영향을 준다 .

Multiply: 하나의 회전에서의 S-box 의 입력은 다음 회전의 많은 S-box 에 섞이도록 한다 .

S-boxes, key schedule, multiply 는 강력한 눈사태 효과가 발생하도록 설계되었다 .

30Chapter 5 Hash Function

Page 31: Chapter 5 해쉬 함수

Tiger Hash 요약 (2)

블록 암호로부터 많은 아이디어를 빌려옴 S-boxes 반복 회전 (Multiple rounds) Mixed mode arithmetic

전체적으로 Tiger 는 다음의 암호의 기본 개념을 사용하고 있다 . Confusion Diffusion

31Chapter 5 Hash Function

Page 32: Chapter 5 해쉬 함수

HMAC

Chapter 5 Hash Function 32

Page 33: Chapter 5 해쉬 함수

HMAC (1)

MAC 은 메시지 무결성을 위해서 사용한다고 했다 . 블록 암호의 CBC 모드에서 마지막 블록의 암호문을

MAC 으로 사용하다 . 하지만 M 과 h(M) 을 같이 보낼 수는 없다 .

Trudy 는 M 을 M’ 으로 바꾸고 MAC 도 다시 계산해서 h(M) 을 h(M’) 으로 바꿀 수 있다 .

어떻게 이 문제를 해결할 수 있을까 ? 한가지 해법 : 해쉬에 키를 사용하도록 한다 . 즉 ,

hashed MAC (HMAC) 키는 오직 송신자와 수신자 만이 알고 있다 .

33Chapter 5 Hash Function

Page 34: Chapter 5 해쉬 함수

HMAC (2)

어떻게 HMAC 을 계산하는가 ?두가지 명백한 선택

Case1: h(K,M) Case2: h(M,K)

하지만 두 경우 모두 잠재적인 문제점을 갖고 있다 .

34Chapter 5 Hash Function

Page 35: Chapter 5 해쉬 함수

HMAC: Case 1: HMAC as h(K,M)

암호 해쉬 함수는 메시지를 블록으로 해쉬한다 . 예 : MD5, SHA-1, Tiger: 512 bits/block If M=(B1,B2),

then h(M)=F(F(A, B1), B2)=F(h(B1), B2) − ① F: 임의의 함수 , A : 고정 길이의 초기 상수

If M’ = (M,X) Trudy 는 K를 모르더라도 ① 을 사용하여 h(K,M)

으로부터 h(K,M’) 을 알 수 있다 . 왜냐하면h(K,M’) = h(K,M,X) = F(h(K,M), X)

힘수 F 는 알려진 함수 따라서 이것은 문제가 있다 .

35Chapter 5 Hash Function

Page 36: Chapter 5 해쉬 함수

HMAC: Case 2: HMAC as h(M,K)

이것은 Case 1 의 문제를 해결한다 . 하지만 , h(M’)=h(M) 인 M’ 가 있으면 ( 즉 ,

충돌이 있다면 ), ①에 의해서 h(M,K)=F(h(M), K)=F(h(M’), K)=h(M’,K)

이것은 그렇게 심각한 문제는 아니다 . 왜냐하면 충돌이 있다면 이 해쉬는 안전하지 않은 것이므로 어차피 사용할 수 없을 것이다 .

하지만 이것을 해결할 수 있다면 당연히 그렇게 해야 한다 .

36Chapter 5 Hash Function

Page 37: Chapter 5 해쉬 함수

HMAC: 올바른 계산

약간의 수정을 통해서 앞의 문제를 회피한다 . IETF 표준 : RFC 2104

B : 해쉬의 블록 길이 ( 바이트 ) B = 64 byes(=512 bits) for MD5, SHA-1, Tiger

ipad = 0x36 을 B 번 반복 andopad = 0x5C 을 B 번 반복

그러면 HMAC(M,K) = H(K opad, H(K ipad, M))

37Chapter 5 Hash Function

Page 38: Chapter 5 해쉬 함수

HMAC

Chapter 5 Hash Function 38

MAC(text)t = HMAC(K, text)t = H((K0 opad )|| H((K0 ipad) || text))t HMAC uses the following parameters:

B: Block size (in bytes) of the input to the Approved hash function.H: An Approved hash function.ipad: Inner pad; the byte x’36’ repeated B times.K: Secret key shared between the originator and the intended receiver(s).K0: The key K after any necessary pre-processing to form a B byte key.L: Block size (in bytes) of the output of the Approved hash function.opad: Outer pad; the byte x’5c’ repeated B times.t : The number of bytes of MAC.text: The data on which the HMAC is calculated; text does not include

the padded key. The length of text is n bits, where 0 <= n < 2B - 8B.

x’N’: Hexadecimal notation, where each symbol in the string ‘N’ represents 4 binary bits.

|| : Concatenation : Exclusive-Or operation.

Page 39: Chapter 5 해쉬 함수

Chapter 5 Hash Function 39

STEPS STEP-BY-STEP DESCRIPTION

Step 1If the length of K = B: set K0 = K. Else adjust K ; Step 2 –Step 3 omit

Step4 Exclusive-Or K0 with ipad to produce a B-byte string: K0 ipad.

Step 5 Append the stream of data 'text' to the string resulting from step 4: (K0 ipad) || text.

Step 6 Apply H to the stream generated in step 5: H((K0 ipad) || text).

Step 7 Exclusive-Or K0 with opad: K0 opad.

Step 8Append the result from step 6 to step 7: (K0 opad) || H((K0 ipad) || text)

Step 9Apply H to the result from step 8: H((K0 opad )|| H((K0 ipad) || text)).

Step 10 Select the leftmost t bytes of the result of step 9 as the MAC.

MAC(text)t = HMAC(K, text)t = H((K0 opad )|| H((K0 ipad) || text))t

HMAC

Page 40: Chapter 5 해쉬 함수

Chapter 5 Hash Function 40

Page 41: Chapter 5 해쉬 함수

Hash 의 응용

Chapter 5 Hash Function 41

Page 42: Chapter 5 해쉬 함수

Hash 의 응용

인증 (HMAC) 메시지 무결성 (HMAC) 메시지 지문 (fingerprint) 데이터 훼손 (corruption) 발견 효율적인 전자 서명

42Chapter 5 Hash Function

Page 43: Chapter 5 해쉬 함수

온라인 경매 (Online Auction)

입찰자 (bidder): Alice, Bob, Charlie Alice 는 A, Bob 은 B, Charlie 는 C에 입찰을 했다 . 하지만 그들은 자신들의 입찰가가 비밀로 지켜지는

것을 신뢰할 수 없었다 . 해법 ?

Alice, Bob, Charlie 는 해쉬값 h(A), h(B), h(C) 을 제출한다 .

이들이 제출한 해쉬값은 모두 온라인으로 공고한다 . 그리고 입찰가를 제출한다 .

해쉬값으로 입찰가를 알 수 없다 .(one way) 해쉬값을 제출한 후에 입찰가를 변경할 수 없다 .

(collision)

43Chapter 5 Hash Function

Page 44: Chapter 5 해쉬 함수

스팸 감소 (Spam Reduction)

내가 너로부터 전자메일을 받기 전에 , 네가 전자메일을 작성하기 위해 약간의 “노력” 을 했다는 것을 증명해라 . ( 예 , CPU cycles) 보낼 수 있는 전자메일의 양을 줄일 수 있다 . 스팸을 보내는데 상당한 노력이 필요하도록

한다 . 이것은 해쉬값을 계산하는 방법으로 할 수

있다 . Sender: 일의 양은 요구하는데 달려 있다 . Receiver: 단지 간단한 일만을 수행한다 .

44Chapter 5 Hash Function

Page 45: Chapter 5 해쉬 함수

스팸 감소 (2) (M, R, T) 로부터 해쉬를 계산한다 .

M = email 메시지 R = 결정해야 하는 값 T = 현재 시간

Sender 는 반드시 다음과 같은 R 을 찾는다 .

hash(M,R,T) = (00…0,X), 해쉬값의 처음 N 비트는 모두 zero 이다 .

Sender 는 (M,R,T) 을 보낸다 . 수신자는 다음의 조건을 만족하면 이메일을 받아

들인다 . hash(M,R,T) 의 값의 처음 N 비트가 zero 로

시작한다 .45Chapter 5 Hash Function

N

Page 46: Chapter 5 해쉬 함수

스팸 감소 (3)

송신자가 R 을 찾는데 필요한 일의 양 2N hashes Sender’s work increases exponentially in

N 수신가가 검증하는데 필요한 일의 양

1 hash – 단지 hash(M,R,T) 의 처음 N 비트가 zero 인지 아닌지 확인하면 된다 .

N 에 상관없이 수신자는 같은 일을 하면 된다 .

46Chapter 5 Hash Function

Page 47: Chapter 5 해쉬 함수

스팸 감소 (4)

어는 정도 길이의 N 을 선택하면 적당할까 ? 보통의 이메일 사용자가 받아드릴 수 있을

정도의 일의 양 스패머 (spapper) 들에게는 감당할 수 없을

정도의 일의 양 !

47Chapter 5 Hash Function