인터넷에서 파일을 받았는데, 원본과 같은 파일이 맞는지 확인하고 싶다. 파일 이름이나 크기만으로는 판단할 수 없다. 이럴 때 쓰는 게 해시값이다. 파일의 '디지털 지문' 같은 것이라고 보면 된다.
해시란 무엇인가
해시(Hash)는 임의 길이의 데이터를 고정된 길이의 문자열로 변환하는 함수다. 같은 입력에는 항상 같은 출력이 나오고, 입력이 한 글자만 달라져도 결과가 완전히 바뀐다. 원본 데이터에서 해시를 구하는 건 쉽지만, 해시에서 원본을 역추적하는 건 사실상 불가능하다.
"안녕하세요"의 MD5 해시와 "안녕하세요."(마침표 추가)의 MD5 해시는 완전히 다른 값이 나온다. 이 특성 덕분에 데이터가 변조되었는지 여부를 판별할 수 있다.
MD5, SHA-1, SHA-256 차이
| 알고리즘 | 출력 길이 | 보안 수준 | 용도 |
|---|---|---|---|
| MD5 | 128비트 (32자) | 낮음 (충돌 취약) | 빠른 무결성 체크, 비보안 용도 |
| SHA-1 | 160비트 (40자) | 낮음 (충돌 발견됨) | 레거시 시스템, 깃 커밋 해시 |
| SHA-256 | 256비트 (64자) | 높음 | 파일 검증, 인증서, 블록체인 |
| SHA-512 | 512비트 (128자) | 매우 높음 | 높은 보안이 필요한 시스템 |
주의 MD5는 이미 충돌 공격이 알려져 있어서 보안 용도로는 쓰면 안 된다. 단순히 파일이 깨졌는지 확인하는 정도라면 괜찮지만, 보안이 중요하다면 SHA-256 이상을 써야 한다.
해시값은 어디에 쓰이나
- 파일 무결성 검증: 소프트웨어 다운로드 페이지에서 SHA-256 해시를 함께 제공하는 이유가 이것이다. 받은 파일의 해시가 공식 해시와 같으면 변조되지 않은 원본이라는 뜻이다.
- 비밀번호 저장: 제대로 된 서비스는 비밀번호 원문이 아니라 해시값을 저장한다. 로그인할 때 입력한 비밀번호의 해시와 저장된 해시를 비교한다.
- 데이터 중복 확인: 대량의 파일에서 내용이 같은 파일을 찾을 때 해시로 비교하면 빠르다.
- 디지털 서명: 전자계약서나 인증서에 해시를 적용해 문서가 위변조되지 않았음을 증명한다.
파일 해시값 확인하는 법
다운로드한 파일의 해시값을 확인하고 싶다면 해시 생성기에 파일을 드래그 앤 드롭하면 된다. MD5부터 SHA-512까지 한 번에 생성되고, 비교 기능으로 원본 해시값과 대조할 수도 있다. 파일이 서버로 전송되지 않고 브라우저에서만 처리되니 민감한 파일도 안심하고 넣을 수 있다.
텍스트 해시도 같은 방식으로 생성할 수 있다. API 키 해싱, 테스트 데이터 생성 등 개발 작업에서도 활용도가 높다.
해시는 원리만 이해하면 활용 범위가 넓다. 파일을 받을 때 해시 한 번만 대조하면 위변조 걱정을 덜 수 있다.