오픈소스 프로그램을 다운로드했는데, 배포 사이트에 SHA-256 해시값이 적혀 있다. 64자리 영숫자 조합인데, 이걸 왜 적어놨고 어떻게 비교하라는 건지 모르겠다면 이 글이 도움이 된다.
해시값이란
해시값은 임의 길이의 데이터를 고정 길이의 문자열로 변환한 결과다. 같은 입력은 항상 같은 해시값을 만들고, 입력이 1비트만 달라져도 완전히 다른 값이 나온다. 원본 데이터로 되돌릴 수 없는 단방향 변환이라는 점이 핵심이다.
예시 "안녕하세요"의 SHA-256 해시값:
dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f
"안녕하세욥"(한 글자 다름)의 SHA-256:
완전히 다른 64자리 값이 나온다.
MD5, SHA-1, SHA-256 차이
| 알고리즘 | 출력 길이 | 보안 수준 | 용도 |
|---|---|---|---|
| MD5 | 128비트 (32자) | 취약 | 파일 체크섬 (비보안) |
| SHA-1 | 160비트 (40자) | 취약 | Git 커밋 해시 (레거시) |
| SHA-256 | 256비트 (64자) | 안전 | SSL 인증서, 블록체인 |
| SHA-512 | 512비트 (128자) | 매우 안전 | 고보안 시스템 |
MD5와 SHA-1은 충돌(서로 다른 입력이 같은 해시를 만드는 현상)이 이미 발견된 상태다. 보안이 중요한 곳에서는 SHA-256 이상을 쓰는 게 맞다. 단순히 파일이 깨졌는지 확인하는 용도라면 MD5도 충분하다.
파일 무결성 검증하는 법
- 배포 사이트에 적힌 해시값과 해시 알고리즘(보통 SHA-256)을 확인한다
- 다운로드한 파일의 해시값을 생성한다
- 두 값이 정확히 일치하면 원본과 동일한 파일이다
파일 해시값을 확인하는 방법은 여러 가지다. 윈도우 명령 프롬프트에서 certutil -hashfile 파일명 SHA256을 입력하는 방법이 있고, 웹에서 바로 확인하고 싶다면 해시 생성기에 파일을 드래그해서 놓으면 MD5부터 SHA-512까지 다섯 가지 해시값이 동시에 나온다. 해시 비교 기능도 있어서 두 값을 붙여넣으면 일치 여부를 바로 알려준다.
해시가 쓰이는 곳
- 소프트웨어 배포 — 다운로드 파일이 변조되지 않았는지 검증
- 비밀번호 저장 — 원문 대신 해시값을 DB에 저장해서 유출 시 피해를 줄임
- 블록체인 — 거래 데이터의 무결성을 해시 체인으로 보장
- 디지털 서명 — 문서 내용이 변경되지 않았음을 증명
배포 사이트에 적힌 해시값을 무시하고 넘기는 사람이 많은데, 파일 하나 검증하는 데 5초면 된다. 특히 보안 관련 프로그램을 설치할 때는 한 번쯤 확인하는 습관이 필요하다.