유틸리티

해시값이란? MD5, SHA-256 차이와 파일 무결성 확인법

오픈소스 프로그램을 다운로드했더니 사이트에 "SHA-256: 3a7b..."라는 긴 문자열이 적혀 있다. 다운로드한 파일이 변조되지 않았는지 이 값으로 확인하라는 뜻인데, 비교 방법을 모르면 그냥 넘어가게 된다.

해시값이란

해시값은 임의의 데이터를 고정 길이 문자열로 변환한 결과다. 같은 입력은 항상 같은 해시값을 만들고, 입력이 1비트만 달라져도 해시값은 완전히 바뀐다. 이 특성 때문에 파일이 원본과 동일한지 확인하는 "디지털 지문" 역할을 한다.

예시 "안녕하세요"의 MD5 해시값은 항상 동일하다. 하지만 "안녕하세요."처럼 마침표 하나만 추가해도 완전히 다른 해시값이 나온다.

알고리즘별 차이

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

MD5와 SHA-1은 충돌 취약점이 발견되어 보안 용도로는 더 이상 권장되지 않는다. 파일 무결성 확인 용도라면 SHA-256이 현재 표준이다.

파일 무결성 확인하는 법

  1. 배포 사이트에서 제공하는 해시값(보통 SHA-256)을 복사한다
  2. 다운로드한 파일의 해시값을 생성한다
  3. 두 값을 비교해서 일치하면 원본 그대로, 다르면 변조 가능성이 있다

Windows에서는 명령 프롬프트에서 certutil -hashfile 파일명 SHA256으로 확인할 수 있다. 하지만 명령어를 외우기 번거롭다면, 파일을 드래그해서 넣으면 MD5부터 SHA-512까지 한 번에 생성해주는 온라인 해시 생성기가 더 편하다. 해시 비교 기능도 있어서 두 값을 붙여넣으면 일치 여부를 바로 알려준다.

해시가 쓰이는 다른 곳

  • 비밀번호 저장: 서비스에서 비밀번호를 원문 대신 해시로 저장한다. 유출되어도 원래 비밀번호를 알 수 없다.
  • 블록체인: 비트코인 등 암호화폐의 블록 연결에 SHA-256이 쓰인다.
  • 디지털 서명: 문서가 서명 후 수정되지 않았음을 증명하는 데 해시를 사용한다.

다운로드한 파일을 그냥 실행하기 전에 해시값 한 번 비교하는 습관이 보안 사고를 막는 첫 번째 단계다.