체크섬으로 다운로드와 파일 무결성 검증하기
암호학적 해시가 실제로 증명하는 것, MD5와 SHA-1이 오늘날 무결성 전용인 이유, 인스톨러 단계별 검증, 그리고 민감한 텍스트를 업로드하지 않고 해시하는 방법.
진위성이 아니라 무결성
암호학적 해시는 입력을 고정 길이 지문으로 바꿉니다. 단 1비트의 변경도 다이제스트를 바꿀 가능성이 압도적으로 높아, 신뢰할 수 있는 최신 다이제스트의 일치는 두 파일의 바이트가 같다는 강한 근거가 됩니다.
- 무결성의 근거신뢰할 수 있는 SHA-256 다이제스트의 일치는 내 복사본과 배포 파일의 바이트가 같다는 강한 근거이지만 누가 배포했는지는 증명하지 못합니다.
- 진위성은 별개진위성은 아닙니다. 다운로드 옆에 인쇄된 체크섬은 그 파일을 누가 썼는지에 대해 아무것도 말해주지 않습니다. 다운로드를 바꿔치기할 수 있는 공격자는 인쇄된 체크섬도 바꿔치기할 수 있습니다.
- 서명은 다른 도구진위성에는 다른 메커니즘이 필요합니다. 이미 신뢰하는 키로 검증하는 서명이나, 다운로드 자체보다 더 신뢰하는 채널로 전달되는 체크섬입니다.
MD5와 SHA-1은 이제 무결성 전용이다
MD5는 128비트 다이제스트를 32자의 16진수 문자로 출력하고, SHA-1은 160비트를 40자로 출력합니다. 둘 다 빠르고 우발적 손상을 발견하는 데는 문제없지만, 둘 다 공개적으로 시연된 충돌이 있어서 일치하는 다이제스트를 가진 악성 파일을 고의로 만드는 공격자를 막지 못합니다.
실용 규칙: MD5나 SHA-1 일치는 여전히 잘린 다운로드나 고장 나는 디스크를 잡아냅니다. 사고는 충돌을 계산하지 않으니까요. 이 알고리즘들이 더 이상 할 수 없는 것은 의심할 이유가 있는 파일을 결백하다고 처리하는 일입니다. 그 판단은 이제 SHA-256 이상의 것입니다.
- MD5는 깨졌다MD5 충돌은 수년째 실용적입니다. 같은 MD5 다이제스트를 가진 두 개의 다른 파일을 고의로 만들 수 있으므로, MD5는 더 이상 사고와 공격을 구별하지 못합니다.
- SHA-1은 깨졌다SHA-1도 같은 길을 갔습니다. 시연된 충돌이 보안 프리미티브로서의 수명을 끝냈고, 브라우저, 인증 기관, 코드 호스트 모두가 떠났습니다.
- SHA-2가 기준선SHA-2 패밀리가 현재의 기준선입니다. SHA-256(16진수 64자)이 공개 다운로드 체크섬의 기본값이고, SHA-224, SHA-384, SHA-512(56, 96, 128자)가 서로 다른 제약을 위한 형제입니다.
인스톨러 검증, 단계별로
전체 확인은 1분이 채 걸리지 않고 당신의 머신에 이미 있는 도구를 씁니다. 순서가 중요합니다. 발행자의 공식 페이지에서 기대 다이제스트를 얻고, 로컬 사본을 해시하고, 모든 문자를 비교합니다.
불일치가 항상 악의는 아닙니다. 잘린 다운로드와 캐싱 프록시는 일상적으로 파일을 손상시킵니다. 하지만 반응은 어느 쪽이든 같습니다. 파일은 검증에 실패했고, 유일하게 올바른 다음 단계는 소스에서 새 사본을 받는 것입니다.
- 기댓값 얻기공개된 체크섬은 벤더의 공식 다운로드 또는 릴리스 페이지에서 찾으세요. 이상적으로는 당신이 직접 찾아간 도메인의 HTTPS로, 미러나 검색 결과 스니펫이 아니라요.
- 로컬에서 해시다운로드한 파일을 로컬에서 해시하세요. macOS나 Linux에서는 shasum -a 256, Windows에서는 PowerShell의 Get-FileHash. 둘 다 당신의 디스크에서 실행되며 아무것도 업로드되지 않습니다.
- 정확히 비교다이제스트 전체를 대소문자를 무시하고 한 글자씩 비교하세요. 한 글자라도 다르면 파일을 버리고 소스에서 새 사본을 받으세요. 설치하고 바라는 것은 그만두세요.
민감한 텍스트를 업로드하지 않고 해시하기
실제 확인 대상의 많은 것은 파일이 아니라 텍스트입니다. 구성 조각, 라이선스 키, 토큰 파편, 동료가 전화로 불러준 값. 그것들을 아무 웹사이트에나 붙여 넣는 것은 남의 로그에 넘기는 일이므로, 해싱은 로컬에서 일어나야 합니다.
SHA-256 해시 생성 및 검증은 공개 체크섬의 현행 표준인 64자를 커버합니다. 여기서 검증은 복호화가 아니라 비교입니다. 당신의 텍스트가 해시되고, 두 값이 브라우저 안에서 비교됩니다.
- 설계상 로컬텍스트는 정규화 없이 UTF-8로 계산합니다(최대 1 MiB). 파일은 원본 바이트를 1 MiB씩 처리하며 최대 256 MiB, 빈 파일도 지원합니다. 다이제스트 일치는 출처 인증이 아닙니다. MD5와 SHA-1은 악의적 변조 방어에 적합하지 않습니다. 취소 가능한 로컬 Worker의 실행 한도는 15초입니다.
- 명시적 비교검증 모드는 명시적 비교입니다. 기대 다이제스트를 붙여 넣으면 작업 영역이 일치 또는 불일치를 보고하고, 잘못된 형식의 값은 미리 거부합니다. MD5는 정확히 32자, SHA-256은 정확히 64자의 16진수 문자입니다.
- 구조상 단방향다이제스트는 복호화할 수 없지만 짧거나 예측 가능한 입력은 추측해 다시 해시할 수 있습니다. 비밀번호나 다른 낮은 엔트로피의 비밀을 솔트 없는 범용 해시로 보호하지 마세요.
비교를 루틴에 내장하기
체크섬은 비교가 뒤늦은 생각이 아니라 습관일 때만 작동합니다. 몇 가지 작은 규율이 매번의 확인을 믿음직하게 만듭니다.
UTF-8 텍스트 또는 파일의 원본 바이트로 16진수 다이제스트를 만들고 비교합니다。 검증은 선택한 입력의 다이제스트를 로컬에서 비교합니다. 복호화하거나 출처를 인증하지 않습니다.
- 전체 비교다이제스트의 모든 문자를 비교하세요. 일부만 확인하면 어떤 다이제스트든 검증력이 약해지고, MD5와 SHA-1은 전체를 비교해도 충돌이 생길 수 있습니다.
- 알고리즘 명명알고리즘 이름을 다이제스트와 함께 보관하세요. 64자의 16진수 문자는 여러 알고리즘에서 올 수 있고, 라벨 없는 체크섬은 추측을 부릅니다.
- 홉마다 재해시USB 드라이브, 동기화 클라이언트, 이메일을 거쳐 파일을 옮긴 후에는 다시 해시하세요. 매 홉이 새로운 손상의 기회이고, 다이제스트 동반은 공짜입니다.
당신의 파일에 체크섬 게시하기
파일을 배포하고 있다면——릴리스 바이너리, 데이터 세트, 내부 도구——체크섬을 함께 게시하세요. 아티팩트당 명령 하나의 비용으로, 받는 모든 사람이 당신에게 연락하지 않고 무결성을 검증할 방법을 얻습니다.
SHA-512 해시 생성 및 검증은 더 긴 형태가 필요할 때 128자 다이제스트를 로컬에서 만들고, SHA-224와 SHA-384 형제가 SHA-2 패밀리의 나머지를 커버합니다. 같은 엔진, 같은 탭, 같은 경계입니다.
- SHA-256 최소최소한 SHA-256을 게시하세요. 청중이 SHA-512가 더 빠른 플랫폼에서 검증한다면 그것도 나란히 추가하고, 각 다이제스트에 알고리즘을 라벨링하세요.
- 같은 신뢰 수준체크섬은 다운로드 자체와 같은 신뢰 수준에서 제공하세요. 이상적으로는 사용자가 이미 권위 있다고 여기는 페이지나 저장소에서요.
- MD5는 레거시 라벨MD5 줄은 레거시 호환 라벨로만 유지하고, 우발적 손상에 대한 무결성 확인이라고 명확히 표시하세요. 보안 검증으로는 절대 아닙니다.
자주 묻는 질문
SHA-256 체크섬은 실제로 무엇을 증명하나요?
MD5와 SHA-1은 여전히 안전한가요?
다운로드한 설치 프로그램을 내 머신에서 검증하려면 어떻게 하나요?
검증은 도구를 신뢰하는 일의 한 부분입니다.
파일을 넘기기 전에 온라인 도구의 데이터 경로를 확인하는 방법을 배우세요. 체크섬이 보상하는 바로 그 회의감입니다.