유틸리티

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

오픈소스 프로그램을 다운받으면 배포 페이지에 "SHA-256: a3f2e8..."이라는 긴 문자열이 적혀 있다. 이게 뭔지 모르고 넘기는 사람이 대부분인데, 다운받은 파일이 중간에 변조되지 않았는지 확인하는 데 쓰는 값이다.

해시값이란

어떤 데이터를 넣으면 고정된 길이의 문자열이 나오는 함수의 결과물이다. 같은 입력에는 항상 같은 출력이 나오고, 입력이 1비트만 달라져도 결과가 완전히 달라진다.

예시 "안녕하세요"의 MD5 해시: 8aa7bff6df7b5b66e749ce40eb295d7a
"안녕하세용"의 MD5 해시: 완전히 다른 32자리 문자열

이 특성 덕분에 파일이 원본과 정확히 같은지 비교할 수 있다. 파일 내용이 1바이트라도 다르면 해시값이 완전히 달라지니까.

주요 해시 알고리즘 비교

알고리즘출력 길이보안성용도
MD5128비트 (32자)취약 (충돌 발견됨)파일 식별용, 체크섬
SHA-1160비트 (40자)취약 (사용 중단 권고)레거시 시스템
SHA-256256비트 (64자)안전보안 인증, 블록체인
SHA-512512비트 (128자)안전높은 보안 요구 환경
주의 MD5와 SHA-1은 충돌 공격(서로 다른 두 입력이 같은 해시를 만드는 것)이 가능하다고 입증됐다. 보안 목적으로는 SHA-256 이상을 써야 한다. 단순히 파일이 같은지 빠르게 비교하는 용도로는 MD5도 여전히 쓸 만하다.

파일 무결성 검증하는 방법

  1. 배포자가 제공한 해시값을 복사해둔다 (보통 SHA-256)
  2. 다운받은 파일의 해시값을 생성한다
  3. 두 해시값을 비교해서 일치하면 변조되지 않은 원본이다

명령어로 확인하는 법

Windows에서는 명령 프롬프트에 아래 명령을 입력한다.

certutil -hashfile 파일명.zip SHA256

Mac/Linux에서는 터미널에서 이렇게 한다.

sha256sum 파일명.zip

브라우저에서 확인하는 법

명령어가 익숙하지 않다면 해시 생성기에 파일을 끌어다 놓으면 MD5, SHA-1, SHA-256, SHA-512 해시가 한 번에 나온다. 비교 기능도 있어서 배포자의 해시값과 내 파일의 해시값을 붙여넣으면 일치 여부를 바로 알려준다. 파일이 서버로 전송되지 않고 브라우저 안에서 처리되니까 민감한 파일도 사용할 수 있다.

해시가 쓰이는 다른 곳

  • 비밀번호 저장: 서비스가 비밀번호 원문 대신 해시값을 저장한다. 유출되어도 원래 비밀번호를 알 수 없다.
  • 블록체인: 거래 데이터의 해시를 연결해서 변조를 방지한다. 비트코인이 SHA-256을 쓴다.
  • 중복 파일 탐지: 파일명이 달라도 해시가 같으면 내용이 동일한 파일이다.

해시는 원리를 몰라도 쓸 수 있다. 다운받은 파일의 해시와 배포 페이지의 해시를 비교하는 습관 하나만으로도 악성코드 감염 위험을 줄일 수 있다.