기타

해시값에 대하여 - OS별 파일 해시값 확인

씨실과 날실 2019. 11. 8. 09:00

해시값이란?

해시값(Hash Value)은 디지털 데이터의 동일성 여부를 검사하기 위해 파일에 지정하는 수학적 수치로, 암호 검사합, 체크섬(checksum), 메시지 인증 코드(MAC), 무결성 검사값, 수정 검출 코드, 메시지 무결성 코드라고도 합니다.

해시 값이 데이터 무결성 검사에 쓰일 수 있는 특성

본래 해시함수(hash function)는 데이터의 효율적 색인 및 관리를 목적으로 개발된 것으로, 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수입니다. 이 때 매핑 전 원래 데이터의 값을 키(key), 매핑 후 데이터의 값을 해시값(hash value), 매핑하는 과정 자체를 해싱(hashing)라고 합니다.

그런데 이 해시함수는 함수에 어떤 특정한 입력이 들어오면 언제나 똑같은 과정을 거쳐서 언제나 동일한 결과를 내놓는 결정론적 알고리즘을 기반으로 구현 된 것으로 이러한 특성으로 인해 데이터 무결성 검사에도 쓰이는 것입니다.

해시 값이 다르다는 것의 의미

과거에는 이 파일 위변조 검사가 일반 사용자들에게 크게 부각되지 않았습니다. 그러나 정보통신 기술의 진보와 함께 디지털 정보의 전파 속도는 빨라지고 다루는 데이터양 자체도 지극히 확대되었습니다. 그와 함께 바이러스, 악성코드 등이 기승을 부리게 되면서 주고 받은 파일이 위변조되었는지 확인할 필요성이 두드러지게 되었습니다.

그래서 이제 많은 파일 배포자들이 해당 파일을 공개할 때 해당 파일의 해시값도 게시해놓고 있습니다. 이 해시값의 일치 여부를 확인함으로써 다운 받은 파일이 원본인지 확인할 수 있습니다.

만약 해시값이 다르다면 그것은 배교 대상의 파일이 동일한 내용을 담고 있지 않다는 뜻이 됩니다. 동일한 내용을 담고 있으리라 기대된 두 파일 간의 해시값이 다르다면 그 원인은 크게 둘로 나눌 수 있습니다.

하나는 파일을 내려받는 도중 어떤 이유로 인해 불완전하게 다운된 경우입니다. 통신 회선망의 일시적인 불안정 등 다양한 이유로 생길 수 있으며 이는 고의적인 위변조와는 관계없습니다. 그러나 디지털 정보의 소실은 분명하므로 다시 한번 다운 받아야 합니다.

두 번째는 (제3자에 의한) 고의적인 파일 위변조입니다. 위변조 행위자가 어떤(보통은 악의적인) 목적을 가지고 사람들을 기망하여 자신의 이득 등을 위해 위변조한 파일을 마치 사람들이 찾는 원본 파일인 것처럼 속여 전파합니다. 이 파일 안에는 악성코드 등이 심어져 있어 상대방의 정보를 빼내거나 시스템을 망가뜨립니다. 보통 공식 배포처에서 내려받지 않는 경우 당합니다.

해시 충돌

이 해시 함수 혹은 해시 값이 데이터 무결성을 확인할 수 있는 완벽한 방법이냐고 따진다면 그것은 아닙니다. 데이터 무결성 검사가 완벽하려면 하나의 정보 단위에 하나의 해시 값만을 가져야 하며 이 해시 값은 그 어떤 다른 정보 단위의 해시 값과도 겹치지 않아야 합니다.

예를 들어 새로 구현된 어떤 해시 함수가 있다고 칩시다. 그 함수에 대한민국이라는 텍스트를 집어 넣어 1003이라는 해시값을 얻었다고 가정해봅시다. 그렇다면 이 해시 값 1003은 대한민국을 제외한 다른 정보의 해시값과 일치해서는 안됩니다. 그런데 만약 조선이라는 텍스트를 동일한 해시 함수에 넣었더니 해시 값이 1003으로 동일하다면 해시 충돌을 일으킨 것입니다. 따라서 대한민국과 조선은 동일한 해시값을 가지므로 해시값만으로 각 정보의 유일성을 확인할 수 없습니다.

따라서 좋은 해시 함수는 이 해시 충돌 확률이 낮아야 합니다. 그러나 해시 충돌이 아주 없을 수는 없는 것이 이 해시 함수는 임의의 길이의 데이터를 '고정된 길이의 데이터로 매핑'하는 함수이기 때문입니다. 달리 이야기 하면 해시 함수는 입력값의 범위보다 출력값의 범위가 좁은 경우가 보통이기 때문에 입력 내용이 다르더라도 드물게 동일한 값이 출력되는 경우가 생깁니다. 해시값의 자릿수가 유한하게 설정되므로 결국은 겹치는 정보가 있기 마련인 것입니다.

실제로 과거에 널리 쓰였던 MD5 해시 함수의 경우 2004년에 높은 유사성을 보이는(하지만 엄연히 다른) 128바이트 파일 두 개의 해시값 충돌이 발견되었습니다.

심지어는 다른 결과가 나오는 프로그램이 같은 MD5 값을 가지는 경우도 있습니다..

주요 해시 함수

데이터 무결성 검사에 대표적으로 MD5와 SHA 등이 쓰이고 있습니다. 현재까지 개발된 거의 모든 해시 함수는 해시 충돌의 문제가 확인된 상태입니다. MD5 , SHA 등 각 해시 함수는 해시 충돌로 인한 보안 위험 등을 극복하기 위해 보다 개선된 해시 함수를 내놓고 있습니다.

근래에는 MD5보다는 SHA-256(SHA-2족)를 데이터 무결성 검사와 암호화에 사용되고 있으며. SHA의 경우 2012년에 최신 버전인 SHA-3가 발표되었습니다.

보다 자세한 정보는 아래 링크를 참고하시기 바랍니다.




OS별 파일 해시값 확인

Windows에서 파일 해시값 구하는 방법


Linux에서 파일 해시값 구하는 방법


macOS(OS X)에서 파일 해시값 구하는 방법

참고

아래는 macOS에서 파일 해시값 구하는 방법을 참고로 적은 것입니다.

macOS에서 해시값 확인

CLI에서 확인하는 방법

cd Desktop
shasum -a 256 CentOS-8-x86_64-1905-dvd1.iso
ea17ef71e0df3f6bf1d4bf1fc25bec1a76d1f211c115d39618fe688be34503e8 *CentOS-8-x86_64-1905-dvd1.iso