유틸리티

MD5 SHA256 해시값 생성, 파일 무결성 확인하는 법

인터넷에서 프로그램을 내려받았는데 배포 페이지에 SHA-256 해시값이 적혀 있다. 이걸 대체 어떻게 하라는 건지, 처음 보면 당황스럽다. 해시값은 파일이 위조되지 않았는지 확인하는 디지털 지문 같은 것이다.

해시값이란

어떤 데이터를 넣든 고정된 길이의 문자열로 바꿔주는 게 해시 함수다. 같은 입력에는 항상 같은 결과가 나오고, 입력이 1글자만 달라져도 결과가 완전히 바뀐다. 원본 데이터에서 해시값을 만들 수는 있지만, 해시값에서 원본을 역추적하는 건 불가능하다.

예시 "안녕하세요"의 MD5 해시값은 b1a07e38a7e2fdd2ef5a0f64180e3832다. 여기서 한 글자라도 바꾸면 완전히 다른 값이 나온다.

MD5와 SHA-256, 뭐가 다른가

알고리즘출력 길이보안 강도용도
MD5128비트낮음 (충돌 취약)파일 체크섬, 빠른 검증
SHA-1160비트보통Git 커밋 해시
SHA-256256비트높음SSL 인증서, 비트코인
SHA-384384비트매우 높음금융, 정부 시스템
SHA-512512비트최상대용량 파일 검증

MD5는 속도가 빠르지만 같은 해시값을 만들어내는 충돌 공격이 가능해서 보안 용도로는 쓰지 않는다. 파일이 깨졌는지 정도만 확인하려면 MD5로 충분하고, 위변조 여부가 중요하면 SHA-256 이상을 쓰는 게 안전하다.

파일 해시값 확인하는 법

윈도우 명령 프롬프트에서도 해시값을 확인할 수 있다.

certutil -hashfile 파일명.zip SHA256

다만 여러 알고리즘을 동시에 비교하거나, 두 해시값이 일치하는지 검증하려면 명령어를 반복해야 한다. 브라우저에서 바로 처리하는 쪽이 빠를 때가 많은데, 온라인 해시 생성기는 파일을 드래그 앤 드롭으로 올리면 MD5부터 SHA-512까지 5개 해시값이 한 번에 나온다. 해시 비교 기능도 있어서 배포 페이지에 적힌 값과 내 파일의 값을 바로 대조할 수 있다.

이런 상황에서 해시값을 확인한다

  • 오픈소스 프로그램을 내려받은 뒤 공식 배포 해시와 비교
  • 외장 하드에 백업한 파일이 손상 없이 복사됐는지 검증
  • 이메일로 받은 첨부 파일이 전송 중 변조되지 않았는지 확인

파일이 서버로 전송되지 않고 브라우저 안에서만 처리되기 때문에 민감한 문서를 올려도 유출 위험이 없다.

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

파일 내용이 1비트라도 다르면 해시값이 완전히 달라진다. 이름만 같고 내용이 다른 파일이거나, 전송 중 데이터가 손상된 경우에 해당한다.

MD5로 비밀번호를 저장해도 되나?

안 된다. MD5는 충돌 취약점이 알려져 있고, 레인보우 테이블 공격으로 원문을 추측할 수 있다. 비밀번호 저장에는 bcrypt나 Argon2 같은 전용 해시 함수를 써야 한다.

다운로드한 파일을 그냥 실행하기 전에 해시값 한 번만 대조하면 된다. 30초면 끝나는 일이 악성코드 감염을 막아준다.