본문 바로가기
디지털 파일 검증 연구소 디지털 파일 검증 연구소

SHA-256 체크섬 검증 절차|PowerShell Get-FileHash를 이용한 파일 무결성 분석

디지털 파일 검증 연구소 읽는 시간 약 21분

파일을 인터넷에서 다운로드하거나 외장하드로 복사한 뒤, 원본과 동일한 상태인지 어떻게 확인할 수 있을까?

파일 이름과 크기가 같아도 내부 데이터가 완전히 동일하다고 단정할 수는 없다. 복사 과정에서 데이터가 손상되거나, 파일이 변경되었을 가능성이 있기 때문이다.

이때 활용할 수 있는 대표적인 방법이 SHA-256 체크섬을 이용한 파일 무결성 검증이다.

Windows에서는 별도의 유료 프로그램 없이 PowerShell의 Get-FileHash 명령어로 파일의 SHA-256 해시값을 계산할 수 있다.

이 글에서는 SHA-256의 기본 원리부터 Windows PowerShell 실습, 원본과 복사본의 해시 비교, 다운로드 파일 검증 방법, 검증 결과의 해석과 한계까지 단계별로 살펴본다.

1. SHA-256과 파일 무결성 검증의 개념

SHA-256이란?

SHA-256(Secure Hash Algorithm 256)은 입력 데이터로부터 256비트 길이의 해시값을 생성하는 암호학적 해시 함수다.

SHA-256은 미국 국립표준기술연구소(NIST)의 보안 해시 표준인 FIPS 180-4에 정의되어 있다.

파일에 SHA-256을 적용하면 파일 전체 바이트를 기반으로 고정 길이의 결과값이 계산된다.

256비트는 32바이트에 해당하며, 일반적으로 16진수 64자리로 표시한다.

SHA-256은 파일의 내용을 암호화하는 기술이 아니다. 해시값만으로 원본 파일을 복원하는 것도 일반적으로 불가능하다.

체크섬과 해시값의 차이

체크섬은 데이터가 전송되거나 저장되는 과정에서 변경되었는지 확인하기 위해 사용하는 검증값을 폭넓게 가리킨다.

CRC32와 같은 오류 검출용 체크섬과 SHA-256 같은 암호학적 해시값은 모두 데이터 변경 여부를 확인하는 데 활용할 수 있지만, 설계 목적과 보안 특성에는 차이가 있다.

SHA-256은 충돌을 찾기 어렵도록 설계된 암호학적 해시 함수이므로, 신뢰할 수 있는 기준값과 비교하는 무결성 검증에 적합하다.

파일 무결성이란?

파일 무결성(File Integrity)은 파일의 데이터가 기준 상태와 비교해 변경되지 않았는지를 의미한다.

예를 들어 파일을 다운로드한 뒤 계산한 SHA-256 해시값이 공식 배포자가 제공한 해시값과 일치한다면, 해당 파일의 내용이 기준 파일과 동일하다는 강한 근거가 된다.

다만 해시값 일치가 파일의 안전성이나 배포자의 신원을 자동으로 증명하는 것은 아니다.

비교에 사용하는 기준 해시값 자체가 신뢰할 수 있는 출처에서 제공되었는지도 확인해야 한다.

2. SHA-256 해시값의 주요 특성

SHA-256에는 다음과 같은 특성이 있다.

구분설명
출력 길이256비트
바이트 길이32바이트
일반적인 표시16진수 64자리
입력 대상파일의 전체 바이트 데이터
결정성같은 입력에는 항상 같은 해시값 생성
변경 민감성입력이 바뀌면 해시값도 달라질 가능성이 매우 높음
대표 활용파일 무결성 검증, 데이터 동일성 비교

① 같은 파일 내용은 같은 해시값을 생성한다

파일 이름이나 저장 위치가 달라도 내부 바이트가 동일하면 SHA-256 해시값은 같다.

예를 들어 다음 두 파일이 있다고 가정하자.

  • C:\FileTest\original.bin
  • D:\Backup\copy.bin

두 파일의 이름과 위치가 달라도 내용이 완전히 같다면 SHA-256 결과는 동일하다.

② 파일 내용이 변경되면 해시값도 달라질 수 있다

파일의 바이트가 한 개만 변경되어도 SHA-256 결과는 일반적으로 크게 달라진다.

이러한 특성 때문에 파일 복사, 전송, 보관 과정에서 변경 여부를 확인하는 데 유용하다.

단, 서로 다른 입력이 같은 해시값을 갖는 충돌 가능성이 수학적으로 완전히 사라지는 것은 아니다. SHA-256은 그러한 충돌을 현실적으로 찾기 어렵도록 설계되어 있다.

③ 해시값은 파일의 진위를 단독으로 보장하지 않는다

공격자가 파일과 공개된 해시값을 모두 바꿀 수 있는 상황이라면, 변경된 파일에 맞춰 새로운 해시값을 제공할 수도 있다.

따라서 다운로드 검증에서는 공식 배포 경로, 디지털 서명, 신뢰할 수 있는 기준 해시값을 함께 확인하는 것이 중요하다.

3. Windows PowerShell에서 SHA-256 계산하기

Windows PowerShell 5.1과 최신 PowerShell에서는 Get-FileHash 명령어를 사용할 수 있다.

이 명령어는 파일의 해시값을 계산하며, 기본 해시 알고리즘은 SHA-256이다.

다만 실습에서는 어떤 알고리즘을 사용하는지 명확하게 나타내기 위해 -Algorithm SHA256을 직접 지정한다.

① 분석할 파일 준비

먼저 직접 만든 테스트 파일이나 출처가 확인된 파일을 준비한다.

예시 경로:

C:\FileTest\sample.txt

실제 파일 위치가 다르면 아래 명령어의 경로를 변경해야 한다.

② PowerShell 실행

Windows 시작 메뉴에서 PowerShell을 검색해 실행한다.

일반적으로 본인이 읽을 수 있는 파일의 해시값을 계산할 때 관리자 권한은 필요하지 않다.

③ SHA-256 해시값 계산

다음 명령어를 입력한다.

Get-FileHash -LiteralPath "C:\FileTest\sample.txt" -Algorithm SHA256

실행하면 다음과 같은 항목이 표시된다.

항목의미
Algorithm사용한 해시 알고리즘
Hash계산된 해시값
Path분석 대상 파일 경로

Hash 항목에는 SHA-256 결과인 16진수 64자리 값이 표시된다.

중요: 해시값은 파일 내용에 따라 달라지므로, 다른 사람이 실행한 결과와 임의로 비교해서는 안 된다.

④ 해시값만 표시하기

결과에서 해시값만 확인하려면 다음 명령어를 사용할 수 있다.

(Get-FileHash -LiteralPath "C:\FileTest\sample.txt" -Algorithm SHA256).Hash

이 명령어는 Get-FileHash가 반환한 결과에서 Hash 속성만 출력한다.

⑤ LiteralPath를 사용하는 이유

Get-FileHash에는 -Path와 -LiteralPath 매개 변수가 있다.

-Path는 와일드카드 문자를 해석할 수 있지만, -LiteralPath는 입력한 경로를 문자 그대로 처리한다.

따라서 파일 이름에 대괄호 등 특수 문자가 포함된 경우에도 정확한 파일을 지정하기 위해 -LiteralPath를 사용할 수 있다.

4. 원본 파일과 복사본의 SHA-256 비교 실습

파일 무결성 검증에서 가장 이해하기 쉬운 사례는 원본과 복사본의 해시값을 비교하는 것이다.

예를 들어 다음 두 파일이 있다고 가정하자.

원본:

C:\FileTest\original.bin

복사본:

D:\Backup\copy.bin

이 경로는 설명을 위한 예시이며, 실제로 파일이 존재해야 명령어가 실행된다.

① 원본 파일 해시 계산

$original = Get-FileHash -LiteralPath "C:\FileTest\original.bin" -Algorithm SHA256

② 복사본 해시 계산

$copy = Get-FileHash -LiteralPath "D:\Backup\copy.bin" -Algorithm SHA256

③ 두 해시값 비교

$original.Hash -eq $copy.Hash

출력 결과가 True라면 두 SHA-256 해시값이 일치한다는 뜻이다.

출력 결과가 False라면 두 해시값이 다르다는 뜻이다.

SHA-256 해시값이 일치하면 두 파일의 내용이 동일하다는 매우 강한 근거가 된다. 반대로 해시값이 다르면 파일 내용도 동일하지 않다.

④ 결과를 메시지로 표시하기

다음 코드는 비교 결과를 알아보기 쉬운 문장으로 출력한다.

$original = Get-FileHash -LiteralPath "C:\FileTest\original.bin" -Algorithm SHA256 -ErrorAction Stop
$copy = Get-FileHash -LiteralPath "D:\Backup\copy.bin" -Algorithm SHA256 -ErrorAction Stop

if ($original.Hash -eq $copy.Hash) {
    Write-Output "검증 성공: 두 파일의 SHA-256 해시값이 일치합니다."
}
else {
    Write-Output "검증 실패: 두 파일의 SHA-256 해시값이 다릅니다."
}

-ErrorAction Stop은 파일을 읽는 과정에서 오류가 발생하면 처리를 중단하도록 지정한다.

따라서 파일 경로가 잘못되었거나 접근할 수 없는 파일이라면 정상적인 비교 결과 대신 오류가 표시될 수 있다.

이 코드는 파일을 수정하지 않고 읽어서 해시값을 계산한다.

5. 다운로드 파일의 체크섬 검증 절차

프로그램 설치 파일, 운영체제 이미지, 압축 파일 등을 다운로드할 때 배포자가 SHA-256 값을 제공하는 경우가 있다.

이때는 다운로드한 파일의 해시값을 계산해 공식 기준값과 비교할 수 있다.

① 공식 SHA-256 기준값 확인

먼저 소프트웨어 배포자의 공식 웹사이트 또는 신뢰할 수 있는 배포 문서에서 SHA-256 값을 확인한다.

기준값을 제3자의 출처가 불분명한 게시물에서 가져오는 것은 피하는 것이 좋다.

② 다운로드한 파일의 해시 계산

예를 들어 다운로드한 파일이 다음 위치에 있다고 가정하자.

C:\Users\Public\Downloads\package.zip

Get-FileHash -LiteralPath "C:\Users\Public\Downloads\package.zip" -Algorithm SHA256

이 경로 역시 예시이므로 실제 다운로드 위치에 맞게 변경해야 한다.

③ 공식 기준값과 비교

공식 사이트에서 확인한 64자리 SHA-256 값을 $expectedHash에 입력한다.

$expectedHash = "공식 사이트에서 확인한 SHA-256 해시값"
$actualHash = (Get-FileHash -LiteralPath "C:\Users\Public\Downloads\package.zip" -Algorithm SHA256 -ErrorAction Stop).Hash

if ($actualHash -eq $expectedHash) {
    Write-Output "검증 성공: 공식 SHA-256 값과 일치합니다."
}
else {
    Write-Output "검증 실패: 공식 SHA-256 값과 일치하지 않습니다."
}

위 코드의 $expectedHash는 실제 공식 해시값으로 교체해야 한다. 예시 문구를 그대로 사용하면 정상적인 비교가 이루어지지 않는다.

PowerShell의 -eq 비교는 기본적으로 문자열의 대소문자를 구분하지 않으므로, 영문 16진수의 대문자와 소문자가 달라도 같은 값으로 비교할 수 있다.

④ 결과 해석

비교 결과의미권장 조치
해시값 일치공식 기준값과 파일 내용이 일치한다는 강한 근거배포 경로와 서명 등 추가 확인
해시값 불일치기준 파일과 데이터가 다름실행하지 말고 다운로드 경로 및 파일 재확인
계산 오류파일 접근 또는 경로 등의 문제경로, 권한, 파일 존재 여부 확인
기준값 없음독립적인 기준과 비교 불가공식 배포 문서나 서명 확인

해시값이 불일치한다고 해서 반드시 악성코드가 포함되었다는 뜻은 아니다.

다운로드 실패, 파일 버전 차이, 압축 파일 재생성, 잘못된 기준값 사용 등 다양한 원인이 있을 수 있다.

다만 공식 기준값과 다른 실행 파일은 원인이 확인되기 전까지 실행하지 않는 것이 안전하다.

6. SHA-256 값이 달라지는 대표적인 원인

파일의 해시값이 달라졌다면 단순히 파일 이름 때문인지, 실제 데이터 변경 때문인지 구분해야 한다.

① 파일 내용 수정

텍스트 파일에서 문자 하나를 변경하고 저장하면 파일 바이트가 달라질 수 있다.

따라서 새로 계산한 SHA-256 해시값도 일반적으로 달라진다.

② 파일 인코딩 변경

텍스트의 표시 내용이 같더라도 UTF-8, UTF-16 등 인코딩 방식이 다르면 실제 바이트 구성이 달라질 수 있다.

줄바꿈 방식이나 바이트 순서 표시(BOM)의 유무도 해시값에 영향을 줄 수 있다.

③ 이미지나 문서 재저장

이미지나 문서를 편집 프로그램에서 다시 저장하면 압축 방식, 내부 메타데이터 또는 파일 구조가 변경될 수 있다.

눈으로 보기에는 같은 이미지나 문서라도 SHA-256 값은 달라질 수 있다.

④ 파일 메타데이터와 내부 데이터 구분

파일 시스템에서 관리하는 수정 시각이나 파일 이름만 변경되는 경우에는 파일의 실제 바이트가 그대로일 수 있다.

이 경우 Get-FileHash로 계산한 파일 내용의 SHA-256 값은 변하지 않는다.

반면 이미지나 문서 파일 내부에 저장된 메타데이터가 변경되면 파일 바이트가 바뀌므로 해시값도 달라질 수 있다.

SHA-256은 파일이 어떻게 보이는지가 아니라 실제 입력된 바이트를 기준으로 계산한다.

7. SHA-256과 MD5·SHA-1의 차이

파일 해시를 계산할 때는 SHA-256 외에도 MD5, SHA-1 등의 이름을 접할 수 있다.

알고리즘출력 길이일반적인 16진수 표시보안상 고려사항
MD5128비트32자리충돌 공격에 취약
SHA-1160비트40자리충돌 공격에 취약
SHA-256256비트64자리현대적인 무결성 검증에 널리 사용

MD5와 SHA-1은 충돌 공격에 대한 안전성이 충분하지 않으므로, 공격자의 조작 가능성을 고려해야 하는 보안 목적의 파일 검증에는 권장되지 않는다.

SHA-256 역시 해시값을 계산하는 것만으로 모든 보안 문제를 해결하지는 못한다.

파일의 출처와 배포자의 신원을 확인해야 한다면 디지털 서명이나 신뢰할 수 있는 배포 체계도 함께 확인해야 한다.

8. SHA-256 검증의 기술적 한계

① 기준 해시값의 신뢰성이 중요하다

공격자가 파일과 기준 해시값을 함께 변경할 수 있다면, 해시 비교만으로 위조 여부를 확인하기 어렵다.

따라서 기준 해시값을 어디에서 확인했는지 기록하는 것이 중요하다.

② 동일한 해시값이 절대적인 동일성 증명은 아니다

SHA-256은 서로 다른 입력에서 동일한 해시값이 나올 가능성을 매우 낮게 만들도록 설계되었다.

하지만 가능한 파일의 수는 해시값의 수보다 많으므로, 수학적으로 충돌 가능성이 완전히 없는 것은 아니다.

실무에서는 신뢰할 수 있는 기준값과의 SHA-256 일치를 데이터 동일성의 매우 강한 근거로 활용한다.

③ 악성코드 여부를 판단하지 못한다

SHA-256은 파일 내용을 바탕으로 숫자 형태의 검증값을 계산한다.

파일이 악성코드인지, 개인정보를 포함하는지, 실행 시 위험한 동작을 하는지까지 판단하지는 않는다.

④ 검사 시점 이후의 변경은 별도로 확인해야 한다

해시값은 계산한 시점의 파일 내용을 반영한다.

검증 이후 파일이 다시 변경될 수 있으므로, 중요한 파일은 사용 직전이나 전송 완료 후 다시 확인할 필요가 있다.

9. 실무에서 권장하는 파일 무결성 검증 순서

다음은 다운로드 파일이나 백업 파일을 검증할 때 활용할 수 있는 기본 절차다.

1단계 — 검증 대상 확인

파일 이름, 경로, 크기, 파일 출처를 확인한다.

2단계 — 신뢰할 수 있는 기준값 확보

공식 SHA-256 값 또는 변경 전 원본 파일의 해시값을 확보한다.

3단계 — SHA-256 계산

PowerShell Get-FileHash를 이용해 검사 대상의 해시값을 계산한다.

4단계 — 해시값 비교

같은 해시 알고리즘을 사용했는지 확인한 뒤 기준값과 비교한다.

5단계 — 결과 기록

검사 날짜, 파일 경로, 사용한 알고리즘, 기준값, 실제 계산값, 비교 결과를 기록한다.

6단계 — 불일치 원인 조사

값이 다르다면 파일 버전, 다운로드 경로, 복사 오류, 파일 수정 여부 등을 확인한다.

보안상 중요한 파일이라면 해시 비교와 별도로 디지털 서명, 배포 경로, 악성코드 검사 등도 검토한다.

10. 파일 시그니처 분석과 SHA-256 검증의 차이

파일 시그니처와 SHA-256은 모두 디지털 파일 분석에 활용되지만 검사 목적이 다르다.

구분파일 시그니처 분석SHA-256 검증
주요 목적파일 형식 식별파일 내용 동일성 확인
분석 범위특정 위치의 특징적인 바이트 패턴파일 전체 바이트
대표 결과PNG, JPEG, PDF 등256비트 해시값
활용 사례확장자와 실제 형식 비교원본·복사본 무결성 비교
주요 한계전체 파일 구조의 정상 여부를 보장하지 않음출처나 안전성을 단독으로 보장하지 않음

예를 들어 PNG 파일 두 개는 같은 파일 시그니처를 가지고 있어도 이미지 내용은 다를 수 있다.

반대로 SHA-256은 파일 전체 바이트를 기반으로 계산하므로 두 파일의 데이터가 동일한지 비교하는 데 적합하다.

두 기술은 서로 대체하는 관계가 아니라, 분석 목적에 따라 함께 사용할 수 있는 기술이다.

11. 자주 묻는 질문

Q1. SHA-256 검증에 유료 프로그램이 필요한가요?

필요하지 않다. Windows에서는 PowerShell의 Get-FileHash를 이용해 별도 유료 프로그램 없이 SHA-256 해시값을 계산할 수 있다.

Q2. 파일 이름이 달라도 SHA-256 값이 같을 수 있나요?

그렇다. 파일 이름은 일반적으로 Get-FileHash가 계산하는 파일 내용의 일부가 아니므로, 내부 바이트가 동일하면 해시값도 동일하다.

Q3. 파일 크기가 같으면 SHA-256도 같나요?

아니다. 파일 크기가 같아도 내부 데이터가 다르면 SHA-256 값은 일반적으로 달라진다.

Q4. SHA-256 값이 같으면 악성코드가 없는 파일인가요?

아니다. SHA-256은 파일의 데이터 동일성을 비교하는 데 사용되며 악성코드의 존재 여부를 직접 검사하지 않는다.

Q5. 파일을 복사한 후 SHA-256 검증을 해야 하나요?

중요한 백업 파일이나 대용량 전송 파일의 무결성을 확인해야 한다면 유용하다. 원본과 복사본의 해시값을 비교하면 복사 과정에서 데이터가 변경되었는지 확인할 수 있다.

Q6. SHA-256 검증에 실패하면 파일을 삭제해야 하나요?

무조건 삭제할 필요는 없다. 먼저 기준값이 정확한지, 파일 버전이 일치하는지, 전송이나 저장 과정에 문제가 없었는지 확인해야 한다. 출처가 불분명한 실행 파일이라면 원인이 확인되기 전까지 실행하지 않는 것이 안전하다.

마무리

SHA-256 체크섬 검증은 파일이 저장되거나 전송되는 과정에서 데이터가 변경되었는지 확인하는 대표적인 방법이다.

Windows PowerShell의 Get-FileHash 명령어를 사용하면 별도의 유료 프로그램 없이 파일의 SHA-256 해시값을 계산할 수 있다.

그러나 해시값을 계산하는 것과 신뢰할 수 있는 기준값으로 검증하는 것은 서로 다른 작업이다.

정확한 파일 무결성 검증을 위해서는 검사 대상 파일, 기준 해시값, 해시 알고리즘, 비교 결과를 함께 확인해야 한다.

특히 SHA-256 해시값이 일치한다는 사실과 파일이 안전하다는 판단은 구분해야 한다.


핵심 내용 3줄 요약

  • SHA-256은 파일 전체 바이트를 기반으로 256비트 해시값을 계산한다.
  • PowerShell의 Get-FileHash를 사용하면 원본·복사본 또는 공식 기준값과 해시값을 비교할 수 있다.
  • 해시값 일치는 파일 내용 동일성의 강한 근거지만 파일의 출처와 안전성을 단독으로 보장하지 않는다.

공식 참고자료

  1. Microsoft Learn — Get-FileHash (Windows PowerShell 5.1)
    https://learn.microsoft.com/ko-kr/powershell/module/microsoft.powershell.utility/get-filehash?view=powershell-5.1
  2. NIST — FIPS 180-4 Secure Hash Standard
    https://csrc.nist.gov/pubs/fips/180-4/upd1/final
  3. NIST — SHA-256 Glossary
    https://csrc.nist.gov/glossary/term/sha_256

※ 실습에 사용된 경로와 파일명은 예시입니다. 실제 환경에 맞게 변경해야 하며, 중요한 파일은 별도의 백업을 유지한 상태에서 검증하는 것이 좋습니다.

디지털 파일 검증 연구소

디지털 파일 검증 연구소
디지털 파일 검증 연구소는 파일 형식, 확장자, 무결성 확인, 데이터 손상 예방 및 디지털 자료 관리 방법을 다루는 정보 사이트입니다. 파일 오류의 원인과 점검 절차를 이해하기 쉽게 정리하고, 공식 문서와 검증 가능한 자료를 바탕으로 실생활에 도움이 되는 해결 방법을 안내합니다.
함께 보면 좋은 글

댓글 0

첫 댓글을 남겨보세요.