1장 알고리즘 정리 - freesearch.pe.krfreesearch.pe.kr/wp-content/uploads/1/xbl51mhmdf.pdf ·...

36
Hash Hash 전희원 2006.09.11

Upload: others

Post on 31-Oct-2019

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1장 알고리즘 정리 - freesearch.pe.krfreesearch.pe.kr/wp-content/uploads/1/XBL51mHmdF.pdf · 해시 함수의 종류(2/4) 폴딩(folding)법 •키를 균등한 크기의 부분으로

HashHash

전희원

2006.09.11

Page 2: 1장 알고리즘 정리 - freesearch.pe.krfreesearch.pe.kr/wp-content/uploads/1/XBL51mHmdF.pdf · 해시 함수의 종류(2/4) 폴딩(folding)법 •키를 균등한 크기의 부분으로

목차목차

해시해시

해시함수해시함수• 해시 함수의 종류해시 함수의 종류

• 해시 함수의 성능 평가해시 함수의 성능 평가

충돌충돌(collision)(collision)해결 방안해결 방안• 선형 검색법선형 검색법

• 22차 검색법차 검색법

• 체이닝체이닝

목적이 다른 해시 함수들목적이 다른 해시 함수들• 해시 함수의 보안성해시 함수의 보안성

• MD5 MD5

Page 3: 1장 알고리즘 정리 - freesearch.pe.krfreesearch.pe.kr/wp-content/uploads/1/XBL51mHmdF.pdf · 해시 함수의 종류(2/4) 폴딩(folding)법 •키를 균등한 크기의 부분으로

해싱해싱(hashing)(hashing) 정 의 정 의

• 데이터의 키 값을 테이블에 대한 주소로 변환하여 데이터를 데이터의 키 값을 테이블에 대한 주소로 변환하여 데이터를

해당 주소에 저장함으로써해당 주소에 저장함으로써, , 데이터를 신속하게 검색할 수 있데이터를 신속하게 검색할 수 있

도록 하는 기법도록 하는 기법(key to address).(key to address).

• 키 값키 값, , 해시 함수 및 해시 테이블과의 관계해시 함수 및 해시 테이블과의 관계..

해시 테이블

키 값 r1

r2

r3

r4

RN

해시 함수

데이터 버킷

Address = Address = h(key)h(key)

00

11

n-1n-1

홈주소홈주소(home address)(home address)

Page 4: 1장 알고리즘 정리 - freesearch.pe.krfreesearch.pe.kr/wp-content/uploads/1/XBL51mHmdF.pdf · 해시 함수의 종류(2/4) 폴딩(folding)법 •키를 균등한 크기의 부분으로

해싱해싱(hashing) (hashing) 용어 용어

• 해시 테이블해시 테이블(hash table)(hash table)

– 데이터가 저장되는 버킷(bucket)들 또는 버킷에 대한 포인터들의 배열로써, 하나

의 버킷에는 하나 이상의 레코드를 저장할 수 있다.

• 해시 함수해시 함수(hashing function)(hashing function)

– 데이터의 키 값을 해시 테이블에 대한 주소로 변환하는데 사용되는 함수를 말한

다.

• 충돌충돌(collision)(collision)

– 키 값이 서로 다른 데이터가 해시 테이블의 같은 홈 주소를 계산해 내는 현상.

• 동의어동의어(synonym) = (synonym) = 유사 레코드유사 레코드

– 충돌 현상이 발생하는 레코드의 집합으로, 같은 홈 주소를 갖는 레코드의 집합

• 오버플로우오버플로우(overflow) (overflow)

– 해당 버킷에 더 이상 레코드를 저장할 수 없는 현상

Page 5: 1장 알고리즘 정리 - freesearch.pe.krfreesearch.pe.kr/wp-content/uploads/1/XBL51mHmdF.pdf · 해시 함수의 종류(2/4) 폴딩(folding)법 •키를 균등한 크기의 부분으로

해시 함수해시 함수(hashing function)(hashing function)

정의정의

• 데이터의 키 값을 해시 테이블의 엔트리에 대한 주소로 변환데이터의 키 값을 해시 테이블의 엔트리에 대한 주소로 변환

하는데 사용하는 함수하는데 사용하는 함수..

• Address = h(key)Address = h(key)

해시 함수의 조건해시 함수의 조건

• 계산이 신속 및 간단해야 한다계산이 신속 및 간단해야 한다..

• 다른 키 값들이 동일 주소로 산출되는 경우가 적어야 한다다른 키 값들이 동일 주소로 산출되는 경우가 적어야 한다..

Page 6: 1장 알고리즘 정리 - freesearch.pe.krfreesearch.pe.kr/wp-content/uploads/1/XBL51mHmdF.pdf · 해시 함수의 종류(2/4) 폴딩(folding)법 •키를 균등한 크기의 부분으로

해시 함수해시 함수(hashing function)(hashing function)

해시 함수의 종류해시 함수의 종류

• 나눗셈나눗셈(division)(division)법법

• 중간제곱중간제곱(mid-square)(mid-square)법법

• 폴딩폴딩(folding)(folding)법법

• 기수 변환기수 변환(radix exchange)(radix exchange)법법

• 자릿수 분석자릿수 분석(digit analysis)(digit analysis)법법

Page 7: 1장 알고리즘 정리 - freesearch.pe.krfreesearch.pe.kr/wp-content/uploads/1/XBL51mHmdF.pdf · 해시 함수의 종류(2/4) 폴딩(folding)법 •키를 균등한 크기의 부분으로

해시 함수의 종류해시 함수의 종류(1/4) (1/4)

나눗셈나눗셈(division)(division)법법• 키 값을 정수로 보고 이를 적당한 양의 정수키 값을 정수로 보고 이를 적당한 양의 정수((주로주로, , 해시 테해시 테

이블의 크기이블의 크기))로 나누어서 그 나머지를 취하는 방법으로 가장 로 나누어서 그 나머지를 취하는 방법으로 가장

간단한 해시 함수간단한 해시 함수..

• h(k): k mod N (h(k): k mod N (단단, k, k는 키 값는 키 값, ,

NN은 나누는 수은 나누는 수((솟수솟수, prime number)) , prime number))

중간 제곱중간 제곱(mid-square) (mid-square) 법법• 키 값을 제곱한 다음 이 값의 중간 부분의 적당한 자릿수를 키 값을 제곱한 다음 이 값의 중간 부분의 적당한 자릿수를

취하는 방법취하는 방법..

Page 8: 1장 알고리즘 정리 - freesearch.pe.krfreesearch.pe.kr/wp-content/uploads/1/XBL51mHmdF.pdf · 해시 함수의 종류(2/4) 폴딩(folding)법 •키를 균등한 크기의 부분으로

해시 함수의 종류해시 함수의 종류(2/4) (2/4)

폴딩폴딩(folding)(folding)법법• 키를 균등한 크기의 부분으로 나누고키를 균등한 크기의 부분으로 나누고, , 이들을 모두 더하거나 이들을 모두 더하거나

배타적 논리합배타적 논리합(XOR)(XOR)을 취함으로써 해당 레코드의 주소를 얻을 취함으로써 해당 레코드의 주소를 얻

는 방법는 방법..

– 주어진 키 값을 2진수로 변환.

– 이들 2진수를 동일한 크기의 여러 부분으로 나눈다.

– 이러한 부분 2진수들에 대해 ADD 또는 XOR 연산을 수행.

– 계산된 2진수를 해당 레코드의 주소 값으로 사용.

폴딩법의 분류폴딩법의 분류

fold shifting: fold shifting: 각 부분의 오른 쪽 끝을 맞추어 더한 값을 취한다각 부분의 오른 쪽 끝을 맞추어 더한 값을 취한다..

fold boundary: fold boundary: 각 부분의 경계선을 접어 정렬하여 더한 값을 취한다각 부분의 경계선을 접어 정렬하여 더한 값을 취한다..

잠깐

Page 9: 1장 알고리즘 정리 - freesearch.pe.krfreesearch.pe.kr/wp-content/uploads/1/XBL51mHmdF.pdf · 해시 함수의 종류(2/4) 폴딩(folding)법 •키를 균등한 크기의 부분으로

해시 함수의 종류해시 함수의 종류(3/4) (3/4)

기수 변환기수 변환(radix exchange)(radix exchange)법법• 어떤 진법으로 표현된 키를 다른 진법으로 표현되었다고 가어떤 진법으로 표현된 키를 다른 진법으로 표현되었다고 가

정하고 키를 변환하는 방법정하고 키를 변환하는 방법..

• 예제예제

– 크기가 10000인 해시 테이블에서 키 값이 172145인 레코드를 저

장할 주소를 찾는 경우(8진법의 키를 11진법으로 표현하였다고

가정)

– 1ⅹ115 +7ⅹ114 +2ⅹ113 +1ⅹ112 +4ⅹ111 +5ⅹ110 = 266370이므로,

해당 레코드의 주소 값은 266370에서 아래 4자리를 취해서 6370

이 된다.

Page 10: 1장 알고리즘 정리 - freesearch.pe.krfreesearch.pe.kr/wp-content/uploads/1/XBL51mHmdF.pdf · 해시 함수의 종류(2/4) 폴딩(folding)법 •키를 균등한 크기의 부분으로

해시 함수의 종류해시 함수의 종류(4/4) (4/4)

자릿수 분석자릿수 분석(digit analysis)(digit analysis)법법• 키가 취할 수 있는 모든 키 값들에서 그 키를 구성하는 자릿키가 취할 수 있는 모든 키 값들에서 그 키를 구성하는 자릿

수들의 분포를 조사하여 비교적 고른 분포를 보이는 자릿수수들의 분포를 조사하여 비교적 고른 분포를 보이는 자릿수

들을 필요한 만큼 택하는 방법들을 필요한 만큼 택하는 방법..

다른 해시 함수들다른 해시 함수들

대수적 코딩대수적 코딩(algebraic coding)(algebraic coding)법법: : 키를 구성하고 있는 각 자릿수를 다항식의 계수로 간주하여 계키를 구성하고 있는 각 자릿수를 다항식의 계수로 간주하여 계산한 후산한 후, , 계산된 결과를 해시 테이블의 크기로 나눈 나머지 값을 주소로 하는 방법계산된 결과를 해시 테이블의 크기로 나눈 나머지 값을 주소로 하는 방법..

의사 무작위 의사 무작위 (pseudo random)(pseudo random)법법: : 난수 발생기를 이용하여 주소를 결정하는 방법난수 발생기를 이용하여 주소를 결정하는 방법. .

잠깐

Page 11: 1장 알고리즘 정리 - freesearch.pe.krfreesearch.pe.kr/wp-content/uploads/1/XBL51mHmdF.pdf · 해시 함수의 종류(2/4) 폴딩(folding)법 •키를 균등한 크기의 부분으로

해시 함수에 대한 성능 평가 해시 함수에 대한 성능 평가

중간제곱법중간제곱법• 아주 작은 적재율을 가지고 있는 경우 좋은 성과를 얻을 수 아주 작은 적재율을 가지고 있는 경우 좋은 성과를 얻을 수

있으나있으나, , 때때로 많은 충돌이 생겨서 성능이 저하되는 경우가 때때로 많은 충돌이 생겨서 성능이 저하되는 경우가 발생한다발생한다..

폴딩법폴딩법• 계산하기에 쉬운 기법이지만 때로는 불규칙적인 결과를 가져계산하기에 쉬운 기법이지만 때로는 불규칙적인 결과를 가져

오기도 한다오기도 한다..

자릿수 분석법자릿수 분석법• 모든 키 값들이 미리 알려진 경우에만 사용가능하며모든 키 값들이 미리 알려진 경우에만 사용가능하며, , 레코드레코드

들이 변동 없이 고정되어 있을 때만 좋은 성능을 기대할 수 들이 변동 없이 고정되어 있을 때만 좋은 성능을 기대할 수 있다있다..

Page 12: 1장 알고리즘 정리 - freesearch.pe.krfreesearch.pe.kr/wp-content/uploads/1/XBL51mHmdF.pdf · 해시 함수의 종류(2/4) 폴딩(folding)법 •키를 균등한 크기의 부분으로

충돌 해결 방안 충돌 해결 방안

선형 검색선형 검색(linear probing)(linear probing)법법

22차 검색차 검색(quadratic probing)(quadratic probing)법법

해시 체이닝해시 체이닝(hash chaining)(hash chaining)법법

Page 13: 1장 알고리즘 정리 - freesearch.pe.krfreesearch.pe.kr/wp-content/uploads/1/XBL51mHmdF.pdf · 해시 함수의 종류(2/4) 폴딩(folding)법 •키를 균등한 크기의 부분으로

선형 검색법선형 검색법(1/2)(1/2)

정의정의

• 충돌이 일어난 자리에서 그 다음 버킷을 차례로 하나씩 검색충돌이 일어난 자리에서 그 다음 버킷을 차례로 하나씩 검색

하여 최초로 나오는 빈 버킷에 그 데이터를 집어넣는 충돌 하여 최초로 나오는 빈 버킷에 그 데이터를 집어넣는 충돌

해결 방법해결 방법..

수행 방식수행 방식..

• hh0 0 = k mod N= k mod N에서 충돌이 발생하였다면에서 충돌이 발생하였다면, , 아래와 같이 수행하아래와 같이 수행하

면서 최초로 나오는 빈 버킷을 찾는다면서 최초로 나오는 빈 버킷을 찾는다..

– h1 = (h0 +1) mod N

– h1 = (h1 +1) mod N

Page 14: 1장 알고리즘 정리 - freesearch.pe.krfreesearch.pe.kr/wp-content/uploads/1/XBL51mHmdF.pdf · 해시 함수의 종류(2/4) 폴딩(folding)법 •키를 균등한 크기의 부분으로

선형 검색법선형 검색법(2/2)(2/2)

장점장점

• 계산이 간단하다계산이 간단하다..

단점단점

• 검색에 많은 시간이 소요검색에 많은 시간이 소요..

• 테이블 내 레코드들의 위치가 일정한 키에 의해 집단으로 모테이블 내 레코드들의 위치가 일정한 키에 의해 집단으로 모

이는 경향 발생이는 경향 발생..

Page 15: 1장 알고리즘 정리 - freesearch.pe.krfreesearch.pe.kr/wp-content/uploads/1/XBL51mHmdF.pdf · 해시 함수의 종류(2/4) 폴딩(folding)법 •키를 균등한 크기의 부분으로

22차 검색법차 검색법(1/2) (1/2)

정의정의• 충돌이 일어난 주소로부터 충돌이 일어난 주소로부터 1, 4, 9, 16, … 1, 4, 9, 16, … 처럼 처럼 dd22(d=1, 2, (d=1, 2,

3, …)3, …)이 되는 거리만큼 떨어진 곳을 차례로 찾아가서 최초이 되는 거리만큼 떨어진 곳을 차례로 찾아가서 최초로 나오는 빈 곳에 해당 레코드를 집어 넣는 충돌 해결 방식로 나오는 빈 곳에 해당 레코드를 집어 넣는 충돌 해결 방식..

수행방식수행방식• hh0 0 = k mod N= k mod N에서 충돌이 발생하였다면에서 충돌이 발생하였다면, , 아래와 같이 수행하아래와 같이 수행하

면서 최초로 나오는 버킷을 찾는다면서 최초로 나오는 버킷을 찾는다..

– h1 = (h0 +1) mod N

– h2 = (h0 +4) mod N

– h3 = (h0 +9) mod N

– …

– hi = (h0 +i2) mod N

Page 16: 1장 알고리즘 정리 - freesearch.pe.krfreesearch.pe.kr/wp-content/uploads/1/XBL51mHmdF.pdf · 해시 함수의 종류(2/4) 폴딩(folding)법 •키를 균등한 크기의 부분으로

22차 검색법차 검색법(2/2) (2/2)

장점장점

• 레코드들의 위치가 일정한 키를 중심으로 뭉치는 경향을 어레코드들의 위치가 일정한 키를 중심으로 뭉치는 경향을 어

느 정도 배제할 수 있다느 정도 배제할 수 있다..

단점단점

• 해시 테이블의 모든 버킷이 다 검색되지는 않음해시 테이블의 모든 버킷이 다 검색되지는 않음..

Page 17: 1장 알고리즘 정리 - freesearch.pe.krfreesearch.pe.kr/wp-content/uploads/1/XBL51mHmdF.pdf · 해시 함수의 종류(2/4) 폴딩(folding)법 •키를 균등한 크기의 부분으로

해시 체이닝법해시 체이닝법(1/2) (1/2)

정의정의

• 아래 그림과 같이 해시 테이블 자체는 포인터의 배열로 만들아래 그림과 같이 해시 테이블 자체는 포인터의 배열로 만들

고고, , 같은 버킷에 해당되는 데이타들을 체인같은 버킷에 해당되는 데이타들을 체인((마지막 레코드의 마지막 레코드의

링크 필드는 링크 필드는 nullnull인 연결 리스트인 연결 리스트))으로 만들어서 연결하는 방으로 만들어서 연결하는 방

식식..

해시 테이블

키 값 해시 함수

Page 18: 1장 알고리즘 정리 - freesearch.pe.krfreesearch.pe.kr/wp-content/uploads/1/XBL51mHmdF.pdf · 해시 함수의 종류(2/4) 폴딩(folding)법 •키를 균등한 크기의 부분으로

해시 체이닝법해시 체이닝법(2/2) (2/2)

장점장점

• 삽입삽입, , 삭제시에 문제가 없다삭제시에 문제가 없다..

단점단점

• 포인터 연산을 수행해야 하기 때문에 동적인 기억장소 할당포인터 연산을 수행해야 하기 때문에 동적인 기억장소 할당

이 필요이 필요..

해시 체이닝법의 분류해시 체이닝법의 분류

직접 연결직접 연결(direct chaining) (direct chaining) 기법기법: : 동일한 해시 테이블 내에서 유사 레코드들을 연결리스트로 동일한 해시 테이블 내에서 유사 레코드들을 연결리스트로 구성한다구성한다..

간접 연결간접 연결(indirect chaining): (indirect chaining): 해시 테이블과 별도로 기억 공간을 확보하여 유사 레코드를 연해시 테이블과 별도로 기억 공간을 확보하여 유사 레코드를 연결하여 처리한다결하여 처리한다..

잠깐

Page 19: 1장 알고리즘 정리 - freesearch.pe.krfreesearch.pe.kr/wp-content/uploads/1/XBL51mHmdF.pdf · 해시 함수의 종류(2/4) 폴딩(folding)법 •키를 균등한 크기의 부분으로

목적이 다른 해시 함수들목적이 다른 해시 함수들

해시 테이블 검색을 위한 해시 함수해시 테이블 검색을 위한 해시 함수• 속도가 빠르고 어느정도 충돌이 가능하다속도가 빠르고 어느정도 충돌이 가능하다..• 위에서 설명한 것들 위에서 설명한 것들 (mid-square, folding (mid-square, folding 등등등등))

유니크 값을 계산하기 위한 해시함수유니크 값을 계산하기 위한 해시함수• 속도도 어느정도 나오지만 보안성은 없음 속도도 어느정도 나오지만 보안성은 없음

• crc32, crc64, adler32, fletcher crc32, crc64, adler32, fletcher 등등

보안 목적을 위한 해시 함수보안 목적을 위한 해시 함수• 보안 목적의 해싱 함수보안 목적의 해싱 함수

• md5, sha-1 sha-256, sha-384 md5, sha-1 sha-256, sha-384 등등등등

보안 해시 함수를 이용한 상위 응용함수 보안 해시 함수를 이용한 상위 응용함수 • 보안 목적의 해시 함수들을 다른곳에 응용하기 위해 감싸 올린 보안 목적의 해시 함수들을 다른곳에 응용하기 위해 감싸 올린

방식방식

• hmac, hash-cbc hmac, hash-cbc 등등

Page 20: 1장 알고리즘 정리 - freesearch.pe.krfreesearch.pe.kr/wp-content/uploads/1/XBL51mHmdF.pdf · 해시 함수의 종류(2/4) 폴딩(folding)법 •키를 균등한 크기의 부분으로

해시 함수의 보안성해시 함수의 보안성

h(m) = x h(m) = x 의 공식을 이용해 의 공식을 이용해 mm을 알아내는건 불가능 을 알아내는건 불가능 해야한다해야한다. .

충돌 저항성충돌 저항성(collision resistance)(collision resistance)가 있어야 한다가 있어야 한다..• h(m1) = h(m2) h(m1) = h(m2) 배재배재

• 충돌이 존재하더라도충돌이 존재하더라도, , 쉽게 발견되지 않아야 한다쉽게 발견되지 않아야 한다..

Page 21: 1장 알고리즘 정리 - freesearch.pe.krfreesearch.pe.kr/wp-content/uploads/1/XBL51mHmdF.pdf · 해시 함수의 종류(2/4) 폴딩(folding)법 •키를 균등한 크기의 부분으로

MD5MD5

배경 및 특징배경 및 특징• 19921992년 년 MITMIT의 의 Ronald RivestRonald Rivest가 개발가 개발

• MessageMessage는 임의의 길이를 가짐 단 는 임의의 길이를 가짐 단 226464 bits bits 이하이하

• MessageMessage는 는 512bits 512bits 단위 단위 blockblock들로 분할되며들로 분할되며, , 이것은 각각 이것은 각각 1616개의 개의 32-bit sub-block32-bit sub-block으로 분할됨으로 분할됨

• Message Padding (Little Endian Message Padding (Little Endian 적용적용))– 512bits의 배수 길이가 되도록 0으로 padding– 마지막 block에서 64bits 구간은 Length Field로 사용

• Message Digest Message Digest 결과는 결과는 128bits128bits– 32bits X 4 sub-blocks

Page 22: 1장 알고리즘 정리 - freesearch.pe.krfreesearch.pe.kr/wp-content/uploads/1/XBL51mHmdF.pdf · 해시 함수의 종류(2/4) 폴딩(folding)법 •키를 균등한 크기의 부분으로

MD5MD5

MD5MD5알고리즘알고리즘(1/7)(1/7)• Padding & Length FieldPadding & Length Field

M = 7a138b25 24af17c3 17b439a1 2f51c5a8

8051cb36 00000000 00000000 00000000

00000000 00000000 00000000 00000000

00000000 00000000 00000098 00000000

Initialize Message Digest RegistersInitialize Message Digest Registersa = 67452301 b = efcdab89 c = 98badcfe d = 10325476

Length Field

Input message

Page 23: 1장 알고리즘 정리 - freesearch.pe.krfreesearch.pe.kr/wp-content/uploads/1/XBL51mHmdF.pdf · 해시 함수의 종류(2/4) 폴딩(folding)법 •키를 균등한 크기의 부분으로

MD5MD5

MD5 MD5 알고리즘알고리즘(2/7)(2/7)• 512-bit block512-bit block마다마다64 steps(4 rounds X 16 steps)64 steps(4 rounds X 16 steps)씩연산씩연산

• a,b,c,d: 32-bit registersa,b,c,d: 32-bit registers• round 1 (16 steps)round 1 (16 steps)

– FF(a, b, c, d, M[k], s, i) :a = b + ((a + F(b, c, d) + M[k] + T[i] <<< s)FF(a,b,c,d,M[0],7,1), FF(d,a,b,c,M[1],12,2),

FF(c,d,a,b,M[2],17,3),FF(b,c,d,a,M[3],22,4), FF(a,b,c,d,M[4],7,5),

FF(d,a,b,c,M[5],12,6), …

FF(a,b,c,d,M[12],7,13), FF(d,a,b,c,M[13],12,14), FF(c,d,a,b,M[14],17,15),

FF(b,c,d,a,M[15],22,16)

Page 24: 1장 알고리즘 정리 - freesearch.pe.krfreesearch.pe.kr/wp-content/uploads/1/XBL51mHmdF.pdf · 해시 함수의 종류(2/4) 폴딩(folding)법 •키를 균등한 크기의 부분으로

MD5MD5

MD5MD5알고리즘알고리즘(3/7)(3/7)

a = b + ((a + F(b,c,d) + M[k] + T[i]) <<< s)

Page 25: 1장 알고리즘 정리 - freesearch.pe.krfreesearch.pe.kr/wp-content/uploads/1/XBL51mHmdF.pdf · 해시 함수의 종류(2/4) 폴딩(folding)법 •키를 균등한 크기의 부분으로

MD5MD5

MD5 MD5 알고리즘알고리즘(4/7)(4/7)• Round 2 (16 steps)Round 2 (16 steps)

– GG(a, b, c, d, M[k], s, i) :a = b + ((a + G(b, c, d) + M[k] + T[i] <<< s)GG(a,b,c,d,M[1],5,17), GG(d,a,b,c,M[6],9,18), …

GG(b,c,d,a,M[12],20,32)

• Round 3 (16steps)Round 3 (16steps)– HH(a, b, c, d, M[k], s, i) : a = b + ((a + H(b, c, d) + M[k] + T[i] <<< s)HH(a,b,c,d,M[5],4,33), HH(d,a,b,c,M[8],11,34), …

HH(b,c,d,a,M[2],23,48)

Page 26: 1장 알고리즘 정리 - freesearch.pe.krfreesearch.pe.kr/wp-content/uploads/1/XBL51mHmdF.pdf · 해시 함수의 종류(2/4) 폴딩(folding)법 •키를 균등한 크기의 부분으로

MD5MD5

MD5 MD5 알고리즘 알고리즘 (5/7)(5/7)• Round 4 (16 steps)Round 4 (16 steps)

– II(a, b, c, d, M[k], s, i) : a = b + ((a + I(b, c, d) + M[k] + T[i] <<< s)II(a,b,c,d,M[5],4,49), II(d,a,b,c,M[8],11,50), …

II(b,c,d,a,M[2],23,64)

M[k], 0 M[k], 0 ≤≤ kk ≤≤ 15 : sub-block of k th message 15 : sub-block of k th message T[i] = integer part of [2T[i] = integer part of [23232 * * sin(sin(ii))], i = 1~ 64], i = 1~ 64 <<< s : Left Shift by s<<< s : Left Shift by s

Page 27: 1장 알고리즘 정리 - freesearch.pe.krfreesearch.pe.kr/wp-content/uploads/1/XBL51mHmdF.pdf · 해시 함수의 종류(2/4) 폴딩(folding)법 •키를 균등한 크기의 부분으로

MD5MD5

MD5 MD5 알고리즘 알고리즘 (6/7)(6/7)• 4 auxiliary functions F, G, H, I4 auxiliary functions F, G, H, I

– XOR, AND, OR and NOT

XYZ FGHI

000001010011100101110111

00011010011010010011010111001110

Function Table

Page 28: 1장 알고리즘 정리 - freesearch.pe.krfreesearch.pe.kr/wp-content/uploads/1/XBL51mHmdF.pdf · 해시 함수의 종류(2/4) 폴딩(folding)법 •키를 균등한 크기의 부분으로

MD5MD5

T[1] = d76aa478

T[2] = e8c7b756

T[3] = 242070db

T[4] = c1bdceee

T[5] = f57c0faf

T[6] = 4787c62a

T[7] = a8304613

T[8] = fd469501

T[9] = 698098d8

T[10] = 8b44f7af

T[11] = ffff5bb1

T[12] = 895cd7be

T[13] = 6b901122

T[14] = fd987193

T[15] = a679438e

T[16] = 49b40821

T[17] = f61e2562

T[18] = c040b340

T[19] = 265e5a51

T[20] = e9b6c7aa

T[21] = d62f105d

T[22] = 02441453

T[23] = d8a1e681

T[24] = e7d3fbc8

T[25] = 21e1cde6

T[26] = c33707d6

T[27] = f4d50d87

T[28] = 455a14ed

T[29] = a9e3e905

T[30] = fcefa3f8

T[31] = 676f02d9

T[32] = 8d2a4c8a

T[33] = fffa3942

T[34] = 8771f681

T[35] = 69d96122

T[36] = fde5380c

T[37] = a4beea44

T[38] = 4bdecfa9

T[39] = f6bb4b60

T[40] = bebfbc70

T[41] = 289b7ec6

T[42] = eaa127fa

T[43] = d4ef3085

T[44] = 04881d05

T[45] = d9d4d039

T[46] = e6db99e5

T[47] = 1fa27cf8

T[48] = c4ac5665

T[49] = f4292244

T[50] = 432aff97

T[51] = ab9423a7

T[52] = fc93a039

T[53] = 655b59c3

T[54] = 8f0ccc92

T[55] = ffeff47d

T[56] = 85845dd1

T[57] = 6fa87e4f

T[58] = fe2ce6e0

T[59] = a3014314

T[60] = 4e0811a1

T[61] = f7537e82

T[62] = bd3af235

T[63] = 2ad7d2bb

T[64] = eb86d391

Computation of T[i]

Page 29: 1장 알고리즘 정리 - freesearch.pe.krfreesearch.pe.kr/wp-content/uploads/1/XBL51mHmdF.pdf · 해시 함수의 종류(2/4) 폴딩(folding)법 •키를 균등한 크기의 부분으로

MD5MD5

Define Shift SDefine Shift S• s[ 0..15] := s[ 0..15] :=

{7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22}

• s[16..31] := s[16..31] := {5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20}

• s[32..47] := s[32..47] := {4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16,

23}

• s[48..63] := s[48..63] := {6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15,

21}

Page 30: 1장 알고리즘 정리 - freesearch.pe.krfreesearch.pe.kr/wp-content/uploads/1/XBL51mHmdF.pdf · 해시 함수의 종류(2/4) 폴딩(folding)법 •키를 균등한 크기의 부분으로

MD5MD5

MD5 MD5 알고리즘 알고리즘 (7/7)(7/7)• 모든 모든 512-bit message block 512-bit message block 들에 대해 연산들에 대해 연산((각각 각각 64 64

steps)steps)을 수행을 수행

• Message Digest Message Digest 값은 위 결과에 다시 각각의 초기 상수를 값은 위 결과에 다시 각각의 초기 상수를 더한 값임더한 값임

Page 31: 1장 알고리즘 정리 - freesearch.pe.krfreesearch.pe.kr/wp-content/uploads/1/XBL51mHmdF.pdf · 해시 함수의 종류(2/4) 폴딩(folding)법 •키를 균등한 크기의 부분으로

MD5MD5

Step Step 연산 예연산 예• Round 1’s step 1 computation :Round 1’s step 1 computation :

– FF[a, b ,c, d, M[0], 7, 1 ]– a = 67452301– F(efcdab89, 98badcfe, 10325476) = 98badcfe (Table 6.1)– M[0] = 7a138b25– T[1] = d76aa478– U = a + F(b,c,d) + M[0] + T[1] = 517e2f9c– FF = b + (U<<<7) = efcdab89 + bf17ce28 = aee579b1

– Result (register a의 값만 변화)aee579b1 efcdab89 98badcfe 10325476 a b c d registers

Page 32: 1장 알고리즘 정리 - freesearch.pe.krfreesearch.pe.kr/wp-content/uploads/1/XBL51mHmdF.pdf · 해시 함수의 종류(2/4) 폴딩(folding)법 •키를 균등한 크기의 부분으로

MD5MD5

MD5 MD5 알고리즘 예알고리즘 예(1/3)(1/3)• Round 1 : FF(a, b, c, d, M[k], s, i )Round 1 : FF(a, b, c, d, M[k], s, i )

[ 1] aee579b1 efcdab89 98badcfe 10325476[ 2] aee579b1 efcdab89 98badcfe 3bfb6779[ 3] aee579b1 efcdab89 1e52ee63 3bfb6779[ 4] aee579b1 2279e391 1e52ee63 3bfb6779 …

[15] 7dccd1ee 9d8eb345 bff77632 359415c[16] 7dccd1ee 10821d51 bff77632 359415c

• Round 2 : GG(a, b, c, d, M[k], s, i ) Round 2 : GG(a, b, c, d, M[k], s, i ) [ 1] b88aedfb 10821d51 bff77632 359415c[ 2] b88aedfb 10821d51 bff77632 f14f0cf3 …

[16] 5b8a2ae8 29e29554 2e6d799d af92e3c8

Page 33: 1장 알고리즘 정리 - freesearch.pe.krfreesearch.pe.kr/wp-content/uploads/1/XBL51mHmdF.pdf · 해시 함수의 종류(2/4) 폴딩(folding)법 •키를 균등한 크기의 부분으로

MD5MD5

MD5 MD5 알고리즘 예알고리즘 예(2/3)(2/3)• Round 3 : HH(a, b, c, d, M[k], s, i ) Round 3 : HH(a, b, c, d, M[k], s, i )

[ 1] 63f9c804 29e29554 2e6d799d af92e3c8[ 2] 63f9c804 29e29554 2e6d799d 3bf27cdf ...[16] fbc16051 814dbccf 14f356d2 9fb3bb46

• Round 4 : II(a, b, c, d, M[k], s, i ) Round 4 : II(a, b, c, d, M[k], s, i ) [ 1] 707bb6a6 814dbccf 14f356d2 9fb3bb46[ 2] 707bb6a6 814dbccf 14f356d2 b374ac1a …

[16] d4921a8b 24903b0e f3d96b57 400fe907

Page 34: 1장 알고리즘 정리 - freesearch.pe.krfreesearch.pe.kr/wp-content/uploads/1/XBL51mHmdF.pdf · 해시 함수의 종류(2/4) 폴딩(folding)법 •키를 균등한 크기의 부분으로

MD5MD5

MD5 MD5 알고리즘 예알고리즘 예(3/3)(3/3)• Final ProcessingFinal Processing

– Adding initial constantsA = a + 67452301 = d4921a8b + 67452301 = 3bd73d8cB = b + efcdab89 = 24903b0e + efcdab89 = 145de697C = c + 98badcfe = f3d96b57 + 98badcfe = 8c944855D = d + 10325476 = 400fe907 +10325476 = 50423d7d

• Hash Value =Hash Value = 8c 3d d7 3b 97 e6 5d 14 55 48 94 8c 7d 3d 42 508c 3d d7 3b 97 e6 5d 14 55 48 94 8c 7d 3d 42 50 (16 bytes or 128 bits)(16 bytes or 128 bits)

Page 35: 1장 알고리즘 정리 - freesearch.pe.krfreesearch.pe.kr/wp-content/uploads/1/XBL51mHmdF.pdf · 해시 함수의 종류(2/4) 폴딩(folding)법 •키를 균등한 크기의 부분으로

MD5MD5가 정보검색에 어떻게 쓰이는가가 정보검색에 어떻게 쓰이는가??

문서 중복 검사 문서 중복 검사 • 해시 값을 키해시 값을 키(Key)(Key)로하고 링크를 값로하고 링크를 값(value)(value)으로 하는 튜플을 으로 하는 튜플을

색인에 저장색인에 저장

– 충돌의 위험이 있기 때문에 대용량 색인에는 문제가 있다.– 하지만 해시 속도가 빠른편이다.– 속도를 희생해서 정확도를 증진할것인가? 아니면 정확도를 올리고 속도를 희생할 것인가?

• 따라서 일반적으로 따라서 일반적으로 Edit DistanceEdit Distance의 개념으로 중복 검사를 실의 개념으로 중복 검사를 실시하거다 싱걸링시하거다 싱걸링(shingle)(shingle)을 이용해서 한다을 이용해서 한다..

(from : mining the Web)(from : mining the Web)

Page 36: 1장 알고리즘 정리 - freesearch.pe.krfreesearch.pe.kr/wp-content/uploads/1/XBL51mHmdF.pdf · 해시 함수의 종류(2/4) 폴딩(folding)법 •키를 균등한 크기의 부분으로

The EndThe End