| ZIPファイル形式 | |
|---|---|
| ファイル名拡張子 | .zip、、、.zipx.z01.zx01 |
| インターネットメディアの 種類 | application/zipapplication/x-zip-compressed |
| 統一型識別子 (UTI) | com.pkware.zipアーカイブ |
| 魔法の数字 |
|
| 開発元 | PKWARE, Inc. |
| 初回リリース | 1989年2月14日 (1989-02-14) |
| 最新リリース | 6.3.10 2022年11月1日( 2022-11-01 ) |
| フォーマットの種類 | データ圧縮 |
| 拡張 | |
| 標準 |
|
| オープンフォーマット? | いくつかのバリエーション |
ZIPは、可逆圧縮に対応したアーカイブファイル形式です。ZIPファイルには、圧縮されたファイルやディレクトリが1つ以上含まれる場合があります。ZIPファイル形式では様々な圧縮アルゴリズムが使用できますが、DEFLATEが最も一般的です。
このフォーマットは元々1989年に作成され、トム・ヘンダーソンによって以前のARC圧縮フォーマットの代替としてPKWARE社のPKZIPユーティリティ[ 2 ]に初めて実装されました。その後、ZIPフォーマットはPKZIP以外の多くのソフトウェアユーティリティですぐにサポートされるようになりました。ZIPフォーマットは主要なオペレーティングシステム(Android、ChromeOS、 iOS、Linux、macOS、Windowsなど)でネイティブにサポートされています。通常、オペレーティングシステムのファイル管理アプリケーションに組み込まれています。
ZIP ファイルは一般的にファイル拡張子.zipまたは.ZIPとMIMEメディアタイプを使用します。[ 1 ] ZIP は多くのプログラムで基本ファイル形式として使用され、通常は別の名前で使用されます。ユーザー インターフェイスを介してファイルシステムをナビゲートする場合、ZIP ファイルを表すグラフィカルアイコンは、ジッパーが目立つドキュメントまたはその他のオブジェクトとして表示されることがよくあります。application/zip
.ZIPファイル形式は、PKWARE 社のPhil Katz氏と Infinity Design Concepts 社の Gary Conway 氏によって設計されました。この形式は、Systems Enhancement Associates (SEA)が PKWARE 社に対して、PKARC という名のアーカイブ製品が SEA 社のARCアーカイブシステムの派生製品であるとして訴訟を起こした後に作成されました。[ 3 ] 「zip」(「高速で移動する」という意味)という名前は、Katz 氏の友人である Robert Mahoney 氏が提案しました。[ 4 ]彼らは、自分たちの製品がARCや当時の他の圧縮形式 よりも高速であることを示唆したかったのです。 [ 4 ] .ZIP ファイル形式仕様の最も初期のバージョンは、 1989 年にPKZIP 0.9 パッケージの一部としてAPPNOTE.TXT ファイルで初めて公開されました。APPNOTE.TXT 内に zip ファイル形式を配布することで、1990 年代には zip ファイル形式との互換性が公共のインターネット上で広く普及しました。[ 5 ]
PKWAREとInfinity Design Conceptsは1989年2月14日に共同プレスリリースを発表し、.ZIPファイル形式をパブリックドメインに公開した。[ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ]
.ZIPファイルフォーマット仕様には独自のバージョン番号があり、特にPKZIP 6以降では、PKZIPツールのバージョン番号と必ずしも一致するとは限りません。PKWAREはこれまで、PKZIP製品が高度な機能を使用してアーカイブを抽出できるようにする予備的な機能を追加してきましたが、そのようなアーカイブを作成するPKZIP製品は、次のメジャーリリースまで提供されません。他の企業や組織は、それぞれのペースでPKWARE仕様をサポートしています。
.ZIP ファイル形式の仕様は正式には「APPNOTE - .ZIP ファイル形式仕様」と呼ばれ、1990 年代後半から PKWARE.com の Web サイトに掲載されています。[ 11 ]仕様のいくつかのバージョンは公開されていません。BZIP2 圧縮、強力な暗号化仕様などの一部の機能の仕様は、作成から数年後に PKWARE によって公開されました。オンライン仕様の URL は PKWARE Web サイト上で何度か変更されています。
PKWAREソフトウェアおよび/または仕様の各種バージョンにおける主な進歩の概要:
WinZip は、バージョン 12.1 以降、DEFLATE より新しい圧縮方式を使用する ZIP ファイルに拡張子.zipxを使用します。具体的には、BZip、LZMA、PPMd、Jpeg、Wavpack の各方式です。最後の 2 つの方式は、「最適な方法」圧縮が選択された場合、適切なファイルタイプに適用されます。[ 31 ] [ 32 ]
2010 年 4 月、ISO/IEC JTC 1 は、 ZIP と互換性のある ISO/IEC 国際標準フォーマットを作成するプロジェクトを開始すべきかどうかを決定するための投票を開始しました。[ 33 ]文書パッケージングと題された提案されたプロジェクトは、OpenDocument、Office Open XML、EPUBなど、既存の多くの標準で使用できる ZIP 互換の「最小限の圧縮アーカイブ フォーマット」を想定していました。これは、正式な標準の必要性、ZIP のさまざまな拡張機能、オープン スタンダードに使用される技術が独自の拡張機能や「潜伏」特許 (予期せず浮上する可能性がある) を持つ可能性の望ましくなさ、より良い国際化の必要性、PKWARE APPNOTE 文書の代替仕様を提供すると称して実際に技術をさらに細分化したくないという要望などの問題を解決するものでした。
2015年にISO/IEC 21320-1「ドキュメントコンテナファイル - パート1:コア」が発行され、PKWARE APPNOTE文書を規範的に参照し、「ドキュメントコンテナファイルは準拠したZipファイルである」と規定されています。ZIPファイル形式には以下の主な制限が課せられています。[ 34 ]
.ZIPファイルは、複数のファイルを格納するアーカイブです。ZIPでは、格納されているファイルをさまざまな方法で圧縮できるだけでなく、圧縮せずにそのまま保存することも可能です。各ファイルは個別に保存されるため、同じアーカイブ内の異なるファイルを異なる方法で圧縮できます。ZIPアーカイブ内のファイルは個別に圧縮されるため、アーカイブ全体に圧縮や解凍を適用することなく、個々のファイルを抽出したり、新しいファイルを追加したりすることが可能です。これは、このようなランダムアクセス処理が容易ではない圧縮tarファイル形式とは対照的です。
ZIPファイルの末尾にはディレクトリが配置されます。これにより、ZIPファイルに含まれるファイルの種類と、そのファイルがZIPファイル内のどこにあるかが識別されます。ZIPリーダーは、ZIPアーカイブ全体を読み込むことなく、ファイルの一覧を読み込むことができます。ZIPアーカイブには、ZIPアーカイブ自体とは関係のない追加データを含めることもできます。プログラムコードをZIPアーカイブの先頭に追加し、ファイルを実行可能ファイルとしてマークすることで、ZIPアーカイブを自己解凍型アーカイブ(含まれているデータを解凍するアプリケーション)にすることができます。カタログを末尾に保存することで、GIF画像ファイルなどの無害なファイルにカタログを追加して、圧縮ファイルを隠すことも可能になります。
.ZIPフォーマットはCRC-32を使用し、各エントリのメタデータのコピーを 2 つ含めることで、データ損失に対する保護を強化しています。CRC-32 アルゴリズムは David Schwaderer によって提供され、Howard W. Sams & Co. Inc. から出版された彼の著書「C Programmers Guide to NetBIOS」に記載されています[ 36 ]。

ZIP ファイルは、アーカイブ構造の末尾に中央ディレクトリ終了レコードが存在することで正しく識別されます。このレコードは、新しいファイルを簡単に追加できるようにするために配置されています。中央ディレクトリ終了レコードが空でないアーカイブを示している場合、アーカイブ内の各ファイルまたはディレクトリの名前は、エントリに関するその他のメタデータ、および実際のエントリデータを指す ZIP ファイル内のオフセットとともに、中央ディレクトリエントリに指定する必要があります。これにより、アーカイブ全体を読み込むことなくファイル一覧を表示できるため、アーカイブのファイル一覧を比較的迅速に実行できます。ZIP ファイル内のエントリには、冗長性のために、この情報がローカルファイルヘッダーにも含まれています。ZIP ファイルは追加できるため、ファイルの末尾にある中央ディレクトリで指定されたファイルのみが有効です。中央ディレクトリでは一部のファイルが削除され、他のファイルが更新されたと宣言される可能性があるため、ZIP ファイルのローカルファイルヘッダーをスキャンすることは無効です (アーカイブが破損している場合を除く)。
例えば、ファイル A、B、C を含む ZIP ファイルから始めるとします。次に、ファイル B を削除し、C を更新します。これは、元の ZIP ファイルの末尾に新しいファイル C を追加し、ファイル A と新しいファイル C のみをリストする新しい中央ディレクトリを追加するだけで実現できます。ZIP が最初に設計されたときは、フロッピー ディスクによるファイルの転送が一般的でしたが、ディスクへの書き込みには非常に時間がかかりました。複数のディスクにまたがる可能性のある大きな ZIP ファイルがあり、更新する必要があるファイルが数個だけの場合、すべてのファイルを読み込んで書き直すよりも、古い中央ディレクトリを読み込んで新しいファイルを追加し、更新された中央ディレクトリを追加する方がはるかに高速です。
中央ディレクトリ内のファイルエントリの順序は、アーカイブ内のファイルエントリの順序と一致する必要はありません。
ZIPアーカイブに格納される各エントリは、コメント、ファイルサイズ、ファイル名などのファイル情報を含むローカルファイルヘッダーで始まり、オプションの「追加」データフィールド、そして圧縮または暗号化されたファイルデータが続きます。「追加」データフィールドは、ZIPフォーマットの拡張性の鍵となります。「追加」フィールドは、ZIP64フォーマット、WinZip互換のAES暗号化、ファイル属性、高解像度のNTFSまたはUnixファイルタイムスタンプをサポートするために利用されます。その他の拡張機能も「追加」フィールドを介して可能です。仕様では、ZIPツールは認識できない「追加」フィールドを無視することが義務付けられています。
ZIP形式では、ファイル内のさまざまな構造を示すために、特定の4バイトの「署名」が使用されます。各ファイルエントリは、特定の署名によってマークされます。中央ディレクトリレコードの末尾は、その特定の署名で示され、中央ディレクトリ内の各エントリは、4バイトの中央ファイルヘッダー署名で始まります。
ZIP仕様にはBOFやEOFマーカーはありません。慣例として、ZIPファイルの先頭にはZIPエントリがあり、これはローカルファイルヘッダーの署名によって容易に識別できます。しかし、これは必ずしも当てはまるわけではなく、ZIP仕様で必須とされているわけではありません。特に、自己解凍型アーカイブは実行可能ファイルヘッダーで始まります。
ZIP アーカイブを正しく読み取るツールは、中央ディレクトリ レコードの末尾の署名をスキャンし、必要に応じて、指定された他の中央ディレクトリ レコードをスキャンする必要があります。ZIP ファイルの先頭からのエントリをスキャンしてはなりません。なぜなら、(このセクションで既に述べたように)ファイル チャンクの開始位置と削除されていないことを指定するのは中央ディレクトリだけだからです。スキャンすると、チャンク間に他のデータが存在することや、ファイル データ ストリームにそのような署名が含まれることをフォーマットが禁止していないため、誤検出が発生する可能性があります。ただし、破損した ZIP アーカイブからデータを復元しようとするツールは、おそらくアーカイブ内のローカル ファイル ヘッダーの署名をスキャンするでしょう。ファイル チャンクの圧縮サイズがファイル チャンクの後に格納される可能性があるため、シーケンシャル処理が難しくなり、この作業はさらに困難になります。
ほとんどの署名は、リトルエンディアン形式で格納される短い整数値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形式にはタイムゾーンの概念がないため、タイムスタンプは、それが作成されたタイムゾーンがわかっている場合にのみ意味を持ちます。
2006年9月、PKWAREはUTF-8を使用したファイル名の保存を可能にするZIP仕様の改訂版をリリースし、ついにZIPにUnicode互換性を追加した。[ 20 ]
ヘッダー内のすべてのマルチバイト値は、リトルエンディアンのバイト順で格納されます。すべての長さフィールドは、バイト単位で長さを表します。
エクストラフィールドには、OS固有の属性など、さまざまなオプションデータが含まれます。これはレコードに分割され、各レコードは少なくとも16ビットの署名と16ビットの長さを持ちます。たとえば、ZIP64ローカルファイルのエクストラフィールドレコードは、署名0x0001と16バイト(またはそれ以上)の長さを持ち、その後に2つの64ビット値(非圧縮サイズと圧縮サイズ)が続く場合があります。もう1つの一般的なローカルファイル拡張子は0x5455(または「UT」)で、32ビットのUTC UNIXタイムスタンプが含まれます。
その直後に圧縮データが続く。
汎用フラグフィールドのオフセット 3 (0x08) のビットが設定されている場合、ヘッダーの書き込み時に CRC-32 とファイル サイズは不明です。アーカイブが Zip64 形式の場合、圧縮サイズフィールドと非圧縮サイズフィールドは 4 バイトではなく 8 バイト長になります (セクション 4.3.9.2 [ 38 ]を参照)。ローカル ヘッダー (または Zip64 形式のアーカイブの場合は Zip64 拡張情報エクストラ フィールド) の同等のフィールドはゼロで埋められ、CRC-32 とサイズは圧縮データの直後に 12 バイトの構造 (オプションで 4 バイトの署名が前に付く) で追加されます。
中央ディレクトリのファイルヘッダーエントリは、ローカルヘッダーを拡張したものです。
中央ディレクトリのエントリがすべて終わると、中央ディレクトリ終了(EOCD)レコードが続き、これがZIPファイルの終わりを示します。
この順序付けにより、ZIP ファイルを一度の処理で作成できますが、以前に説明したように、複数の部分(たとえば「複数のフロッピー ディスク」)からなるアーカイブからファイルを簡単に削除できるように、中央ディレクトリはファイルの末尾に配置されます。
.ZIP ファイル形式仕様では、次の圧縮方法が文書化されています: Store (圧縮なし)、Shrink ( LZW )、Reduce (レベル 1~4、LZ77 + 確率的)、Implode、Deflate、Deflate64、bzip2、LZMA、Zstandard、WavPack、PPMd 、およびIBM z/OS CMPSC 命令によって提供される LZ77 バリアント。 [ 39 ] [ 30 ]最も一般的に使用される圧縮方法はDEFLATEであり、IETF RFC 1951で説明されています。
仕様書には記載されていないが言及されている他の方法には、PKWARE DCL Implode (旧 IBM TERSE)、新IBM TERSE、IBM LZ77 z アーキテクチャ (PFS)、および JPEG バリアントがある。「Tokenize」メソッドはサードパーティ用に予約されていたが、サポートは追加されなかった。[ 25 ]
PKWARE ではImplodeという単語が多用されています。DCL/TERSE Implode は、Deflate の前身である古い PKZIP Implode とは異なります。DCL Implode は IBM が所有する独自の性質のため、ドキュメント化されていませんが、Mark Adler はzlib とともに「blast」と呼ばれるデコンプレッサを提供しています。[ 40 ]
ZIP は、一般に ZipCrypto として知られるシンプルなパスワードベースの対称暗号化システムをサポートしています。これは ZIP 仕様書に記載されていますが、重大な欠陥があることが知られています。特に、既知平文攻撃に対して脆弱であり、場合によっては乱数生成器の実装が不十分なためにさらに悪化します。[ 5 ]サードパーティのアーカイバを使用せずにネイティブのMicrosoft Windows上で動作するコンピュータは、ZipCrypto で暗号化された ZIP ファイルを開くことはできますが作成することはできません。また、異なる暗号化を使用しているファイルの内容を抽出することはできません。[ 41 ]
バージョン 5.2 以降、ZIP ファイル形式仕様には、新しい圧縮および暗号化( AESなど) 方法を含む新機能が記載されています。WinZipが開発した AES ベースのオープン標準 (APPNOTE では「AE-x」) は7-ZipやXceedでも使用されていますが、一部のベンダーは他の形式を使用しています。[ 42 ] PKWARE SecureZIP (SES、独自仕様) は、RC2、RC4、DES、Triple DES 暗号化方式、デジタル証明書ベースの暗号化および認証 ( X.509 )、アーカイブ ヘッダー暗号化もサポートしています。ただし、特許を取得しています ( § 強力な暗号化の論争を参照)。[ 43 ]
ファイル名の暗号化は、.ZIPファイルフォーマット仕様6.2で導入されました。この仕様では、アーカイブの中央ディレクトリ部分に格納されているメタデータが暗号化されますが、ローカルヘッダー部分は暗号化されません。準拠したアーカイバは、中央ディレクトリ暗号化を使用する際に、ローカルヘッダーデータを改ざんすることができます。仕様バージョン6.2の時点では、ローカルヘッダー内の圧縮方式と圧縮サイズフィールドはまだマスクされていません。
オリジナルの.ZIPフォーマットでは、さまざまな項目(ファイルの非圧縮サイズ、圧縮ファイルサイズ、アーカイブの合計サイズ)に4 GiB(2 32バイト)の制限があり、ZIPアーカイブ内のエントリ数にも65,535( 2 16 - 1)の制限がありました。仕様のバージョン4.5(特定のツールのv4.5とは異なります)で、PKWAREはこれらの制限を回避するために「ZIP64」フォーマット拡張機能を導入し、制限を16 EiB(2 64バイト)に増やしました。基本的には、ファイルに対して「通常の」中央ディレクトリエントリを使用し、その後にオプションの「zip64」ディレクトリエントリを追加して、より大きなフィールドを持たせています。[ 44 ]
ローカル ファイル ヘッダー (LOC) とセントラル ディレクトリ ファイル ヘッダー (CDFH) のフォーマットは、ZIP と ZIP64 で同じです。ただし、ZIP64 では、圧縮機の判断でレコードに追加できる追加フィールドが指定されています。このフィールドは、従来の LOC または CDFH レコードに収まらない値を格納するために使用されます。実際の値が ZIP64 の追加フィールドに格納されていることを示すために、対応する LOC または CDFH レコードでは、値が 0xFFFF または 0xFFFFFFFF に設定されます。1 つのエントリが従来の LOC または CDFH レコードに収まらない場合、そのエントリのみを ZIP64 の追加フィールドに移動する必要があります。他のエントリは従来のレコードに残しておくことができます。したがって、次の表に示すすべてのエントリが ZIP64 の追加フィールドに格納されるとは限りません。ただし、格納される場合は、表に示す順序でなければなりません。
一方、ZIP64 の EOCD の形式は、通常の ZIP バージョンとは若干異なります。[ 37 ]
EOCD64は必ずしもファイル内の最後のレコードではありません。その後に20バイトの中央ディレクトリ終端ロケータと、従来のEOCDレコードが続きます。
Windows XPのファイル エクスプローラーはZIP64 をサポートしていませんが、Windows Vista以降のエクスプローラーはサポートしています。同様に、DotNetZip、QuaZIP [ 45 ]、Perl の IO::Compress::Zip など、ZIP64 をサポートする拡張ライブラリもあります。Pythonの組み込みの zipfile は 2.5 以降で ZIP64 をサポートし、3.4 以降はデフォルトで ZIP64 を使用します。[ 46 ] OpenJDKの組み込みの java.util.zip は、Java 7以降で ZIP64 をサポートしています。[ 47 ] Android Java API は、Android 6.0 以降で ZIP64 をサポートしています。[ 48 ] Mac OS Sierra のアーカイブ ユーティリティは特に ZIP64 をサポートしておらず、ZIP64 が必要な場合に破損したアーカイブを作成する可能性があります。[ 49 ] ただし、Mac OS に付属の ditto コマンドは ZIP64 ファイルを解凍します。[ 50 ] Mac OS の最新バージョンには、Zip64 をサポートする info-zip の zip および unzip コマンドラインツールが付属しています。確認するには、zip -v を実行して「ZIP64_SUPPORT」を探してください。
.ZIPファイル形式では、中央ディレクトリの後に、最大 65,535 ( 2 16 − 1 ) バイトのデータを含むコメントをファイルの末尾に記述できます。[ 37 ]また、中央ディレクトリはアーカイブ内の各ファイルの開始位置に対するオフセットを指定するため、最初のファイルエントリがゼロ以外のオフセットから始まる可能性がありますが、オフセット ゼロからファイルエントリが始まらないアーカイブ ファイルを処理しないツールもあります。たとえば、 gzipプログラムは、オフセット ゼロにあるエントリを .ZIP ファイルから抽出することができます。
これにより、ZIP アーカイブ データの前後に任意のデータを含めることができ、ZIP アプリケーションでアーカイブを読み取ることができます。この副次的な効果として、任意のデータが末尾、先頭、または中間に許容される別の形式であれば、ZIP アーカイブとしても機能するファイルと別の形式の両方を作成できるという利点があります。WinZipでサポートされている形式の自己解凍型アーカイブ(SFX) は、PKZIP AppNote.txt 仕様に準拠した実行可能ファイル ( .exe ) であり、準拠する ZIP ツールやライブラリで読み取ることができるため、この利点を活用しています。
.ZIP形式、およびZIPの派生形式であるJAR形式のこの特性は、ウェブにアップロードされたGIF画像のような一見無害なファイルの中に、悪意のあるコンテンツ(有害なJavaクラスなど)を隠すために悪用される可能性があります。このいわゆるGIFARエクスプロイトは、Facebookなどのウェブアプリケーションに対する効果的な攻撃として実証されています。[ 51 ]
.ZIPファイルの最小サイズは22バイトです。このような空のzipファイルには、中央ディレクトリレコードの終了(EOCD)のみが含まれます。50 4B 05 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
標準ZIPの場合、アーカイブファイルとその中に含まれる個々のファイルの最大サイズは4,294,967,295バイト(2³² - 1バイト、つまり4GiBから1バイトを引いた値)です。ZIP64の場合 、最大サイズは18,446,744,073,709,551,615バイト(2⁶⁴ - 1バイト、つまり16EiBから1バイトを引いた値)です 。[ 52 ]
.ZIPファイル形式には、ファイルヘッダー内に追加のフィールド機能があり、既存のZIP仕様で定義されていない追加データを格納できます。また、このフィールドを認識しない準拠アーカイバは、安全にこれらのフィールドをスキップできます。ヘッダーID 0~31はPKWARE用に予約されています。残りのIDは、サードパーティベンダーが独自の用途に使用できます。
2003 年にWinZip 9.0 のパブリック ベータ版がリリースされたとき、WinZip は、新しい仕様のドキュメントとともに、異なるファイル形式を使用した独自のAES-256暗号化を導入しました。 [ 53 ]暗号化標準自体は独自のものではありませんでしたが、PKWARE は 2001 年以降、PKZIP バージョン 5.0 および 6.0 で使用されていた強力な暗号化仕様 (SES) を含めるように APPNOTE.TXT を更新していませんでした。WinZip の技術コンサルタントである Kevin Kearney 氏とStuffIt の製品マネージャーである Mathew Covington 氏は、PKWARE が SES を隠蔽していると非難しましたが、PKZIP の最高技術責任者である Jim Peterson 氏は、証明書ベースの暗号化はまだ不完全であると主張しました。
もう一つの物議を醸す動きとして、PKWareは2003年7月16日に、ZIPと強力な暗号化を組み合わせて安全なファイルを作成する方法を記述した特許を申請した。[ 54 ]
最終的に、PKWAREとWinZipは互いの製品をサポートすることに合意した。2004年1月21日、PKWAREはWinZipベースのAES圧縮フォーマットのサポートを発表した。[ 55 ]後のWinZipベータ版では、SESベースのZIPファイルもサポートできるようになった。[ 56 ] PKWAREは最終的に、SESを文書化した.ZIPファイルフォーマット仕様のバージョン5.2を公開した。フリーソフトウェアプロジェクトの7-ZipもZIPファイルではAESをサポートしているが、SESはサポートしていない( POSIXポートのp7zipも同様)。
WinZip で AES 暗号化を使用する場合、圧縮方法は常に 99 に設定され、実際の圧縮方法は AES エクストラ データ フィールドに格納されます。[ 57 ]対照的に、Strong Encryption Specification では、メタデータをマスク/暗号化するために Central Directory Encryption が使用されない限り、圧縮方法は Local Header および Central Directory の基本ファイル ヘッダー セグメントに格納されます。
.ZIPツールは数多く存在し、様々なプログラミング環境に対応した.ZIPライブラリも多数あります。ライセンスには、プロプライエタリソフトウェアとフリーソフトウェアの両方が含まれます。WinZip 、WinRAR、Info-ZIP、ZipGenius、7-Zip、PeaZip、B1 Free Archiverは、様々なプラットフォームで利用可能な、よく知られた.ZIPツールです。これらのツールの中には、ライブラリインターフェースやプログラムインターフェースを備えているものもあります。
オープンソース契約に基づいてライセンスされている開発ライブラリには、libzip、libarchive、Info-ZIPなどがあります。Javaの場合、Java Platform, Standard Editionには、標準の.ZIPファイルを処理するためのパッケージ「java.util.zip」が含まれています。Zip64Fileライブラリは、特に大きなファイル(4 GiBより大きい)をサポートし、ランダムアクセスを使用して.ZIPファイルを処理します。また、 Apache Antツールには、Apacheソフトウェアライセンスに基づいてリリースされた、より完全な実装が含まれています。
Info -ZIPによる.ZIPフォーマットの実装では、ユーザー ID やグループ ID、ファイル権限、シンボリックリンクのサポートなど、Unix ファイルシステムの機能に対応しています。Apache Ant の実装はこれらの機能を認識しており、定義済みの Unix 権限を持つファイルを作成できます。また、Info-ZIP の実装は、 .ZIP圧縮フォーマットに組み込まれているエラー訂正機能も利用できます。一部のプログラムはこれらの機能を認識していないため、エラーのあるファイルでは処理が失敗します。
Info-ZIPのWindowsツールはNTFSファイルシステムのアクセス許可もサポートしており、ファイルの抽出時にNTFSアクセス許可からUnixアクセス許可への変換、またはその逆の変換を試みます。これにより、意図しない組み合わせが生じる可能性があり、例えば、実行権限が拒否されたNTFSボリューム上に.exeファイルが作成されるといったことが起こり得ます。
Microsoft Windows のバージョンでは、Windows 98用のMicrosoft Plus!パックがリリースされて以来、エクスプローラーで.ZIP圧縮のサポートが含まれています。Microsoft はこの機能を「圧縮フォルダー」と呼んでいます。ネイティブ サポートは、2000 年にWindows MEで追加されました。すべての.ZIP機能が Windows の圧縮フォルダー機能でサポートされているわけではありません。たとえば、Windows 10 Home エディションでは暗号化はサポートされていませんが、復号化は可能です。 [ 58 ] Unicode エントリ エンコーディングはWindows 7までサポートされておらず、分割アーカイブとスパン アーカイブは圧縮フォルダー機能で読み書きできず、AES 暗号化もサポートされていません。[ 59 ] Windows の .zip サポートは、 Dave Plummerによって書かれた「VisualZip」の買収に由来しています。[ 60 ] [ 61 ] [ 62 ]
AppleはMac OS X 10.3以降(BOMArchiveHelper、現在はArchive Utility経由)にZIPファイルの組み込みサポートを搭載しました。ほとんどのフリーOSも、 WindowsやmacOSと同様の方法でZIPファイルの組み込みサポートを提供しています。
OpenDocument Format (ODF) は 2005 年に zip アーカイブ形式の使用を開始しました。ODF はあらゆる種類のオフィス文書用のオープン形式であり、Collabora Online、LibreOfficeなどで使用されているデフォルトのファイル形式です。[ 63 ] Microsoft Office は 2006 年にOffice Open XML .docx、.xlsx、.pptx などのファイル に zip アーカイブ形式の使用を開始し、 Microsoft Office 2007でデフォルトのファイル形式になりました。
6.3.0 より前のバージョンのフォーマットでは、ファイル名をUnicodeで保存することはサポートされていませんでした。[ 64 ]標準によれば、[ 64 ]ファイル名はIBM PCの標準であるCP437エンコーディングで保存する必要がありますが、[ 64 ]実際には、DOSアーカイバはシステムにインストールされている文字エンコーディングを使用していました。Windows 11 までの組み込みアーカイバも、アーカイブを作成する際に、DOS との下位互換性のために、選択されたシステム言語に対応するシステムの「ANSI」エンコーディングを使用していました。
その後、Unicode でファイル名を格納するための 2 つのオプションを含むように標準が更新されました。1) 汎用ビットフラグフィールドの 11 番目のビットが設定されている場合、ヘッダーの「ファイル名」フィールドのファイル名は、シングルバイト エンコーディングではなくUTF-8として扱われるべきであり、2) ファイル名を UTF-8 エンコーディングで格納するために Unicode パス追加フィールドが追加されました。[ 64 ]次のアルゴリズムは、新しい「ファイル名」フィールドと、英語以外の文字を含む名前のファイルを正しく抽出するための従来の慣行の両方を考慮しています。[ 65 ]
ファイル名のデコードに誤ったエンコーディングが使用されると、ユーザーは各国のアルファベットの代わりに「文字化け」と呼ばれる文字の羅列を目にすることになります。上記のアルゴリズムは、このような事態を避けるために最大限の努力を払っています。「システムロケール」と「システムエンコーディング」の代わりに、一部のプログラムではユーザーが希望する非Unicodeエンコーディングを選択できるようになっています。
2016年に、この問題はLinux、BSD、Mac用のfar2lファイルおよびアーカイブマネージャで解決されました。[ 66 ] 2024年には、同様の解決策がDebianディストリビューションとその派生ディストリビューションで使用されている7zipのバージョン、およびUbuntuディストリビューションとその派生ディストリビューションで使用されているunzipのバージョンに追加されました。[ 67] [ 65 ]
名前に「zip」を含む規格やフォーマットは他にも多数存在します。例えば、zipはgzipとは異なり、gzipはIETF RFC 1952で定義されています。zipとgzipはどちらも主にDEFLATEアルゴリズムを使用して圧縮します。同様に、ZLIBフォーマット(IETF RFC 1950 )もDEFLATE圧縮アルゴリズムを使用しますが、エラーチェックと整合性チェックのためのヘッダーが異なります。その他、 7-Zip、bzip2、rzipなど、同様の名前を持つ一般的なフォーマットや、異なるネイティブフォーマットを持つプログラムも存在します。
生の DEFLATE ストリームの理論上の最大圧縮率は約 1032 対 1 ですが、[ 68 ] ZIP フォーマットを意図しない方法で悪用することで、圧縮率が 1 億 1 の ZIP アーカイブを作成できます。これらのZIP 爆弾は解凍すると非常に大きなサイズになり、解凍されるコンピュータの処理能力を圧倒します。[ 69 ]
ファイル形式はパブリックドメインに無償で提供されており、いかなる個人、団体、企業も法的にも道徳的にも権利を主張することはできない。
PKZIPやzlibとは全く異なる圧縮データ形式を使用しています。ただし、zlibのcontrib/blastディレクトリに問題の解決策が見つかるかもしれません。( contrib/blast )
は、Windows 10 Home エディションを除くすべての Windows 10 エディションで利用可能です。
PKWAREの現在および過去の.ZIPファイルのWayback Machineランディングページに2017年7月17日にアーカイブされました