[해키피디아] Hash Function

해시 함수는 임의의 길이를 갖는 임의의 데이터를 고정된 길이의 데이터로 매핑하는 함수를 말한다. 이러한 해시 함수를 적용하여 나온 고정된 길이의 값을 해시값이라고 한다. 이 값은 또한 해시 코드, 해시섬(sum), 체크섬[1] 등으로도 불린다.

위는 위키백과에서 정의한 해쉬 함수입니다. 우리가 평소에 말하는 해시는 이러한 암호를 위한 특정한 함수로써, 해시 값은 해당 함수로 암호화된 암호문을 말한다고 할 수 있습니다.

해시가 무엇인지에 대해 알았으니 해시의 특징에 대해 살펴 보겠습니다.

1.key:Hack&Life -> hash() -> 01cada24c9c630231ded9647ba043f15

2.key:jjangjjang man!! -> hash() ->e2cdcf3f68ded41c2e2725df7fb03d65

해시의 첫 번째 특징은 어떤 길이의 데이터가 key값으로 전달되더라도 일정한 길이의 hash value로 변환해준다는 것입니다. 위의 예시는 MD5 해시 함수로 2가지 길이가 다른 데이터를 암호화한 예시입니다. 두 문자열의 길이가 다르더라도 결과값으로 나온 hash value의 길이는 같은 것을 확인 할 수 있습니다.

1.key:Hack&Life -> hash() -> hash value:01cada24c9c630231ded9647ba043f15

2.key:Hack&life -> hash() -> hash value:c07adc3f60f886620e35561ee7509be6

해시의 두번째 특징은 입력 값이 조금만 변경되더라도 완전히 다른 결과 값을 도출해낸다는 것입니다. 위의 예시에서 두 문자열은 문자1개의 차이를 보입니다. 하지만 결과로 도출된 해시값은 전혀 다른 것을 확인할 수 있습니다.

해시의 세 번째 특징은 해시값이 같은 입력값 두 개를 찾을 수 없는 충돌 저항성이라는 특징을 가진다는 것입니다. 해시 함수에서 다른 입력값에 대해 같은 출력값이 없는 것이 아닙니다. 하지만 위의 md5 해시 함수처럼 소문자 알파벳과 숫자를 조합한 32자리 문자열을 해시값으로 사용할 때 그 경우의 수가 매우 작아 무시가 가능하기 때문에 충돌 저항성을 가진다고 할 수 있습니다.

해시의 마지막 특징은 주어진 해시 값에 대한 key값을 찾을 수 없는 역상 저항성이라는 특징을 가진다는 것입니다. 즉, 우리에게 해시값이 주어졌을 때 해시는 단방향 암호화 함수이기 때문에 이 해시 값에 해당하는 key(혹은 data)가 무엇인지 알 수 없어야 합니다. 만약 사용자의 비밀번호를 hash()를 거쳐 해시 값으로 저장해 놓는다면 해시값이 유출되더라도 사용자의 비밀번호가 유출되지 않아 유용합니다.