ZIP(파일 형식)

ZIP (file format)
ZIP 파일 형식
파일 이름 확장명.zip .zipx
인터넷 미디어 유형application/zip[1]
동일 유형 식별자(UTI)com.com.com.com.zip-properties
매직넘버
  • 없는
  • PK\x03\x04
  • PK\x05\x06(iii)
  • PK\x07\x08(스팬)
개발자PKWARE, Inc.
초기 릴리즈1989년 2월 14일; 33년(1989-02-14)
최신 릴리즈
6.3.9
2020년 7월 15일; 20개월(2020-07-15)
형식 유형XPI
까지 확장
표준PKWARE의 앱 노트
ISO/IEC 21320-1:2015(ZIP 파일 형식 6.3.3의 하위 집합)
오픈 포맷?

ZIP무손실 데이터 압축을 지원하는 아카이브 파일 형식이다.ZIP 파일은 압축되었을 수 있는 하나 이상의 파일 또는 디렉토리를 포함할 수 있다.ZIP 파일 형식은 여러 압축 알고리즘을 허용하지만 DEFLATE가 가장 일반적이다.이 형식은 원래 1989년에 만들어졌으며 PKWARE, Inc.PKZ에서 처음 구현되었다.Thom Henderson의 이전 ARC 압축 포맷을 대체하는 IP 유틸리티.[2]그 후 ZIP 형식은 PKZ 이외의 많은 소프트웨어 유틸리티에 의해 빠르게 지원됨IP. Microsoft는 Windows 98용 "Windows Plus!" 추가 기능을 통해 1998년부터 Microsoft Windows 버전에 내장된 ZIP 지원("압축된 폴더"라는 이름 아래)을 포함시켜 왔다.Windows ME에서는 2000년 현재 기본 지원이 추가되었으며, Apple은 Mac OS X 10.3(BOMArchiveHelper, now Archive Utility) 이상에 내장 ZIP 지원을 포함했다.대부분의 무료 운영 체제는 윈도우나 맥 OS X와 비슷한 방식으로 ZIP를 지원했다.

ZIP 파일은 일반적으로 파일 확장명을 사용한다. .zip 또는 .ZIPMIME 미디어 유형application/zip.[1] ZIP는 많은 프로그램에서 보통 다른 이름으로 기본 파일 형식으로 사용된다.사용자 인터페이스를 통해 파일 시스템을 탐색할 때 ZIP 파일을 나타내는 그래픽 아이콘지퍼가 눈에 띄게 특징인 문서 또는 다른 물체로 나타나는 경우가 많다.

역사

.ZIP 파일 형식은 PKWAREPhil Katz와 Infinity Design Concepts의 Gary Conway가 설계했다.이 포맷은 SEA(Systems Enhancement Associates)가 PKARC라는 이름의 PKWARE를 상대로 PKWARE를 상대로 SEA의 ARC 아카이빙 시스템의 파생상품이라며 소송을 제기하면서 만들어졌다.[3]지퍼(zip)라는 이름은 캣츠의 친구 로버트 마호니가 제안했다.[4]그들은 그들의 제품이 ARC와 그 시대의 다른 압축 형식보다 더 빠를 것이라는 것을 암시하기를 원했다.[4]가장 먼저 알려진 .Z 버전IP 파일 형식 지정은 APPNOTE 파일 아래에 PKZIP 0.9 패키지의 일부로 처음 게시되었다.1989년 TXT.[citation needed]APPNOTE 내의 zip 파일 형식 배포.TXT, zip 파일 형식과의 호환성은 1990년대에 공공 인터넷 상에서 널리 확산되었다.[5]

PKWARE와 Infinity Design Concepts는 1989년 2월 14일 공동 보도자료를 내고 .Z를 발표했다.공용 도메인에 대한 IP 파일 형식.[6][7][8][9][10]

버전 이력

.ZIP 파일 형식 규격에는 PKZ의 버전 번호와 반드시 일치하지 않는 고유한 버전 번호가 있음특히 PKZ를 사용하는 IP 도구IP 6 이상.PKWARE는 여러 경우에 PKZ를 허용하는 예비 기능을 추가했다.고급 기능을 사용하여 아카이브를 추출하는 IP 제품이지만 PKZ이러한 아카이브를 생성하는 IP 제품은 다음 주요 릴리스까지 사용할 수 없다.다른 회사나 조직은 PKWARE 규격을 자신의 속도로 지원한다.

.ZIP 파일 형식 사양은 공식적으로 "APPNOTE - .Z"로 명명됨「IP 파일 포맷 사양」이며, 1990년대 후반부터 PKWARE.com 웹사이트에 게재되고 있다.[11]그 명세서의 몇 가지 버전은 발표되지 않았다.BZ와 같은 일부 기능의 사양IP2 압축, 강력한 암호화 사양 등은 PKWARE에서 작성 후 몇 년 후에 공표되었다.온라인 사양 URL은 PKWARE 웹사이트에서 여러 번 변경되었다.

다양한 버전의 PKWARE 규격의 주요 진전에 대한 요약:

  • 2.0: (1993)[1] 파일 항목은 DEFLATE로 압축할 수 있으며 기존 PKWARE 암호화(ZipCrypto)를 사용할 수 있다.
  • 2.1: (1996) 감압64 압축
  • 4.5: (2001)[12] 문서화된 64비트 zip 형식.
  • 4.6: (2001) BZIP2 압축(APPNOTE 5.2가 발행될 때까지 온라인에서 게시되지 않음)
  • 5.0: (2002) SES: DES, Triple DES, RC2, RC4 암호화 지원(APPNOTE 5.2가 발행될 때까지 온라인으로 발행되지 않음)
  • 5.2: (2003) [13][14]SES에 대한 AES 암호화 지원(APPNOTH 5.1에서 정의됨) 및 WinZip의 AES("AE-x"); SES 암호화에 지원되는 RC2-64의 수정 버전.
  • 6.1: (2004)[15] 문서화된 인증서 저장소.
  • 6.2.0: (2004)[16] 문서화된 중앙 디렉토리 암호화.
  • 6.3.0: (2006)[17] 문서화된 유니코드(UTF-8) 파일 이름 저장.지원되는 압축 알고리즘(LZMA, PPMd+), 암호화 알고리즘(Blowfish, Twofish) 및 해시의 확장된 목록.
  • 6.3.1: (2007) [18]SHA-256/384/512에 대한 표준 해시 값 수정.
  • 6.3.2: (2007)[19] 문서화된 압축 방법 97 (WavPack)
  • 6.3.3: (2012)[20] JTC 1/SC 34 N 1621에서 지시하는 JTC 1 Reference Ancription Report(RER)와 같은 방법을 사용하여 다른 표준에서 PKWARE 애플리케이션 노트를 쉽게 참조하기 위한 문서 형식 변경.
  • 6.3.4: (2014)[21] PKWARE, Inc. 사무실 주소 업데이트
  • 6.3.5: (2018)[22] 문서화된 압축 방법 16, 96 및 99, DOS 타임스탬프 epoch 및 정밀도, 키 및 암호 해독을 위한 추가 필드, 오자와 설명.
  • 6.3.6: (2019)[23] 인쇄 오류 수정.
  • 6.3.7: (2020)[24] Zstandard 압축 방법 ID 20 추가.
  • 6.3.8: (2020)[25] Zstandard 압축 방법 ID를 20에서 93으로 이동시켜 전자를 무효화한다.문서화된 방법 ID 94 및 95(MP3XZ 각각).
  • 6.3.9: (2020)[26] 데이터 스트림 정렬 설명의 오타 수정.

WinZip은 버전 12.1로 시작하여 DEFLATE보다 최신 압축 방법을 사용하는 ZIP 파일에 확장명 .zipx를 사용한다. 특히 방법 BZip, LZMA, PPMd, Jpeg, Wavpack을 사용한다.마지막 2개는 "최상의 방법" 압축을 선택할 때 적절한 파일 형식에 적용된다.[27][28]

표준화

2010년 4월, ISO/IEC JTC 1은 ZIP와 호환되는 ISO/IEC 국제 표준 형식을 만들기 위한 프로젝트의 개시 여부를 결정하기 위해 투표를 개시하였다.[29]문서 패키징이라는 제목의 제안 프로젝트는 OpenDocument, Office Open XML 및 EPUB를 포함한 다수의 기존 표준과 함께 사용하기에 적합한 ZIP 호환의 '최소 압축 보관 형식'을 구상했다.

2015년에는 ISO/IEC 21320-1 "문서 컨테이너 파일 - Part 1: Core"가 발표되었는데, 이 파일에는 "문서 컨테이너 파일이 Zip 파일을 준수하고 있다"고 명시되어 있다.ZIP 파일 형식의 주요 제한사항은 다음과 같다.[30]

  • ZIP 아카이브의 파일은 압축하지 않거나 "압축" 압축(즉, 압축 방법에는 "0" - 저장됨 또는 "8" - 감압 값이 포함될 수 있음)만 저장할 수 있다.
  • 암호화 기능은 금지되어 있다.
  • (SES에서) 디지털 서명 기능은 금지된다.
  • (PKPatchMaker에서) "패치된 데이터" 기능은 금지된다.
  • 아카이브는 여러 볼륨에 걸쳐 있거나 분할되지 않을 수 있다.

디자인

.ZIP 파일은 여러 파일을 저장하는 아카이브 파일이다.ZIP는 파일을 압축하지 않고 단순히 파일을 저장하는 것뿐만 아니라 여러 가지 방법을 사용하여 포함된 파일을 압축할 수 있도록 한다.각 파일은 별도로 저장되므로 동일한 아카이브에 있는 서로 다른 파일을 다른 방법으로 압축할 수 있다.ZIP 아카이브의 파일은 개별적으로 압축되기 때문에 전체 아카이브에 압축이나 압축 해제를 적용하지 않고도 압축을 풀거나 새 파일을 추가할 수 있다.이는 이러한 랜덤 액세스 처리가 쉽사리 가능하지 않은 압축 tar 파일의 형식과 대비된다.

디렉토리는 ZIP 파일의 끝에 위치한다.이것은 ZIP에 어떤 파일이 있는지 식별하고 그 파일이 어디에 있는지 식별한다.이를 통해 ZIP 리더는 전체 ZIP 보관 파일을 읽지 않고도 파일 목록을 로드할 수 있다.ZIP 아카이브에는 ZIP 아카이브와 관련이 없는 추가 데이터도 포함될 수 있다.이를 통해 프로그램 코드를 ZIP 아카이브로 미리 보내고 파일을 실행 가능한 파일로 표시하여 ZIP 아카이브를 자체 추출 아카이브(포함된 데이터를 압축 해제하는 애플리케이션)로 만들 수 있다.카탈로그를 마지막에 저장하면 GIF 이미지 파일과 같은 악의 없는 파일에 압축된 파일을 첨부하여 숨길 수도 있다.

.ZIP 형식은 32비트 CRC 알고리즘을 사용하며 데이터 손실에 대한 보호를 강화하기 위해 아카이브의 디렉토리 구조의 복사본 2개를 포함한다.

구조

ZIP-64 내부 레이아웃

ZIP 파일은 새로운 파일을 쉽게 첨부할 수 있도록 보관 구조의 끝에 위치한 중앙 디렉토리 레코드의 으로 올바르게 식별된다.중앙 디렉토리 레코드의 끝부분이 비어 있지 않은 보관을 나타내는 경우, 아카이브 내의 각 파일 또는 디렉토리의 이름을 해당 항목에 대한 다른 메타데이터와 함께 중앙 디렉토리 항목에 지정하고, 실제 항목 데이터를 가리키는 오프셋을 ZIP 파일에 지정해야 한다.파일 목록을 보기 위해 전체 아카이브를 읽을 필요가 없기 때문에 아카이브의 파일 목록을 비교적 빠르게 수행할 수 있다.ZIP 파일 내의 항목도 이중화를 위해 로컬 파일 헤더에 이 정보를 포함한다.ZIP 파일을 추가할 수 있기 때문에 파일 끝의 중앙 디렉토리에 지정된 파일만 유효하다.중앙 디렉토리가 일부 파일이 삭제되고 다른 파일이 업데이트되었음을 선언할 수 있으므로 로컬 파일 헤더에 대한 ZIP 파일 검색은 유효하지 않다(손상된 보관 파일의 경우 제외).

예를 들어, 우리는 A, B, C 파일을 포함하는 ZIP 파일로 시작할 수 있다.그런 다음 B 파일을 삭제하고 C를 업데이트한다.이는 원본 ZIP 파일의 끝에 새 파일 C를 추가하고 A 파일과 새 파일 C만 나열하는 새 중앙 디렉토리를 추가하기만 하면 이루어질 수 있다.ZIP가 처음 설계되었을 때는 플로피 디스크로 파일을 전송하는 것이 일반적이었지만 디스크에 쓰는 것은 시간이 많이 걸렸다.만약 당신이 큰 zip 파일을 가지고 있고, 아마도 여러 개의 디스크에 걸쳐 있고, 모든 파일을 읽고 다시 쓰는 대신에 단지 몇 개의 파일만 업데이트하면 된다면, 이전 중앙 디렉토리를 읽고, 새로운 파일을 추가한 다음 업데이트된 중앙 디렉토리를 추가하는 것이 훨씬 더 빠를 것이다.

중앙 디렉토리에 있는 파일 항목의 순서는 보관에 있는 파일 항목의 순서와 일치할 필요가 없다.

ZIP 아카이브에 저장된 각 항목은 설명, 파일 크기 및 파일 이름과 같은 파일에 대한 정보를 가진 로컬 파일 헤더에 의해 소개되며, 그 다음에 옵션인 "추가" 데이터 필드, 그리고 그 다음에 가능한 압축되고 암호화된 파일 데이터 필드가 나타난다.ZIP 형식의 확장성을 위해서는 "추가" 데이터 필드가 핵심이다."Extra" 필드는 ZIP64 형식, WinZip 호환 AES 암호화, 파일 속성 및 고해상도 NTFS 또는 Unix 파일 타임스탬프를 지원하는 데 악용된다.기타 확장은 "추가" 필드를 통해 가능하다.ZIP 도구는 규격에서 인식하지 못하는 추가 필드를 무시하도록 요구된다.

ZIP 형식은 파일의 다양한 구조를 나타내기 위해 특정한 4바이트 "서명"을 사용한다.각 파일 항목은 특정 서명으로 표시된다.중앙 디렉토리 레코드의 끝은 그것의 특정한 서명으로 표시되며, 중앙 디렉토리의 각 항목은 4바이트의 중앙 파일 헤더 서명으로 시작한다.

ZIP 사양에는 BOF나 EOF 마커가 없다.일반적으로 ZIP 파일의 첫 번째 것은 ZIP 항목으로, 로컬 파일 헤더 서명으로 쉽게 식별할 수 있다.그러나 ZIP 규격에서 필요하지 않기 때문에, 특히 자체 추출 아카이브는 실행 가능한 파일 헤더로 시작할 것이기 때문에 반드시 이러한 경우는 아니다.

ZIP 보관 파일을 올바르게 읽는 도구는 중앙 디렉토리 레코드 서명의 끝을 검사한 다음, 필요에 따라 다른, 표시된 중앙 디렉토리 레코드를 검사해야 한다.(이 절에서 앞서 언급한 바와 같이) 중앙 디렉토리만 파일 청크가 시작되는 위치를 지정하고 삭제되지 않았으므로, ZIP 파일 상단에서 항목을 검색해서는 안 된다.검색은 잘못된 긍정으로 이어질 수 있다. 포맷으로 인해 다른 데이터가 청크 사이에 있거나 파일 데이터 스트림이 이러한 서명을 포함하는 것을 금지하지 않기 때문이다.그러나 손상된 ZIP 아카이브에서 데이터를 복구하려는 도구는 아카이브에서 로컬 파일 헤더 서명을 검색하게 될 가능성이 높다. 이는 파일 청크 이후에 파일 청크의 압축 크기가 저장되어 순차적 처리가 더 어려워질 수 있기 때문에 더욱 어려워진다.

대부분의 서명은 little-endian 순서로 저장된 0x4b50의 짧은 정수로 끝난다.ASCII 문자열로 보면 발명가 필 캣츠의 이니셜인 "PK"라고 쓰여 있다.따라서, ZIP 파일을 텍스트 편집기에서 볼 때 파일의 처음 2바이트는 대개 "PK"이다. (DOS, OS/2 및 Windows 자동 추출 ZIP는 ZIP보다 먼저 EXE를 가지고 있으므로 "MZ"로 시작하십시오. 다른 운영 체제에 대한 자동 추출 ZIP도 마찬가지로 해당 플랫폼에서 아카이브 컨텐츠를 추출하기 위한 실행 코드가 선행될 수 있다.)

.ZIP 규격은 또한 여러 파일 시스템 파일에 아카이브가 분산되는 것을 지원한다.원래 여러 플로피 디스크에 걸쳐 대용량 ZIP 파일을 저장하기 위해 고안된 이 기능은 현재 전자 메일 또는 다른 전송 또는 이동식 미디어에 ZIP 보관 파일을 보내는 데 사용된다.

DOS의 FAT 파일 시스템은 타임스탬프 해상도가 2초밖에 되지 않는다; ZIP 파일 레코드는 이것을 모방한다.그 결과, ZIP 아카이브에 있는 파일의 내장 타임스탬프 해상도는 2초밖에 되지 않지만, 추가 필드는 더 정확한 타임스탬프를 저장하는 데 사용될 수 있다.ZIP 형식은 시간대에 대한 개념이 없기 때문에 타임스탬프는 어떤 시간대에 만들어진 것인지 알 수 있는 경우에만 의미가 있다.

2007년 9월, PKWARE는 UTF-8을 이용한 파일명 저장 기능을 제공하는 ZIP 규격의 개정판을 발표하여, 최종적으로 유니코드 호환성을 ZIP에 추가하였다.[31]

파일 헤더

헤더에 있는 모든 멀티바이트 값은 리틀 엔디안 바이트 순서로 저장된다.모든 길이 필드는 길이를 바이트 단위로 계산한다.

로컬 파일 헤더

로컬 파일 헤더
오프셋 바이트 설명[31]
0 4 로컬 파일 헤더 시그니처 = 0x04034b50(PKmbl 또는 "PK\3\4")
4 2 추출에 필요한 버전(최소)
6 2 범용 비트 플래그
8 2 압축 방법: 예: 없음 = 0, DEFLATE = 8(또는 "\0x08\0x00")
10 2 파일마지막수정시간
12 2 파일마지막수정일자
14 4 압축되지 않은 데이터의 CRC-32
18 4 압축 크기(또는 ZIP64의 경우 0xffffffffff)
22 4 압축되지 않은 크기(또는 ZIP64의 경우 0xffffffffff)
26 2 파일 이름 길이(n)
28 2 여분의 필드 길이(m)
30 n 파일명
30n 이상 m 엑스트라 필드

추가 필드에는 OS별 속성 등 다양한 선택적 데이터가 포함되어 있다.각각 최소 16비트 서명과 16비트 길이를 가진 기록으로 나뉜다.예를 들어 ZIP64 로컬 파일 추가 필드 레코드는 서명 0x0001과 길이가 16바이트(또는 그 이상)이므로 두 개의 64비트 값(압축 및 압축되지 않은 크기)이 따를 수 있다.또 다른 일반적인 로컬 파일 확장자는 32비트 UTC UNIX 타임스탬프를 포함하는 0x5455(또는 "UT")이다.

이것은 즉시 압축된 데이터로 이어진다.

데이터 설명자

범용 플래그 필드의 오프셋 3(0x08)에 비트가 설정되어 있으면 헤더가 작성될 때 CRC-32와 파일 크기를 알 수 없다.아카이브가 Zip64 형식인 경우 압축 및 압축되지 않은 크기 필드의 길이는 4바이트가 아니라 8바이트가 된다(섹션 4.3.9.2 참조[32]).로컬 헤더(또는 Zip64 포맷의 아카이브의 경우 Zip64 확장 정보 추가 필드)의 등가 필드는 0으로 채워지며, CRC-32와 크기는 압축 데이터 직후 12바이트 구조(선택적으로 4바이트 서명이 선행됨)로 추가된다.

데이터 설명자
오프셋 바이트 설명[31]
0 0이나 4 옵션 데이터 설명자 서명 = 0x08074b50
0이나 4 4 압축되지 않은 데이터의 CRC-32
4인가 8시 4인가 8시 압축 크기
8이나 12나 20 4인가 8시 압축되지 않은 크기

중앙 디렉토리 파일 헤더

중앙 디렉토리 항목은 로컬 헤더의 확장된 형식이다.

중앙 디렉토리 파일 헤더
오프셋 바이트 설명[31]
0 4 중앙 디렉토리 파일 헤더 서명 = 0x02014b50
4 2 에 의해 만들어진 버전
6 2 추출에 필요한 버전(최소)
8 2 범용 비트 플래그
10 2 압축법
12 2 파일마지막수정시간
14 2 파일마지막수정일자
16 4 압축되지 않은 데이터의 CRC-32
20 4 압축 크기(또는 ZIP64의 경우 0xffffffffff)
24 4 압축되지 않은 크기(또는 ZIP64의 경우 0xffffffffff)
28 2 파일 이름 길이(n)
30 2 여분의 필드 길이(m)
32 2 파일 주석 길이(k)
34 2 파일이 시작되는 디스크 번호
36 2 내부 파일 속성
38 4 외부 파일 속성
42 4 로컬 파일 헤더의 상대 오프셋.파일이 발생한 첫 번째 디스크의 시작과 로컬 파일 헤더의 시작 사이의 바이트 수입니다.이것은 중앙 디렉토리를 읽는 소프트웨어가 ZIP 파일 안에서 파일의 위치를 찾을 수 있게 해준다.
46 n 파일명
46n 이상 m 엑스트라 필드
46+n+m k 파일 설명

중앙 디렉토리 레코드 끝(EOCD)

중앙 디렉토리 항목이 모두 입력된 후 ZIP 파일의 끝을 표시하는 중앙 디렉토리(EOCD) 레코드의 끝:

중앙 디렉토리 레코드 끝(EOCD)
오프셋 바이트 설명[31]
0 4 중앙 디렉토리 서명의 끝 = 0x06054b50
4 2 이 디스크 수(또는 ZIP64의 경우 0xffff)
6 2 중앙 디렉토리가 시작되는 디스크(또는 ZIP64의 경우 0xff)
8 2 이 디스크의 중앙 디렉토리 레코드 수(또는 ZIP64의 경우 0xffff)
10 2 중앙 디렉토리 레코드의 총 수(또는 ZIP64의 경우 0xff)
12 4 중앙 디렉토리(바이트) 크기(또는 ZIP64의 경우 0xffffffffffff)
16 4 아카이브 시작에 상대적인 중앙 디렉토리 시작 간격띄우기(또는 ZIP64의 경우 0xffffffff)
20 2 주석 길이(n)
22 n 댓글

이 순서는 ZIP 파일을 한 번에 만들 수 있도록 허용하지만, 앞에서 설명한 것처럼 다중 파트(예: "복수의 플로피 디스크") 아카이브에서 파일을 쉽게 제거하기 위해 중앙 디렉토리도 파일 끝에 배치한다.

압축 방법

The .ZIP File Format Specification documents the following compression methods: Store (no compression), Shrink (LZW), Reduce (levels 1–4; LZ77 + probabilistic), Implode, Deflate, Deflate64, bzip2, LZMA, WavPack, PPMd, and a LZ77 variant provided by IBM z/OS CMPSC instruction.[33][22]가장 일반적으로 사용되는 압축 방법은 IETF에 설명된 DEFLATE이다. RFC1951.

언급되었지만 규격에 자세히 문서화되지 않은 다른 방법으로는 PKWARE DCL 임포드(구 IBM TERSE), 새로운 IBM TERSE, IBM LZ77 z Architecture(PFS) 및 JPEG 변종이 있다.「토큰」 방식은 제3자를 위해 유보해 두었지만, 지원은 전혀 추가되지 않았다.[22]

Implode라는 단어는 PKWARE에서 과용됨: DCL/TERSE Implode는 이전 PKZ와 구별됨디플레이트의 전신인 IP 임포데.DCL 임포드는 IBM이 보유하고 있는 개인주의적인 성격 때문에 부분적으로 문서화되지 않았지만, 그럼에도 불구하고 마크 애들러는 zlib와 나란히 "블라스트"라고 불리는 압축 해제기를 제공했다.[34]

암호화

ZIP는 일반적으로 ZipCrypto라고 알려진 간단한 비밀번호 기반 대칭 암호화 시스템을 지원한다.ZIP 사양에 기록되어 있으며, 심각한 결함이 있는 것으로 알려져 있다.특히, 그것은 알려진-일반 텍스트 공격에 취약하며, 경우에 따라 무작위 번호 생성기의 구현이 잘못되어 더 악화된다.[5]

새로운 압축암호화(예: AES) 방법을 포함한 새로운 기능이 버전 5.2 이후 ZIP 파일 형식 사양에 문서화되었다.WinZip이 개발한 AES 기반 개방형 표준(APPNOTE의 "AE-x")도 7-ZipXce에서 사용되지만 일부 벤더는 다른 형식을 사용한다.[35]PKWARE SecureZIP(SES, 독점)도 RC2, RC4, DES, Triple DES 암호화 방법, 디지털 인증서 기반 암호화 및 인증(X.509) 및 아카이브 헤더 암호화를 지원한다.그러나 특허권은 있다(§ Strong Encryption 논쟁 참조).[36]

파일 이름 암호화가 .Z에 도입됨아카이브의 중앙 디렉토리 부분에 저장된 메타데이터를 암호화하지만 로컬 헤더 섹션은 암호화되지 않은 상태로 남아 있는 IP 파일 형식 규격 6.2.컴플라이언스 보관자는 중앙 디렉토리 암호화를 사용할 때 로컬 헤더 데이터를 위조할 수 있다.규격 6.2 버전부터는 로컬 헤더 내의 압축 방법과 압축 크기 필드가 아직 마스킹되지 않았다.

ZIP64

오리지널 .ZIP 형식은 ZIP 아카이브의 항목 수가 65,535개(2-116)로 제한될 뿐 아니라, 다양한 것(파일 압축되지 않은 크기, 파일의 압축된 크기, 아카이브의 총 크기)에 대해 4GB32(2바이트) 제한이 있었다.사양 4.5 버전(특정 도구의 v4.5와 동일하지 않음)에서 PKWARE는 이러한 한계를 극복하기 위해 "ZIP64" 형식 확장을 도입하여 한계를 16EB(2바이트64)로 늘렸다.본질적으로 파일에 대해 "정상" 중앙 디렉토리 항목을 사용하고, 그 뒤에 선택적 "zip64" 디렉토리 항목이 나타나며, 필드가 더 크다.[37]

LOC(로컬 파일 헤더)와 CEN(중앙 디렉토리 항목)의 형식은 ZIP와 ZIP64가 동일하다.그러나 ZIP64는 압축기의 재량에 따라 그러한 기록에 추가될 수 있는 추가 필드를 지정하며, 이 필드의 목적은 고전적인 LOC 또는 CEN 레코드에 맞지 않는 값을 저장하는 것이다.실제 값이 ZIP64 추가 필드에 저장되었음을 알리기 위해 해당 LOC 또는 CEN 레코드에서 0xFFFF 또는 0xFFFFF로 설정한다.

Zip64 확장 정보 추가 필드
오프셋 바이트 설명[31]
0 2 헤더 ID 0x0001
2 2 여분의 필드 청크 크기(8, 16, 24 또는 28)
4 8 압축되지 않은 원래 파일 크기
12 8 압축 데이터의 크기
20 8 로컬 헤더 레코드의 오프셋
28 4 이 파일이 시작되는 디스크 수

반면 ZIP64용 EOCD의 형식은 일반 ZIP 버전과 약간 다르다.[31]

Zip64 중앙 디렉토리 레코드 끝(EOCD64)
오프셋 바이트 설명[31]
0 4 중앙 디렉토리 서명의 끝 = 0x06064b50
4 8 EOCD64에서 12를 뺀 크기
12 2 에 의해 만들어진 버전
14 2 추출에 필요한 버전(최소)
16 4 이 디스크 수
20 4 중앙 디렉토리가 시작되는 디스크
24 8 이 디스크의 중앙 디렉터리 레코드 수
32 8 중앙 디렉토리 레코드 총 수
40 8 중앙 디렉토리 크기(바이트)
48 8 보관 시작과 관련된 중앙 디렉토리 시작 간격띄우기
56 n 설명(EOCD64 크기까지)

그것은 또한 반드시 파일의 마지막 레코드일 필요는 없다.중앙 디렉토리 로케이터의 End of Central Directory Locator가 그 뒤를 따른다(끝에 추가 20바이트).

Windows XP의 파일 탐색기는 ZIP64를 지원하지 않지만 Windows Vista 이상의 탐색기는 ZIP64를 지원한다.[citation needed]마찬가지로 일부 확장 라이브러리는 DotNetZip, QuaZIP[38] 및 IO::Compress::Perl의 Zip.파이썬이 내장한 zip 파일은 2.5년부터 지원하고 3.4년부터 기본 제공된다.[39]OpenJDK의 내장 Java.util.zip은 버전 Java 7의 ZIP64를 지원한다.[40]안드로이드 자바 API는 안드로이드 6.0 이후 ZIP64를 지원한다.[41]Mac OS Sierra의 Archive Utility는 ZIP64를 지원하지 않으며 ZIP64가 필요할 때 손상된 아카이브를 생성할 수 있다.[42]그러나 Mac OS와 함께 제공되는 ditto 명령은 ZIP64 파일의 압축을 푼다.[43]보다[when?] 최신 버전의 Mac OS에는 Zip64: 실행 Zip -v를 확인하고 "ZIP64_Support"를 찾는 Info-zip의 zip 및 unzip 명령줄 도구가 함께 제공된다.

다른 파일 형식과의 조합

.ZIP 파일 형식은 중앙 디렉토리 뒤에 있는 파일의 끝 부분에 최대 65,535바이트(2-116)바이트의 데이터를 포함하는 설명을 허용한다.[31]또한 중앙 디렉토리는 시작과 관련하여 아카이브에 있는 각 파일의 오프셋을 지정하기 때문에, gzip과 같은 일부 도구는 오프셋 0에서 파일 엔트리로 시작하지 않는 아카이브 파일을 처리하지 않지만, 첫 번째 파일 엔트리는 0이 아닌 오프셋에서 시작할 수 있다.

이렇게 하면 ZIP 아카이브 데이터 이전과 이후에 모두 파일에서 임의 데이터를 발생시킬 수 있으며, 아카이브는 ZIP 애플리케이션에서 계속 읽을 수 있다.이것의 부작용은 다른 형식이 임의의 데이터를 끝, 시작 또는 중간에서 허용한다면, 작동하는 ZIP 아카이브와 다른 형식의 파일을 작성할 수 있다는 것이다.WinZip이 지원하는 양식의 SFX(자체 추출 아카이브)는 PKZ를 준수하는 실행 파일(.exe)이라는 점에서 이를 활용하십시오.IP AppNote.txt 사양. 준수 지퍼 도구 또는 라이브러리로 읽을 수 있다.

.Z의 이 속성ZIP의 변형인 JAR 형식IP 형식은 웹에 업로드된 GIF 이미지와 같이 해롭지 않아 보이는 파일 안에 악성 콘텐츠(해로운 Java 클래스 등)를 숨기기 위해 악용될 수 있다.소위 GIFAR의 착취는 페이스북과 같은 웹 어플리케이션에 대한 효과적인 공격으로 입증되었다.[44]

한계

.Z의 최소 크기IP 파일은 22바이트 입니다.이러한 빈 zip 파일은 EOCD(중앙 디렉토리 레코드 종료)만 포함한다.
[0x50,0x4B,0x05,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]

아카이브 파일과 그 안에 있는 개별 파일의 최대 크기는 표준 ZIP의 경우 4,294,967,295바이트(2-1바이트32 또는 4GB - 1바이트)이다.ZIP64의 경우, 최대 크기는 18,446,744,073,709,551,615바이트(2-1바이트64 또는 16EB에서 1바이트)이다.[45]

독점적 확장

엑스트라 필드

.ZIP 파일 형식은 파일 헤더 내에 추가 필드 기능을 포함하며, 이 기능은 기존 ZIP 규격에 의해 정의되지 않은 추가 데이터를 저장하는 데 사용할 수 있으며, 필드를 인식하지 못하는 준수 아카이브자가 안전하게 건너뛸 수 있도록 한다.헤더 ID 0~31은 PKWARE에서 사용하도록 예약되어 있다.나머지 ID는 제3자 벤더가 독점적으로 사용할 수 있다.

강력한 암호화 논란

2003년 WinZip 9.0 공개 베타 버전이 출시되었을 때 WinZip은 새로운 사양에 대한 설명서와 함께 다른 파일 형식을 사용한 자체 AES-256 암호화를 도입했다.[46]암호화 표준 자체는 독점적이지 않았지만 PKWARE는 APPNOTE를 업데이트하지 않았다.TXT는 2001년부터 PKZ에서 사용되어 온 강력한 암호화 규격(SES)을 포함한다.IP 버전 5.0 및 6.0.WinZip 기술 컨설턴트인 Kevin Kearney와 StuffIt 제품 매니저인 Mathew Cobvington은 PKWARE가 SES를 보류하고 있다고 비난했지만 PKZ.IP 최고 기술책임자 짐 피터슨은 인증서 기반 암호화가 여전히 불완전하다고 주장했다.

PKWare는 또 다른 논란의 여지가 있는 움직임으로 2003년 7월 16일 ZIP와 강력한 암호화를 결합하여 보안 파일을 만드는 방법을 설명하는 특허를 출원했다.[47]

결국 PKWARE와 WinZip은 서로의 제품을 지원하기로 합의했다.2004년 1월 21일 PKWARE는 WinZip 기반 AES 압축 포맷 지원을 발표했다.[48]이후 버전의 WinZip 베타에서는 SES 기반 ZIP 파일을 지원할 수 있었다.[49]PKWARE는 결국 .Z 버전 5.2를 출시했다.SES를 문서화한 일반 대중을 위한 IP 파일 형식 규격.Free Software 프로젝트 7-Zip은 또한 AES를 지원하지만 ZIP 파일에서는 SES를 지원하지 않는다(POSIX 포트 p7zip처럼).

WinZip에서 AES 암호화를 사용할 경우 압축 방법은 항상 99로 설정되며 실제 압축 방법은 AES 추가 데이터 필드에 저장된다.[50]반면, 강력한 암호화 규격은 중앙 디렉토리 암호화를 사용하여 메타데이터를 마스킹/암호화하지 않는 한 압축 방법을 로컬 헤더와 중앙 디렉토리의 기본 파일 헤더 세그먼트에 저장한다.

실행

수많은 .Z가 있다.IP 도구 및 여러 .Z 사용 가능다양한 프로그래밍 환경을 위한 IP 라이브러리; 사용된 라이센스는 독점 소프트웨어와 무료 소프트웨어를 포함한다.WinZip, WinRAR, Info-ZIP, 7-Zip, PeaZipB1 Free Archiver는 잘 알려져 있다.다양한 플랫폼에서 사용할 수 있는 IP 도구.이러한 도구 중 일부는 라이브러리 또는 프로그래밍 방식의 인터페이스를 가지고 있다.

오픈 소스 계약에 따라 라이센스가 부여된 일부 개발 라이브러리는 libzip, libarchiveInfo-ZIP이다.Java: Java 플랫폼의 경우 Standard Edition에는 표준 .Z를 처리하기 위한 "java.util.zip" 패키지가 포함되어 있다.IP 파일: Zip64File 라이브러리는 특별히 대용량 파일(4GB보다 큰 파일)을 지원하고 .Z를 처리함임의 액세스를 사용하는 IP 파일 및 Apache Ant 도구는 Apache 소프트웨어 라이센스에 따라 릴리스된 보다 완벽한 구현을 포함하고 있다.

.Z의 Info-ZIP 구현IP 형식은 사용자 및 그룹 ID와 같은 Unix 파일 시스템 기능에 대한 지원, 파일 권한, 심볼릭 링크에 대한 지원을 추가한다.Apache Ant 구현은 미리 정의된 Unix 권한으로 파일을 생성할 수 있는 정도까지 이를 알고 있다.Info-ZIP 구현은 또한 .Z에 내장된 오류 수정 기능을 사용하는 방법을 알고 있다.IP 압축 형식.일부 프로그램은 그렇지 않고 오류가 있는 파일에서 실패한다.

Info-ZIP Windows 도구는 NTFS 파일 시스템 권한도 지원하며, 파일을 추출할 때 NTFS 권한에서 Unix 권한으로 변환하거나 그 반대로 변환하려고 시도한다.이로 인해 실행 가능한 권한이 거부된 NTFS 볼륨에 .exe 파일이 생성될 수 있는 등 의도하지 않은 조합이 발생할 수 있다.

Microsoft Windows 버전에는 .Z에 대한 지원이 포함됨Windows 98용 Microsoft Plus! 팩이 출시된 이후 탐색기에서 IP 압축 기능.마이크로소프트는 이 기능을 "압축된 폴더"라고 부른다.모든 .Z는 아니다.IP 기능은 윈도우즈 압축 폴더 기능에 의해 지원된다.예를 들어 암호화는 해독할 수 있지만 Windows 10 Home Edition에서는 지원되지 않는다.[51]유니코드 입력 인코딩은 Windows 7(윈도우 7)까지 지원되지 않으며, 분할 및 스팬 아카이브는 압축 폴더 기능에 의해 읽기 또는 쓰기 가능하지 않으며, AES 암호화도 지원되지 않는다.[52]

Microsoft Office는 Microsoft Office 2007에서 기본 파일 형식이 된 Office Open XML .docx, .xlsx, .pptx 등의 파일에 zip 아카이브 형식을 2006년부터 사용하기 시작했다.

레거시

그 이름에는 "zip"을 사용하는 수많은 다른 표준과 형식이 있다.예를 들어, zip은 gzip과 구별되며, 후자는 IETF RFC 1952에 정의되어 있다.zip과 gzip 모두 압축을 위해 주로 DEFLAT 알고리즘을 사용한다.마찬가지로 ZLIB 형식(IETF RFC 1950)도 DEFLATE 압축 알고리즘을 사용하지만 오류 및 일관성 검사를 위해 다른 헤더를 지정한다.7-Zip, bzip2, rzip 등 네이티브 포맷이 다른 공통의 유사 이름 형식과 프로그램도 있다.

걱정

원시 DEFLATE 스트림의 이론적 최대 압축 계수는 약 1032 대 1이지만 [53]의도하지 않은 방법으로 ZIP 형식을 활용함으로써 수십억 대 1의 압축 비율을 가진 ZIP 아카이브(ZIP 아카이브)를 구축할 수 있다.지퍼 폭탄들은 압축을 푼 컴퓨터의 용량을 압도하면서 매우 큰 크기로 압축을 푼다.[54]

참고 항목

참조

  1. ^ a b c Registration of a new MIME Content-Type/Subtype - application/zip, IANA, 20 July 1993, retrieved 5 January 2012
  2. ^ "Phillip Katz, Computer Software Pioneer, 37". The New York Times'. 1 May 2000. Retrieved 14 June 2009.
  3. ^ Murray, Matt; Tannenbaum, Jeffrey A. (15 August 1997). "The Rise and Fall of a Software Star; Phil Katz Loved Code -- and Liquor". The Wall Street Journal (online ed.). Archived from the original on 4 March 2016. Alt URL 업데이트 2000-06-19.
  4. ^ a b "The BBS Documentary Library". www.bbsdocumentary.com. Retrieved 25 September 2020.
  5. ^ a b Stay, Michael. "ZIP Attacks with Reduced Known Plaintext" (PDF). Math.ucr.edu. Archived from the original (PDF) on 28 October 2017. Retrieved 9 September 2017.
  6. ^ Brian Livingston (8 September 2003), PKZip Must Open Up, retrieved 5 January 2012, The ZIP file format is given freely into the public domain and can be claimed neither legally nor morally by any individual, entity or company
  7. ^ Where Did Zip Files Come From Anyway?, Infinity Design Concepts, Inc., retrieved 5 January 2012
  8. ^ Press Release, 1989, retrieved 5 January 2012
  9. ^ Our Founder - Phil Katz, PKWARE, archived from the original on 1 October 2010, retrieved 5 January 2012
  10. ^ Gareth Horton; Rob Weir; Alex Brown (2 November 2010), sc34-wg1, retrieved 5 January 2012
  11. ^ .ZIP Application Note, retrieved 20 July 2012
  12. ^ File: APPNOTE.TXT - .ZIP File Format Specification Version: 4.5 Revised: 11/01/2001, 3 December 2001, archived from the original on 3 December 2001, retrieved 21 April 2012
  13. ^ APPNOTE.TXT - .ZIP File Format Specification, Version: 5.2 - Notification of Change, 16 July 2003, retrieved 5 January 2012
  14. ^ File: APPNOTE.TXT - .ZIP File Format Specification Version: 5.2 - Notification of Change – Revised: 06/02/2003, 2 July 2003, archived from the original on 2 July 2003, retrieved 21 April 2012
  15. ^ File: APPNOTE - .ZIP File Format Specification Version: 6.1.0 - Notification of Change – Revised: 01/20/2004, 19 August 2004, archived from the original on 19 August 2004, retrieved 21 April 2012
  16. ^ APPNOTE.TXT - .ZIP File Format Specification, Version: 6.2.0 - Notification of Change, 26 April 2004, retrieved 5 January 2012
  17. ^ APPNOTE.TXT - .ZIP File Format Specification, Version: 6.3.0, 29 September 2006, retrieved 5 January 2012
  18. ^ APPNOTE.TXT - .ZIP File Format Specification, Version: 6.3.1, 11 April 2007, retrieved 25 June 2018
  19. ^ APPNOTE.TXT - .ZIP File Format Specification Version: 6.3.2, 28 September 2007, retrieved 25 June 2018
  20. ^ APPNOTE.TXT - .ZIP File Format Specification Version: 6.3.3, 1 September 2012, retrieved 25 June 2018
  21. ^ APPNOTE.TXT - .ZIP File Format Specification Version: 6.3.4, 1 October 2014, retrieved 25 June 2018
  22. ^ a b c APPNOTE.TXT - .ZIP File Format Specification Version: 6.3.5, 20 December 2018, retrieved 3 January 2019
  23. ^ APPNOTE.TXT - .ZIP File Format Specification Version: 6.3.6, 26 April 2019, retrieved 3 January 2019
  24. ^ APPNOTE.TXT - .ZIP File Format Specification Version: 6.3.7, 1 June 2020, retrieved 6 June 2020
  25. ^ APPNOTE.TXT - .ZIP File Format Specification Version: 6.3.8, 15 June 2020, retrieved 7 July 2020
  26. ^ APPNOTE.TXT - .ZIP File Format Specification Version: 6.3.9, 15 July 2020, retrieved 8 August 2020
  27. ^ "Additional Compression Methods Specification". WinZip. Mansfield, CT: WinZip Computing, S.L. 19 May 2009. Retrieved 24 May 2009.
  28. ^ "What is a Zipx File?". Winzip: Knowledgebase. Mansfield, CT: WinZip Computing, S.L. 13 August 2010. Retrieved 17 August 2010.
  29. ^ "ISO/IEC JTC 1/SC 34 — Document Description and Processing Languages" (PDF). 12 April 2010. Archived from the original (PDF) on 12 May 2014. Retrieved 10 May 2014.
  30. ^ "ISO/IEC 21320-1:2015 Document Container File — Part 1: Core". ITTF. 2015.
  31. ^ a b c d e f g h i "File : APPNOTE.TXT - .ZIP File Format Specification : Version: 6.3.4" (TXT). Pkware.com. Retrieved 9 September 2017.
  32. ^ "File: APPNOTE.TXT - .ZIP File Format Specification". PKWARE Inc. Retrieved 21 February 2022.
  33. ^ Adler, Mark. "How are zlib, gzip and zip related? What do they have in common and how are they different?". Retrieved 27 November 2018.
  34. ^ "Frequently Asked Questions about zlib". zlib. The PKWare DCL uses a completely different compressed data format than does PKZIP and zlib. However, you can look in zlib's contrib/blast directory for a possible solution to your problem. (계속/계속)
  35. ^ "AES Encryption Information: Encryption Specification AE-1 and AE-2". Winzip.com. Retrieved 9 September 2017.
  36. ^ "APPNOTE - PKZIP/SecureZIP - PKWARE Support Site". Pkware.com. Retrieved 9 September 2017.
  37. ^ "File : APPNOTE.TXT - .ZIP File Format Specification : Version: 6.3.4" (TXT). Pkware.cachefly.net. Retrieved 9 September 2017.
  38. ^ "QuaZIP changes". 22 January 2014. Retrieved 25 January 2014.
  39. ^ "Python enhancement: Use allowZip64=True by default (3.4)". Retrieved 6 May 2014.
  40. ^ Shen, Xueming (17 April 2009). "ZIP64, The Format for > 4G Zipfile, Is Now Supported". Xueming Shen's Blog. Sun Microsystems. Retrieved 27 September 2010.
  41. ^ "Sign in - Google Accounts". code.google.com. Retrieved 9 September 2017.
  42. ^ "Error: invalid central directory file header signature when unzipping big files, zipped by mac os · Issue #69 · thejoshwolfe/yauzl". GitHub.
  43. ^ "Extract large zip file (50 GB) on Mac OS X". Retrieved 17 December 2018.
  44. ^ McMillan, Robert (August 2008). "A photo that can steal your online credentials". Infoworld.com. Retrieved 9 September 2017.
  45. ^ "ZipArchive: Zip64 Format: Crossing the Limits of File Sizes and Number of Files and Segments". Artpol-software.com. Retrieved 9 September 2017.
  46. ^ "WinZip – AES Encryption Information". Winzip.com. Retrieved 9 September 2017.
  47. ^ McMillan, Robert (25 July 2003). "PKWare seeks patent for .zip file format". InfoWorld.com. Archived from the original on 10 August 2003. Retrieved 16 June 2008.
  48. ^ "Software makers patch Zip tiff". News.com. Retrieved 9 September 2017.
  49. ^ John Leyden. "Zip file encryption compromise thrashed out". Theregister.co.uk. Retrieved 9 September 2017.
  50. ^ "AES Encryption Information: Encryption Specification AE-1 and AE-2". Winzip.com. Retrieved 9 September 2017.
  51. ^ Maham Mukhtar (August 2017). "2 Ways To Fix "Encrypt Contents To Secure Data" Option Grayed Out In Windows 10". iTechtics. EFS is available for all editions of Windows 10 except Windows 10 Home edition.
  52. ^ "Why is Windows Compressed Folders (Zip folders) support stuck at the turn of the century?". 15 May 2018.
  53. ^ "zlib Technical Details". Retrieved 10 July 2019.
  54. ^ Smith, Ernie (10 July 2019). "The Most Clever 'Zip Bomb' Ever Made Explodes a 46MB File to 4.5 Petabytes". Motherboard. Vice Media. Retrieved 10 July 2019.

외부 링크