파일 해시란
해시(Hash)는 임의 길이의 데이터를 고정 길이 문자열로 변환하는 알고리즘입니다. 파일 해시는 파일의 "지문"입니다 — 같은 파일의 해시값은 고유하며, 파일이 1바이트라도 바뀌면 해시값이 달라집니다.
흔한 용도:
- 파일 무결성 검증 (다운로드가 완전한지)
- 변조 방지 (파일이 수정되었는지)
- 중복 제거 (두 파일이 같은지)
- 비밀번호 저장 (평문이 아닌 해시를 저장)
흔한 해시 알고리즘
MD5
- 출력 128비트 (32자리 16진수 문자열)
- 속도가 빠름
- 이미 크랙됨, 충돌 존재 (다른 파일이 같은 해시)
- 보안 용도에 부적합
- 여전히 무결성 검증에 사용 (비보안 용도)
SHA-1
- 출력 160비트 (40자리 16진수 문자열)
- 속도 중간
- 이미 크랙됨, 충돌 존재
- 보안 용도에 권장하지 않음
- Git는 초기에 SHA-1을 사용, 현재 SHA-256으로 마이그레이션 중
SHA-256
- 출력 256비트 (64자리 16진수 문자열)
- 속도가 느림
- 안전, 현재 충돌 없음
- 보안 용도에 권장
- 블록체인, HTTPS 인증서 모두 SHA-256 사용
SHA-512
- 출력 512비트 (128자리 16진수 문자열)
- 속도가 느림
- SHA-256보다 보안성이 더 높음
- 고보안 용도에 적합
선택 권장사항
- 무결성 검증 (비보안): MD5로 충분 (빠름)
- 보안 용도: SHA-256 (보안과 속도의 균형)
- 고보안 용도: SHA-512
- 권장하지 않음: SHA-1 (이미 크랙됨)
해시 검증의 원리
해시 생성
- 파일의 전체 내용 읽기
- 해시 알고리즘으로 계산
- 고정 길이 문자열 출력
검증 과정
- 파일 다운로드 시 공식 해시값 획득
- 로컬에서 파일 해시값 계산
- 두 해시값 비교
- 같음 = 파일 완전, 다름 = 파일 손상 또는 변조됨
무결성을 검증할 수 있는 이유
해시 알고리즘의 특성:
- 같은 입력은 항상 같은 출력
- 다른 입력이 같은 출력이 될 확률은 거의 없음 (충돌 확률 극히 낮음)
- 입력이 1바이트 바뀌면 출력이 완전히 달라짐 (눈사태 효과)
따라서 파일이 1바이트라도 바뀌면 해시값이 완전히 달라집니다.
사용 상황
다운로드 검증
대용량 파일(시스템 이미지, 소프트웨어 설치 패키지) 다운로드 시 공식 해시값을 제공합니다. 다운로드 후 로컬에서 해시를 계산해 비교하여 다운로드가 완전하고 손상되지 않았는지 확인합니다.
변조 방지
중요 파일(계약서, 증거)의 해시를 생성하여 보관합니다. 나중에 파일이 수정되었는지 검증합니다.
파일 중복 제거
두 파일의 해시가 같으면 내용이 같습니다 (충돌 확률 극히 낮음). 해시로 파일 중복을 판단하면 바이트 단위 비교보다 빠릅니다.
비밀번호 저장
웹사이트는 사용자 비밀번호의 해시값을 저장하고 평문은 저장하지 않습니다. 로그인 시 입력된 비밀번호의 해시를 계산해 비교합니다. 데이터베이스가 유출되어도 공격자는 평문 비밀번호를 얻을 수 없습니다.
디지털 서명
디지털 인증서는 해시 + 암호화로 파일 출처와 무결성을 검증합니다.
파일 해시를 검증하는 방법
DocsAll로 검증
- 파일 업로드
- 도구가 MD5, SHA-1, SHA-256 계산
- 해시값 표시
- 공식 해시와 비교
브라우저에서 계산하며 파일이 업로드되지 않습니다.
Windows 명령줄
certutil -hashfile 파일명 SHA256
Mac/Linux 명령줄
shasum -a 256 파일명
md5 파일명
해시 비교
- 공식 해시값 복사
- 비교란에 붙여넣기
- 도구가 자동 비교
- 또는 수동으로 글자 단위 비교
자주 묻는 질문
해시값이 다르면 어떡하나요
- 다운로드가 불완전함: 다시 다운로드
- 파일이 변조됨: 신뢰할 수 있는 출처에서 다시 다운로드
- 해시 알고리즘이 다름: 같은 알고리즘으로 비교했는지 확인
MD5는 아직 쓸 수 있나요
- 무결성 검증 (비보안 용도): 사용 가능
- 보안 용도 (변조 방지, 비밀번호): 권장하지 않음, SHA-256 사용
- 충돌 위험: 같은 MD5를 가진 두 다른 파일을 만들 수 있음
해시로 원문을 역추론할 수 있나요
불가능합니다. 해시는 단방향 함수입니다. 해시값에서 원문을 복원할 수 없습니다. 따라서 비밀번호 해시 저장이 안전합니다 (유출되어도 평문을 얻을 수 없음).
대용량 파일 해시가 느림
- 해시는 파일 전체를 읽어야 함
- 대용량 파일(수 GB)은 계산에 시간이 걸림
- 정상적인 현상, 인내심을 가지고 기다리세요
해시값 대소문자
해시값은 16진수 문자열이며 대소문자는 영향을 주지 않습니다 (a와 A는 동등). 비교 시 대소문자를 무시하세요.
보안 팁
신뢰할 수 있는 출처의 해시값 사용
공식 웹사이트, 신뢰할 수 있는 채널에서 해시값을 획득하세요. 출처 불명의 해시값으로 검증하지 마세요. 공격자가 바꿔치기했을 수 있습니다.
강력한 해시 알고리즘 사용
보안 용도에는 SHA-256 이상을 사용하세요. MD5와 SHA-1은 더 이상 안전하지 않습니다.
해시는 암호화가 아닙니다
해시는 단방향이며 복호화할 수 없습니다. 암호화는 양방향이며 복호화할 수 있습니다. 해시를 암호화처럼 사용하지 마세요.
솔트 추가 해시
비밀번호 저장 시 솔트 추가 해시(salt + password를 다시 해시)를 사용하여 레인보우 테이블 공격을 방지하세요.
DocsAll로 해시 계산
- 파일 업로드
- MD5, SHA-1, SHA-256, SHA-512 자동 계산
- 모든 해시값 표시
- 필요한 해시값 복사
- 공식값과 비교
브라우저에서 계산하며 파일이 서버에 업로드되지 않습니다.
요약
파일 해시는 파일의 지문으로 무결성 검증과 변조 방지에 사용됩니다. MD5는 빠르지만 이미 크랙되었고, SHA-256이 안전하여 권장됩니다. 검증 시 신뢰할 수 있는 출처에서 해시값을 획득하고 같은 알고리즘으로 비교하세요. DocsAll 파일 해시 도구는 브라우저에서 실행되며 파일이 외부로 전송되지 않습니다.