오픈소스 프로그램을 다운로드했더니 사이트에 "SHA-256: 3a7b..."라는 긴 문자열이 적혀 있다. 다운로드한 파일이 변조되지 않았는지 이 값으로 확인하라는 뜻인데, 비교 방법을 모르면 그냥 넘어가게 된다.
해시값이란
해시값은 임의의 데이터를 고정 길이 문자열로 변환한 결과다. 같은 입력은 항상 같은 해시값을 만들고, 입력이 1비트만 달라져도 해시값은 완전히 바뀐다. 이 특성 때문에 파일이 원본과 동일한지 확인하는 "디지털 지문" 역할을 한다.
예시 "안녕하세요"의 MD5 해시값은 항상 동일하다. 하지만 "안녕하세요."처럼 마침표 하나만 추가해도 완전히 다른 해시값이 나온다.
알고리즘별 차이
| 알고리즘 | 출력 길이 | 보안 수준 | 주 용도 |
|---|---|---|---|
| MD5 | 128비트(32자) | 취약 | 파일 체크섬 (보안 외 용도) |
| SHA-1 | 160비트(40자) | 취약 | Git 커밋 ID (레거시) |
| SHA-256 | 256비트(64자) | 안전 | SSL 인증서, 비트코인, 파일 검증 |
| SHA-512 | 512비트(128자) | 매우 안전 | 고보안 시스템, 비밀번호 저장 |
MD5와 SHA-1은 충돌 취약점이 발견되어 보안 용도로는 더 이상 권장되지 않는다. 파일 무결성 확인 용도라면 SHA-256이 현재 표준이다.
파일 무결성 확인하는 법
- 배포 사이트에서 제공하는 해시값(보통 SHA-256)을 복사한다
- 다운로드한 파일의 해시값을 생성한다
- 두 값을 비교해서 일치하면 원본 그대로, 다르면 변조 가능성이 있다
Windows에서는 명령 프롬프트에서 certutil -hashfile 파일명 SHA256으로 확인할 수 있다. 하지만 명령어를 외우기 번거롭다면, 파일을 드래그해서 넣으면 MD5부터 SHA-512까지 한 번에 생성해주는 온라인 해시 생성기가 더 편하다. 해시 비교 기능도 있어서 두 값을 붙여넣으면 일치 여부를 바로 알려준다.
해시가 쓰이는 다른 곳
- 비밀번호 저장: 서비스에서 비밀번호를 원문 대신 해시로 저장한다. 유출되어도 원래 비밀번호를 알 수 없다.
- 블록체인: 비트코인 등 암호화폐의 블록 연결에 SHA-256이 쓰인다.
- 디지털 서명: 문서가 서명 후 수정되지 않았음을 증명하는 데 해시를 사용한다.
다운로드한 파일을 그냥 실행하기 전에 해시값 한 번 비교하는 습관이 보안 사고를 막는 첫 번째 단계다.