본문 바로가기
디지털 파일 검증 연구소 디지털 파일 검증 연구소

PNG 파일 구조 분석|시그니처·IHDR·IDAT·IEND 청크 확인 방법

디지털 파일 검증 연구소 읽는 시간 약 30분

PNG(Portable Network Graphics)는 웹사이트 이미지, 스크린샷, 아이콘, 그래픽 자료 등에 널리 사용되는 이미지 파일 형식이다.

PNG는 무손실 압축을 지원하며 투명도 정보도 저장할 수 있다. 그러나 PNG 파일은 단순히 이미지 픽셀을 압축한 데이터만으로 구성되지 않는다.

파일의 시작을 식별하는 시그니처, 이미지의 크기와 색상 정보를 저장하는 IHDR 청크, 실제 이미지 데이터를 포함하는 IDAT 청크, 데이터의 끝을 알리는 IEND 청크 등이 일정한 규칙에 따라 연결된다.

또한 각 청크에는 CRC-32 검사값이 포함되어 데이터 손상 여부를 확인하는 데 활용된다.

이번 글에서는 PNG 파일 구조 분석을 중심으로 PNG의 내부 레코드 구성, 청크 구조, 이미지 메타데이터, CRC 검증 원리를 살펴본다.

Windows PowerShell을 이용해 실제 PNG 파일의 시그니처와 IHDR 정보를 확인하고, 청크 목록을 읽어 구조적 이상 여부를 점검하는 방법도 설명한다.

1. PNG 파일 구조 분석이 필요한 이유

PNG 파일은 대부분의 이미지 뷰어에서 별도 설정 없이 열 수 있다.

하지만 이미지가 정상적으로 표시되지 않거나, 파일이 손상되었다는 메시지가 나타나면 단순히 확장자를 확인하는 것만으로 원인을 파악하기 어렵다.

다음과 같은 상황에서 PNG 파일의 내부 구조 분석이 도움이 된다.

  • PNG 이미지가 열리지 않는 경우
  • 이미지의 일부가 깨져 보이는 경우
  • 다운로드 또는 파일 전송 후 손상이 의심되는 경우
  • 확장자는 PNG지만 실제 형식이 다른지 확인하려는 경우
  • 이미지의 너비와 높이를 헤더에서 직접 확인하려는 경우
  • PNG 파일에 포함된 메타데이터의 종류를 파악하려는 경우
  • CRC 오류와 SHA-256 해시 불일치의 차이를 분석하려는 경우

PNG 파일의 구조를 이해하면 파일 형식 자체에 문제가 있는지, 이미지 데이터가 손상되었는지, 특정 이미지 프로그램의 호환성 문제인지 구분하는 데 도움이 된다.

다만 구조 분석만으로 이미지의 출처나 안전성을 보장할 수는 없다.

2. PNG 파일의 전체 구조

PNG 파일은 고정된 8바이트 시그니처와 여러 개의 청크(Chunk)로 구성된다.

PNG 기본 구조

PNG File
│
├── PNG Signature (8 bytes)
│
├── IHDR Chunk
│   ├── Length
│   ├── Type
│   ├── Image Header Data
│   └── CRC
│
├── Optional Chunks
│   ├── PLTE
│   ├── tRNS
│   ├── gAMA
│   └── ...
│
├── IDAT Chunk
│   └── Compressed Image Data
│
├── Additional IDAT Chunks
│   └── (필요한 경우)
│
├── Optional Chunks
│
└── IEND Chunk

위 구조는 PNG 파일을 이해하기 위한 개념도다.

PNG에는 필수 청크와 선택 청크가 존재한다. 선택 청크의 종류와 배치 순서는 PNG 규격에 따른 제약을 받는다.

주요 청크의 역할

청크주요 역할필수 여부
IHDR이미지 크기와 색상 형식 정보필수
PLTE색상 팔레트 정보색상 유형에 따라 필수 또는 선택
IDAT압축된 이미지 데이터필수
IENDPNG 데이터 스트림의 종료필수
tRNS특정 색상 유형의 투명도 정보선택
gAMA감마 관련 정보선택
iCCPICC 색상 프로파일선택
tEXt텍스트 메타데이터선택
eXIfExif 메타데이터선택

PNG 규격에서는 IHDR가 첫 번째 청크여야 하며, IEND는 마지막 청크여야 한다.

IDAT 청크는 하나 이상 존재해야 한다.

3. PNG 파일 시그니처와 Magic Number

PNG 파일의 시작에는 정확히 8바이트의 시그니처가 존재한다.

PNG 시그니처

89 50 4E 47 0D 0A 1A 0A

이 값은 PNG 형식을 식별하는 대표적인 Magic Number다.

바이트별 의미

바이트의미
89일반적인 텍스트 데이터와 구분하는 데 도움
50 4E 47ASCII 문자 PNG
0D 0ACR·LF 줄바꿈 관련 바이트
1A과거 텍스트 전송 환경의 제어 문자
0ALF 줄바꿈 바이트

이 시그니처는 파일이 PNG 형식의 데이터 스트림으로 시작하는지 판단하는 중요한 단서다.

그러나 시그니처가 일치한다고 해서 파일 전체가 정상적인 PNG라는 의미는 아니다.

헤더 이후의 청크 구조와 데이터도 함께 확인해야 한다.

4. PNG 청크(Chunk)의 기본 구조

PNG 파일을 구성하는 청크는 일정한 공통 구조를 가진다.

청크 구성

+--------------------+
| Length   (4 bytes) |
+--------------------+
| Type     (4 bytes) |
+--------------------+
| Data   (variable)  |
+--------------------+
| CRC      (4 bytes) |
+--------------------+

각 청크는 Length, Type, Data, CRC의 네 부분으로 구성된다.

필드별 의미

필드크기역할
Length4바이트Data 영역의 길이
Type4바이트청크의 종류
Data가변 길이청크별 실제 데이터
CRC4바이트Type과 Data의 오류 검출값

Length에는 청크 전체 크기가 아니라 Data 영역의 바이트 수만 기록된다.

따라서 청크 전체 크기는 다음과 같다.

전체 청크 크기 = Data 길이 + 12바이트

또한 PNG의 여러 4바이트 정수 필드는 상위 바이트가 먼저 저장되는 빅엔디언(Big-endian) 방식으로 표현된다.

이는 Windows 환경에서 이진 데이터를 직접 읽을 때 주의해야 할 특징이다.

5. IHDR 청크의 구조와 역할

IHDR는 PNG 파일에서 가장 먼저 등장하는 청크다.

이미지의 기본적인 속성을 정의한다.

IHDR 청크의 주요 정보

필드크기
Width4바이트
Height4바이트
Bit Depth1바이트
Color Type1바이트
Compression Method1바이트
Filter Method1바이트
Interlace Method1바이트

IHDR의 Data 길이는 항상 13바이트다.

Width와 Height

이미지의 가로 및 세로 픽셀 수를 나타낸다.

예를 들어 너비가 1920이고 높이가 1080이면 이미지 크기는 1920×1080픽셀이다.

Bit Depth

색상 샘플 하나를 표현하는 데 사용되는 비트 수를 나타낸다.

가능한 값은 Color Type에 따라 달라진다.

Color Type

이미지가 회색조인지, RGB인지, 알파 채널을 포함하는지 등을 구분한다.

Compression Method

PNG 표준의 압축 방식 식별값이다.

현재 표준 PNG에서 사용하는 값은 0이다.

Filter Method

압축 전 이미지 데이터에 적용되는 필터링 방식의 식별값이다.

표준 PNG에서는 0을 사용한다.

Interlace Method

이미지 데이터가 비인터레이스 방식인지 Adam7 인터레이스 방식인지 나타낸다.

값 0은 비인터레이스, 값 1은 Adam7을 의미한다.

6. PNG Color Type과 Bit Depth

PNG는 다양한 색상 표현 방식을 지원한다.

대표적인 Color Type

Color Type의미
0Grayscale
2Truecolor(RGB)
3Indexed-color
4Grayscale + Alpha
6Truecolor(RGBA)

Color Type에 따라 허용되는 Bit Depth가 다르다.

색상 유형별 Bit Depth

Color Type허용 Bit Depth
01, 2, 4, 8, 16
28, 16
31, 2, 4, 8
48, 16
68, 16

예를 들어 일반적인 RGBA PNG 이미지는 Color Type 6을 사용할 수 있다.

이 경우 색상 샘플의 Bit Depth는 8 또는 16이다.

IHDR의 값이 규격에서 허용하지 않는 조합으로 기록되어 있다면 PNG 데이터에 구조적 문제가 있을 가능성이 있다.

7. IDAT 청크와 이미지 데이터 저장 방식

IDAT는 PNG의 실제 이미지 데이터를 포함하는 청크다.

PNG는 이미지 데이터를 필터링한 뒤 DEFLATE 기반 압축을 적용한다.

IDAT의 특징

  • 하나 이상의 IDAT 청크가 존재한다.
  • 여러 IDAT 청크가 있으면 서로 연속해서 배치되어야 한다.
  • 여러 IDAT의 Data 영역을 순서대로 연결해 하나의 압축 데이터 스트림으로 해석한다.
  • IDAT 데이터만 단순히 텍스트로 읽어서는 원본 픽셀 정보를 이해하기 어렵다.

개념적 처리 흐름

Image Pixels
      |
      v
Scanline Filtering
      |
      v
Compression
      |
      v
IDAT Data

압축을 해제한 뒤에는 필터링된 스캔라인을 복원해야 실제 이미지 픽셀을 재구성할 수 있다.

따라서 IDAT 청크의 존재 여부만으로 이미지가 정상적으로 복원된다고 판단할 수는 없다.

8. PNG 필터링 방식과 압축 원리

PNG는 이미지 데이터를 압축하기 전에 필터링을 적용한다.

필터링은 인접한 픽셀 또는 이전 행의 데이터와의 관계를 이용해 압축에 유리한 형태로 데이터를 변환하는 과정이다.

PNG의 기본 필터 유형

필터 값이름
0None
1Sub
2Up
3Average
4Paeth

각 스캔라인에는 사용된 필터 유형을 나타내는 바이트가 포함된다.

필터링 이후 데이터는 압축되어 IDAT에 저장된다.

필터링과 압축의 차이

필터링은 이미지 데이터를 압축하기 쉬운 형태로 변환하는 과정이다.

압축은 변환된 데이터의 저장 크기를 줄이는 과정이다.

두 과정은 서로 다른 역할을 수행한다.

PNG가 무손실 이미지 형식이라는 것은 정상적인 디코딩을 통해 원래의 이미지 샘플을 복원할 수 있다는 의미다.

9. IEND 청크와 PNG 종료 구조

IEND는 PNG 데이터 스트림의 마지막 청크다.

IEND 청크의 특징

  • Type은 IEND다.
  • Data 길이는 0바이트다.
  • CRC 필드가 존재한다.
  • PNG 데이터 스트림의 종료를 나타낸다.

IEND의 대표적인 바이트 구조

00 00 00 00
49 45 4E 44
AE 42 60 82

위 12바이트는 길이가 0인 표준 IEND 청크의 전체 구조다.

49 45 4E 44는 ASCII 문자 IEND를 나타낸다.

AE 42 60 82는 IEND 청크의 Type 필드에 대한 CRC 값이다.

종료 구조를 확인하는 이유

IEND가 누락되거나 청크 순서가 잘못되면 PNG 규격을 만족하지 못한다.

또한 IEND 뒤에 추가 데이터가 있는 파일도 표준 PNG 데이터 스트림의 구조를 벗어난다.

일부 이미지 프로그램은 이러한 비정상 구조를 허용할 수 있지만, 프로그램에서 이미지가 열린다는 사실만으로 파일이 규격을 완전히 준수한다고 판단해서는 안 된다.

10. PNG CRC-32 검증 원리

PNG의 각 청크에는 CRC(Cyclic Redundancy Code) 필드가 포함된다.

CRC는 데이터의 우발적인 변경이나 손상을 탐지하기 위한 검사값이다.

PNG CRC의 계산 범위

PNG 청크의 CRC-32는 다음 두 영역을 대상으로 계산한다.

Chunk Type + Chunk Data

반면 Length 필드는 CRC 계산 대상에 포함되지 않는다.

CRC 계산 개념

Length
  |
  |  CRC 계산에서 제외
  v
+----------------+
| Chunk Type     | ─┐
+----------------+  │
| Chunk Data     | ─┤ CRC-32 계산
+----------------+  │
| Stored CRC     | <┘ 결과 비교
+----------------+

CRC-32가 일치하지 않으면 청크 데이터나 타입 정보가 변경되었을 가능성이 있다.

다만 CRC-32는 암호학적 해시 함수가 아니다.

따라서 CRC가 일치하더라도 의도적인 변조가 없었다고 증명할 수는 없다.

11. PNG 메타데이터 청크의 종류

PNG는 이미지 데이터 외에도 다양한 부가 정보를 저장할 수 있다.

주요 메타데이터 청크

청크역할
tEXt비압축 텍스트 정보
zTXt압축된 텍스트 정보
iTXt국제화된 텍스트 정보
gAMA감마 정보
cHRM색도 정보
sRGB표준 RGB 색 공간 정보
iCCPICC 색상 프로파일
pHYs픽셀 밀도 관련 정보
tIME이미지의 마지막 수정 시각 정보
eXIfExif 메타데이터

메타데이터 분석 시 주의사항

PNG 파일에 특정 메타데이터 청크가 존재한다고 해서 해당 정보가 반드시 정확하다고 보장할 수는 없다.

메타데이터는 이미지 편집 프로그램에 의해 추가되거나 변경될 수 있다.

또한 메타데이터가 존재하지 않는다는 이유만으로 이미지가 손상되었다고 판단해서도 안 된다.

PNG 파일의 구조 검증과 메타데이터의 신뢰성 평가는 구분해야 한다.

12. Windows PowerShell로 PNG 시그니처 확인하기

이제 실제 PNG 파일의 시작 바이트를 확인해 보자.

이번 실습은 파일을 수정하지 않는 읽기 전용 방식이다.

① 실습 파일 준비

다음 경로에 PNG 파일이 있다고 가정한다.

C:\FileTest\sample.png

실제 실행할 때는 본인의 파일 경로로 변경한다.

② PowerShell 코드

$path = "C:\FileTest\sample.png"

$stream = [System.IO.File]::OpenRead($path)

try {
    $buffer = New-Object byte[] 8
    $count = $stream.Read($buffer, 0, 8)

    if ($count -eq 8) {
        [BitConverter]::ToString($buffer)
    }
    else {
        Write-Output "File is shorter than 8 bytes."
    }
}
finally {
    $stream.Dispose()
}

③ 정상적인 PNG 시그니처 예시

89-50-4E-47-0D-0A-1A-0A

이 값이 나타나면 PNG 시그니처와 일치한다.

하지만 이 결과만으로 모든 PNG 청크가 정상인지 확인한 것은 아니다.

④ 확인 가능한 범위

이 코드는 파일의 시작 8바이트를 읽어 출력한다.

IHDR의 이미지 크기, IDAT의 압축 데이터, 청크별 CRC 일치 여부는 확인하지 않는다.

13. PowerShell로 PNG IHDR 정보 확인하기

이번에는 PNG 파일의 IHDR 청크에서 이미지의 가로·세로 크기와 색상 정보를 확인해 보자.

PNG의 다중 바이트 정수는 빅엔디언으로 저장되므로 바이트 순서를 고려해 해석해야 한다.

① PowerShell 코드

$path = "C:\FileTest\sample.png"

$bytes = [System.IO.File]::ReadAllBytes($path)

$signature = [byte[]](
    137, 80, 78, 71, 13, 10, 26, 10
)

if ($bytes.Length -lt 33) {
    throw "PNG header is too short."
}

for ($i = 0; $i -lt 8; $i++) {
    if ($bytes[$i] -ne $signature[$i]) {
        throw "Invalid PNG signature."
    }
}

$type = [System.Text.Encoding]::ASCII.GetString(
    $bytes, 12, 4
)

if ($type -ne "IHDR") {
    throw "IHDR chunk was not found."
}

if ([BitConverter]::ToString($bytes, 8, 4) -ne
    "00-00-00-0D") {
    throw "Invalid IHDR length."
}

function Read-BigEndianUInt32 {
    param(
        [byte[]]$Data,
        [int]$Offset
    )

    return (
        ([uint64]$Data[$Offset] -shl 24) -bor
        ([uint64]$Data[$Offset + 1] -shl 16) -bor
        ([uint64]$Data[$Offset + 2] -shl 8) -bor
        [uint64]$Data[$Offset + 3]
    )
}

$width  = Read-BigEndianUInt32 $bytes 16
$height = Read-BigEndianUInt32 $bytes 20

[PSCustomObject]@{
    Width       = $width
    Height      = $height
    BitDepth    = $bytes[24]
    ColorType   = $bytes[25]
    Compression = $bytes[26]
    Filter      = $bytes[27]
    Interlace   = $bytes[28]
}

② 출력 결과 예시

Width       : 1920
Height      : 1080
BitDepth    : 8
ColorType   : 6
Compression : 0
Filter      : 0
Interlace   : 0

위 결과는 예시이며 실제 PNG 파일의 값은 다를 수 있다.

③ 결과 해석

Width와 Height는 이미지의 가로 및 세로 크기다.

BitDepth는 색상 샘플의 비트 깊이를 나타낸다.

ColorType 6은 알파 채널을 포함하는 Truecolor 형식이다.

Compression 0과 Filter 0은 표준 PNG의 해당 방식 식별값이다.

Interlace 0은 비인터레이스 이미지라는 의미다.

④ 실습의 한계

이 코드는 IHDR의 일부 필드를 읽는 예시다.

전체 청크의 CRC를 계산하지 않으며, 이미지 데이터의 정상적인 압축 해제 가능 여부도 확인하지 않는다.

또한 전체 파일을 메모리에 읽기 때문에 매우 큰 파일이나 신뢰할 수 없는 파일을 분석할 때는 별도의 크기 제한과 예외 처리가 필요하다.

14. PowerShell로 PNG 청크 목록 확인하기

이번에는 PNG 파일에 어떤 청크가 포함되어 있는지 확인해 보자.

각 청크의 길이와 타입을 순서대로 읽는 방식이다.

① PowerShell 코드

$path = "C:\FileTest\sample.png"

$stream = [System.IO.File]::OpenRead($path)

try {
    $signature = New-Object byte[] 8

    if ($stream.Read($signature, 0, 8) -ne 8) {
        throw "File is too short."
    }

    $expected = [byte[]](
        137, 80, 78, 71, 13, 10, 26, 10
    )


for ($i = 0; $i -lt 8; $i++) {
    if ($signature[$i] -ne $expected[$i]) {
        throw "Invalid PNG signature."
    }
}
  

    while ($stream.Position -lt $stream.Length) {
        $header = New-Object byte[] 8

        if ($stream.Read($header, 0, 8) -ne 8) {
            throw "Incomplete chunk header."
        }

        $length = (
            ([uint64]$header[0] -shl 24) -bor
            ([uint64]$header[1] -shl 16) -bor
            ([uint64]$header[2] -shl 8) -bor
            [uint64]$header[3]
        )

        $type = [System.Text.Encoding]::ASCII.GetString(
            $header, 4, 4
        )

        if ($length -gt 2147483647) {
            throw "Invalid chunk length."
        }

        if ($length + 4 -gt
            $stream.Length - $stream.Position) {
            throw "Chunk exceeds file boundary."
        }

        [PSCustomObject]@{
            Type   = $type
            Length = $length
        }

        $stream.Seek(
            [long]$length + 4,
            [System.IO.SeekOrigin]::Current
        ) | Out-Null

        if ($type -eq "IEND") {
            break
        }
    }
}
finally {
    $stream.Dispose()
}

② 출력 예시

Type   Length
----   ------
IHDR       13
sRGB        1
IDAT    24576
IDAT    13200
IEND        0

위 결과는 구조를 설명하기 위한 예시다.

실제 PNG 파일의 청크 종류와 길이는 다를 수 있다.

③ 이 코드로 확인할 수 있는 것

  • PNG 시그니처 일치 여부
  • 청크 타입의 순서
  • 청크 Data 길이
  • 청크가 파일 경계를 벗어나는지 여부
  • IEND 청크의 등장 여부

④ 주의사항

이 코드는 청크 헤더와 길이를 순서대로 읽는 구조 탐색 예시다.

CRC-32를 실제로 계산하거나 비교하지 않는다.

또한 모든 청크 배치 규칙을 검증하는 완전한 PNG 파서는 아니다.

따라서 청크 목록이 출력된다는 이유만으로 PNG 파일이 완전히 정상이라고 판단해서는 안 된다.

15. PNG 파일 손상 시 확인할 주요 항목

PNG 파일이 열리지 않거나 이미지가 비정상적으로 표시된다면 다음 항목을 확인할 수 있다.

점검 항목확인 목적
PNG SignaturePNG 형식의 시작 바이트 확인
IHDR이미지 크기 및 색상 정보 확인
Chunk Length청크 길이와 파일 경계 확인
Chunk Type청크 유형과 배치 순서 확인
IDAT압축 이미지 데이터 존재 여부 확인
CRC-32청크의 우발적 데이터 손상 탐지
IENDPNG 데이터 스트림의 종료 확인
파일 전체 해시기준 파일과 바이트 동일성 비교

파일이 손상되었을 가능성이 있는 경우

PNG 시그니처가 올바르지 않거나, IHDR의 길이가 규격과 다르거나, 청크 길이가 실제 파일 범위를 벗어나면 구조적인 이상이 있을 가능성이 있다.

또한 IDAT의 압축 데이터가 손상되면 이미지가 일부만 표시되거나 디코딩에 실패할 수 있다.

반면 이미지가 정상적으로 표시되지 않는 원인이 항상 파일 손상인 것은 아니다.

이미지 프로그램의 지원 범위, 색상 관리, 메타데이터 처리 방식 등의 차이도 고려해야 한다.

16. PNG 구조 검증과 SHA-256 무결성 검증의 차이

PNG 파일 구조 분석과 SHA-256 검증은 서로 다른 목적을 가진다.

PNG 구조 검증

파일의 시그니처와 청크 구성이 PNG 규격에 맞는지 확인한다.

CRC-32 검증

각 청크의 Type과 Data를 대상으로 계산한 CRC-32가 저장된 값과 일치하는지 확인한다.

SHA-256 검증

PNG 파일 전체의 바이트를 대상으로 SHA-256 해시값을 계산하고 신뢰할 수 있는 기준값과 비교한다.

검증 방식 비교

구분PNG 구조 분석CRC-32SHA-256
확인 대상파일 형식과 청크 구성청크 Type·Data파일 전체 바이트
주요 목적구조 확인우발적 손상 탐지원본 동일성 비교
암호학적 검증아님아님가능
기준값PNG 규격청크에 저장된 CRC신뢰할 수 있는 외부 해시값

PNG 파일이 규격을 준수하더라도 원본 이미지와 동일하다는 보장은 없다.

또한 SHA-256 해시값이 일치하더라도 기준 파일 자체가 신뢰할 수 없는 경우에는 안전성을 보장할 수 없다.

17. PNG 분석 시 보안과 개인정보 주의사항

PNG 파일은 일반적인 이미지 형식이지만 분석 과정에서 몇 가지 주의사항이 있다.

① 출처가 불분명한 파일

PNG 확장자를 가진 파일이라고 해서 반드시 안전한 이미지인 것은 아니다.

파일 형식 위장이나 비정상적인 메타데이터 등이 존재할 수 있다.

② 비정상적인 이미지 크기

IHDR에 기록된 이미지 크기가 지나치게 크면 이미지 디코딩 과정에서 과도한 메모리가 필요할 수 있다.

따라서 신뢰할 수 없는 파일을 처리하는 프로그램은 이미지 크기와 리소스 사용량을 제한할 필요가 있다.

③ 메타데이터의 개인정보

PNG 파일에 텍스트 정보, Exif 정보 등이 포함될 수 있다.

이러한 정보에는 작성 도구나 작업 환경과 관련된 내용이 기록될 수 있으므로 공개 전 확인하는 것이 좋다.

④ 원본 파일 보존

파일 손상 분석이나 무결성 검증을 수행할 때는 원본 파일을 보존하고 복사본을 사용하는 것이 좋다.

파일을 다시 저장하면 압축 데이터나 메타데이터가 변경될 수 있으며 SHA-256 해시값도 달라질 수 있다.

18. 자주 묻는 질문

Q1. PNG 파일의 Magic Number는 무엇인가요?

PNG 파일의 시작 8바이트는 89 50 4E 47 0D 0A 1A 0A다. 이 값은 PNG 데이터 스트림을 식별하는 데 사용된다.

Q2. IHDR 청크는 어떤 정보를 저장하나요?

이미지의 너비, 높이, 비트 깊이, 색상 유형, 압축 방식, 필터 방식, 인터레이스 방식 등을 저장한다.

Q3. IDAT 청크가 여러 개 있어도 정상인가요?

정상이다. PNG에서는 여러 IDAT 청크를 사용할 수 있다. 다만 여러 IDAT 청크는 연속해서 배치되어야 한다.

Q4. IEND 청크가 없으면 어떻게 되나요?

PNG 데이터 스트림이 규격상 올바르게 종료되지 않은 상태다. 파일이 잘렸거나 구조에 문제가 있을 가능성이 있다.

Q5. PNG의 CRC-32가 일치하면 파일이 안전한가요?

아니다. CRC-32는 우발적인 데이터 오류를 탐지하는 검사값이며 악성코드나 의도적인 변조 여부를 증명하지 않는다.

Q6. PNG 파일에 EXIF 정보가 들어갈 수 있나요?

가능하다. PNG는 eXIf 청크를 통해 Exif 메타데이터를 저장할 수 있다.

Q7. PNG 이미지가 열리면 파일 구조가 정상인가요?

반드시 그렇지는 않다. 이미지 프로그램에 따라 일부 구조 오류를 허용하거나 복구해 표시할 수 있다.

마무리

PNG 파일은 고정된 8바이트 시그니처와 여러 개의 청크로 구성된 이미지 형식이다.

IHDR는 이미지의 기본 속성을 정의하고, IDAT는 압축된 이미지 데이터를 저장하며, IEND는 데이터 스트림의 종료를 나타낸다.

각 청크에는 길이와 타입, 데이터, CRC-32가 포함되어 구조 분석과 우발적인 오류 검출에 활용된다.

그러나 PNG 파일 구조 분석은 파일의 형식과 내부 구성을 확인하는 작업이지, 이미지의 출처나 안전성을 보장하는 과정은 아니다.

따라서 PNG의 시그니처와 청크 구조, CRC-32, SHA-256 검증은 각각의 목적을 구분해서 활용해야 한다.


핵심 내용 3줄 요약

  • PNG 파일은 8바이트 시그니처와 IHDR·IDAT·IEND 등의 청크로 구성된다.
  • CRC-32는 청크의 Type과 Data에 대한 우발적 오류 검출값이다.
  • PNG 구조가 정상이라고 해서 원본 동일성이나 보안상 안전성이 보장되는 것은 아니다.

공식 및 기술 참고자료

  1. W3C — Portable Network Graphics (PNG) Specification, Third Edition
    https://www.w3.org/TR/png/
  2. W3C — PNG Datastream Structure and Chunk Layout
    https://www.w3.org/TR/png/#5Datastream-structure
  3. W3C — PNG Chunk Specifications
    https://www.w3.org/TR/png/#11Chunk-specifications
  4. Microsoft Learn — File.OpenRead Method
    https://learn.microsoft.com/dotnet/api/system.io.file.openread
  5. Microsoft Learn — BitConverter Class
    https://learn.microsoft.com/dotnet/api/system.bitconverter

※ 본문의 PowerShell 코드는 PNG 파일의 일부 구조를 읽기 전용으로 확인하는 학습용 예시다. 코드 실행 결과만으로 전체 청크의 CRC 일치, 압축 데이터 정상 여부 또는 파일의 안전성을 확정할 수 없다.

디지털 파일 검증 연구소

디지털 파일 검증 연구소
디지털 파일 검증 연구소는 파일 형식, 확장자, 무결성 확인, 데이터 손상 예방 및 디지털 자료 관리 방법을 다루는 정보 사이트입니다. 파일 오류의 원인과 점검 절차를 이해하기 쉽게 정리하고, 공식 문서와 검증 가능한 자료를 바탕으로 실생활에 도움이 되는 해결 방법을 안내합니다.
함께 보면 좋은 글

댓글 0

첫 댓글을 남겨보세요.