1 / 43

제 12 장 해쉬 알고리즘

제 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 에 의해 개발

jeanne
Download Presentation

제 12 장 해쉬 알고리즘

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 제12장 해쉬 알고리즘 12.1 MD5 12.2 Seure Hash Algorithm (SHA) 12.3 RIPEMD-160 12.4 HMAC

  2. 12.1 MD5 – 안전한 해쉬코드의 일반적 구성 CV0 = IV = 초기 n 비트 값 CVi = f(CVi-1, Yi-1) 1 ≤ i ≤ L H(M) = CVL 해쉬 함수의 입력값은 Y0, ..., YL-1블록들로 구성된 메시지 M

  3. 12.1 MD5 • MIT의 Ron Rivest에 의해 개발 • RSA 개발자 중의 한 사람 • RFC1321에 등록되어 있음 • 지난 몇년동안 가장 널리 사용됨

  4. 12.1 MD5 – MD5 로직 • MD5 로직 • 입력 : 임의의 길이의 메시지 • 처리단위: 512-비트 블럭 • 출력 : 128 비트 메시지 다이제스트 • 5단계로 구성 • 1. 패딩 비트의 추가 • 2. 메시지 길이의 부가 • 3. MD 버퍼의 초기화 • 4. 512비트(16워드) 블록의 메시지 처리 • 5. 출력

  5. 패딩 (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 로직 • MD5를 이용한 메시지 다이제스트(MD) 생성

  6. 12.1 MD5 – MD5 로직 • 1단계 : 패딩 비트 부가 • 메시지 길이=> 448 mod 512 되도록 패딩 • 패딩비트 범위 : 1 ~ 512 비트 • 패딩된 메시지 길이: (L * 512) - 64 비트 • 1로 시작한 0들의 조합으로 패딩 : 100∙∙∙0 • 메시지가 원하는 길이일지라도 패딩은 항상 부가

  7. 12.1 MD5 – MD5 로직 • 2단계 : 메시지 길이의 부가 • 패딩 이전 본래 메시지의 길이를 64비트로 표현하여 부가 • 1, 2단계에 의해 길이가 512비트의 정수배가 되는 메시지를 얻음 • 확장된 메시지 길이 전체: L * 512 = { Y0, Y1, …, YL-1} = L * 16 * 32 = (L * 16) 워드

  8. 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

  9. 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))의 정수 부분과 일치

  10. 12.1 MD5 – MD5 로직 • 단일 512비트 블록의 MD5 처리(MD5 압축 함수)

  11. 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덧셈

  12. 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번째의 단어(32비트) • T[i] : 행렬 T에서 i번째 단어(32비트) [표12.1 (b) 참조] • + : 법 232의 덧셈

  13. 12.1 MD5 – MD5 압축 함수 • 처리 결과 • 32비트 단어 배열 {X[0], …, X[15]}는 현재 처리되고 있는 512비트 블럭값을 가진다. • 한개 512-비트 블록은 16회 반복을 통하여 X[0] 부터 X[15]까지 처리 • T[i]를 순서대로 16개씩 적용 • 입력의 각 32비트 단어는 라운드마다 한 번씩 4번 사용되고, 사인함수의 64개의 32비트 단어 요소의 각각은 정확히 한번 사용된다. • 각 단계에 대하여 버퍼의 4바이트중 하나만이 갱신 • 각 단계는 워드 단위의 순환 우측 쉬프트 수행(그림 참조)

  14. 12.1 MD5 – MD5 압축 함수 • MD5의 기본동작(한 개의 단계)

  15. 12.1 MD5 – MD5 압축 함수 • 각 라운드에 사용되는 기약함수 g • AND: , OR: , NOT: ~, XOR: 

  16. 12.1 MD5 – MD4 • MD5의 개발에 앞서 Ron Rivest가 개발 (1990년 10월 최초 소개, 1992년 4월 RFC1320으로 발표) • MD5와 MD4의 차이 • MD4는 16단계의 3라운드를 사용하나, MD5는 16단계의 4라운드를 사용한다. • MD4는 각 라운드에서 한 번씩 3개의 기약함수를 사용한다. 그러나 MD5는 각 라운드에서 한번씩 4개의 기약 논리 함수를 사용한다. • MD5의 각 단계는 이전 단계의 결과에 부가된다. MD4는 마지막 단계의 부가를 포함하지 않는다.

  17. 12.1 MD5 – MD5의 강도 • 해쉬코드는 모든 입력 비트의 함수 결과 • 기본함수(F, G, H, I)는 잘 혼합된 결과의 효과를 유도 • 같은 MD를 갖는 두개의 메시지 찾기: 264 • 주어진 MD를 갖고 메시지 찾기: 2128 • 모듈러 연산방식이 XOR 방식보다 강한 것으로 인식 • 생일 공격의 가능성 증가 • 안전성 향상을 위하여 보다 긴 해쉬 코드의 필요성 증가

  18. 12.2 Secure Hash Algorithm (SHA) • Secure Hash Algorithm: NIST에서 개발 • 1993년: FIPS PUB 180(Federal Information Processing Standard)로 공포 • 1995년: FIPS PUB 180-1 개정 버전 발행(SHA-1) • SHA는 MD4 알고리즘에 기반을 두고 유사하게 설계

  19. 12.2 SHA – SHA-1 논리 • 최대 264비트 미만의 길이 메시지 입력 • 512비트의 블록 단위로 처리 • 160비트 메시지 다이제스트 출력 • MD5의 구조를 따르고, 유사한 처리 과정을 수행

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

  21. 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을 생성

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

  23. 12.2 SHA – SHA-1 논리 • 단계 5: 출력 • CV0 = IV • CVq+1 = SUM32 (CVq, ABCDEq) • MD = CVL • IV : ABCDE 버퍼의 초기값 • ABCDEq : q번째 메시지의 블록처리의 마지막 라운드에서의 출력 • L : 메시지의 블록 수 (패딩과 길이 필드 포함) • SUM32 : 입력쌍의 각 워드에 대해 분리하여 실행하는 법 232에서의 덧셈 • MD: 메시지 다이제스트

  24. 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덧셈

  25. 12.2 SHA – SHA-1 압축함수 • SHA-1의 기본 동작 (한 개의 단계)

  26. 12.2 SHA – SHA-1 압축함수 • 단일 블록의 SHA-1 처리에서 80워드 입력 생성

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

  28. 12.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비트

  29. 12.3 RIPEMD-160 - RIPEMD-160 논리 • 단계1 : 패딩비트 부가 • 메시지는 비트의 길이가 512를 법으로 하여 448과 합동이 되도록 패딩 • 패딩은 항상 부가, 패딩비트수 : 1~512비트, One-Zero-Leading방식 • 단계2 : 메시지 길이 부가 • 원래 메시지의 길이 계산 • 64비트 블록에 길이 정보 부가, 부호없는 정수형 • Little-Endian 규칙을 따름.

  30. 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

  31. 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비트 메시지 다이제스트 생성

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

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

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

  35. 12.3 RIPEMD-160 – MD5, SHA-1과의 비교 • 해쉬함수의 상대적 성능 • 850-MHz Celeron 에서 C++ 코딩 경우

  36. 12.4 HMAC (Hashed-MAC) • FIPS PUB 113 : 대칭 블록 암호에 기반한 MAC 계산(데이터 인증) • 암호 해쉬 코드를 이용한 MAC 사용 증가 이유 • 암호 해쉬 함수가 대칭 블록 암호보다 빠름 • 암호 해쉬 함수에 대한 라이브러리 코드의 입수 용이 • 암호 해쉬 함수에 대한 수출 제한 없음. • MD5와 같은 해쉬 함수는 비밀키에 의존하지 않음 • 비밀키를 기존의 해쉬 알고리즘에 결합[BELL96a,BELL96b] • HMAC • RFC 2104로 발행 • IP보안을 위한 MAC 의무 구현사항으로 선정(SSL에서 사용)

  37. 12.4 HMAC - HMAC 설계 목표 • RFC 2104의 HMAC 설계 목표 • 기존의 해쉬 함수를 변경 없이 사용 가능해야 함 • 해쉬 함수는 소프트웨어로 구현 가능, 무상입수 용이 • 내장 해쉬 함수 교체 용이 (해쉬 함수의 블랙 박스화) • 성능 저하 없이 해쉬 함수의 원래 성능 계속 유지 • 간단한 방법으로 키 조작 • 인증 메커니즘의 암호학적 분석 이해 가능

  38. 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개로 구성)

  39. 12.4 HMAC - HMAC 알고리즘 • HMAC 구조

  40. 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]]

  41. 12.4 HMAC - HMAC 알고리즘 • 1단계 • K=160, b=512 경우, 첨가 비트= 352비트 개의 “0” (512-160 = 352) • 2단계와 5단계 • ipad 및 opad 에 의해 키 값의 절반을 뒤집는 결과 (XOR을 사용) • 2개의 값은 미리 계산 가능 • f(IV, (K+ ipad)) • f(IV, (K+ opad)) • f(cv, block) ; n비트 체인변수와 b비트의 블록을 입력으로 n비트 체인변수를 생성 • 이 값은 시작 단계와 키가 변경될 때만 계산 필요 • 미리 계산하여 해쉬함수에 IV로 제공 가능

  42. 12.4 HMAC - HMAC 알고리즘 • HMAC의 효과적 구현 (f함수 미리 계산)

  43. 12.4 HMAC - HMAC의 안전성 • (주어진 시간, 메시지ㅡMAC 짝)에서 HMAC에 대한 공격 성공 확률 • 공격자는 해쉬 알고리즘과 디폴트 IV값을 알고있음. • 그러나, K(비밀키)를 모르기 때문에 메시지와 코드의 짝을 생성할 수 없음. • 128비트 길이의 해쉬코드 공격을 위해서는 동일한 키로 생성된 264의 블록 (272 bit)을 필요 • 250,000년 동안 키의 변경없이 연속적인 메시지 스트림 조사필요 • 속도가 중요한 경우, 내장 해쉬함수로 SHA-1이나 RIPEMD160 보다 MD5 사용이 바람직

More Related