유틸리티

해시값 생성과 파일 무결성 검증, MD5 SHA-256 차이까지 정리

오픈소스 프로그램을 다운로드했는데 공식 사이트에 'SHA-256: a3f8b2c...'라는 문자열이 적혀 있다. 이건 내가 받은 파일이 원본과 동일한지 확인하기 위한 해시값이다. 중간에 파일이 변조되었거나 다운로드가 깨졌다면 해시값이 달라진다.

해시값이란

해시 함수는 어떤 데이터든 고정된 길이의 문자열로 변환하는 일방향 함수다. 입력이 조금만 달라져도 결과가 완전히 바뀌고, 결과에서 원본을 역추적할 수 없다는 특성이 있다.

예시 "안녕하세요"의 MD5 해시: 5765651d32fa7254d5f3dfbf6a81a7a5
"안녕하세요."(마침표 추가)의 MD5 해시: 완전히 다른 값이 나온다. 글자 하나 차이로 결과가 전혀 달라진다.

MD5, SHA-256, SHA-512 차이

알고리즘출력 길이보안 강도주요 용도
MD5128비트 (32자)취약파일 무결성 간단 확인, 체크섬
SHA-1160비트 (40자)취약레거시 시스템 호환
SHA-256256비트 (64자)강함보안 인증, 블록체인, 파일 검증
SHA-512512비트 (128자)매우 강함고보안 환경, 대용량 파일

MD5는 충돌 취약점이 발견되어 보안 용도로는 권장되지 않지만, 파일이 깨졌는지 빠르게 확인하는 용도로는 아직 많이 쓰인다. 보안이 중요한 상황이라면 SHA-256 이상을 사용해야 한다.

해시값 생성하는 방법

파일을 서버에 올리지 않고 브라우저에서 바로 해시값을 뽑을 수 있는 온라인 해시 생성기가 있다. MD5, SHA-1, SHA-256, SHA-512를 한 번에 생성해주고, 두 해시값을 비교하는 기능도 있어서 파일 무결성 확인에 쓸 만하다.

텍스트 해시 생성

  1. 텍스트 입력창에 변환할 문자열을 입력한다
  2. MD5부터 SHA-512까지 모든 알고리즘의 해시값이 동시에 표시된다
  3. 필요한 해시값을 복사해서 사용한다

파일 해시 생성

  1. 파일을 드래그 앤 드롭하거나 선택한다
  2. 브라우저 내에서 처리되므로 파일이 서버로 전송되지 않는다
  3. 생성된 해시값을 공식 사이트의 해시값과 대조한다

해시값 활용 사례

  • 다운로드 파일 검증 : 공식 해시값과 비교해서 파일이 변조되지 않았는지 확인한다
  • 비밀번호 저장 : 비밀번호를 원문 대신 해시값으로 저장하면 DB가 유출되어도 원본 비밀번호를 알 수 없다
  • 데이터 중복 탐지 : 파일 내용이 같으면 해시값도 같다. 이름이 다른 중복 파일을 찾을 때 유용하다
  • 디지털 서명 : 문서나 소프트웨어의 진위 여부를 확인하는 전자 서명에 해시가 쓰인다

해시값은 디지털 세계의 지문 같은 존재다. 파일 하나를 검증하는 데 1초도 안 걸리니, 중요한 파일을 받았다면 해시 비교를 습관으로 만들어두는 게 좋다.