대부분의 사람들은 인터넷에서 다운로드한 파일을 검증 없이 그대로 사용합니다.
하지만 다운로드 완료된 파일은 진짜가 아니라 가짜일 수도 있습니다.
왜냐하면 다운로드 중인 파일이 중간자 공격(Man in the Middle Attack=MITM)을 당하게 되면 변조된 파일이 PC에 다운로드되기 때문입니다.
정상적인 상황이라면 서버에서 올려놓은 파일과 이 파일을 다운로드하여 PC에 저장된 파일은 같아야 합니다.
그러나 중간자 공격을 당해서 다운로드 중에 파일이 변조되면 악성 코드가 포함된 바이러스 파일이 PC에 다운로드될 수도 있습니다.
이 경우 서버에 있는 원본 파일과 다운로드 완료되어 PC에 저장된 파일은 동일한 파일이 아니게 됩니다.
또한 다운로드 중에 오류가 발생해 깨진 파일이 다운로드되는 경우도 있습니다.
이 경우도 원본 파일과 동일하지 않은 파일이 다운로드됩니다.
따라서 인터넷으로부터 다운로드한 파일은 서버에 있는 원본 파일과 동일한 파일인지 아닌지 검증을 해야 안전합니다.
웹사이트에서 사용자가 다운로드 받을 수 있도록 파일을 제공하는 경우가 있습니다.
이 경우 사용자는 파일을 다운로드하여 사용합니다.
위 화면은 인터넷에서 다운로드 받을 수 있는 파일에 대해 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 파일의 지문은 이후에 그림 설명으로 나오는 해시 지문과 동일합니다.
인터넷으로부터 파일이 다운로드 완료되었다면 파일 탐색기를 열고 다운로드한 파일의 전체 이름을 복사합니다.
파일 선택 후 파일 이름을 누르거나 F2키를 누르면 파일 이름을 드래그하여 복사할 수 있습니다.
(이때 파일 이름을 변경하지 않도록 주의하세요)
다운로드 파일 이름 복사 완료 후 파일 탐색기에서 cmd를 실행합니다.
(다른 폴더로 이동하면 안 되고 다운로드 파일이 존재하는 폴더에서 cmd 실행)
cmd 창이 열리면 다음 명령어를 실행합니다.
명령어 형식: certutil -hashfile (다운로드한 파일 이름) (해시 알고리즘 종류)
예를 들어 다운로드한 파일 이름이 sample.zip이고 SHA256에 대한 지문을 구할 때 다음 명령어를 실행합니다.
certutil -hashfile sample.zip sha256
(예제 파일로 실습하는 경우는 sample.zip 대신 sample.txt 파일 이름을 입력합니다)
명령어를 실행하면 위 화면처럼 파일에 대한 지문이 나옵니다.(SHA256 지문)
이 지문을 웹사이트에서 공개한 지문과 비교하면 됩니다.
종류에 맞는 지문과 비교하여 동일한지 확인합니다(위 예시에서는 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 사용
'인터넷' 카테고리의 다른 글
Gpg4win 프로그램 다운로드 방법 (0) | 2025.04.09 |
---|---|
일회용 임시 이메일 주소로 이메일 받기(TEMPMAIL) (0) | 2025.04.01 |
특정 웹사이트 접속하지 않고 krpano 사용 여부 확인하는 방법 (0) | 2025.03.05 |
IP주소를 웹주소로 바꾸는 방법 (0) | 2025.02.13 |
유튜브 라이브 채팅 상대방 닉네임 색깔 강조 표시 (0) | 2025.01.29 |
댓글