오픈소스 프로그램을 다운로드하면 옆에 SHA-256 값이 적혀 있는 걸 본 적 있을 것이다. 이게 해시값이다. 파일이 전송 중에 변조되지 않았는지 확인하는 디지털 지문 같은 것으로, 해시값 생성과 비교만 하면 원본 여부를 바로 알 수 있다.
해시란 무엇인가
해시 함수는 어떤 데이터를 넣든 고정 길이의 문자열로 변환해주는 함수다. 입력이 조금만 달라져도 결과가 완전히 바뀌고, 결과로부터 원본을 역추적할 수 없다.
예시 "hello"의 MD5 해시값:5d41402abc4b2a76b9719d911017c592
"hello."의 MD5 해시값:a56c4846e7cf1a93c6ef56f0e1b4b579
마침표 하나 차이인데 결과가 완전히 다르다.
MD5, SHA-256, SHA-512 비교
| 알고리즘 | 출력 길이 | 보안 수준 | 용도 |
|---|---|---|---|
| MD5 | 128비트 (32자) | 취약 | 빠른 체크섬, 레거시 시스템 |
| SHA-1 | 160비트 (40자) | 취약 | Git 커밋 해시 (구버전) |
| SHA-256 | 256비트 (64자) | 안전 | 비트코인, SSL/TLS, 파일 검증 |
| SHA-512 | 512비트 (128자) | 매우 안전 | 대용량 파일 무결성 |
MD5와 SHA-1은 충돌 취약점이 발견되어 보안 용도로는 더 이상 권장되지 않는다. 파일 무결성 검증이나 비밀번호 해싱에는 SHA-256 이상을 쓰는 게 맞다.
파일 무결성 검증하는 법
- 배포 사이트에서 프로그램과 함께 제공된 해시값(보통 SHA-256)을 복사한다.
- 다운로드한 파일의 해시값을 생성한다.
- 두 값을 비교해서 일치하면 원본과 동일한 파일이다.
윈도우에서는 명령 프롬프트에 certutil -hashfile 파일명 SHA256을 입력해도 되지만, 브라우저에서 바로 하는 게 간편하다. 해시 생성기에 파일을 드래그해서 넣으면 MD5부터 SHA-512까지 다섯 가지 해시값이 동시에 나오고, 비교 기능으로 두 해시값의 일치 여부도 바로 확인할 수 있다.
주의 MD5가 같다고 해서 파일이 반드시 동일하다고 단정할 수는 없다. MD5 충돌을 이용한 위조가 가능하기 때문이다. 보안이 중요한 경우에는 SHA-256을 기준으로 비교하자.
해시값은 파일 한 비트만 달라져도 완전히 바뀐다. 다운로드 후 한 번만 확인하면 변조된 파일을 실행하는 위험을 피할 수 있다.