zip規格日本語訳(2)

●作成されたバージョン[version made by (2 bytes)]
 上位バイトはファイル属性情報の互換性を示している。もし外部ファイル属性がMS-DOS互換かつ、DOSバージョンのPKZIP 2.04gで読み込めるのであれば、この値は0になる。互換性がないのであれば、この数値によって互換性のあるシステムを識別する。ソフトウェアはこれによってテキストファイルの改行方法などの情報を決定することができる。

 現時点の対応数値は以下の通りである:

0 - MS-DOSとOS/2(FAT / VFAT / FAT32)
1 - Amiga/2 - OpenVMS/3 - UNIX/4 - VM/CMS
5 - Atari ST/6 - OS/2 H.P.F.S./7 - Macintosh
8 - Z-System/9 - CP/M/10 - Windows NTFS
11 - MVS (OS/390 - Z/OS)/12 - VSE/13 - Acorn Risc
14 - VFAT/15 - alternate MVS/16 - BeOS
17 - Tandem/18 - OS/400/19 - OS/X (Darwin)
20~255 - 未使用

 下位バイトはファイルを変換する際に使ったZip定義バージョンを表す。値を10で割ったものがメジャーバージョン、10で割ったあまりがマイナーバージョンである(たとえばVer 6.1なら61になる)。


●展開に必要なバージョン[version needed to extract (2 bytes)]
 ファイルを展開するために最低限必要なZip定義バージョンを示す。この値は、ファイルを展開するために、特定のフォーマットがZIPプログラムでサポートされているかの判断に用いられる。もし様々な機能がファイルに適用されているのであれば、最小値は、もっとも新しい機能を含むバージョンにあわせるべきである。

 バージョンによる最低限行える操作は以下の通りである:

1.0 - 基準値
1.1 - ファイルはボリュームラベルを含む
2.0 - ファイルはフォルダ(ディレクトリ)を含む
2.0 - ファイルはDeflateアルゴリズムで圧縮されている
2.1 - ファイルはDeflate64アルゴリズムで圧縮されている
2.5 - ファイルはPKWARE DCL Implodeアルゴリズムで圧縮されている
2.7 - ファイルはパッチデータを含む
4.5 - ファイルは64bit拡張が含まれる
4.6 - ファイルはBZIP2アルゴリズムで圧縮されている*
5.0 - ファイルはDES暗号化されている
5.0 - ファイルは3DES暗号化されている
5.0 - ファイルはRC2暗号化されている
5.0 - ファイルはRC4暗号化されている
5.1 - ファイルはAES暗号化されている
5.1 - ファイルはRC2暗号化されている**
5.2 - ファイルはRC2-64暗号化されている**
6.1 - ファイルはnon-OAEP key wrapping暗号化されている***
6.2 - 中央ディレクトリが暗号化されている
6.3 - ファイルはLZMAで圧縮されている
6.3 - ファイルはPPMd(+)で圧縮されている
6.3 - ファイルはBlowfishで暗号化されている
6.3 - ファイルはTwofishで暗号化されている

*    : PKZIP 7.2以前では46とすべきところを50と誤って指定していた
**   : RC2に関しては「強力な暗号化」に補足情報がある
***  : non-OAEP key wrappingは意図的に用意された。
       PKZIP 6.1以前のバージョンによる後方互換性のためだけに、
       OAEP key wrappingをサポートするべきである。
+    : PPMDによるファイル圧縮は6.3と指定するべきである。しかし、
       指定したからといって、すべてのZIPプログラムが解凍できるとは限らない。
 64bit拡張をしているとき、中央ディレクトリのzip64終端における値も、同じにするべきである(Ver 1.0/2.0の対応が正しいかを示すため)。


●オプションビットフラグ[general purpose bit flag: (2 bytes)]

Bit 0:ファイルが暗号化されている

(Implodeアルゴリズム)
Bit 1:
有効:8Kのスライド辞書が用いられている
無効:4Kのスライド辞書が用いられている
Bit 2:
有効:スライド辞書の生成に3つのShannon-Fano treesが用いられている。
無効:スライド辞書の生成に2つのShannon-Fano treesが用いられている。

(Deflateアルゴリズム)

Bit 2Bit 1
00規定の圧縮率
01最大限の圧縮
10速度重視の圧縮
11最高速での圧縮

(LZMAアルゴリズム)
Bit 1:ストリームの終端に、終端を示すEOSマークが使われている

※上記以外の圧縮アルゴリズムでは定義されていない。


Bit 3:ヘッダ内のCRC32、圧縮後・圧縮前のサイズは0になっており、正確な数値は圧縮データのあとに記載されている。(PKZIP 2.04gはタイプ8圧縮方法のために認識するが、将来のバージョンはいずれの圧縮方法でも認識するようになる)

Bit 4:タイプ8圧縮方法の拡張のため、予約されている。

Bit 5:修正が適用されて圧縮されたファイルである(PKZIP 2.7以降)。

Bit 6:強力な暗号化が行われている(このフラグを有効にするには、最低限のバージョンを50以上にすること。AES暗号化を用いるのなら、51以上)

Bit 7-10:未使用

Bit 11:UTF-8による文字列が使用されている(付録D参照)

Bit 12:予約済み。

Bit 13:中央ディレクトリの暗号化されるとき、ヘッダの有効値が隠蔽されたことを示す。詳細は「強力な暗号化」に記述している。

Bit 14,15:予約済み。


●圧縮方法[compression method: (2 bytes)]

0 - 未圧縮
1 - Shrunk
2 - 圧縮ファクタ1
3 - 圧縮ファクタ2
4 - 圧縮ファクタ3
5 - 圧縮ファクタ4
6 - Imploding
7 - Tokenizing compressionアルゴリズム
8 - Deflate
9 - Deflate64
10 - PKWARE Data Compression Library Imploding
11 - 予約済み
12 - BZIP2
13 - 予約済み
14 - LZMA(EFS)
15 - 予約済み
16 - 予約済み
17 - 予約済み
18 - IBM TERSE
19 - IBM LZ77(PFS)
97 - WavPack
98 - PPMd version I, Rev 1

●日付と時刻[date and time fields: (2 bytes each)]

 標準的なMS-DOSフォーマットでエンコードされる。標準ストリームによる処理であれば圧縮が開始された日時を登録する。中央ディレクトリが暗号化されており、かつオプションフラグの13ビット目が有効なら、この値は0になる。


●CRC32値[CRC-32: (4 bytes)]

 0xdebb20e3が「マジックナンバー」として定義されている。オプションフラグの3ビット目が有効なら、この値は0であり、別の場所に記載されることになる。中央ディレクトリが暗号化されており、かつオプションフラグの13ビット目が有効なら、この値は0になる。


●圧縮前/後のサイズ[compressed size: (4 bytes)/uncompressed size: (4 bytes)]

 ファイルデータの前にある復号ヘッダが存在するときは、このサイズも含める。オプションフラグの3ビット目が有効なら、この値は0であり、別の場所に記載されることになる。64bitフォーマットで、この値が0xFFFFFFFFであれば、サイズはZip64拡張データから取得することになる。中央ディレクトリが暗号化されており、かつオプションフラグの13ビット目が有効なら、この値は0になる。


●ファイル名のサイズ[file name length: (2 bytes)]
●拡張データのサイズ[extra field length: (2 bytes)]
●コメントのサイズ[file comment length: (2 bytes)]

 3つのデータの合計サイズは一般に65535バイトを超えるべきではない。標準入力の場合は、ファイル名サイズは0になる。


●ディスク番号開始[disk number start: (2 bytes)]

 該当ファイルが始まるディスクの番号。Zip64で0xFFFFであれば、拡張データを参照することになる。


●内部ファイル属性[internal file attributes: (2 bytes)]

Bit 1,2は予約済み。
最下位ビットが有効なら、ファイルはテキスト形式で、無効ならバイナリ形式。
残りのビットはVer 1.0では未使用。


●外部ファイル属性[external file attributes: (4 bytes)]

 データは作成されたホストに依存する。MS-DOSの場合は、下位バイトにディレクトリ属性のバイトがくる。標準入力であれば0である。


●ローカルヘッダの相対位置[relative offset of local header: (4 bytes)]

 ファイルが現れる始めのディスクからの位置。Zip64で0xFFFFFFFFであれば、サイズはZip64拡張データから取得することになる。


●ファイル名[file name: (Variable)]

 ファイルの相対パス名。ドライブ名や、「/」を前に置くべきではない。互換性のため、スラッシュは「¥」ではなく「/」を用いる。


●拡張データ[extra field: (Variable)]

 Ver 1.0ではサイズは0である。拡張データはヘッダ、データの繰り返しとする。ヘッダIDは0~31までは予約済みであるが、それ以降は独自拡張のため自由に利用できる。

PKWAREによるヘッダID定義は以下の通り:

0x0001        Zip64 extended information extra field
0x0007        AV Info
0x0008        Reserved for extended language encoding data (PFS)
            (see APPENDIX D)
0x0009        OS/2
0x000a        NTFS 
0x000c        OpenVMS
0x000d        UNIX
0x000e        Reserved for file stream and fork descriptors
0x000f        Patch Descriptor
0x0014        PKCS#7 Store for X.509 Certificates
0x0015        X.509 Certificate ID and Signature for individual file
0x0016        X.509 Certificate ID for Central Directory
0x0017        Strong Encryption Header
0x0018        Record Management Controls
0x0019        PKCS#7 Encryption Recipient Certificate List
0x0065        IBM S/390 (Z390), AS/400 (I400) attributes  - uncompressed
0x0066        Reserved for IBM S/390 (Z390), AS/400 (I400) 
            attributes - compressed
0x4690        POSZIP 4690 (reserved) 

サードパーティーによる定義:
0x07c8        Macintosh
0x2605        ZipIt Macintosh
0x2705        ZipIt Macintosh 1.3.5+
0x2805        ZipIt Macintosh 1.3.5+
0x334d        Info-ZIP Macintosh
0x4341        Acorn/SparkFS 
0x4453        Windows NT security descriptor (binary ACL)
0x4704        VM/CMS
0x470f        MVS
0x4b46        FWKCS MD5 (see below)
0x4c41        OS/2 access control list (text ACL)
0x4d49        Info-ZIP OpenVMS
0x4f4c        Xceed original location extra field
0x5356        AOS/VS (ACL)
0x5455        extended timestamp
0x554e        Xceed unicode extra field
0x5855        Info-ZIP UNIX (original, also OS/2, NT, etc)
0x6375        Info-ZIP Unicode Comment Extra Field
0x6542        BeOS/BeBox
0x7075        Info-ZIP Unicode Path Extra Field
0x756e        ASi UNIX
0x7855        Info-ZIP UNIX (new)
0xa220        Microsoft Open Packaging Growth Hint
0xfd4a        SMS/QDOS

 サイズはファイル名なども含めて64Kを超えるべきではない。独自のヘッダIDが競合するのを防ぐため、データ領域の始めに独自の署名を入れておくことを強く推奨する。


●ファイルコメント[file comment: (Variable)]

 このファイルに対するコメント。


●ディスク番号[number of this disk: (2 bytes)]

 中央ディレクトリ終端を含むディスクの数。Zip64かつ0xFFFFでれば、拡張データを参照する。


●中央ディレクトリ開始のディスク番号[number of the disk with the start of the central directory: (2 bytes)]

 中央ディレクトリ開始のディスク番号。Zip64かつ0xFFFFでれば、拡張データを参照する。


●このディスクにおける中央ディレクトリエントリー総数 [total number of entries in the central dir on this disk: (2 bytes)]

 ディスクにおける中央ディレクトリエントリー総数。Zip64かつ0xFFFFでれば、拡張データを参照する。


●中央ディレクトリエントリー数[total number of entries in the central dir: (2 bytes)]

 zipファイル内の中央ディレクトリエントリー数。Zip64かつ0xFFFFでれば、拡張データを参照する。


●中央ディレクトリのサイズ[size of the central directory: (4 bytes)]

 中央ディレクトリのサイズ(バイト)。Zip64かつ0xFFFFFFFFでれば、拡張データを参照する。


●開始ディスク番号に対する中央ディレクトリの開始位置[offset of start of central directory with respect to the starting disk number: (4 bytes)]

 開始ディスク番号に対する中央ディレクトリの開始位置。Zip64かつ0xFFFFFFFFでれば、拡張データを参照する。


●ZIPファイルコメントサイズ[.ZIP file comment length: (2 bytes)]

 対象ZIPファイルのコメントのサイズ。


●ZIPファイルコメント[.ZIP file comment: (Variable)]

 対象ZIPファイルのコメント。現時点での暗号化はできないので、機密事項などを記載してはいけない。


●zip64拡張データ領域[zip64 extensible data sector (variable size)]

(PKWAREが使用するために予約済み)