오픈소스 프로그램을 다운로드하면 옆에 "SHA-256: 3a7bd3e2..."같은 문자열이 적혀 있다. 이게 해시값이다. 다운로드한 파일이 중간에 변조되지 않았는지 확인하는 디지털 지문 같은 역할을 한다.
해시값은 어떻게 만들어지나
해시 함수는 어떤 길이의 데이터든 고정된 길이의 문자열로 변환한다. 입력이 1바이트든 1GB든 출력 길이는 항상 같다. 그리고 입력이 한 글자만 달라져도 출력이 완전히 바뀐다. 이 성질 때문에 파일 변조를 감지할 수 있다.
예시 "안녕하세요"의 MD5 해시 → 6a5d5aa0b2836e50b1a82f028da1f46b
"안녕하세요."의 MD5 해시 → 완전히 다른 32자리 문자열
알고리즘별 차이
| 알고리즘 | 출력 길이 | 보안 강도 | 용도 |
|---|---|---|---|
| MD5 | 128비트 (32자) | 낮음 (충돌 발견됨) | 파일 체크섬, 캐시 키 |
| SHA-1 | 160비트 (40자) | 낮음 (2017년 충돌 증명) | 레거시 시스템 호환 |
| SHA-256 | 256비트 (64자) | 높음 | 보안 인증, 블록체인, 전자서명 |
| SHA-512 | 512비트 (128자) | 매우 높음 | 대용량 파일 검증, 고보안 환경 |
MD5는 속도가 빠르지만 충돌(서로 다른 입력이 같은 해시를 만드는 현상)이 발견돼서 보안 용도로는 부적합하다. 파일 무결성만 간단히 확인하는 용도라면 여전히 쓸 수 있지만, 보안이 중요하면 SHA-256 이상을 권장한다.
파일 무결성을 검증하는 순서
- 공식 사이트에서 해시값 확인 — 다운로드 페이지에 적힌 SHA-256 값을 복사해둔다.
- 다운로드한 파일의 해시값 생성 — 해시 생성기에 파일을 드래그해서 놓으면 MD5, SHA-256, SHA-512 해시가 동시에 나온다. 파일이 서버로 전송되지 않고 브라우저에서 처리되니 용량이 큰 파일도 안심하고 넣을 수 있다.
- 두 해시값 비교 — 공식 값과 생성된 값이 한 글자라도 다르면 파일이 변조됐거나 다운로드 중 손상된 것이다.
해시가 쓰이는 다른 곳들
- 비밀번호 저장 — 서비스 DB에는 비밀번호 원문이 아니라 해시값이 저장된다. 해시는 역변환이 불가능하기 때문.
- 블록체인 — 각 블록의 해시가 이전 블록과 연결되어 위변조를 방지한다.
- 디지털 서명 — 문서의 해시값에 서명해서 원본 여부를 증명한다.
- 중복 파일 탐지 — 이름은 다르지만 해시값이 같으면 동일한 파일이다.
해시값 비교는 30초면 끝나는 작업이다. 특히 ISO 파일이나 펌웨어처럼 변조 시 피해가 큰 파일을 받았을 때는 습관적으로 확인하는 게 좋다.