본문 바로가기
잡학IT

이미지 파일의 시그니처(Magic Number) 정리

by 프우마 2025. 5. 13.

이미지 파일의 시그니처(Magic Number) 정리

컴퓨터에서 파일의 확장자만 보고 파일 형식을 판단하는 경우가 많습니다. 그러나 실제로 파일 내부에는 해당 파일의 형식을 구분할 수 있는 고유한 정보가 숨겨져 있습니다. 이 정보를 시그니처(Signature) 또는 매직 넘버(Magic Number)라고 부릅니다.

이번 글에서는 PNG, JPG, GIF 등 우리가 자주 사용하는 이미지 포맷들의 시그니처 값을 정리해보았습니다.

목차

  1. 시그니처(Magic Number)란?
  2. 대표 이미지 포맷 시그니처
  3. 시그니처 확인 방법 (Python 예제)
  4. 정리 및 마무리

1. 시그니처(Magic Number)란?

시그니처는 파일 맨 앞에 위치한 고정된 바이트 값으로, 운영체제나 분석 도구들이 해당 파일이 어떤 포맷인지 빠르게 식별할 수 있도록 도와줍니다. 예를 들어, 이미지 파일처럼 겉으로 보기엔 비슷해 보이지만 내부 구조가 완전히 다른 포맷을 구분하는 데 매우 중요한 역할을 합니다.

2. 대표 이미지 포맷 시그니처

다음은 대표적인 이미지 포맷의 시그니처(hex 코드)입니다. 이 값들은 모두 파일의 시작 부분에 위치하며, 확장자와 무관하게 포맷을 식별할 수 있습니다.

포맷 시그니처 (Hex) ASCII 설명
PNG 89 50 4E 47 0D 0A 1A 0A ‰PNG.... PNG 이미지의 고유한 시작 시그니처
JPG / JPEG FF D8 FF ÿØÿ JPEG 이미지 시작을 나타냄
GIF87a 47 49 46 38 37 61 GIF87a 초기 GIF 포맷 시그니처
GIF89a 47 49 46 38 39 61 GIF89a GIF 확장 버전 포맷
BMP 42 4D BM Windows Bitmap 이미지
TIFF (Intel) 49 49 2A 00 II* 리틀 엔디안 방식 TIFF
TIFF (Motorola) 4D 4D 00 2A MM* 빅 엔디안 방식 TIFF
WEBP 52 49 46 46 ... WEBP RIFF...WEBP RIFF 구조 기반 WebP 포맷
ICO 00 00 01 00 .... 아이콘 파일
PSD 38 42 50 53 8BPS Adobe Photoshop 파일

3. 시그니처 확인 방법 (Python 예제)

파일의 시그니처를 직접 확인하고 싶을 때는 Python을 활용할 수 있습니다. 아래는 간단한 코드 예제입니다.


def get_file_signature(filepath, num_bytes=8):
    with open(filepath, 'rb') as f:
        return f.read(num_bytes).hex().upper()

signature = get_file_signature("example.png")
print(signature)  # 예: '89504E470D0A1A0A'

위 코드에서 파일의 앞부분을 바이너리로 읽고, 16진수 형태로 출력해 줍니다. 포맷에 따라 몇 바이트를 읽을지는 다를 수 있지만, 대부분의 이미지 시그니처는 8바이트 이내에 존재합니다.

4. 정리 및 마무리

시그니처 정보는 보안 분석, 디지털 포렌식, 파일 무결성 검사 등 다양한 분야에서 활용됩니다. 특히 확장자가 위조된 파일이나, 악성 이미지 파일을 판별하는 데 중요한 기준이 되죠.

단순히 파일 확장자를 믿는 대신, 진짜 파일 형식을 정확하게 확인하려면 이러한 시그니처 정보를 참고하는 것이 좋습니다. 다음에는 이미지 외에도 PDF, EXE, ZIP 등의 시그니처도 정리해볼까 합니다.

읽어주셔서 감사합니다. 🙌