해시 함수
지난 글 : [알고리즘/알고리즘 도감] - 암호의 기본
해시 함수는 주어진 데이터를 고정 길이의 불규칙한 숫자로 변환하는 함수를 가리킨다. 불규칙한 숫자는 데이터를 요약한 것으로 다양한 상황에서 사용된다.
1
해시 함수는 마술 주머니를 생각해보자.
2
데이터를 마술 주머니에 넣으면...
고정 길이의 불규칙한 숫자를 출력한다. 해시함수는 데이터를 분리하는 것이라 생각하면 이해가 쉽다. 출력된 불규칙한 숫자를 '해시값'이라 한다. 해시값은 숫자지만 16진수(0~9의 숫자와 a~f의 알파벳으로 이루어진 16개의 문자를 사용해 숫자를 표현하는 것)로 표기하는 경우가 많다.
3
컴퓨터는 모든 데이터를 0과 1로 이루어진 2진수로 관리하고 있다. 해시값도 데이터의 일종이므로 표기는 16진수로 하지만, 내부에서는 2진수로 관리된다. 실제 해시 함수는 컴퓨터 내부에서 수치 계산을 하는 것이다.
4
이런 내용을 전제로 해시 함수의 특징을 살펴보자. 첫 번째 특징은 출력하는 값의 데이터 길이가 바뀌지 않는다. 매우 큰 데이터를 입력해도 출력되는 해시값의 데이터 길이는 바뀌지 않는다. 마찬가지로 아무리 작은 데이터를 입력해도 해시값의 데이터 길이는 같다.
5
두 번째 특징은 입력이 같으면 출력도 반드시 같다.
6
세 번째 특징은 비슷한 데이터를 입력해도 1비트라도 다른 데이터면 출력이 크게 달라진다.
7
네 번째 특징은 전혀 다른 데이터를 입력해도 같은 해시값이 나올 수 있는 경우가 있다. 이는 매우 낮은 확률이지만 존재한다. 이를 '해시값 충돌'이라 한다.
8
다섯 번째 특징은 해시값으로부터 원 데이터를 역산하는 것이 사실상 불가능하다. 데이터 입력과 출력의 흐름이 단방향으로 이루어지며, 이것은 '암호화'와 크게 다른 점이다.
9
마지막 여섯 번째 특징으로 해시값을 결정하는 계산이 비교적 간단하다.
참고 서적 :