유틸리티

해시값이란? MD5, SHA-256 차이와 활용법

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

해시값이 뭔가

아무 데이터를 넣으면 고정된 길이의 문자열로 바꿔주는 함수가 해시 함수다. 같은 입력에는 항상 같은 결과가 나오고, 입력이 1비트만 달라져도 결과가 완전히 바뀐다.

예시 "안녕하세요"의 MD5 해시값 → b3eb0e05a38a5fe6e70eba2dfa3abc0e
"안녕하세요."의 MD5 해시값 → 완전히 다른 32자리 문자열

마침표 하나 추가했을 뿐인데 결과가 완전히 달라진다. 이 특성 때문에 파일이 조금이라도 변경되면 해시값이 달라지고, 원본과 비교하면 위·변조 여부를 알 수 있다.

알고리즘별 차이

알고리즘출력 길이보안 강도주 용도
MD5128비트 (32자)취약파일 무결성 빠른 확인
SHA-1160비트 (40자)취약Git 커밋 식별 (레거시)
SHA-256256비트 (64자)강함현재 표준, SSL 인증서, 비트코인
SHA-384384비트 (96자)강함고수준 보안 요구 환경
SHA-512512비트 (128자)매우 강함민감 데이터 보호
주의 MD5와 SHA-1은 충돌(서로 다른 데이터가 같은 해시값을 가지는 현상)이 발견됐다. 보안이 중요한 용도에는 SHA-256 이상을 쓰는 게 맞다. 단순히 다운로드 파일 확인용으로는 MD5도 쓸 만하다.

파일 무결성 검증하는 법

프로그램 배포 사이트에서 제공하는 해시값과 내가 받은 파일의 해시값을 대조하면 된다.

  1. 배포 사이트에 적힌 해시값(SHA-256 등)을 복사한다
  2. 해시 생성기에 다운로드한 파일을 드래그해서 올린다
  3. 생성된 해시값과 사이트의 해시값을 비교한다

해시 비교 기능을 쓰면 두 값을 붙여넣기만 해도 일치 여부를 알려주니까 눈으로 128자를 대조할 필요가 없다.

해시값은 어디에 쓰이나

비밀번호 저장
제대로 된 서비스는 비밀번호를 평문으로 저장하지 않는다. 해시값으로 변환해서 저장하고, 로그인할 때 입력한 비밀번호의 해시값과 비교한다.
블록체인
비트코인의 채굴은 특정 조건을 만족하는 SHA-256 해시값을 찾는 과정이다.
디지털 서명
문서의 해시값을 암호화해서 서명으로 첨부한다. 문서가 수정되면 해시값이 달라지므로 위조가 드러난다.
Git 버전 관리
Git의 모든 커밋은 SHA-1 해시로 식별된다. 같은 변경 내역이면 어디서 커밋해도 같은 해시가 나온다.

해시는 보이지 않는 곳에서 디지털 세상의 신뢰를 유지하는 기술이다. 원리를 알면 "이 파일 정말 안전한가?"라는 의문에 스스로 답할 수 있게 된다.