해시 / MD5 / SHA / 무결성검사 에 관한 정리
제일 먼저 해시(Hash) 란 임의의 데이터를 고정된 길이의 데이터로 매핑하는 함수를 의미한다.
입력 데이터의 크기에 관계없이 고정된 크기의 출력값을 내도록 설계 되어 있어 항상 같은 길이의 출력을 낸다.
기본적으로는 입력이 달라지면 출력값도 달라져야 하며 두 데이터의 해시값이 다르다면 원 데이터도 달라야 한다.
하지만 이 세상에 가능한 모든 입력데이터를 제한된 길이의 출력 데이터로 매핑해야 하기 때문에
다른 입력에 대하여 같은 해시값이 나올 수 밖에 없다.
이러한 문제에 대응하기 위해 더 긴 길이의 해시값이 제안되고 있으며, 이러한 문제점으로 인하여
보안 분야에 사용하기에는 문제가 있다.
일반적으로 해시함수는 데이터를 인코딩 하는 용도로 설계되었기 때문에
인코딩 된 데이터만을 이용하여 원 데이터를 디코딩 하는 것은 불가능 하다.
흔히 사용되는 해시 함수는 크게 암호화 해시함수(입출력간의 관계를 유추하기 어려움) 비암호화 해시함수로 나뉘며 MD5, SHA 방식은 암호화 해시함수에 속한다.
MD5(Message-Digest algorithm 5) 는 출력값으로 128bit 크기를 갖는 암호화 해시함수다.
128비트로 표현되기 때문에 커버할수 있는 데이터는 2^128 가지 이며, 이는 충분한 값이 아니라
다른 입력에 대하여 동일한 해시값을 내는 충돌 현상이 발견되었다.
SHA 계열은 현재 SHA-2 까지 개발되어 있으며 최대 512bit를 출력값으로 사용하기에
MD5의 128비트나 SHA-1 까지의 160비트에 비해 훨씬 많은 데이터에 대응이 가능하며
이러한 특성으로 인해 아직까지 충돌현상은 발견되지 않았다.
이러한 해시함수를 통해 데이터마다 고유한(? 이론적으론 고유하지 않지만...) 값으로 매핑이 가능하기 때문에
원본 데이터와 해시값을 갖고 있으면 나중에 복사, 다운로드 등을 통해 옮겨진 데이터의 해시값을 계산하여
원본데이터의 해시값과 비교를 통해 정상적으로 복사, 다운로드가 되었는지
혹은 외부사용자에 의해 변조 된 부분은 없는지 검사가 가능하다.
= 참고 =
해시함수 : https://ko.wikipedia.org/wiki/%ED%95%B4%EC%8B%9C_%ED%95%A8%EC%88%98
MD5 : https://ko.wikipedia.org/wiki/MD5
SHA : https://ko.wikipedia.org/wiki/SHA