오픈소스 프로그램 다운로드 페이지에 SHA-256: 3a7f2c... 같은 긴 문자열이 적혀 있다. 이게 뭔지 모르면 그냥 지나치게 되는데, 사실 이 값을 확인하는 게 파일이 변조되지 않았다는 걸 검증하는 유일한 방법이다.
해시값이 뭔가
해시(hash)는 임의 길이의 데이터를 고정 길이의 문자열로 변환한 것이다. 같은 입력에는 항상 같은 해시값이 나오고, 입력이 1비트만 달라져도 완전히 다른 결과가 나온다. 그리고 해시값에서 원래 데이터를 역추적하는 건 불가능하다.
예시 "hello"의 MD5 해시값 →5d41402abc4b2a76b9719d911017c592
"hellp"의 MD5 해시값 →36767326eaa67a9c2a0e74cfaa9d650b
한 글자 차이인데 결과가 완전히 다르다.
해시 알고리즘별 차이
| 알고리즘 | 출력 길이 | 보안 수준 | 주 사용처 |
|---|---|---|---|
| MD5 | 128비트 (32자) | 취약 | 파일 체크섬 (비보안용) |
| SHA-1 | 160비트 (40자) | 취약 | 레거시 시스템 (사용 비권장) |
| SHA-256 | 256비트 (64자) | 강력 | SSL/TLS, 블록체인, 보안 전반 |
| SHA-384 | 384비트 (96자) | 매우 강력 | 고보안 환경 |
| SHA-512 | 512비트 (128자) | 최고 | 민감 데이터 보호 |
MD5와 SHA-1은 충돌(서로 다른 입력이 같은 해시값을 만드는 것)이 발견되어 보안 목적으로는 더 이상 쓰지 않는다. 현재 표준은 SHA-256이다.
파일 무결성 검증하는 법
소프트웨어를 다운로드할 때 중간에 파일이 변조되었는지 확인하는 과정이다.
- 공식 사이트에서 제공하는 해시값(보통 SHA-256)을 확인한다
- 다운로드한 파일의 해시값을 생성한다
- 두 값이 일치하면 파일이 원본과 동일하다는 뜻이다
해시 생성기에 파일을 드래그해서 넣으면 MD5, SHA-1, SHA-256, SHA-384, SHA-512를 한 번에 뽑아준다. 비교 기능에 두 해시값을 넣으면 일치 여부도 바로 확인된다. 파일이 서버로 전송되지 않고 브라우저에서 처리되기 때문에 실행 파일이나 민감한 파일도 안심하고 넣을 수 있다.
해시가 쓰이는 곳
- 비밀번호 저장
- 제대로 된 서비스는 비밀번호를 그대로 저장하지 않는다. 해시값으로 변환해서 저장하고, 로그인할 때 입력된 비밀번호의 해시값과 비교한다.
- 블록체인
- 비트코인은 SHA-256을 이용해 블록을 연결한다. 이전 블록의 해시값이 다음 블록에 포함되기 때문에 중간 데이터를 변조하면 그 뒤의 모든 해시값이 달라져서 위조가 드러난다.
- 디지털 서명
- 문서의 해시값을 개인 키로 암호화하면 디지털 서명이 된다. 문서가 변경되면 해시값이 달라지므로 위변조 여부를 확인할 수 있다.
주의 MD5 해시값은 파일이 깨졌는지 확인하는 체크섬 용도로는 여전히 쓸 수 있지만, 보안(비밀번호, 서명 등) 목적으로는 반드시 SHA-256 이상을 사용해야 한다.
해시는 눈에 보이지 않는 곳에서 데이터의 신뢰를 지키는 기술이다. 파일 하나를 다운로드할 때도 해시값을 한 번 대조해보는 습관이 보안의 시작이다.