체크섬이란 무엇인가요?
체크섬(checksum)은 파일이나 네트워크 패킷 같은 데이터 블록에서 계산해 데이터와 함께 저장하거나 전송하는 짧은 값입니다. 나중에 다시 계산해 두 값을 비교하면 데이터가 손상이나 전송 오류로 바뀌었는지 알 수 있습니다.
업데이트: 2026년 9월 24일
| 체크섬 | 보낸 쪽 | 받은 쪽 | 결과 |
|---|---|---|---|
| 바이트의 합 (mod 256) | 07 | 07 | 일치 |
| CRC-32 | 7EBD8A8B | 7EBD8A8B | 일치 |
비트 하나를 뒤집으면 두 체크섬이 모두 바뀌어요. 두 글자의 자리를 바꾸면 바이트는 전부 그대로라서 합도 같아요. 순서에 따라 값이 달라지는 CRC-32만 알아차려요.
Ubuntu나 Debian 같은 Linux 배포판은 설치 이미지 옆에 SHA256SUMS라는 파일을 공개해요. 각 줄에는 64자짜리 문자열과 파일 이름이 있어요. 다운로드가 끝나면 받은 파일에 명령 하나를 실행해요. 같은 문자열이 출력되면 수십억 바이트가 모두 온전히 도착한 거예요. 도중에 비트 하나라도 뒤집혔다면 문자열은 완전히 다르게 나와요.
그 문자열이 체크섬이에요. 데이터가 바뀌면 함께 바뀌는 작은 요약값이죠.
체크섬은 어떻게 동작하나요
- 보내는 쪽이 데이터에 바이트 단위로 체크섬 알고리즘을 실행해 짧은 결과를 얻어요.
- 그 결과는 데이터와 함께 전송되거나 저장돼요. 네트워크 패킷의 헤더, ZIP 파일 안의 압축된 각 파일 옆, 다운로드 페이지 같은 곳이에요.
- 받는 쪽이 실제로 받은 데이터에 같은 알고리즘을 실행해요.
- 두 결과를 비교해요. 같으면 데이터는 거의 확실히 바뀌지 않은 거예요. 다르면 데이터가 손상된 것이고, 받는 쪽은 데이터를 거부하거나, 다시 요청하거나, 체크섬 오류를 표시해요.
체크섬은 손상을 감지할 뿐, 어느 바이트가 바뀌었는지 알려 주거나 복구하지는 못해요. 복구하려면 CD와 QR 코드에 쓰이는 리드 솔로몬 부호 같은 오류 정정 부호가 필요해요.
가장 단순한 체크섬은 모든 바이트를 더하고 합계의 마지막 8비트만 남기는 거예요. 아래 코드를 실행해서 이 방식이 어디서 통하고 어디서 실패하는지 보세요.
original sum= 78 crc32=a1628836
flipped sum= 80 crc32=a597580b
swapped sum= 78 crc32=59dbf74b
글자 하나를 바꾸면 합계가 바뀌어요. 두 글자의 자리를 바꾸면 합계가 그대로예요. 덧셈은 순서를 따지지 않기 때문이죠. 그래서 바이트 합계는 100 대신 10을 지급하는 내용을 통과시켜요. CRC-32(순환 중복 검사)는 데이터를 하나의 긴 이진수로 보고 정해진 33비트 다항식으로 나눠요. 32비트 나머지는 모든 비트의 위치에 따라 달라지므로 자리 바꿈이 잡혀요. 위의 데모에서 직접 입력한 텍스트로 확인해 볼 수 있어요. CRC-32는 길이 32비트까지의 연속된 오류(버스트 오류)를 모두 잡아내요.
대표적인 체크섬 알고리즘
| 알고리즘 | 크기 | 쓰이는 곳 |
|---|---|---|
| 패리티 비트 | 1비트 | 직렬 연결, 패리티 메모리 |
| 룬(Luhn) 검사 숫자 | 1자리 | 신용카드 번호, IMEI 번호 |
| 인터넷 체크섬 | 16비트 | IPv4, TCP, UDP 헤더 |
| Adler-32 | 32비트 | zlib 압축 형식 |
| CRC-32 | 32비트 | ZIP, gzip, PNG, 이더넷 프레임 |
| MD5 | 128비트 | 예전 다운로드 페이지, 중복 파일 찾기 |
| SHA-256 | 256비트 | 소프트웨어 다운로드, Linux 이미지, 비트코인 |
앞의 다섯 가지는 사고는 잡아내지만 공격자는 막지 못해요. 파일을 수정한 사람이 몇 바이트를 조정해서 CRC-32가 다시 일치하게 만들 수 있어요. MD5와 SHA-256은 같은 출력을 내는 두 입력을 찾는 것이 현실적으로 불가능하도록 설계된 암호학적 해시 함수예요. 하지만 MD5는 이미 깨졌고(2004년에 충돌이 공개됨) SHA-1도 깨졌기 때문에(2017년), 보안이 중요한 다운로드에는 SHA-256 이상을 써요. 우연한 손상을 잡는 데는 MD5도 여전히 충분해요.
체크섬 확인 방법
각 운영체제에는 기본 명령이 있어요.
# Windows (PowerShell)
Get-FileHash ubuntu.iso -Algorithm SHA256
# macOS
shasum -a 256 ubuntu.iso
# Linux
sha256sum ubuntu.iso
출력을 공식 다운로드 페이지의 값과 비교하세요. 대문자와 소문자는 상관없어요. Python에서는 hashlib로 같은 검사를 할 수 있고, 파일을 조각 단위로 읽으므로 6 GB 파일도 메모리에 한꺼번에 올릴 필요가 없어요.
a948904f2f0f479b8f8197694b30184b0d2ed1c1cd2a1ec0fb85d299a192a447
OK
hello world를 hello World로 바꾸고 다시 실행해 보세요. 체크섬의 모든 문자가 바뀌고, 마지막 줄에 Checksum mismatch가 출력돼요.
체크섬 오류란 무엇인가요?
체크섬 오류는 검사에 실패했다는 뜻이에요. 가지고 있는 데이터에서 계산한 값이 데이터와 함께 저장되거나 전송된 값과 일치하지 않는 것이죠. 데이터가 바뀌었거나, 저장된 체크섬이 손상된 거예요. 메시지와 해결 방법은 오류가 나타나는 곳에 따라 달라요.
부팅 시 CMOS 또는 BIOS 체크섬 오류
PC의 펌웨어(BIOS 또는 UEFI)는 부팅 순서와 시계 같은 설정을 작은 메모리에 보관하며, 컴퓨터 전원이 뽑혀 있는 동안에는 보통 CR2032인 코인 전지가 이 메모리를 유지해요. 그 설정의 체크섬이 설정 옆에 저장되어 있어요. 펌웨어는 부팅할 때마다 체크섬을 다시 계산하고, 값이 다르면 CMOS Checksum Error - Defaults Loaded 같은 메시지를 표시하고 공장 설정으로 되돌아가요.
흔한 원인은 약해지거나 다 된 전지이며, 특히 시계까지 초기화될 때 그래요. 설정을 저장하는 도중의 정전이나 점퍼로 CMOS를 초기화한 경우도 같은 결과를 내요. 해결 방법은 다음과 같아요.
- 설정 화면을 열어요(보통 PC가 켜질 때 Delete나 F2). 날짜, 시간, 바꿔 두었던 설정을 입력한 뒤 저장하고 종료해요(보통 F10). 메시지가 다시 나타나지 않으면 일회성 사건이었던 거예요.
- 전원을 완전히 껐다 켤 때마다 다시 나타난다면, 컴퓨터를 끄고 전원 코드를 뽑은 뒤 CR2032 전지를 교체해요.
- 메시지가
BIOS ROM checksum error나Main BIOS checksum error처럼 펌웨어 자체를 가리킨다면 펌웨어 이미지가 손상된 거예요. 백업 BIOS 칩이 있는 메인보드는 자동으로 복구해요. 그렇지 않은 메인보드에서는 BIOS 복구 기능을 쓰거나 제조사 사이트에서 받은 펌웨어를 다시 플래시하되, 업데이트 도중에 전원을 끊지 마세요.
다운로드 후 체크섬 불일치
받은 파일의 SHA-256이 다운로드 페이지의 값과 일치하지 않는 경우예요. 파일이 불완전하거나 손상되었을 수 있고(연결 중단, 디스크 공간 부족), 다른 파일(다른 버전이나 다른 CPU 아키텍처)의 체크섬과 비교하고 있을 수도 있으며, 서로 다른 두 알고리즘을 비교하고 있을 수도 있어요. MD5 값은 16진수 32자, SHA-256 값은 64자예요. 드물게는 파일이 변조된 경우도 있어요.
알고리즘과 파일 이름을 확인한 뒤 공식 사이트에서 파일을 다시 받으세요. 공식 출처에서 새로 받은 파일도 여전히 일치하지 않는다면 실행하지 마세요. 패키지 관리자는 이 검사를 대신 해 줘요. pip은 내려받은 패키지가 고정된 해시와 다르면 THESE PACKAGES DO NOT MATCH THE HASHES를 출력하고 멈춰요.
ZIP, RAR, 7z 압축 파일의 체크섬 오류
압축 형식은 각 파일의 원래 내용에 대한 CRC-32를 저장해요. 압축을 풀 때 도구가 이를 다시 계산하며, 불일치를 WinRAR는 Checksum error로, 7-Zip은 CRC Failed로 보고해요. 암호화된 압축 파일에서는 비밀번호가 틀려도 같은 메시지가 나와요. 틀린 비밀번호로 복호화하면 쓰레기 데이터가 나오기 때문이에요. 압축 파일을 다시 받고, 분할 압축 파일(.part1.rar, .part2.rar)의 모든 부분이 있고 같은 업로드에서 온 것인지 확인하고, 비밀번호를 다시 입력하세요. WinRAR의 압축 파일 복구 명령은 복구 레코드와 함께 만든 압축 파일에서 가장 잘 동작하며, "손상된 파일 유지(Keep broken files)" 옵션을 쓰면 제대로 풀린 부분이라도 건질 수 있어요.
게임과 네트워크 도구의 체크섬 오류
게임은 자기 파일의 체크섬을 비교하므로, 업데이트가 일부만 되었거나 파일이 바뀌면 검사에 실패해요. Steam에서 "게임 파일 무결성 확인"을 실행하면 체크섬이 일치하지 않는 파일을 모두 다시 받아요. Wireshark에서 내 컴퓨터가 보내는 패킷에 뜨는 체크섬 경고는 보통 진짜 오류가 아니에요. Wireshark가 패킷을 이미 캡처한 뒤에 네트워크 카드가 체크섬을 채워 넣기 때문이에요.
흔한 오해
- "체크섬이 일치하면 파일이 안전하다는 증거다." 파일이 공개된 값과 일치한다는 증거일 뿐이에요. 공격자가 웹사이트를 장악하면 둘 다 바꿀 수 있으며, 그래서 프로젝트들은 체크섬 파일에 키로 서명도 해요.
- "체크섬으로 손상된 파일을 고칠 수 있다." 체크섬은 손상을 감지할 뿐이에요. 해결책은 멀쩡한 사본을 구하는 거예요.
- "체크섬과 해시는 서로 다른 것이다." 체크섬은 하는 일을 가리키고, SHA-256 같은 해시 함수는 그 일을 할 수 있는 도구 중 하나예요.
다음 단계
해시 생성기에서 어떤 텍스트든 MD5, SHA-1, SHA-256 값을 계산해 보세요. 체크섬은 원시 데이터를 다루므로, 바이트란 무엇인지와 비트란 무엇인지가 실제로 무엇을 더하는지 설명해 줘요. 데이터베이스는 페이지 체크섬으로 디스크 손상을 잡아내며, 해시 테이블 시각화는 데이터에서 계산한 짧은 값의 또 다른 쓰임을 보여 줘요.
자주 묻는 질문
SHA-256도 체크섬인가요?
체크섬 오류는 어떻게 해결하나요?
체크섬 오류가 나는 원인은 무엇인가요?
체크섬은 왜 필요한가요?
체크섬은 어떻게 생성하나요?
sha256sum file, macOS에서는 shasum -a 256 file, Windows PowerShell에서는 Get-FileHash file을 써요. Python에서는 hashlib.sha256(data).hexdigest()가 SHA-256 체크섬을, zlib.crc32(data)가 CRC-32를 돌려줘요.