체크섬이 답하는 질문
체크섬이 답하는 것은 하나뿐입니다. 방금 내려받은 이 파일이 배포처가 만든 그 파일과 같은가입니다. 한 바이트만 달라져도 해시는 통째로 바뀌므로, 값이 같다면 전송 중에 잘리지도 않았고 도중에 다른 파일로 바뀌지도 않았다는 뜻입니다. 값이 다르면 사소한 문제가 아닙니다. 파일을 열지 말고 다시 내려받으세요. 두 번째 사본도 어긋나면 다른 경로에서 받으세요.
해시를 어디서 구하나
내려받기 링크 옆에 SHA256SUMS 같은 이름의 파일을 함께 올려 두는 프로젝트가 많습니다. 배포 파일마다 한 줄씩 해시가 적혀 있습니다. 깃허브 릴리스는 릴리스 노트 본문이나 첨부 파일에 값을 싣고, 리눅스 배포판은 ISO와 같은 디렉터리에 둡니다. 컨테이너 이미지는 레지스트리가 sha256:으로 시작하는 다이제스트를 직접 알려 줍니다.
파일과 같은 곳에서 받은 해시는 힘이 약합니다
파일과 해시를 한 서버에서 받으면, 파일을 바꿔치기할 수 있는 쪽은 그 자리에서 해시도 함께 바꿀 수 있습니다. 그러면 둘은 완벽히 맞아떨어집니다. 그래서 규모 있는 프로젝트는 합계 파일에 서명을 붙입니다. SHA256SUMS 옆에 SHA256SUMS.gpg나 SHA256SUMS.asc가 있고, 서명 키는 따로 공개합니다. 서명을 먼저 확인하고, 그 안의 합계를 믿으세요. 서명이 없다면 파일 옆에 놓인 값보다 다른 경로에서 얻은 값이 낫습니다. 프로젝트 메일링 리스트, 패키지 매니페스트, 공급사 문서 포털 같은 곳입니다.
MD5와 SHA-1이 아직 남아 있는 이유
두 알고리즘은 보안 측면에서 이미 깨졌습니다. 같은 MD5 값을 갖는 서로 다른 파일을 만들어 내는 일이 실제로 가능하고, SHA-1 충돌도 실제 문서 형식에서 시연됐습니다. 그래서 둘 다 누가 손대지 않았음을 증명하지 못합니다. 다만 사고를 잡아내는 일은 여전히 잘합니다. 중간에 끊긴 내려받기, 망가진 디스크, 옛 사본을 내주는 미러 같은 것입니다. 오래된 프로젝트는 MD5만 공개하는 곳도 많고, 그거라도 맞춰 보는 편이 아무것도 안 보는 것보다 낫습니다. SHA-256이 함께 있다면 그쪽을 쓰세요.
표기가 배포처마다 다른 이유
다이제스트는 결국 숫자라서 적는 방식이 제각각입니다. 소문자로 적는 곳도 대문자로 적는 곳도 있는데, 같은 값이므로 여기서는 대소문자를 가리지 않습니다. 레지스트리는 sha256:처럼 알고리즘을 앞에 붙입니다. sha256sum 명령은 해시와 공백 두 칸, 파일 이름을 차례로 찍고, openssl dgst는 파일 이름을 먼저 쓰고 등호 뒤에 해시를 놓습니다. 어느 형태든 그대로 붙여넣으면 그 줄에서 해시만 골라냅니다.