흔한 상황은 이렇습니다. 배포 페이지의 다운로드 링크 옆에 SHA-256이 적혀 있고, 실행하기 전에 확인하고 싶지만 터미널은 열고 싶지 않습니다. 이 글은 대조로 무엇을 알 수 있는지, 브라우저가 파일을 업로드하지 않고 어떻게 해시를 계산하는지, 값이 맞지 않을 때 무엇을 해야 하는지 설명합니다.

파일 확인하기 →

체크섬이 왜 필요한가

암호학적 해시 함수는 임의의 바이트열에서 길이가 정해진 ‘지문’을 만듭니다. 다운로드 검증에는 두 가지 성질을 씁니다.

  • 결정성: 같은 바이트열은 언제나 같은 해시를 낸다.
  • 눈사태 효과: 입력의 어느 한 비트만 바뀌어도 출력 전체가 바뀐다.

그래서 중간에 끊긴 다운로드, 미러에서 손상된 파일, 프록시가 바꾼 파일은 모두 SHA-256이 달라집니다. 배포처의 값과 내 컴퓨터에서 계산한 값을 비교하면 다시 받지 않고도 이런 문제를 찾을 수 있습니다.

다만 그것만으로 출처까지 증명되지는 않습니다. 그러려면 체크섬 목록에 대한 서명이 필요합니다. 그래도 ‘받은 파일이 배포처 목록에 있는 파일과 같다’는 것이 모든 확인의 출발점입니다.

SHA-256과 레거시 알고리즘의 차이

ZeroTool의 파일 해시값 확인 도구는 여섯 가지 알고리즘을 계산합니다. 서로 바꿔 쓸 수는 없습니다.

알고리즘출력충돌 저항성주로 보는 곳
CRC3232비트없음(오류 검출용)SFV 파일, ZIP 각 항목의 CRC-32 필드(APPNOTE)
MD5128비트깨짐(2004)오래된 배포 페이지
SHA-1160비트깨짐(2017, SHAttered)오래된 배포 페이지, Git 객체 ID
SHA-256256비트강함Node.js SHASUMS256.txt, Ubuntu SHA256SUMS
SHA-384384비트강함W3C SRI 명세의 예시
SHA-512512비트강함Firefox SHA512SUMS, npm integrity 값

MD5와 SHA-1이 ‘깨졌다’는 것은 해시가 같은 서로 다른 파일을 공격자가 만들 수 있다는 뜻입니다. MD5가 일치하면 우연한 손상은 없다고 볼 수 있지만, 누군가 일부러 바꾸지 않았다는 보장은 되지 못합니다. 도구가 MD5와 SHA-1에 ‘구식’ 표시를 붙이는 이유입니다.

정책을 정한다면 SHA-256으로 하세요. 배포처가 MD5만 제공하면 그 값으로 확인하되 전송 확인용으로만 보고, SHA-256도 올려 달라고 요청하세요.

브라우저는 해시를 어떻게 계산하는가

브라우저에 내장된 crypto.subtle.digest()는 데이터 전체를 버퍼 하나로 받습니다. 조금씩 나눠 넣을 방법이 없습니다. 이 도구의 예전 버전은 그대로 File.arrayBuffer()로 파일 전체를 메모리에 올렸기 때문에, 1 GB 파일에서 탭 메모리가 약 2 GB 늘었고 3 GB 파일에서는 실패했습니다.

지금은 스트림으로 계산합니다. 체크한 알고리즘마다 Web Worker를 하나씩 띄우고, file.stream()으로 1 MB씩 읽어 중간 상태를 유지하는 hash-wasm에 넘깁니다. 메모리는 워커당 한 조각 정도만 씁니다. 2026년 10월 1일 Apple M1 Max의 데스크톱 Chromium에서 1 GB 파일의 SHA-256은 4.3초, 메모리 증가는 약 100 MB였고, 4,080,486,400바이트의 Ubuntu 24.04.5 서버 ISO도 공식 값과 일치했습니다.

업로드하거나 저장하지 않습니다. 네트워크 요청은 계산 스크립트를 한 번 불러오는 것뿐입니다. 같은 방식을 짧게 쓰면 다음과 같습니다.

import { createSHA256 } from 'hash-wasm';

async function sha256(file) {
  const hasher = await createSHA256();
  hasher.init();
  const reader = file.stream().getReader();
  for (;;) {
    const { done, value } = await reader.read();
    if (done) break;
    hasher.update(value);
  }
  return hasher.digest('hex');
}

new Blob(['abc'])를 넣으면 FIPS 180-2 테스트 값 ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad가 나옵니다.

명령어로 같은 결과를 얻는 방법은 다음과 같습니다.

# Linux (GNU coreutils)
sha256sum ubuntu-24.04.5-live-server-amd64.iso

# macOS
shasum -a 256 ubuntu-24.04.5-live-server-amd64.iso

# Windows
certutil -hashfile ubuntu-24.04.5-live-server-amd64.iso SHA256
Get-FileHash ubuntu-24.04.5-live-server-amd64.iso

출력 형식은 저마다 다릅니다. sha256sum과 shasum은 해시와 파일 이름, certutil은 안내 줄·해시 줄·완료 메시지, Get-FileHash는 대문자 16진수 표를 출력합니다. 도구의 대조 칸은 이 형식들과 SHA256SUMS 전체, SHA256 (파일) = … 형식의 태그 줄, Base64 / SRI 값을 읽고 값 전체로 비교합니다.

실전: 카카오 미러의 Ubuntu 서버 ISO 확인

2026년 10월 1일 확인한 결과, 카카오 미러의 SHA256SUMS는 releases.ubuntu.com의 원본과 바이트 단위로 같았고 9줄이었습니다. 7번째 줄은 다음과 같습니다.

97f3d7ffb032c3eb3b23d2c8be9cc76e60c2c1f2c0146ba5ba9fe01cafae0fd8 *ubuntu-24.04.5-live-server-amd64.iso

ubuntu-24.04.5-live-server-amd64.iso(4,080,486,400바이트)를 도구에 끌어다 놓고 9줄을 대조 칸에 붙여 넣으면, SHA-256 계산이 자동으로 시작되고 카드에 ‘목록에 있는 ubuntu-24.04.5-live-server-amd64.iso의 SHA-256 값과 일치합니다(7번째 줄).’가 표시됩니다. 나머지 8줄은 선택하지 않은 파일로 개수만 표시되며, sha256sum -c --ignore-missing과 같은 처리입니다.

‘불일치’가 나오면 다음 순서로 확인합니다.

  1. 64자리를 빠짐없이, 맞는 줄에서 복사했는지 봅니다. 한 글자가 빠지거나 더 들어가면 불일치가 아니라 길이나 글자 오류로 표시됩니다.
  2. 가능하면 다른 미러에서 다시 받습니다. 전송 중 손상이 가장 흔한 원인입니다.
  3. 체크섬 목록에 서명이 있으면 목록의 값을 믿기 전에 서명부터 검증합니다. Ubuntu는 SHA256SUMS.gpg와 검증 방법을 제공합니다. 목록이 변조됐다면 해시 일치는 아무 의미가 없습니다.

도구는 해시 계산까지만 합니다. 서명 검증에는 배포처의 OpenPGP 공개 키가 필요하므로 내 컴퓨터에서 gpg --verify로 하세요.

도구가 풀어 주지 않는 경계 사례

  • 아주 큰 파일은 시간이 걸린다. 크기 상한은 없지만 시간은 크기에 비례하고, 끝날 때까지 탭을 열어 두어야 합니다.
  • 폴더에는 하나의 해시가 없다. 폴더를 끌어다 놓으면 안의 파일을 하나씩(최대 1,000개) 계산하고, 상대 경로를 유지해 SHA256SUMS와 파일 이름으로 대조합니다. 폴더 전체의 지문이 필요하면 .tar.gz나 .zip으로 묶은 뒤 계산하세요.
  • 다운로드하면서 계산하기. 도구는 이미 디스크에 있는 파일을 읽습니다. 받으면서 계산하는 것은 명령줄의 일입니다(curl … | sha256sum).
  • 다른 알고리즘과 용도. SHA-224, SHA3, BLAKE2, BLAKE3는 계산하지 않고 지원하지 않는다고 표시합니다. 키를 쓰는 무결성 확인은 HMAC 생성기, 비밀번호 저장은 Bcrypt 해시 생성기·검증, 파일이 아닌 문자열의 해시는 해시 생성기를 쓰세요.

브라우저 도구가 편한 경우

터미널에 익숙한 개발자는 sha256sum을 씁니다. 하지만 다운로드는 다른 곳에서도 일어납니다. Windows PC, 관리되는 업무용 PC, 동료를 도와줄 때 등입니다. 브라우저 도구는 이런 경우에 맞습니다.

  • macOS, Windows, Linux, ChromeOS에서 같은 페이지를 씁니다.
  • 설치나 관리자 권한이 필요 없습니다.
  • 디스크에 있는 파일을 그대로 쓰고, 파일과 폴더를 끌어다 놓을 수 있습니다.
  • 값 하나나 목록 전체를 붙여 넣으면 파일 이름으로 대조해 주므로 64글자를 눈으로 비교하지 않아도 됩니다.

서명 검증 도구도, CI의 무결성 검사를 대신하는 도구도 아닙니다.

더 읽기