오픈소스 프로그램을 다운로드하면 옆에 SHA-256 값이 적혀 있는 경우가 있다. 해시값 생성과 관련된 이 문자열은 파일의 '디지털 지문'이다. 다운받은 파일의 해시값이 원본과 다르면 중간에 변조됐을 가능성이 있다.
해시값이란
해시는 입력 데이터를 고정된 길이의 문자열로 변환하는 함수다. 같은 입력이면 항상 같은 결과가 나오고, 한 글자만 바꿔도 결과가 완전히 달라진다. 원본 데이터로 되돌릴 수 없는 단방향 변환이라는 점이 핵심이다.
MD5와 SHA-256, 뭐가 다른가
| 알고리즘 | 출력 길이 | 보안성 | 용도 |
|---|---|---|---|
| MD5 | 128비트 (32자) | 취약 (충돌 발견됨) | 파일 동일성 간단 확인 |
| SHA-1 | 160비트 (40자) | 취약 (사용 비권장) | 레거시 시스템 |
| SHA-256 | 256비트 (64자) | 안전 | 소프트웨어 배포, 블록체인 |
| SHA-512 | 512비트 (128자) | 안전 | 대용량 파일 검증 |
주의 MD5는 서로 다른 파일이 같은 해시값을 만드는 충돌이 발견된 상태다. 보안이 중요한 상황에서는 SHA-256 이상을 써야 한다.
파일 무결성을 확인하는 방법
다운로드한 파일이 원본 그대로인지 확인하려면, 배포처에서 제공하는 해시값과 내 파일의 해시값을 비교하면 된다.
- 배포 페이지에 적힌 SHA-256 값을 복사한다
- 해시 생성기에 다운받은 파일을 드래그해서 놓는다
- 생성된 SHA-256 값과 복사한 값을 비교한다
두 값이 한 글자라도 다르면 파일이 손상됐거나 변조된 것이다. 해시 비교 기능이 내장되어 있어서 직접 눈으로 대조할 필요 없이 일치 여부를 바로 알려준다.
텍스트 해시 변환도 가능하니까 API 개발 중에 HMAC이나 토큰 검증용 해시를 빠르게 확인할 때도 쓸 수 있다.