유틸리티

해시값이란, MD5 SHA-256 차이와 파일 무결성 검증 방법

오픈소스 프로그램을 다운로드했는데, 배포 사이트에 SHA-256 해시값이 적혀 있다. 64자리 영숫자 조합인데, 이걸 왜 적어놨고 어떻게 비교하라는 건지 모르겠다면 이 글이 도움이 된다.

해시값이란

해시값은 임의 길이의 데이터를 고정 길이의 문자열로 변환한 결과다. 같은 입력은 항상 같은 해시값을 만들고, 입력이 1비트만 달라져도 완전히 다른 값이 나온다. 원본 데이터로 되돌릴 수 없는 단방향 변환이라는 점이 핵심이다.

예시 "안녕하세요"의 SHA-256 해시값:
dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f
"안녕하세욥"(한 글자 다름)의 SHA-256:
완전히 다른 64자리 값이 나온다.

MD5, SHA-1, SHA-256 차이

알고리즘출력 길이보안 수준용도
MD5128비트 (32자)취약파일 체크섬 (비보안)
SHA-1160비트 (40자)취약Git 커밋 해시 (레거시)
SHA-256256비트 (64자)안전SSL 인증서, 블록체인
SHA-512512비트 (128자)매우 안전고보안 시스템

MD5와 SHA-1은 충돌(서로 다른 입력이 같은 해시를 만드는 현상)이 이미 발견된 상태다. 보안이 중요한 곳에서는 SHA-256 이상을 쓰는 게 맞다. 단순히 파일이 깨졌는지 확인하는 용도라면 MD5도 충분하다.

파일 무결성 검증하는 법

  1. 배포 사이트에 적힌 해시값과 해시 알고리즘(보통 SHA-256)을 확인한다
  2. 다운로드한 파일의 해시값을 생성한다
  3. 두 값이 정확히 일치하면 원본과 동일한 파일이다

파일 해시값을 확인하는 방법은 여러 가지다. 윈도우 명령 프롬프트에서 certutil -hashfile 파일명 SHA256을 입력하는 방법이 있고, 웹에서 바로 확인하고 싶다면 해시 생성기에 파일을 드래그해서 놓으면 MD5부터 SHA-512까지 다섯 가지 해시값이 동시에 나온다. 해시 비교 기능도 있어서 두 값을 붙여넣으면 일치 여부를 바로 알려준다.

해시가 쓰이는 곳

  • 소프트웨어 배포 — 다운로드 파일이 변조되지 않았는지 검증
  • 비밀번호 저장 — 원문 대신 해시값을 DB에 저장해서 유출 시 피해를 줄임
  • 블록체인 — 거래 데이터의 무결성을 해시 체인으로 보장
  • 디지털 서명 — 문서 내용이 변경되지 않았음을 증명

배포 사이트에 적힌 해시값을 무시하고 넘기는 사람이 많은데, 파일 하나 검증하는 데 5초면 된다. 특히 보안 관련 프로그램을 설치할 때는 한 번쯤 확인하는 습관이 필요하다.