SHA-256 지문으로 편집된 사진 찾아내기

쉽게 풀어 쓴 SHA-256: 일치가 증명하는 것, 불일치의 의미, WhatsApp이나 Messenger로 보낸 사진이 일치하지 않는 이유, 파일 비교 방법.

이미지 파일이 처음 기록된 뒤로 바뀌었는지 알아내는 가장 믿을 만한 방법은 두 파일의 SHA-256 지문을 비교하는 거예요. 일치하면 바이트 하나까지 똑같고, 불일치하면 파일이 바뀐 거예요. 하지만 “바뀜”이 “조작”과 같지는 않아요. WhatsApp이나 Messenger로 사진을 보내기만 해도 일치가 깨져요. 이 글은 SHA-256을 쉽게 설명하고, 무엇을 증명하고 무엇을 증명하지 못하는지, 실제로 통하는 작업 흐름을 알려 드려요.

참고: 이 글은 일반적인 정보이며 법률 자문이 아니에요. 특정 사건에서 증거를 어떻게 평가할지는 관할 기관이 판단해요.

SHA-256을 쉽게 말하면

SHA-256을 파일의 지문을 만드는 기계라고 생각하세요. 3MB 사진이든 2GB 동영상이든 어떤 파일을 넣어도 9f2c1a…처럼 시작하는 64자의 고정된 문자열을 돌려줘요. 이 알고리즘은 미국 NIST 표준 FIPS 180-4에 정의돼 있고, 은행부터 소프트웨어 다운로드까지 어디서나 쓰여요.

중요한 성질은 세 가지예요.

  1. 같은 파일, 같은 지문. 몇 번을, 어떤 컴퓨터에서 계산하든 같은 문자열이 나와요.
  2. 아주 작은 변화, 완전히 다른 결과. 픽셀 하나를 바꾸거나 메타데이터 한 줄을 지우면 새 지문은 옛 지문과 전혀 닮지 않아요. “거의 일치”는 없어요.
  3. 일방향. 지문으로 사진을 다시 만들 수 없고, 현실적으로 아무도 같은 지문을 가진 다른 파일을 일부러 만들 수 없어요.

SHA-256 다이어그램: 원본 파일의 지문은 업로드 때 기록되고, 문서로 보낸 같은 파일은 같은 해시가 나오지만, 채팅 앱으로 다시 보낸 사본은 일치하지 않음

즉 사진이 도착했을 때 64자만 저장해 두면, 이미지 자체를 보관하거나 다시 보내지 않아도 나중에 어떤 파일이 정확히 그 사진인지 확인할 수 있어요.

일치가 증명하는 것, 불일치가 알려 주는 것

결과 증명하는 것 증명하지 못하는 것
일치 가진 파일이 지문이 저장된 파일과 바이트 단위로 똑같음 장면이 진짜라는 것, 촬영 전에 연출하지 않았다는 것
불일치 파일이 원본과 어떤 식으로든 다름 누군가 일부러 내용을 바꿨다는 것

사람들이 실수하는 건 두 번째 행이에요. 파일은 여러 무해한 이유로 원본과 달라져요.

  • 채팅 앱은 이미지를 다시 압축해요. WhatsApp, Messenger를 비롯한 많은 앱이 “사진”으로 보낸 사진을 줄이고 다시 압축해요.
  • 소셜 네트워크는 게시할 때 다시 압축하고 메타데이터를 지워요.
  • 파일을 보내는 대신 스크린샷을 보낸 경우.
  • 갤러리 앱에서 조금이라도 회전, 자르기, 밝기 조정을 한 경우.
  • HEIC를 JPEG로 바꾸거나 뷰어에서 “다른 이름으로 저장”하는 등 형식 변환.

그래서 불일치를 보면 “가짜인가?“가 아니라 “이 파일이 어떤 경로를 거쳤나?“를 물어야 해요.

WhatsApp이나 Messenger로 보낸 사진이 절대 일치하지 않는 이유

저장 공간과 데이터를 아끼려고 메신저 앱은 보통 JPEG 이미지를 다시 인코딩해요. 해상도를 낮추고, 더 강하게 압축하고, 메타데이터를 줄여요. 눈으로는 같은 사진이지만 안의 바이트는 완전히 달라서 SHA-256도 달라져요.

보낸 방법 대개 원본 파일 유지? SHA-256 비교
채팅 앱에서 “사진”으로 아니요, 재압축 거의 확실히 불일치
채팅 앱에서 “파일”이나 문서로 대개 예 대개 일치
이메일 첨부 대개 예 대개 일치
Google Drive나 OneDrive에서 받은 원본 예 일치
스크린샷 아니요 불일치

사진에 찍힌 QR 코드는 압축 후에도 대개 스캔되므로, 지문 비교가 실패해도 받는 사람은 촬영 시간과 지역을 확인할 수 있어요. QR 사진 인증을 참고하세요.

실용적인 비교 흐름

사진을 보내는 쪽이라면 (시공사, 기술자, 현장 직원)

  1. 일상적인 업데이트용으로 채팅에 사진을 빠르게 보내는 건 괜찮아요.
  2. 중요한 사진(검사, 인수인계, 보험 청구)은 파일, 이메일, 공유 폴더로 원본도 함께 보내세요.
  3. 원본을 보내기 전에 자르거나 회전하거나 편집하지 마세요.
  4. 받는 사람이 빨리 조회할 수 있도록 메시지에 SnapID 코드를 넣으세요.

누구나 인증 가능: 모든 사진에 SnapID 코드와 QR이 있고, 받는 사람은 계정 없이 스캔해 시간, 지역, 무결성 플래그를 보며 SHA-256으로 파일을 비교할 수 있음

사진을 받는 쪽이라면 (발주처, 고객, 관리자, 보험사)

  1. QR 코드를 스캔하거나 사진의 코드로 인증 페이지를 여세요.
  2. 촬영 시간, 지역, 무결성 플래그를 확인하세요.
  3. 내 파일과 비교를 클릭하고 받은 원본을 고르세요.
  4. 일치: 파일이 온전해요. 불일치: 압축하는 경로를 거쳤는지 확인하고 원본을 요청하세요.
  5. 압축하지 않는 경로로 보낸 원본도 일치하지 않으면 보낸 사람에게 물어보고 인증 페이지의 썸네일을 자세히 보세요.

SHA-256 직접 계산하기

자체 확인이나 기록 보관용이라면 기본 도구로 충분해요.

  • Windows (명령 프롬프트): certutil -hashfile photo.jpg SHA256
  • macOS (터미널): shasum -a 256 photo.jpg
  • Linux: sha256sum photo.jpg

출력을 보낸 사람이 준 문자열과 비교하세요. 한 글자라도 다르면 서로 다른 파일이에요.

SnapID Mark가 SHA-256을 쓰는 방식

SnapID Mark 사진이 업로드되면 서버는 원본과 스탬프 이미지 모두의 SHA-256 지문을 저장해요. 공개 인증 페이지는 신뢰할 수 있는 촬영 시간, 반올림한 지역, 무결성 플래그와 함께 지문을 보여 줘요. “내 파일과 비교” 버튼은 받는 사람의 브라우저 안에서 SHA-256을 계산하므로 사진은 업로드되지 않고, 저장된 값과 대조돼요. 받는 사람이 성급하게 결론 내리지 않도록 페이지에 채팅 앱 재압축 사례도 설명돼 있어요.

SnapID 코드의 공개 인증 페이지: 유효한 SnapID, 촬영 날짜와 시간, 지도 링크가 있는 약 1km 단위로 반올림된 지역, 워크스페이스, 계정, 작업 항목

합치면 세 겹이 돼요. 신뢰할 수 있는 시간은 언제인지 말해 주고(신뢰할 수 있는 시간 vs 휴대폰 시간 참고), SnapID 코드와 QR은 독립된 기록으로 이어지며, SHA-256은 파일이 아직 온전한지 알려 줘요. 자세한 내용은 보안에서 보거나 인증 데모를 써 보세요.

이것은 기술적인 확인 도구이지 전자서명이나 공인 타임스탬프가 아니라는 점을 기억하세요. 그 측면은 베트남에서 타임스탬프 사진을 증거로 쓰기에서 더 깊이 다뤄요.

받는 사람이 직접 무결성을 확인할 수 있는 사진을 보내야 한다면 SnapID Mark를 다운로드해 원본과 채팅으로 보낸 사본을 비교해 보세요.

FAQ

SHA-256 지문으로 사진 내용을 알 수 있나요?

아니요. 64자로 이미지를 다시 만들 수 없으므로 지문을 공개해도 사진이 드러나지 않아요.

채팅 앱으로 보낸 사진이 일치하지 않아요. 가짜인가요?

아니요. 채팅 앱은 “사진”으로 보낸 이미지를 다시 압축해서, 똑같아 보여도 파일이 바뀌어요. 파일이나 이메일로 보낸 원본을 요청해 그것과 비교하세요.

인증 페이지에서 비교하면 내 사진이 업로드되나요?

아니요. 브라우저가 기기에서 지문을 계산하고, 이미지 파일은 기기를 떠나지 않아요.

일치하면 사진이 확실히 진짜인가요?

일치는 파일이 업로드 때 저장된 파일과 똑같다는 것만 증명해요. 장면이 연출되지 않았다는 건 증명하지 못해요. 시간, 지역, 무결성 플래그도 함께 보세요.

사진에서 내보낸 PDF로 비교할 수 있나요?

PDF 안의 이미지는 다른 파일이므로 비교에 쓰지 마세요. 원본 JPEG로 비교하세요.