체크섬: 그것이 무엇이며, 왜 중요한지, 그리고 릴리스 파이프라인에서 어디에 위치해야 하는가
Source: Dev.to

소프트웨어—특히 바이너리를 배포할 때—당신은 암묵적인 약속을 하는 것입니다: 이 파일이 바로 당신이 배포하려던 그대로라는 것을. 체크섬은 그 약속을 지키는 방법입니다.
이 글에서는 체크섬이 무엇인지, 왜 중요한지, 그리고 여러분의 오픈 소스 프로젝트에 어떻게 추가할 수 있는지 살펴보겠습니다. 시작해봅시다!
체크섬이란?
A checksum은 파일 내용으로부터 암호학적 해시 함수를 사용해 파생된 고정 길이 값입니다. SHA‑256이 표준이므로 특별한 이유가 없는 한 다른 알고리즘 대신 SHA‑256을 사용하세요. 파일의 한 바이트라도 바뀌면 체크섬은 완전히 달라집니다. 파일을 다운로드한 뒤 체크섬을 계산해 광고된 값과 비교할 수 있습니다. 따라서 체크섬은 기본적으로 “예, 이 프로그램은 주장하는 그대로입니다.” 라는 말을 하는 방법입니다.
요약하면…
Checksums (in this context) can…
- 파일 다운로드 후 손상을 감지
- 파일 다운로드 후 변조를 감지
- 최종 사용자에게 신뢰 제공
Checksums cannot…
- 파일을 만든 사람을 증명
- 악의적인 서버가 변조된 파일과 일치하는 체크섬을 배포하는 것을 방어
Source:
패키지 관리자에 대한 메모
수천 개의 npm 패키지를 설치했기 때문에 위험에 처했는지 궁금할 수 있습니다. 거의 모든 패키지 관리자에는 설치 전에 다운로드 무결성을 확인하는 안전망이 있습니다. 패키지 관리자를 통해 배포되지 않은 바이너리(예: GitHub 릴리즈)는 이러한 내장 검증이 없으므로 염두에 두어야 합니다.
프로젝트에 체크섬 추가하기
오픈‑소스 프로젝트에 체크섬을 추가하는 것은 실제로 매우 간단합니다. 올바른 위치에 넣지 않으면 작동하지 않으니 주의하세요.
Build artifacts
↓
Package artifacts (tar.gz, zip, binaries)
↓
Generate checksums
↓
Publish artifacts + checksums
↓
Create release
현재 제 프로젝트 Doclific은 단일 파일(checksums.txt)에 체크섬, 두 개의 공백, 그리고 해당 파일 이름을 넣어 사용합니다:
a21bd2e10abbdb057e8acd91a331b5ff6e187e845031f22d0117927e276d6b4f doclific-v0.1.1-darwin-amd64.tar.gz
a8c91ead81f402e380293f9a0fa6cf56cf380782dbfdff9bc604548bf14a35da doclific-v0.1.1-darwin-arm64.tar.gz
499224f4d05f023c560978c6fff2bbb381b7425e742e0b5b3c4b54068d7f6dfb doclific-v0.1.1-linux-amd64.tar.gz
1913c0669ec383133e8460a0be9df43e285a5ebc39928e62c86fcb6c9b486665 doclific-v0.1.1-linux-arm64.tar.gz
이 파일은 새 릴리스를 만들 때마다 실행되는 release.sh 스크립트에서 생성합니다:
echo "🔐 Generating checksums"
cd "$DIST_DIR"
shasum -a 256 * > checksums.txt
사용자가 다음 명령을 실행하면:
curl -fsSL https://raw.githubusercontent.com/muellerluke/doclific/main/scripts/install.sh | bash
install.sh 스크립트가 해당 아카이브를 가져와 체크섬을 계산하고, 호스팅된 checksums.txt 파일과 비교해 검증합니다:
info "Verifying checksum..."
# Determine command
if command -v sha256sum >/dev/null 2>&1; then
CHECKSUM_CMD="sha256sum -c -"
elif command -v shasum >/dev/null 2>&1; then
CHECKSUM_CMD="shasum -a 256 -c -"
else
err "No SHA256 checksum tool found. Please install sha256sum or shasum."
fi
# Run checksum verification
grep "$ARCHIVE" "$CHECKSUM_FILE" | $CHECKSUM_CMD || err "Checksum verification failed"
참고: 일부 OS 버전에서는 shasum이 설치되어 있지 않을 수 있으므로, 필요에 따라 스크립트가 sha256sum으로 대체됩니다.
마무리 생각
패키지 관리자를 통해 소프트웨어를 배포한다면 일반적으로 수동 체크섬 검증에 대해 걱정할 필요가 없습니다. 그러나 패키지 관리자 외부에서 바이너리를 배포할 때—curl이나 유사한 도구를 사용하면—체크섬을 구현하면 최종 사용자에게 추가적인 보안과 신뢰성을 제공합니다.