유틸리티

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

오픈소스 프로그램을 내려받았는데 공식 사이트에 SHA-256 값이 적혀 있다. 다운로드한 파일이 중간에 변조되지 않았는지 확인하려면 이 값을 비교하면 된다. 이때 쓰이는 게 해시(Hash)다.

해시값이란

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

예시 "hello"의 MD5 해시: 5d41402abc4b2a76b9719d911017c592
"hello."(마침표 추가)의 MD5 해시: 121d1aa83a6bd14c1d67a4a1ca516e68
한 글자 차이인데 결과가 완전히 다르다.

주요 해시 알고리즘 비교

알고리즘출력 길이보안 수준용도
MD5128비트 (32자)취약간단한 파일 확인, 레거시 시스템
SHA-1160비트 (40자)취약git 커밋 해시 (이전 버전)
SHA-256256비트 (64자)강함파일 무결성 검증, 블록체인, SSL
SHA-512512비트 (128자)매우 강함고보안 환경, 대용량 데이터

MD5와 SHA-1은 충돌(서로 다른 입력에서 같은 해시가 나오는 현상) 취약점이 발견되어 보안 용도로는 권장하지 않는다. 새 프로젝트에서는 SHA-256 이상을 쓰는 게 안전하다.

해시값 생성하는 법

텍스트 해시

비밀번호나 문자열의 해시를 뽑아야 할 때가 있다. 해시 생성기에 텍스트를 입력하면 MD5, SHA-1, SHA-256, SHA-384, SHA-512 다섯 가지 해시가 동시에 나온다. 필요한 알고리즘의 값을 복사해서 쓰면 된다.

파일 해시

파일을 드래그해서 올리면 해당 파일의 해시값이 계산된다. 서버에 파일이 업로드되지 않고 브라우저 안에서 처리되니 민감한 파일도 안심하고 확인할 수 있다.

파일 무결성 검증 방법

  1. 공식 사이트에서 프로그램의 SHA-256 값을 확인한다
  2. 다운로드한 파일의 해시값을 생성한다
  3. 두 값이 정확히 일치하는지 비교한다

해시 비교 기능을 쓰면 두 값을 붙여넣기만 하면 일치 여부를 시각적으로 알려준다. 128자짜리 SHA-512를 눈으로 한 글자씩 대조할 필요가 없다.

자주 묻는 질문

해시값에서 원래 데이터를 복원할 수 있나요?

불가능하다. 해시는 단방향 함수여서 결과에서 원본을 역추적할 수 없다. 이 특성 때문에 비밀번호 저장에 해시가 쓰인다.

같은 파일인데 해시가 다르게 나올 수 있나요?

파일 내용이 1비트라도 다르면 해시가 달라진다. 파일명이 달라도 내용이 같으면 같은 해시가 나온다. 해시는 파일명이 아니라 내용을 기준으로 계산한다.

MD5가 취약하다면 왜 아직도 쓰이나요?

보안 목적이 아닌 단순 파일 확인용으로는 여전히 유효하다. 계산 속도가 빠르고 짧아서 다운로드 파일의 간이 검증, 캐시 키 생성 등에 아직 널리 쓰인다.

파일 하나 받을 때마다 해시를 확인할 필요는 없다. 다만 보안이 중요한 프로그램이나 펌웨어를 다운로드했을 때는 한 번 비교해두면 변조된 파일을 걸러낼 수 있다.