유틸리티

해시값이란? MD5, SHA-256 생성 및 파일 검증 방법

오픈소스 프로그램을 내려받을 때 다운로드 페이지 옆에 "SHA-256: 3a7f2c..."라는 긴 문자열이 적혀 있다. 이게 해시값이다. 다운로드한 파일의 해시값과 비교해서 일치하면 원본과 동일한 파일이라는 뜻이고, 다르면 전송 중 손상됐거나 누군가 변조한 것이다.

해시 알고리즘 종류와 차이

같은 입력이라도 알고리즘에 따라 결과 길이와 보안 수준이 다르다.

알고리즘출력 길이보안 수준용도
MD5128비트 (32자)취약빠른 체크섬, 파일 식별
SHA-1160비트 (40자)취약레거시 시스템 호환
SHA-256256비트 (64자)강력현재 표준, 인증서, 블록체인
SHA-384384비트 (96자)강력높은 보안 요구 환경
SHA-512512비트 (128자)강력대용량 파일, 고보안 시스템
주의 MD5와 SHA-1은 충돌(서로 다른 입력이 같은 해시값을 생성)이 발견된 알고리즘이다. 보안이 중요한 용도에는 SHA-256 이상을 써야 한다.

해시값의 특징

  • 단방향: 해시값에서 원본 데이터를 역추적할 수 없다
  • 고정 길이: 입력이 1글자든 1GB 파일이든 같은 알고리즘이면 출력 길이가 동일하다
  • 눈사태 효과: 입력이 1비트만 바뀌어도 해시값이 완전히 달라진다
  • 결정적: 같은 입력은 언제나 같은 해시값을 생성한다

파일 무결성 검증하는 법

  1. 원본 해시값 확인: 소프트웨어 배포 페이지에서 제공하는 해시값(보통 SHA-256)을 복사한다.
  2. 다운로드 파일의 해시 생성: 해시 생성기에 파일을 드래그해서 놓으면 MD5부터 SHA-512까지 5가지 해시값이 동시에 나온다.
  3. 비교: 원본 해시값과 생성된 해시값을 비교 검증란에 붙여넣으면 일치 여부를 자동으로 판별해준다.

파일을 서버에 업로드하지 않고 브라우저에서 직접 해시를 계산하기 때문에 민감한 파일도 안심하고 확인할 수 있다.

실무에서 해시를 쓰는 곳

비밀번호 저장
서비스들은 비밀번호를 그대로 저장하지 않고 해시값으로 변환해서 저장한다. 로그인할 때 입력값을 해시로 바꿔서 저장된 해시와 비교하는 방식이다.
Git 커밋
Git의 커밋 ID(예: a3f7b2c)는 SHA-1 해시값의 앞 7자리다. 코드 변경 내역의 고유 식별자 역할을 한다.
블록체인
비트코인은 SHA-256을 이중으로 적용해서 블록을 연결한다. 하나의 블록이 변조되면 이후 모든 블록의 해시가 달라져서 위조를 감지할 수 있다.

해시값은 디지털 세계의 지문이다. 원리를 알면 파일 검증, 데이터 보안, 개발 실무에서 두루 활용할 수 있다.