인터넷에서 프로그램을 다운받으면 옆에 SHA-256이라는 긴 문자열이 적혀 있을 때가 있다. 대부분 무시하고 지나치는데, 이건 파일이 위조되거나 전송 중에 손상됐는지 확인하는 디지털 지문이다.
해시값은 데이터의 지문
해시 함수에 데이터를 넣으면 고정 길이의 문자열이 나온다. 같은 입력이면 항상 같은 결과가 나오고, 입력이 1글자만 달라져도 결과가 완전히 바뀐다. 이 특성 덕분에 파일이 원본과 같은지 비교할 수 있다.
예를 들어 "hello"의 MD5 해시는 5d41402abc4b2a76b9719d911017c592다. "Hello"로 대문자 하나만 바꿔도 결과가 완전히 달라진다.
알고리즘별 차이
| 알고리즘 | 길이 | 보안 수준 | 주 용도 |
|---|---|---|---|
| MD5 | 128비트 | 취약 (충돌 발견됨) | 빠른 체크섬, 비보안 검증 |
| SHA-1 | 160비트 | 취약 (충돌 입증) | Git 커밋 해시 (레거시) |
| SHA-256 | 256비트 | 안전 | SSL 인증서, 비트코인, 파일 검증 |
| SHA-512 | 512비트 | 안전 | 고보안 환경, 대용량 파일 |
주의 MD5와 SHA-1은 충돌 취약점이 알려져 있어 보안 용도로는 권장하지 않는다. 파일 검증 목적이라면 SHA-256 이상을 쓰는 게 안전하다.
파일 무결성 검증하는 법
- 배포처에서 제공하는 해시값(보통 SHA-256)을 복사해둔다.
- 해시 생성기에 다운받은 파일을 드래그해서 넣는다. 파일이 서버로 전송되지 않고 브라우저에서 바로 계산된다.
- 생성된 해시값과 배포처의 값이 일치하면 파일이 변조되지 않은 것이다. 해시 비교 기능에 두 값을 붙여넣으면 일치 여부를 자동으로 판정해준다.
텍스트를 입력하면 MD5부터 SHA-512까지 다섯 가지 해시가 동시에 나온다. 개발 중 API 키 해싱이나 데이터 무결성 체크에도 바로 쓸 수 있다.
다운로드한 파일을 그냥 실행하기 전에 해시값 한 번만 대조해보면, 악성코드가 심어진 위조 파일을 걸러낼 수 있다.