한국의 인터넷 뱅킹은 오랫동안 액티브X(ActiveX)와 공인인증서 기반 보안 모듈 설치를 요구해 온 독특한 역사가 있다. 이런 프로그램은 은행 공식 사이트 밖에서도 별도 설치 파일로 배포되는 경우가 많았고, 그 과정에서 위조된 설치 파일이 유포되는 사례도 있었다. 공식 배포처가 게시한 체크섬과 다운로드한 파일의 해시를 대조하는 것은 이런 파일이 변조되지 않았는지 확인하는 간단한 방법이다.
체크섬이 손상이나 변조를 감지하는 방법
해시 함수의 눈사태 효과 때문에, 전송 중 우연히 생긴 손상이든 의도적인 변조든 단 1바이트만 달라져도 계산된 파일의 해시는 완전히 달라집니다. 따라서 예상 체크섬과 계산된 체크섬 사이의 어떤 차이든 파일이 원본과 바이트 단위로 다르다는 것을 명확하게 의미합니다.
체크섬이 보장하지 않는 것
일치하는 해시는 파일이 공개된 해시를 계산한 원본 파일과 동일하다는 것만 확인해줄 뿐, 그 원본이 안전하다는 것은 확인해주지 않습니다. 위조 사이트가 악성 설치 파일과 함께 자체적으로 "일치하는" 체크섬을 같이 게시한다면 검증으로는 아무것도 잡아낼 수 없습니다 — 그래서 기준이 되는 해시는 반드시 은행이나 기관의 공식 사이트에서 가져와야 하며, 의심되는 파일을 내려받은 바로 그 출처에서 가져와서는 안 됩니다.
체크섬 대 디지털 서명
체크섬과 달리 디지털 서명은 개인 키로 생성되며 대응하는 공개 키로만 검증할 수 있습니다 — 공식 앱스토어는 이 서명을 설치 시 자동으로 검증하지만, 설치 파일을 수동으로 내려받아 실행하는 경우에는 이 보호 장치가 빠지기 때문에 수동 체크섬 대조가 사실상 유일하게 남는 확인 수단이 됩니다.
왜 필요한가
- 공식 배포 채널 밖에서 받은 은행 보안 프로그램이나 설치 파일이 변조되지 않았는지 확인하기.
- 바이트 단위로 비교하지 않고 큰 파일 두 개를 빠르게 비교하기.
- 파일의 백업 복사본이 원본과 동일한지 검증하기.
SHA-256 대신 CRC32를 사용하는 이유
CRC32는 암호화 해시 함수보다 훨씬 빠르지만 의도적으로 위조하기 쉽습니다 — 이는 전송 중 우연한 손상을 감지하는 용도에는 문제가 되지 않지만, 파일을 눈에 띄지 않게 바꾸려는 공격자로부터 보호하는 용도로는 적합하지 않습니다. 그래서 CRC32는 보안이 필요한 곳이 아니라 압축 프로그램이나 네트워크 프로토콜의 오류 검출 용도로 여전히 사용됩니다.