본문 바로가기
인터넷

인터넷에서 다운로드한 파일이 정상적인 파일인지 아닌지 검증하는 방법

by 젤리아드 2025. 3. 25.
반응형

대부분의 사람들은 인터넷에서 다운로드한 파일을 검증 없이 그대로 사용합니다.

하지만 다운로드 완료된 파일은 진짜가 아니라 가짜일 수도 있습니다.

왜냐하면 다운로드 중인 파일이 중간자 공격(Man in the Middle Attack=MITM)을 당하게 되면 변조된 파일이 PC에 다운로드되기 때문입니다.

PC ← 다운로드 파일 ← 인터넷 ← 다운로드 파일 ← 웹사이트 서버
정상적인 다운로드

정상적인 상황이라면 서버에서 올려놓은 파일과 이 파일을 다운로드하여 PC에 저장된 파일은 같아야 합니다.

 

PC ← 악성 코드 파일 ← 중간자 ← 다운로드 파일 ← 인터넷 ← 다운로드 파일 ← 웹사이트 서버
중간자 공격을 당한 다운로드

그러나 중간자 공격을 당해서 다운로드 중에 파일이 변조되면 악성 코드가 포함된 바이러스 파일이 PC에 다운로드될 수도 있습니다.

이 경우 서버에 있는 원본 파일과 다운로드 완료되어 PC에 저장된 파일은 동일한 파일이 아니게 됩니다.

또한 다운로드 중에 오류가 발생해 깨진 파일이 다운로드되는 경우도 있습니다.

이 경우도 원본 파일과 동일하지 않은 파일이 다운로드됩니다.

따라서 인터넷으로부터 다운로드한 파일은 서버에 있는 원본 파일과 동일한 파일인지 아닌지 검증을 해야 안전합니다.

 

파일 다운로드: sample.zip
- signature -
MD5: bc949ea893a9384070c31f083ccefd26
SHA1: cbb8391cb65c20e2c05a2f29211e55c49939c3db
SHA256: 6bdf66b5bf2a44e658bea2ee86695ab150a06e600bf67cd5cce245ad54962c61
다운로드 파일 해시 예제

웹사이트에서 사용자가 다운로드 받을 수 있도록 파일을 제공하는 경우가 있습니다.

이 경우 사용자는 파일을 다운로드하여 사용합니다.

위 화면은 인터넷에서 다운로드 받을 수 있는 파일에 대해 signature라는 것을 공개한 예시입니다.

모든 웹사이트에서 다운로드 파일에 대해 signature를 공개하는 것은 아니나 보통 프로그램 설치 파일 같은 것을 제공할 때 signature도 같이 제공하는 경우가 많습니다.

signature는 파일의 지문이라고 생각하면 이해가 빠릅니다.

그리고 밑에 MD5, SHA1, SHA256 등은 지문의 종류입니다.(해시 알고리즘)

이 지문을 통해 다운로드 완료된 파일이 서버에 있는 원본 파일과 동일한 파일인지 아닌지 검증할 수 있습니다.

 

윈도우PC, 안드로이드에서 파일 지문 추출하는 방법

 

안드로이드에서 파일 지문 추출하기

안드로이드에서 파일의 지문을 추출하는 방법은 아래 링크된 글에 설명되어 있습니다.

https://zeliard.tistory.com/entry/how-extract-md5-sha1-sha256-sha512-hash-fingerprint-from-file

 

안드로이드에서 파일의 해시 지문 추출하는 방법(md5, SHA1, SHA256, SHA512,File Hash)

웹사이트에서 파일이나 프로그램을 다운로드할 때 해시 지문을 공개하는 경우가 있습니다.해시 지문을 공개하는 이유는 PC나 스마트폰에 다운로드 완료된 파일이 웹사이트에 있는 원본 파일과

zeliard.tistory.com

 

윈도우PC에서 파일 지문 추출하는 방법

아래 sample.txt 파일(내용이 없는 빈 텍스트 파일)로 연습 가능합니다.

sample.txt
0.00MB

 

sample.txt 파일의 지문은 이후에 그림 설명으로 나오는 해시 지문과 동일합니다.

 

파일 탐색기
sample.zip
파일 이름 복사

인터넷으로부터 파일이 다운로드 완료되었다면 파일 탐색기를 열고 다운로드한 파일의 전체 이름을 복사합니다.

파일 선택 후 파일 이름을 누르거나 F2키를 누르면 파일 이름을 드래그하여 복사할 수 있습니다.

(이때 파일 이름을 변경하지 않도록 주의하세요)

 

파일 탐색기
cmd 실행
cmd 실행

다운로드 파일 이름 복사 완료 후 파일 탐색기에서 cmd를 실행합니다.

(다른 폴더로 이동하면 안 되고 다운로드 파일이 존재하는 폴더에서 cmd 실행)

 

cmd
C:\Users\Downloads>certutil -hashfile sample.zip sha256
SHA256의 sample.zip 해시:
6bdf66b5bf2a44e658bea2ee86695ab150a06e600bf67cd5cce245ad54962c61
CertUtil: -hashfile 명령이 성공적으로 완료되었습니다.

C:\Users\Downloads>
해시 값 추출

cmd 창이 열리면 다음 명령어를 실행합니다.
명령어 형식: certutil -hashfile (다운로드한 파일 이름) (해시 알고리즘 종류)

예를 들어 다운로드한 파일 이름이 sample.zip이고 SHA256에 대한 지문을 구할 때 다음 명령어를 실행합니다.

certutil -hashfile sample.zip sha256

(예제 파일로 실습하는 경우는 sample.zip 대신 sample.txt 파일 이름을 입력합니다)

명령어를 실행하면 위 화면처럼 파일에 대한 지문이 나옵니다.(SHA256 지문)

이 지문을 웹사이트에서 공개한 지문과 비교하면 됩니다.

 

파일 다운로드: sample.zip
- signature -
SHA256: 6bdf66b5bf2a44e658bea2ee86695ab150a06e600bf67cd5cce245ad54962c61
↑
해시 값이 동일한지 확인
↓
cmd
SHA256의 sample.zip 해시:
6bdf66b5bf2a44e658bea2ee86695ab150a06e600bf67cd5cce245ad54962c61
해시 값 검증

종류에 맞는 지문과 비교하여 동일한지 확인합니다(위 예시에서는 SHA256)

(대, 소문자 구분 없이 비교합니다)

SHA256의 지문 값이 동일하면 원본 파일과 다운로드한 파일도 동일한 것으로 간주합니다.(100% 같다는 의미는 아니지만 거의 100%로 봐도 무방)

그러나 지문 중 단 한 글자라도 다르다면 해당 파일은 원본 파일과 동일하지 않은 파일입니다.(이 경우 100%)

2개의 파일이 서로 1bit만 달라도 해시 지문은 완전히 다르게 추출됩니다.

(이런 이유로 보통 앞, 뒤 4글자만 확인합니다, 전부 확인하면 눈이 피로합니다)

해시 지문 값이 한 글자라도 다르다면 원본 파일이 아니므로 해당 파일을 삭제하고 다시 다운로드하여야 합니다.

 

해시 지문이 같아도 100% 같은 파일이 아닌 이유

해시 지문은 종류에 따라 일정한 길이가 정해져 있습니다.

이 짧은 길이의 데이터로 용량이 훨씬 큰 파일의 데이터를 100% 비교 검증한다는 것 자체가 불가능합니다.

하지만 거의 100%에 가깝게 검증할 수 있습니다.

두 파일이 100% 같다는 것을 검증하려면 파일을 구성하는 있는 모든 데이터의 byte를 1:1 비교해서 모두 동일해야 100% 동일한 파일이 됩니다.

하지만 다운로드된 파일을 이런 식으로 검증하는 것은 현실적으로 불가능에 가깝습니다.(원본 파일이 없기 때문에 비교 검증 불가)

100% 검증을 하려면 원본 파일이 필요한데 원본 파일은 웹사이트가 구동 중인 서버에 있습니다.

따라서 100% 검증을 원하면 파일을 다운로드할 필요도 없이 웹사이트가 구동 중인 서버로 직접 찾아가 원본 파일을 복사해 오면 됩니다.

하지만 파일 하나 다운로드 받자고 이런 수고를 하는 건 말이 안 되기 때문에 해시 지문을 통해 100%는 아니지만 거의 100%에 가깝게 파일을 검증하는 방법이 가장 현실적인 방법입니다.

해시 지문은 다음과 같은 특성이 있습니다.

 

동일한 2개의 파일은 해시 지문도 반드시 동일하다(O 100%)

해시 지문이 같은 2개의 파일은 반드시 같은 파일이다(X)

 

완전히 서로 다른 2개의 파일이 동일한 해시 지문을 가질 수 있는 가능성이 있긴 하나 그 확률은 매우 낮습니다.(해시 충돌)

이 문제 때문에 해시가 동일해도 100%라는 말은 쓸 수가 없습니다.

웹사이트에서는 한 가지의 지문이 아니라 여러 종류의 지문을 제공하는 경우가 있습니다.

(MD5, SHA1, SHA256... 기타 등등)

 

이론상 2개의 파일에 대해 여러 종류의 지문이 동일할수록 두 파일이 동일할 확률은 점점 100%에 가까워집니다.

(하지만 100%는 아닙니다)

그러나 기술적인 관점에서 SHA256 지문만 비교해도 충분합니다.

(MD5, SHA1 을 단일로 사용하면 취약하므로 단일로 사용하지 마세요)

SHA256은 매우 강력한 알고리즘이며 이 알고리즘에서 해시 충돌을 일으킬 확률은 거의 없다고 봐도 무방할 정도로 작습니다.

이 확률이 얼마나 말도 안 되는 확률인지 예시를 들자면

어떤 두 사람이 지구에 있는 모든 모래알 중에서 우연히 같은 모래알을 선택할 확률보다도 압도적으로 작습니다.

(SHA256 해시 충돌 확률이 위 모래알 확률보다 압도적으로 작습니다)

 

이 정도 확률이면 SHA256 지문만 비교해도 두 파일이 동일한지 아닌지(99.9999.....%) 알 수 있습니다.

이론상 SHA256+MD5 또는 SHA256+SHA1 이렇게 2개의 지문을 검증할 경우 SHA256 1개의 지문만 검증하는 경우보다 더 100%에 가까워집니다.

SHA256+MD5+SHA1 이렇게 3개의 지문을 검증할 경우 2개의 지문을 검증하는 것보다 더 100%에 가까워집니다.

이론상으로는 그렇지만 현실적으로 SHA256 지문만 비교 검증해도 충분합니다.

 

다운로드 중간자 공격 예방하는 방법

✅ 다운로드 완료된 파일은 웹사이트에서 공개한 원본 파일의 해시 지문과 비교 검증 후 사용

(웹사이트에서 다운로드 파일에 대한 해시 지문을 공개했을 경우만 가능)

(다운로드 받는 모든 파일에 대해 해시 지문을 검증하는 것은 불편하지만 중요한 파일이나 PC에 설치하는 프로그램 파일 정도는 검증을 하는 것이 안전합니다)

✅ http 보다는 https 웹사이트만 접속

(https 보다 http 사이트가 중간자 공격에 훨씬 취약합니다)

✅ 웹사이트에서 2FA 이중 인증 로그인을 지원할 경우 2FA 로그인 활용

✅ 공용 네트워크나 공용 Wi-Fi로 인터넷 이용 시 VPN 사용

 

 

 

 

 

 

반응형

댓글