SHA-256 체크섬 확인하는 법 — 다운로드 파일 무결성 대조

설치 파일이나 ISO 이미지를 받은 뒤 배포 페이지에 적힌 SHA256: 9b3ebd… 같은 문자열을 보고, 이걸 내 파일과 어떻게 맞춰보는지 막힌 분을 위한 글입니다. 결론부터 말하면 운영체제에 이미 들어 있는 명령 한 줄로 같은 값을 계산해 두 문자열을 대조하면 끝납니다.

다만 하나 더 알아야 합니다. 체크섬이 확인해 주는 범위는 "내 파일이 그 값을 만든 파일과 바이트 단위로 같은가"까지이며, 그 이상은 아닙니다.

요약 ① Windows는 certutil -hashfile, macOS는 shasum -a 256, 리눅스는 sha256sum 으로 값을 구합니다. ② SHA-256 값은 항상 16진수 64자입니다. 자릿수가 다르면 알고리즘이 어긋난 것입니다. ③ 일치는 "그 체크섬을 만든 파일과 같다"는 뜻이지, "파일이 안전하다"는 뜻이 아닙니다.

체크섬을 굳이 대조하는 이유

요즘 다운로드는 대부분 HTTPS로 이뤄지므로 전송 구간에서 내용이 조용히 바뀌는 일은 막혀 있습니다. 그런데도 배포처가 체크섬을 함께 공개하는 이유가 있습니다.

파일이 원본과 달라지는 경로가 전송 구간만이 아니기 때문입니다. 공식 서버가 아닌 미러 서버에서 받았거나, 이어받기가 중간에 끊겼거나, USB·외장 디스크로 옮기는 과정에서 일부 섹터가 손상되는 경우가 있습니다.

이런 차이는 파일 크기만 봐서는 드러나지 않습니다. 압축이 풀리고 실행까지 되는데 내부 파일 하나만 깨져 있는 상태도 가능합니다.

배포처의 값부터 정확히 읽습니다

대조를 시작하기 전에 어떤 알고리즘의 값인지 확인해야 합니다. 배포 페이지에는 SHA256SUMS, checksums.txt, SHA-256: 같은 라벨로 적혀 있습니다.

라벨이 지워졌거나 애매하면 자릿수로 판별할 수 있습니다. 해시값은 알고리즘마다 길이가 고정돼 있기 때문입니다.

알고리즘출력 길이16진수 자릿수
SHA-1160비트40자
SHA-256256비트64자
SHA-384384비트96자
SHA-512512비트128자

SHA256SUMS 같은 파일을 받았다면 한 줄이 <해시값> <공백> <파일명> 형식으로 적혀 있습니다. 배포처에 따라 파일명 앞에 * 가 붙기도 하는데, 이는 바이너리 모드로 읽었다는 표시일 뿐 값에는 영향이 없습니다.

여기서 앞쪽 해시값만 대조 대상입니다.

도구 없이 SHA-256 값 구하는 법

운영체제에 이미 명령이 들어 있습니다. 추가 설치는 필요 없습니다.

Windows

명령 프롬프트나 PowerShell에서 다음 중 하나를 씁니다.

certutil -hashfile "C:\Users\me\Downloads\setup.zip" SHA256
Get-FileHash "C:\Users\me\Downloads\setup.zip" -Algorithm SHA256

certutil 은 해시값 위아래로 안내 문구를 함께 출력하므로 가운데 16진수 줄만 보면 됩니다. PowerShell의 Get-FileHash 는 값을 대문자로 출력하는데, 16진수는 대소문자가 달라도 같은 값이므로 그대로 대조해도 됩니다.

macOS · 리눅스

터미널에서 파일 경로만 붙이면 됩니다.

shasum -a 256 setup.zip     # macOS·리눅스 공통
sha256sum setup.zip         # 리눅스

-a 뒤의 숫자가 알고리즘입니다. -a 1, -a 384, -a 512 로 바꾸면 각각 SHA-1·SHA-384·SHA-512 값이 나옵니다. 출력은 <해시값> <파일명> 형태입니다.

배포처가 SHA256SUMS 파일을 함께 제공한다면 대조까지 명령에 맡길 수 있습니다. 파일과 같은 폴더에서 아래를 실행하면 파일명별로 OK 또는 FAILED 가 표시됩니다.

shasum -a 256 -c SHA256SUMS
sha256sum -c SHA256SUMS      # 리눅스

직접 대조할 때

체크섬 파일이 없다면 결국 64자 문자열 두 개를 사람 눈으로 맞춰야 합니다. 앞 6자와 뒤 6자만 보고 넘어가는 습관이 가장 흔한 실수입니다.

또 하나 자주 걸리는 지점은 붙여넣기 오염입니다. 웹페이지에서 값을 긁으면 앞뒤에 공백이나 줄바꿈이 딸려오고, shasum 출력을 통째로 복사하면 파일명까지 함께 들어옵니다.

저희 도구로 확인하기. 알고리즘을 고르고 파일을 넣은 다음, 배포처 값을 아래 칸에 붙여넣으면 일치 여부를 색으로 알려줍니다.

파일 해시(체크섬) 생성기

SHA-256·SHA-384·SHA-512·SHA-1을 브라우저 안에서 계산하며, 넣은 파일은 서버로 전송되지 않습니다.

화면 구성은 단순합니다. 위쪽 파일 / 텍스트 탭에서 대상을 고르고, 해시 알고리즘 목록에서 SHA-256·SHA-384·SHA-512·SHA-1 중 하나를 선택합니다.

계산된 값은 "SHA-256 체크섬 (16진수)" 칸에 나오고, 그 아래 "기대값과 비교 (선택)" 칸에 배포처 값을 붙여넣으면 됩니다. 일치하면 초록색 "✓ 일치 — 무결성이 확인되었습니다", 다르면 빨간색 "✗ 불일치 — 값이 다릅니다" 가 뜹니다.

이 비교는 앞뒤 공백과 대소문자를 무시합니다. 웹페이지에서 값을 긁을 때 딸려오는 여백이나, PowerShell이 대문자로 뱉은 값 때문에 불일치가 뜨지는 않습니다. 다만 파일명처럼 값 중간에 섞여 들어온 문자는 그대로 차이로 잡힙니다.

한 가지 순서상 주의가 있습니다. 파일 모드에서 알고리즘을 바꾸면 계산 결과가 비워지므로, 알고리즘을 먼저 고른 뒤 파일을 넣는 편이 한 번에 끝납니다.

체크섬이 보장하는 것과 못 하는 것

여기가 이 글에서 제일 중요한 부분입니다. 일치 표시를 보고 어디까지 안심해도 되는지를 나눠 두겠습니다.

보장하는 것. 내 파일이 그 체크섬을 계산했던 파일과 바이트 단위로 동일하다는 사실입니다. 한 바이트만 달라져도 값 전체가 완전히 달라지므로, 전송 손상이나 파일 교체는 이 대조에서 걸립니다.

보장하지 못하는 것 ①: 파일의 안전성. 원본 자체가 원치 않는 동작을 하는 파일이라면, 체크섬은 "원본과 같다"고 정확히 알려줄 뿐입니다. 무결성 확인과 악성 여부 판정은 서로 다른 층입니다.

보장하지 못하는 것 ②: 체크섬 값 자체의 출처. 파일과 체크섬을 같은 페이지·같은 서버에서 받았다면 둘은 같은 위험을 공유합니다. 그 서버에서 파일이 바뀌면 옆에 적힌 값도 함께 바뀔 수 있습니다.

이 빈틈을 메우는 층이 전자서명입니다. 배포처가 .asc·.sig 서명 파일이나 코드 서명을 함께 제공한다면, 그것은 "값이 맞다"를 넘어 "이 배포자가 서명했다"까지 확인해 주는 별개의 절차입니다.

보장하지 못하는 것 ③: 불일치의 원인. 값이 다르다는 사실은 알려주지만, 그것이 다운로드 손상인지, 버전이 다른 파일을 받은 것인지, 다른 이유인지는 구분해 주지 않습니다.

불일치가 떴을 때 순서대로 확인할 것

확인 순서내용
1배포처 값과 내 값의 알고리즘이 같은가 (자릿수로 확인)
2붙여넣은 값에 파일명·줄바꿈이 섞이지 않았는가
3배포처의 값이 내가 받은 버전·에디션의 값인가
4다시 받아 계산해도 같은 값이 나오는가 (손상이면 대개 값이 바뀝니다)

버전 표기가 특히 자주 어긋납니다. 같은 프로그램이라도 32비트/64비트, 설치판/무설치판, 언어팩 포함 여부에 따라 파일이 다르고, 따라서 체크섬도 각각 다릅니다.

직접 재현해 보기

값이 제대로 계산되는지 확인하고 싶다면 짧은 문자열로 시험해 볼 수 있습니다. 아래 명령은 줄바꿈 없이 hello world 열한 글자의 SHA-256을 계산합니다.

printf 'hello world' | shasum -a 256
b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9  -

출력 끝의 - 는 "파일이 아니라 표준 입력에서 읽었다"는 표시이므로, 대조 대상은 앞의 64자입니다.

같은 문자열을 도구의 텍스트 탭에 붙여넣어도 같은 값이 나옵니다. 어느 기기에서 계산하든 결과가 같다는 성질(결정성) 덕분에 대조가 성립합니다.

여기서 echo 대신 printf 를 쓴 이유가 있습니다. echo 는 끝에 줄바꿈 한 글자를 덧붙이는데, 그 한 글자 때문에 해시값이 전부 달라지기 때문입니다.

정리

  • 배포처 값의 알고리즘부터 확인합니다. SHA-256이면 16진수 64자입니다.
  • 값 계산은 기본 명령으로 됩니다. Windows certutil -hashfile 파일 SHA256, macOS·리눅스 shasum -a 256 파일.
  • SHA256SUMS 가 있으면 shasum -a 256 -c SHA256SUMS 로 대조까지 맡길 수 있습니다.
  • 일치 = 그 값을 만든 파일과 바이트 단위로 같다는 뜻입니다. 파일이 안전하다는 보증은 아닙니다.
  • 체크섬과 파일을 같은 곳에서 받았다면 출처 검증은 별개입니다. 그 층은 전자서명이 담당합니다.
  • 불일치라면 알고리즘 · 붙여넣기 오염 · 버전 차이 순으로 확인합니다.
파일 해시(체크섬) 생성기

SHA-256·SHA-384·SHA-512·SHA-1을 브라우저 안에서 계산하며, 넣은 파일은 서버로 전송되지 않습니다.

자주 묻는 질문

체크섬이 일치하면 그 파일은 안전한가요?

일치가 알려주는 것은 "내 파일이 그 체크섬을 계산했던 파일과 바이트 단위로 같다"는 사실까지입니다. 원본 자체의 성격은 별개 문제이며, 체크섬 대조로는 판정되지 않습니다. 또한 체크섬 값을 파일과 같은 페이지에서 받았다면 그 값의 출처 자체는 검증되지 않은 상태입니다.

목록에 MD5가 없는 이유는 무엇인가요?

이 도구는 브라우저에 내장된 Web Crypto 기능으로 계산하는데, 그 규격이 지원하는 해시는 SHA-1·SHA-256·SHA-384·SHA-512입니다. MD5는 규격에 포함돼 있지 않아 브라우저 안에서는 계산할 수 없습니다. 배포처가 MD5만 공개했다면 운영체제 명령(certutil -hashfile 파일 MD5, md5sum, md5)을 쓰면 됩니다.

SHA-1로 확인해도 되나요?

배포처가 SHA-1 값만 공개했다면 그 값으로 대조할 수는 있습니다. 다만 SHA-1은 서로 다른 두 파일이 같은 해시값을 갖는 충돌이 공개적으로 시연된 알고리즘입니다. SHA-256 값이 함께 제공된다면 그쪽을 대조하는 편이 낫습니다.

파일이 서버로 올라가나요?

아니요. 파일은 브라우저 안에서 읽혀 그 자리에서 해시가 계산되며, 서버로 전송되지 않습니다. 그래서 용량이 큰 ISO 파일도 업로드 대기 없이 바로 계산되고, 계산 시간은 파일 크기와 기기 성능에 따라 달라집니다.

가격 보기카톡 무료 상담