43

Click here to load reader

제 12 장 해쉬 알고리즘

  • Upload
    jeanne

  • View
    104

  • Download
    12

Embed Size (px)

DESCRIPTION

제 12 장 해쉬 알고리즘. 12.1 MD5 12.2 Seure Hash Algorithm (SHA) 12.3 RIPEMD-160 12.4 HMAC. 12.1 MD5 – 안전한 해쉬코드의 일반적 구성. CV 0 = IV = 초기 n 비트 값 CV i = f(CV i-1 , Y i-1 ) 1 ≤ i ≤ L H(M) = CV L 해쉬 함수의 입력값은 Y 0 , ..., Y L-1 블록들로 구성된 메시지 M. 12.1 MD5. MIT 의 Ron Rivest 에 의해 개발 - PowerPoint PPT Presentation

Citation preview

Page 1: 제 12 장  해쉬 알고리즘

제제 1212 장 해쉬 알고리즘장 해쉬 알고리즘

12.1 MD512.2 Seure Hash Algorithm (SHA)12.3 RIPEMD-16012.4 HMAC

Page 2: 제 12 장  해쉬 알고리즘

12.1 MD5 – 12.1 MD5 – 안전한 해쉬코드의 일반적 구성안전한 해쉬코드의 일반적 구성

CV0 = IV = 초기 n 비트 값CVi = f(CVi-1, Yi-1) 1 ≤ i ≤ LH(M) = CVL

해쉬 함수의 입력값은 Y0, ..., YL-1 블록들로 구성된 메시지 M

Page 3: 제 12 장  해쉬 알고리즘

12.1 MD512.1 MD5

• MIT 의 Ron Rivest 에 의해 개발– RSA 개발자 중의 한 사람

• RFC1321 에 등록되어 있음• 지난 몇년동안 가장 널리 사용됨

Page 4: 제 12 장  해쉬 알고리즘

12.1 MD5 – MD5 12.1 MD5 – MD5 로직로직

• MD5 로직– 입력 : 임의의 길이의 메시지– 처리단위 : 512- 비트 블럭– 출력 : 128 비트 메시지 다이제스트

• 5 단계로 구성– 1. 패딩 비트의 추가– 2. 메시지 길이의 부가– 3. MD 버퍼의 초기화– 4. 512 비트 (16 워드 ) 블록의 메시지 처리– 5. 출력

Page 5: 제 12 장  해쉬 알고리즘

패딩 (1~512bit) 메시지 길이 (K mod 264

)

LY 512bits = NY 32bits

K bits

메시지 1000....0

Y0 Y1 . . . . . . . Yq ........ YL-1

512 512 512 512

ABCD HMD5 HMD5 128bit HMD5 HMD5

128bit digest

12.1 MD5 - MD5 12.1 MD5 - MD5 로직로직

• MD5 를 이용한 메시지 다이제스트 (MD) 생성

Page 6: 제 12 장  해쉬 알고리즘

12.1 MD5 – MD5 12.1 MD5 – MD5 로직로직

• 1 단계 : 패딩 비트 부가– 메시지 길이 => 448 mod 512 되도록 패딩– 패딩비트 범위 : 1 ~ 512 비트– 패딩된 메시지 길이 : (L * 512) - 64 비트– 1 로 시작한 0 들의 조합으로 패딩 : 100∙∙∙

0– 메시지가 원하는 길이일지라도 패딩은 항상

부가

Page 7: 제 12 장  해쉬 알고리즘

12.1 MD5 – MD5 12.1 MD5 – MD5 로직로직

• 2 단계 : 메시지 길이의 부가– 패딩 이전 본래 메시지의 길이를 64 비트로

표현하여 부가– 1, 2 단계에 의해 길이가 512 비트의

정수배가 되는 메시지를 얻음– 확장된 메시지 길이 전체 : L * 512

= { Y0, Y1, …, YL-1}

= L * 16 * 32= (L * 16) 워드

Page 8: 제 12 장  해쉬 알고리즘

12.1 MD5 – MD5 12.1 MD5 – MD5 로직로직

• 3 단계 : MD 버퍼의 초기화– 버퍼의 용도 : 해수함수의 중간과 최종 결과 보관– 버퍼 : 버퍼는 4 개의 32 비트 레지스터 (A,B,C,D) 로 표현– 레지스터들은 다음과 같은 16 진수의 값으로 초기화

• A= 67452301 • B= EFCDAB89• C= 98BADCFE• D= 10325476• Little-endian 방식으로 저장

– A = 01234567 – B = 89ABCDEF– C = FEDCBA98– D = 76543210

Page 9: 제 12 장  해쉬 알고리즘

12.1 MD5 – MD5 12.1 MD5 – MD5 로직로직

• 4 단계 : 512(16 단어 ) 블럭의 메시지 처리– 입력 : 512 비트 블럭 , 128 비트 버퍼값 (A,

B,C,D), 사인 함수로 구성되는 64 개 요소 (T[1] ~ T[64] 중 16 개씩 적용 )

– Algorithm :•4 개의 라운드 처리로 구성된 모듈•같은 함수구조를 가지면서 서로 다른 기약함수에

의존 (F,G,H,I)• T[i] 에서 i 번째 요소는 232 * abs(sin(i)) 의 정수

부분과 일치

Page 10: 제 12 장  해쉬 알고리즘

12.1 MD5 – MD5 12.1 MD5 – MD5 로직로직

• 단일 512 비트 블록의 MD5 처리 (MD5 압축 함수 )

Page 11: 제 12 장  해쉬 알고리즘

12.1 MD5 – MD5 12.1 MD5 – MD5 로직로직

• 5 단계 : 출력– L 개의 512 비트 입력블록이 처리되고 , L 번째 단계의 128

비트 메시지 다이제스트 출력– MD5 의 과정

• CV0 = IV• CVq+1 = SUM32(CVq, RFI[Yq, RFH[Yq, RFG[Yq, RFF [Yq , CVq]]]])• MD = CVL

IV: ABCD 버퍼의 초기값 Yq: 메시지의 q 번째 블록 L: 메시지의 블록 수 CVq : 메시지의 q 번째 블록과 처리되는 체인 변수 RFX: 기약 논리함수 MD: 마지막 단계의 메시지 다이제스트 SUM32: 입력 각 쌍의 워드에 수행되는 법 232 덧셈

Page 12: 제 12 장  해쉬 알고리즘

12.1 MD5 – MD5 12.1 MD5 – MD5 압축 함수압축 함수

• 각 라운드는 버퍼 ABCD 상에서 처리하는 16 단계 연속으로 구성

• a b + CLSS(a + g(b,c,d) + X[k] + T[i])

– a,b,c,d : 버퍼의 4 단어– g: 기약 함수 F, G, H, I 의 하나– CLSS : 32 비트에서 s 비트 순환 좌측 쉬프트 ( 로테이션 )– X[k] : 메시지의 q 번째 512 비트 블록 중에서 k 번째의 단어 (3

2 비트 )– T[i] : 행렬 T 에서 i 번째 단어 (32 비트 ) [ 표 12.1 (b) 참조 ]– + : 법 232 의 덧셈

Page 13: 제 12 장  해쉬 알고리즘

12.1 MD5 – MD5 12.1 MD5 – MD5 압축 함수압축 함수

• 처리 결과– 32 비트 단어 배열 {X[0], …, X[15]} 는 현재 처리되고

있는 512 비트 블럭값을 가진다 .– 한개 512- 비트 블록은 16 회 반복을 통하여 X[0]

부터 X[15] 까지 처리– T[i] 를 순서대로 16 개씩 적용– 입력의 각 32 비트 단어는 라운드마다 한 번씩 4 번

사용되고 , 사인함수의 64 개의 32 비트 단어 요소의 각각은 정확히 한번 사용된다 .

– 각 단계에 대하여 버퍼의 4 바이트중 하나만이 갱신– 각 단계는 워드 단위의 순환 우측 쉬프트 수행 ( 그림

참조 )

Page 14: 제 12 장  해쉬 알고리즘

12.1 MD5 – MD5 12.1 MD5 – MD5 압축 함수압축 함수

• MD5 의 기본동작 ( 한 개의 단계 )

Page 15: 제 12 장  해쉬 알고리즘

12.1 MD5 – MD5 12.1 MD5 – MD5 압축 함수압축 함수

• 각 라운드에 사용되는 기약함수 g– AND: , OR: , NOT: ~, XOR:

라운드 기약함수 g g(b, c, d)

1 F(b, c, d) (bc) (~bd)

2 G(b, c, d) (bd) (c~d)

3 H(b, c, d) b c d

4 I(b, c, d) c (b~d)

Page 16: 제 12 장  해쉬 알고리즘

12.1 MD5 – MD412.1 MD5 – MD4

• MD5 의 개발에 앞서 Ron Rivest 가 개발 (1990년 10 월 최초 소개 , 1992 년 4 월 RFC1320으로 발표 )

• MD5 와 MD4 의 차이– MD4 는 16 단계의 3 라운드를 사용하나 , MD5 는 1

6 단계의 4 라운드를 사용한다 .– MD4 는 각 라운드에서 한 번씩 3 개의 기약함수를

사용한다 . 그러나 MD5 는 각 라운드에서 한번씩 4개의 기약 논리 함수를 사용한다 .

– MD5 의 각 단계는 이전 단계의 결과에 부가된다 . MD4 는 마지막 단계의 부가를 포함하지 않는다 .

Page 17: 제 12 장  해쉬 알고리즘

12.1 MD5 – MD512.1 MD5 – MD5 의 강도의 강도

• 해쉬코드는 모든 입력 비트의 함수 결과• 기본함수 (F, G, H, I) 는 잘 혼합된 결과의 효과를

유도• 같은 MD 를 갖는 두개의 메시지 찾기 : 264 • 주어진 MD 를 갖고 메시지 찾기 : 2128

• 모듈러 연산방식이 XOR 방식보다 강한 것으로 인식

• 생일 공격의 가능성 증가– 안전성 향상을 위하여 보다 긴 해쉬 코드의 필요성 증가

Page 18: 제 12 장  해쉬 알고리즘

12.2 Secure Hash Algorithm (SHA)12.2 Secure Hash Algorithm (SHA)

• Secure Hash Algorithm: NIST 에서 개발• 1993 년 : FIPS PUB 180(Federal Informati

on Processing Standard) 로 공포• 1995 년 : FIPS PUB 180-1 개정 버전

발행 (SHA-1)• SHA 는 MD4 알고리즘에 기반을 두고

유사하게 설계

Page 19: 제 12 장  해쉬 알고리즘

12.2 SHA – SHA-1 12.2 SHA – SHA-1 논리논리

• 최대 264 비트 미만의 길이 메시지 입력• 512 비트의 블록 단위로 처리• 160 비트 메시지 다이제스트 출력• MD5 의 구조를 따르고 , 유사한 처리

과정을 수행

Page 20: 제 12 장  해쉬 알고리즘

12.2 SHA – SHA-1 12.2 SHA – SHA-1 논리논리

• 단계 1: 패딩 비트의 부가• 단계 2: 메시지 길이의 부가• 단계 3: MD 버퍼의 초기화 (big endian 형태 저장 ) – A= 67452301– B= EFCDAB89– C= 98BADCFE– D= 10325476– E= C3D2E1F0

Page 21: 제 12 장  해쉬 알고리즘

12.2 SHA – SHA-1 12.2 SHA – SHA-1 논리논리

• 단계 4: 1 개의 블록 처리– 20 단계의 4 라운드 처리로 구성– 4 개의 각 라운드는 f1, f2, f3, f4 로 표현되는 4

가지의 기약 논리함수 사용– 80 개의 덧셈 상수 사용 (4 가지의 숫자 )

• 0 t 19 Kt = 5A827999

• 20 t 39 Kt = 6ED9EBA1

• 40 t 59 Kt = 8F1BBCDC

• 60 t 79 Kt = CA62C1D6

– 마지막 단계의 출력에 CVq 를 더하여 CVq+1 을 생성

Page 22: 제 12 장  해쉬 알고리즘

12.2 SHA – SHA-1 12.2 SHA – SHA-1 논리논리

• 단일 512 비트 블록의 SHA-1 처리 (SHA-1 압축 함수 )

Page 23: 제 12 장  해쉬 알고리즘

12.2 SHA – SHA-1 12.2 SHA – SHA-1 논리논리

• 단계 5: 출력– CV0 = IV– CVq+1 = SUM32 (CVq, ABCDEq)– MD = CVL

IV : ABCDE 버퍼의 초기값 ABCDEq : q 번째 메시지의 블록처리의 마지막

라운드에서의 출력 L : 메시지의 블록 수 ( 패딩과 길이 필드 포함 ) SUM32 : 입력쌍의 각 워드에 대해 분리하여 실행하는

법 232 에서의 덧셈 MD: 메시지 다이제스트

Page 24: 제 12 장  해쉬 알고리즘

12.2 SHA – SHA-1 12.2 SHA – SHA-1 압축함수압축함수

• 각 라운드의 형식– A (E+ f(t,B,C,D) + s5 (A) + Wt + Kt)– B A– C S30(B)– D C– E D

A, B, C, D, E : 버퍼의 5 워드 t : 단계 수 ; 0<= t <= 79 f(t, B, C, D) : 단계 t 에 대한 기약 논리 함수 Sk : k 비트에 의한 현재 32 비트 매개변수의 순환 좌측 쉬프트 Wt : 현재 입력 블록으로 만들어진 32 비트 워드 Kt : 덧셈 상수 ; 미리 정해진 4 개의 다른 값 + : 법 232 덧셈

Page 25: 제 12 장  해쉬 알고리즘

12.2 SHA – SHA-1 12.2 SHA – SHA-1 압축함수압축함수

• SHA-1 의 기본 동작 ( 한 개의 단계 )

Page 26: 제 12 장  해쉬 알고리즘

12.2 SHA – SHA-1 12.2 SHA – SHA-1 압축함수압축함수

• 단일 블록의 SHA-1 처리에서 80 워드 입력 생성

Page 27: 제 12 장  해쉬 알고리즘

12.2 SHA – SHA-112.2 SHA – SHA-1 과 과 MD5MD5 의 비교의 비교

• 양쪽 다 MD4 로부터 나왔기 때문에 , SHA-1 과 MD5 는 서로 아주 유사함 . 따라서 그들의 강도와 특성도 비슷

• MD5 와 SHA 의 비교

MD5 SHA-1

다이제스트 길이처리의 기본단위처리 단계수최대 메시지 크기기약 논리 함수덧셈 상수

128 비트512 비트64 (16 * 4)무한대464

160 비트512 비트80 (20 * 4)264

44

Page 28: 제 12 장  해쉬 알고리즘

12.3 RIPEMD-16012.3 RIPEMD-160

• 유럽의 RIPE(RACE Integrity Primitives Evaluation) 프로젝트의 일환으로 개발 [DOBB96b,BOSS97]

• MD4, MD5 에 대한 공격을 부분적으로 성공한 팀이 RIPEMD 128 비트 버전 개발

• RIPE 일원이 아닌 H. Dobbertin 이 RIPEMD, MD4, MD5의 허점 발견

• RIPE 멤버와 H. Dobbertin 공동으로 RIPEMD 보완개발• 입출력 길이

– 입력 : 임의의 길이의 메시지를 512 비트 - 블록 단위 처리– 출력 : 160 비트

Page 29: 제 12 장  해쉬 알고리즘

12.3 RIPEMD-160 - RIPEMD-160 12.3 RIPEMD-160 - RIPEMD-160 논리논리

• 단계 1 : 패딩비트 부가– 메시지는 비트의 길이가 512 를 법으로 하여 448 과

합동이 되도록 패딩– 패딩은 항상 부가 , 패딩비트수 : 1~512 비트 , One-Zero-Leading 방식

• 단계 2 : 메시지 길이 부가– 원래 메시지의 길이 계산– 64 비트 블록에 길이 정보 부가 , 부호없는 정수형– Little-Endian 규칙을 따름 .

Page 30: 제 12 장  해쉬 알고리즘

12.3 RIPEMD-160 - RIPEMD-160 12.3 RIPEMD-160 - RIPEMD-160 논리논리

• 단계 3 : MD 버퍼의 초기화– 160 비트 버퍼는 해쉬의 중간결과와 최종 결과를 저장– 5 개의 32 비트 레지스터 (A,B,C,D,E)– 각 레지스터들은 고정된 값으로 초기화

• A = 67452301 • B = EFCDAB89• C = 98BADCFE• D = 10325476• E = C3D2E1F0

– SHA-1 에서 사용된 값과 동일 , Little-Endian형태로 저장• A = 01234567 • B = 89ABCDEF• C = FEDCBA98• D = 76543210• E = F0E1D2C3

Page 31: 제 12 장  해쉬 알고리즘

12.3 RIPEMD-160 - RIPEMD-160 12.3 RIPEMD-160 - RIPEMD-160 논리논리

• 단계 4 : 512 비트 블록 메시지 처리– 16 단계로 되어 있는 10 라운드의 처리– 10 라운드는 두개의 5 라운드로 나뉘어 병행처리– 각 라운드는 각각의 f1,f2,f3,f4,f5 기약 논리함수 사용

( 표 9.4)– 각 라운드는 서로 다른 9 가지 (0 의 값 포함 ) 의

덧셈상수 (Kj) 사용 ( 표 9.3)– 좌 , 우 5 번째 라운드에서 CVq+1 을 생성하기 위해

모듈러 232 덧셈수행

• 단계 5 : 출력– 160 비트 메시지 다이제스트 생성

Page 32: 제 12 장  해쉬 알고리즘

12.3 RIPEMD-160 - RIPEMD-160 12.3 RIPEMD-160 - RIPEMD-160 압축 함수압축 함수

• 단일 512 비트 블록에 대한 RIPRMD-160 처리 (RIPEMD-160 압축 함수 )

Page 33: 제 12 장  해쉬 알고리즘

12.3 RIPEMD-160 - RIPEMD-160 12.3 RIPEMD-160 - RIPEMD-160 논리논리

• 기본 RIPRMD-160 동작 ( 한 개의 단계 )– 메시지 Xi ,– (0<=i<=15)– 상수 Kj– rol10 : 10bit 회전

Page 34: 제 12 장  해쉬 알고리즘

12.3 RIPEMD-160 – MD5, SHA-112.3 RIPEMD-160 – MD5, SHA-1 과의 비교과의 비교

• RIPEMD-160 – MD5, SHA-1 과의 비교MD5 SHA-1 RIPEMD-160

다이제스트 길이 128 비트 160 비트 160 비트

처리의 기본 단위 512 비트 512 비트 512 비트

단계 수 64 (16 번의 4라운드 )

80 (20 번의 4라운드 )

160 (16 번의 5병행 라운드 )

최대 메시지 크기 264-1 비트

기약 논리 함수 4 4 5

덧셈상수 64 4 9

Endianness Little-endian Big-endian Little-endian

Page 35: 제 12 장  해쉬 알고리즘

12.3 RIPEMD-160 – MD5, SHA-112.3 RIPEMD-160 – MD5, SHA-1 과의 비교과의 비교

• 해쉬함수의 상대적 성능– 850-MHz Celeron 에서 C++ 코딩 경우

알고리즘 Mbps

MD5 26

SHA-1 48

RIPEMD-160 31

Page 36: 제 12 장  해쉬 알고리즘

12.4 HMAC (Hashed-MAC)12.4 HMAC (Hashed-MAC)

• FIPS PUB 113 : 대칭 블록 암호에 기반한 MAC 계산(데이터 인증 )

• 암호 해쉬 코드를 이용한 MAC 사용 증가 이유– 암호 해쉬 함수가 대칭 블록 암호보다 빠름– 암호 해쉬 함수에 대한 라이브러리 코드의 입수 용이– 암호 해쉬 함수에 대한 수출 제한 없음 .

• MD5 와 같은 해쉬 함수는 비밀키에 의존하지 않음• 비밀키를 기존의 해쉬 알고리즘에 결합 [BELL96a,BELL9

6b]• HMAC

– RFC 2104 로 발행– IP 보안을 위한 MAC 의무 구현사항으로 선정 (SSL 에서 사용 )

Page 37: 제 12 장  해쉬 알고리즘

12.4 HMAC - HMAC 12.4 HMAC - HMAC 설계 목표설계 목표

• RFC 2104 의 HMAC 설계 목표– 기존의 해쉬 함수를 변경 없이 사용 가능해야 함– 해쉬 함수는 소프트웨어로 구현 가능 , 무상입수

용이– 내장 해쉬 함수 교체 용이 ( 해쉬 함수의 블랙 박스

화 )– 성능 저하 없이 해쉬 함수의 원래 성능 계속 유지– 간단한 방법으로 키 조작– 인증 메커니즘의 암호학적 분석 이해 가능

Page 38: 제 12 장  해쉬 알고리즘

12.4 HMAC - HMAC 12.4 HMAC - HMAC 알고리즘알고리즘

• HMACK(M) = H[(K+ opad) || H[K+ ipad) || M]]

– H : 내장된 해쉬 함수 (MD5, SHA-1, RIPEMD-160 etc.)– M : 입력메시지 ( 패딩포함 )– Yi : M 의 i 번째 블록 – L : M 의 블록수– b : 블록내에 있는 비트 수– n : 산출된 해쉬코드의 길이– K : 비밀키– K+ : b 비트가 되도록 왼쪽을 0 으로 채운 K– ipad : 00110110 을 b/8 번 반복 (0 과 1 이 각 4 개로 구성 )– opad : 01011010 을 b/8 번 반복 (0 과 1 이 각 4 개로 구성 )

Page 39: 제 12 장  해쉬 알고리즘

12.4 HMAC - HMAC 12.4 HMAC - HMAC 알고리즘알고리즘

• HMAC 구조

Page 40: 제 12 장  해쉬 알고리즘

12.4 HMAC - HMAC 12.4 HMAC - HMAC 알고리즘알고리즘

• 처리과정– 1. b 비트 스트링 K+ 생성

• 비밀키 K의 왼쪽에 0 을 첨가– 2. b 비트 블록 Si 를 생성

• K+ 와 ipad 를 XOR– 3. M 을 Si 에 추가

• Msg1 = [Si M] ; 대상 메시지에 Si 를 붙여서 해쉬 처리에 입력– 4. 3 단계의 Msg 에 해쉬를 적용

• n 비트 다이제스트를 갖는 해쉬알고리즘 사용– 5. b 비트 블록 S0 를 생성

• K+ 와 opad 를 XOR– 6. 단계 4 에서 만들어진 해쉬함수 적용결과에 S0 를 추가

• Msg2 = [S0 H(Msg1)]– 7. 6 단계의 결과에 해쉬함수를 다시 적용 한 결과

• HMACK (M) = H[(K+ opad) H[(K+ ipad) M]]

Page 41: 제 12 장  해쉬 알고리즘

12.4 HMAC - HMAC 12.4 HMAC - HMAC 알고리즘알고리즘

• 1 단계– K=160, b=512 경우 , 첨가 비트 = 352 비트 개의 “ 0” (512-1

60 = 352)• 2 단계와 5 단계

– ipad 및 opad 에 의해 키 값의 절반을 뒤집는 결과 (XOR 을 사용 )

• 2 개의 값은 미리 계산 가능– f(IV, (K+ ipad)) – f(IV, (K+ opad))– f(cv, block) ; n 비트 체인변수와 b 비트의 블록을 입력으로 n

비트 체인변수를 생성• 이 값은 시작 단계와 키가 변경될 때만 계산 필요• 미리 계산하여 해쉬함수에 IV 로 제공 가능

Page 42: 제 12 장  해쉬 알고리즘

12.4 HMAC - HMAC 12.4 HMAC - HMAC 알고리즘알고리즘

• HMAC 의 효과적 구현 (f 함수 미리 계산 )

Page 43: 제 12 장  해쉬 알고리즘

12.4 HMAC - HMAC12.4 HMAC - HMAC 의 안전성의 안전성

• (주어진 시간 , 메시지ㅡMAC 짝 ) 에서 HMAC에 대한 공격 성공 확률– 공격자는 해쉬 알고리즘과 디폴트 IV 값을 알고있음 .– 그러나 , K( 비밀키 ) 를 모르기 때문에 메시지와

코드의 짝을 생성할 수 없음 .– 128 비트 길이의 해쉬코드 공격을 위해서는 동일한 키로 생성된 264 의 블록 (272 bit) 을 필요• 250,000 년 동안 키의 변경없이 연속적인 메시지 스트림

조사필요

– 속도가 중요한 경우 , 내장 해쉬함수로 SHA-1 이나 RIPEMD160 보다 MD5 사용이 바람직