유틸리티

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

오픈소스 프로그램을 다운로드하면 옆에 "SHA-256: a3f2b8c1..."같은 긴 문자열이 적혀 있다. 이게 해시값이다. 다운로드한 파일이 중간에 변조되지 않았는지 확인하는 디지털 지문 같은 것이다.

해시(Hash)가 뭔가

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

예시
"hello" → MD5: 5d41402abc4b2a76b9719d911017c592
"hello." → MD5: 821395a3906a8f2c21a7d8df6a64c96f
마침표 하나 추가했을 뿐인데 결과가 완전히 다르다.

이 특성 때문에 파일이 조금이라도 변했는지 확인하는 데 쓰인다. 원본 해시값과 내가 가진 파일의 해시값을 비교하면 끝이다.

MD5, SHA-1, SHA-256, 뭘 써야 하나

알고리즘출력 길이보안 수준용도
MD5128비트 (32자)취약 (충돌 발견됨)간단한 파일 확인, 체크섬
SHA-1160비트 (40자)취약 (실제 충돌 시연됨)레거시 시스템
SHA-256256비트 (64자)안전보안 인증, 블록체인, 파일 검증
SHA-512512비트 (128자)안전고보안 환경, 대용량 파일
주의 MD5와 SHA-1은 충돌(서로 다른 입력이 같은 해시값을 만드는 현상)이 발견되어서 보안 용도로는 쓰면 안 된다. 파일 무결성 확인 같은 비보안 용도로는 여전히 쓰이고 있다.

파일 무결성 확인하는 법

  1. 프로그램 배포 페이지에서 제공하는 해시값(보통 SHA-256)을 복사한다.
  2. 다운로드한 파일의 해시값을 생성한다.
  3. 두 값을 비교해서 일치하면 원본 그대로인 것이다.

윈도우에서는 명령 프롬프트에서 아래 명령으로 확인할 수 있다.

certutil -hashfile 파일명.zip SHA256

명령어가 번거롭거나 여러 알고리즘을 동시에 확인하고 싶다면, 브라우저에서 해시 생성기를 쓰는 게 편하다. 파일을 드래그 앤 드롭하면 MD5, SHA-1, SHA-256, SHA-512 값이 한꺼번에 나오고, 두 해시값을 비교하는 기능도 있어서 눈으로 64자를 대조할 필요가 없다. 파일이 서버로 올라가지 않고 브라우저 안에서만 처리된다.

해시가 쓰이는 다른 곳들

  • 비밀번호 저장: 사이트는 비밀번호 원문이 아니라 해시값을 DB에 저장한다. 유출돼도 원래 비밀번호를 알아내기 어렵다.
  • 블록체인: 비트코인 등 암호화폐는 SHA-256으로 블록을 연결한다.
  • Git 커밋: Git의 커밋 ID(예: a3f2b8c)도 SHA-1 해시의 앞 7자리다.
  • 디지털 서명: 문서의 해시값에 전자서명을 해서 위변조를 방지한다.

해시값은 데이터의 지문이다. 같으면 원본, 다르면 변조. 이 단순한 원리 하나로 파일 검증부터 보안까지 다양한 곳에서 쓰이고 있다.