오픈소스 프로그램을 다운로드했는데 공식 사이트에 "SHA-256: 3a7b2c..."라는 문자열이 적혀 있다. 이 해시값을 내가 받은 파일의 해시값과 대조하면, 파일이 중간에 변조되지 않았는지 확인할 수 있다.
해시값이 뭔가
해시(Hash)는 어떤 데이터를 고정 길이의 문자열로 바꿔주는 함수다. 같은 입력이면 항상 같은 결과가 나오고, 입력이 1비트만 달라져도 결과가 완전히 달라진다. 이 특성 때문에 파일 무결성 확인, 비밀번호 저장, 디지털 서명에 쓰인다.
주요 해시 알고리즘 비교
| 알고리즘 | 출력 길이 | 보안 강도 | 용도 |
|---|---|---|---|
| MD5 | 128비트 (32자) | 취약 | 체크섬(비보안), 캐시 키 |
| SHA-1 | 160비트 (40자) | 취약 | 레거시 시스템 |
| SHA-256 | 256비트 (64자) | 안전 | 파일 검증, 인증서, 블록체인 |
| SHA-512 | 512비트 (128자) | 안전 | 대용량 파일, 높은 보안 요구 |
주의 MD5와 SHA-1은 충돌 취약점이 발견되어 보안 용도로는 더 이상 권장되지 않는다. 파일 무결성 검증에도 SHA-256 이상을 쓰는 것이 안전하다.
해시값으로 파일을 검증하는 과정
- 공식 사이트에서 파일과 함께 제공되는 해시값을 복사한다
- 다운로드한 파일의 해시값을 생성한다
- 두 해시값을 비교해서 일치하면 원본 그대로라는 뜻이다
명령어로도 할 수 있지만 과정이 번거롭다. 해시 생성기에 파일을 끌어다 놓으면 MD5, SHA-256, SHA-512 값이 한 번에 나온다. 비교 기능도 있어서 공식 해시값을 붙여넣으면 일치 여부를 바로 확인해준다.
텍스트 해시는 어디에 쓰이나
파일뿐 아니라 텍스트 문자열의 해시도 실무에서 자주 필요하다.
- API 인증 — 요청 파라미터를 해시로 변환해서 서명값을 만들 때
- 비밀번호 저장 — 원문 대신 해시값을 DB에 저장 (복호화 불가)
- 데이터 비교 — 대용량 텍스트 두 개가 동일한지 해시값으로 빠르게 확인
해시값은 데이터의 지문이다. 원본을 역추적할 수는 없지만, 원본이 바뀌었는지는 즉시 알 수 있다.