오픈소스 프로그램을 내려받았는데 다운로드 페이지 옆에 "SHA-256: 3a7f2c..."라는 긴 문자열이 붙어 있다. 이 문자열이 바로 해시값이고, 파일이 중간에 변조되지 않았는지 확인하는 용도다.
해시값이 하는 일
해시 함수는 어떤 데이터를 넣든 고정된 길이의 문자열로 변환한다. 같은 입력이면 항상 같은 결과가 나오고, 입력이 1비트라도 달라지면 결과가 완전히 바뀐다. 이 성질 덕분에 파일 원본 여부를 검증하는 데 쓰인다.
예시 "안녕하세요"의 MD5 해시값은 항상 같다. 하지만 "안녕하세용"으로 한 글자만 바꾸면 완전히 다른 해시값이 나온다.
알고리즘별 차이
| 알고리즘 | 출력 길이 | 보안 수준 | 주요 용도 |
|---|---|---|---|
| MD5 | 128비트 (32자) | 낮음 | 파일 체크섬 (비보안용) |
| SHA-1 | 160비트 (40자) | 낮음 | Git 커밋 해시 (레거시) |
| SHA-256 | 256비트 (64자) | 높음 | SSL 인증서, 블록체인 |
| SHA-512 | 512비트 (128자) | 매우 높음 | 고보안 시스템 |
MD5와 SHA-1은 충돌(서로 다른 입력에서 같은 해시가 나오는 현상) 취약점이 발견되어 보안 용도로는 권장하지 않는다. 단순히 파일이 깨졌는지 확인하는 용도로는 여전히 쓸 수 있다.
실제로 해시값을 비교하는 과정
- 소프트웨어 공식 사이트에서 제공하는 해시값을 복사한다
- 다운로드한 파일의 해시값을 생성한다
- 두 값을 비교해서 일치하면 원본 그대로인 것이다
Windows 명령 프롬프트에서 certutil -hashfile 파일명 SHA256을 치면 되지만, 여러 알고리즘을 동시에 확인하거나 텍스트 해시가 필요한 경우에는 웹 도구가 편하다. 해시 생성기에 텍스트를 입력하거나 파일을 드래그하면 MD5부터 SHA-512까지 5개 해시값이 한 번에 나온다. 해시 두 개를 나란히 놓고 일치 여부를 바로 비교하는 기능도 있다.
주의 해시는 단방향 함수다. 해시값에서 원본 데이터를 역산하는 것은 불가능하다. 그래서 비밀번호 저장에도 해시를 쓰는 것이다.
파일 하나 받아서 그냥 실행하는 사람이 대부분이지만, 해시값 비교 한 번이면 변조된 파일을 걸러낼 수 있다. 보안이 중요한 소프트웨어라면 습관적으로 확인하는 게 맞다.