파일 이름은 같은데, 진짜 같은 파일일까?

파일 이름과 크기가 같아도 내용은 다를 수 있습니다. 한 글자가 다른 고정 텍스트의 SHA-256을 직접 비교하고, 해시가 알려 주는 것과 보장하지 않는 것을 알아봅니다.
deleted's avatar
Oct 28, 2026
파일 이름은 같은데, 진짜 같은 파일일까?

친구가 일정.txt를 보내고 잠시 뒤 같은 이름의 파일을 한 번 더 보냈다고 해봅시다. “이거 수정본이야?”라고 묻고 싶은데, 이름만 보면 구분이 안 됩니다.

같은 스파이더맨 복장을 한 두 인물이 서로를 손가락으로 가리키는 원본 애니메이션 장면.
Spider-Man / Tenor

둘 다 같은 이름표를 달고 있으면, 이름표만 봐서는 누가 누군지 모르죠. 파일도 이름이 같다는 것과 내용이 같다는 것은 별개입니다.

이름은 그대로, 숫자 하나만 바꿔 보면

아래는 이름도 크기도 같은 두 개의 작은 텍스트 파일을 가정한 예시입니다. A는 3시, B는 4시입니다. 눈으로는 숫자 하나만 다릅니다.

가상 파일 · 미리 계산한 SHA-256

A · 일정.txt

회의는 3시

UTF-8 · 14바이트51dc58ffc3951f9babb421700fc095824d05d3932b7a472aeeaf985e0729e69e
B · 일정.txt

회의는 4시

UTF-8 · 14바이트19441659987709183aa96cc2fd641232461900abe19a31c9c8a95df3567eee05

해시가 다릅니다.

두 고정 문장만 브라우저 안에서 계산합니다. 실제 파일을 읽거나 업로드하지 않습니다. 줄바꿈·BOM 없는 UTF-8을 사용하며, 64자리 해시 전체를 표시했습니다. 버튼은 Web Crypto를 지원하는 보안 연결 환경에서 작동합니다.

B를 ‘같은 내용으로’ 바꾸면 두 해시가 같아집니다. 다시 한 글자를 다르게 하면 결과도 달라집니다. 파일명과 크기만 봤을 때는 없던 차이가 드러납니다.

내용에서 계산한 비교용 값, 해시

파일의 내용 데이터를 정해진 계산법에 넣어 얻는 값이 해시입니다. 여기서는 SHA-256이라는 계산법을 썼습니다. 길이가 다른 데이터를 넣어도 결과 길이는 정해져 있고, 같은 바이트를 같은 계산법에 넣으면 같은 결과가 나옵니다.[1]

위 예시의 해시는 파일 이름을 계산에 넣지 않았습니다. 내용 바이트는 그대로 두고 이름만 바꾸는 경우라면 결과도 그대로입니다. 반대로 파일을 열어 다시 저장하면서 내부 정보가 달라졌다면 내용 바이트를 그대로 둔 경우가 아닐 수 있습니다.

더 오피스의 팸이 카메라를 보며 They are the same picture라고 말하는 원본 장면.
The Office / Tenor

“같은 그림인데요.” 위에서 B를 A와 같은 문장으로 돌렸을 때도 그렇습니다. 이름이 같아서가 아니라, 실제로 같은 내용 바이트를 넣었기 때문에 같은 값이 나왔습니다.

다운로드가 원본과 같은지 확인할 때도

배포자가 파일과 함께 SHA-256 값을 제공하면, 받은 파일을 같은 방식으로 계산해 비교할 수 있습니다. 전달 중 내용이 바뀌었는지 확인하는 데 쓰는 겁니다.[2]

같은 알고리즘으로 계산했는데 값이 다르면 내용 바이트가 다릅니다. 다만 해시 값만으로 어느 부분이 바뀌었는지, 누가 왜 바꿨는지까지 알 수는 없습니다.

같은 해시라고 해서 수학적으로 모든 파일의 동일성을 절대 보장하는 것도 아닙니다. 서로 다른 입력에서 같은 결과가 나오는 경우를 충돌이라고 합니다. SHA-256은 그런 쌍을 찾기 어렵도록 설계된 해시이지만, ‘같은 값이면 어떤 경우에도 같은 파일’이라고 확대하면 안 됩니다.[3]

또 해시는 파일을 숨겼다가 되돌리는 암호화가 아니며, 악성 파일이 아니라는 인증서도 아닙니다. 비교 대상 값 역시 믿을 수 있는 배포처에서 확인해야 합니다.

오늘은 이름표 다음으로, 내용을 보기

  • 파일 이름이나 크기가 같다는 이유만으로 같은 내용이라고 단정하지 않습니다.
  • 제공된 해시와 비교할 때는 SHA-256처럼 계산법도 같은지 확인합니다.
  • 해시 비교는 내용 확인의 한 도구입니다. 파일의 출처와 안전성 판단까지 맡기지는 않습니다.

파일 이름에 ‘진짜최종’을 한 번 더 붙여도 내용이 증명되지는 않습니다. 이름표가 헷갈릴 때는, 안에 든 것을 기준으로 비교해야 합니다.

[1] MDN — SubtleCrypto.digest() · NIST — Hash Functions

[2] NIST — Secure Hash Standard

[3] NIST — Collision · Cryptographic hash function

친구와 일정 파일은 가상 상황입니다. 원본 장면은 구별과 비교의 상황을 빗댄 것이며 실제 파일 검사 화면은 아닙니다.

Share article