오픈소스 프로그램을 다운로드하면 옆에 'SHA-256: 3a7b2c...'같은 긴 문자열이 적혀 있다. 이게 해시값이다. 다운받은 파일이 원본과 동일한지, 중간에 변조되지 않았는지 확인하기 위한 디지털 지문 같은 것이다.
해시값이 뭔가
해시(Hash)는 입력 데이터를 고정 길이의 문자열로 변환한 결과다. 같은 입력이면 항상 같은 해시가 나오고, 입력이 1글자만 바뀌어도 결과가 완전히 달라진다. 그래서 파일이 원본 그대로인지 확인하는 데 쓸 수 있다.
MD5, SHA-1, SHA-256 차이
| 알고리즘 | 출력 길이 | 보안 수준 | 용도 |
|---|---|---|---|
| MD5 | 128비트 (32자) | 취약 | 파일 식별용 (보안 목적 부적합) |
| SHA-1 | 160비트 (40자) | 취약 | 레거시 시스템 호환 |
| SHA-256 | 256비트 (64자) | 안전 | 파일 무결성, 블록체인, 인증서 |
| SHA-512 | 512비트 (128자) | 안전 | 높은 보안 요구 환경 |
주의 MD5는 충돌(서로 다른 입력이 같은 해시를 만드는 현상)이 이미 발견되어 보안 용도로는 부적합하다. 파일 무결성 검증에는 SHA-256 이상을 쓰는 게 안전하다.
해시값 확인하는 방법
방법 1. 온라인 도구
해시 생성기에 텍스트를 입력하거나 파일을 드래그하면 MD5, SHA-1, SHA-256, SHA-512가 동시에 나온다. 두 해시값을 비교하는 기능도 있어서, 제공된 해시와 내 파일의 해시가 일치하는지 바로 확인할 수 있다.
방법 2. 명령어 (터미널)
운영체제별로 명령어가 다르다.
- Windows:
certutil -hashfile 파일명 SHA256 - Mac/Linux:
sha256sum 파일명
해시가 쓰이는 곳
- 소프트웨어 배포: 다운로드 파일이 변조되지 않았는지 확인
- 비밀번호 저장: 서버에 비밀번호 원문 대신 해시값을 저장
- 블록체인: 거래 데이터의 무결성을 SHA-256으로 보장
- 디지털 서명: 문서가 원본인지 검증
해시는 단방향이다. 해시값에서 원래 데이터를 복원할 수 없다. 그래서 비밀번호를 해시로 저장하면 데이터베이스가 유출되어도 원본 비밀번호는 알 수 없다.