ZIP (ファイルフォーマット)

ZIP（ジップ）は、データ圧縮やアーカイブのフォーマット。Windowsでよく使用されるフォーマットである。

**概要**
ZIPフォーマットは1989年にフィル・カッツが考案したもので、トム・ヘンダーソンが考案したそれまでのARCフォーマットに置き換わるものとして、PKWAREのPKZIPユーティリティ
に実装された。
他の具体例については「#ソフトにおける固有の拡張子」節を参照のこと。

**歴史**
ZIPファイルフォーマット仕様は、PKZIP0.9のパッケージに同梱されていたファイルで初めて公開された。
ZIPフォーマットはオープンフォーマットとしてパブリックドメインでリリースされたものであり、ZIPフォーマットは誰しもが自由に利用でき、個人、団体、組織、あらゆる形態の利用において法的にもモラル的にも全く制約はない。

**起源**
ZIPファイルフォーマットはPKWAREのフィル・カッツが考案し、PKZIPで実装された。ちなみにカッツは以前に「PKXARC」なるアーカイブ・ユーティリティーを公開していたが、システム・エンハンス・アソシエイツ社のARCというユーティリティの著作権を著しく侵害しているとして民事訴訟を起こされている。

**よく似た名前のフォーマット**
名前の一部に「zip」という名前を使った標準化仕様やフォーマットがたくさんある。同じDeflate圧縮アルゴリズムを使用していながら、ヘッダー・フッターの異なる物としては、gzip (1952) や zlib (1950) などがある。その他、よく似た名前の異なるファイルフォーマットや圧縮アルゴリズムとして7z、bzip2、rzipなどがある。

**バージョン履歴**
.ZIPファイルフォーマット仕様にはバージョン番号がある。しかし、それは必ずしもPKZIPツールのバージョン番号とは対応せず、特にPKZIPバージョン 6以降がそれに該当する。PKWAREは、 PKZIP製品が先進的な機能を利用してアーカイブを展開できるように予備的な機能を幾度も追加している。しかし、そのようなアーカイブを作成するPKWARE仕様はPKZIPの次の主要なリリースまで公開されない。他の会社や組織は自分たちのペースでPKWAREの仕様をサポートしている。
PKWARE仕様による各バージョンの主な機能は以下の通り。- 2.0: ファイルエントリをDeflateで圧縮可能となった。- 4.5: 64ビットZIPフォーマットが記載された。- 5.0: DES、Triple DES、RC2、RC4を暗号化のためにサポートした。- 5.2: RC2-64を暗号化のためにサポートした。- 6.1: 承認されたストレージについて記載した。- 6.2.0: セントラルディレクトリの暗号化について記載した。- 6.3.0: Unicode (UTF-8) ファイル名のストレージについて記載した。サポートされるハッシュ、圧縮、暗号化アルゴリズムが追加された。- 6.3.1: SHA-256 / 384 / 512の標準的なハッシュ値に訂正した。- 6.3.2: 圧縮メソッド 97 (WavPack) について記載した。
WinZipのバージョン12.1からDeflateよりも新しい圧縮メソッド、特にBZipやLZMA、PPMd、Jpeg、Wavpackのメソッドを使用したファイルの拡張子に.zipxが使用されている。JpegとWavPackは「最適メソッド」圧縮が選択されたときに適切なファイル種別に対して適用されている。

**標準化**
2010年4月ISO/IEC JTC 1で、ZIP互換のISO / IECの国際標準フォーマットを作成するために開始されるプロジェクトを決めるための投票が行われた。独自研究範囲|「ドキュメントパッケージング」という表題で提案されたプロジェクトはOpenDocument、Office Open XMLやEPUBを含む既存の標準規格の利用に適したZIP互換の最小圧縮アーカイブフォーマットと考えられる。|date=2024年9月
現在のZIPフォーマットはオープンフォーマットの要求仕様にあわないことがある。それは目に見える形で公開されたコミュニティ駆動開発を通して開発されていないからである。オープンな産業機構や標準化団体が賛同してメンテナンスされているものでもない。現在の ZIP フォーマットの一部は 自由 なファイルフォーマットの要求仕様にあっていない。誰もが ZIP フォーマットを、如何なる目的であっても金銭的な負担がなく利用できるようにするため、著作権、特許、商標などの制約がない。  PKWARE サイトにある最新の資料は、著作権表示があるが、フォーマット仕様とその機能拡張がパブリックドメインに置かれていることを認めている。

**技術的な情報**

**構造**
600px
2007年9月にPKZIPは、UTF-8のファイル名を格納するための仕組みを含むZIP仕様のリビジョンをリリースした。それは最終的にZIPに対するユニコード互換を追加するものである。

**ファイルヘッダ**

**圧縮メソッド**
現在のZIPファイルフォーマット仕様では次のメソッドの詳細が記載されている。
*stored（無圧縮）
*Shrunk
*Reduced（メソッド 1-4）
*Imploded
*Tokenizing
*Deflated
*Deflate64
*BZIP2
*LZMA (EFS)
*WavPack
*PPMd
最も一般的な圧縮メソッドはDEFLATEでIETF 1951に記載されている。

**暗号化**
ZIPはシンプルなパスワードベースの共通鍵暗号をサポートすると仕様に記載されている。但し、重大な脆弱性があることが知られている。特に、既知平文攻撃に対して脆弱性があり、貧弱なランダム数生成器の実装によってさらに安全性が低くなる場合もある。
バージョン5.2以降の.ZIPファイルフォーマット仕様には、圧縮 と 暗号化 (例えば AES) を含む新しい機能のメソッドが追加されている、と記載されている。WinZipはAESベースの標準規格を使用し、それは7-Zip、XCeedやDotNetZipでも使用されている。しかし、ベンダによっては他のフォーマットを使用するものである PKZIP また、SecureZIP は RC2, RC4, DES, Triple DES 暗号メソッド, 電子証明書ベースの暗号 / 認証 (X.509) やアーカイブヘッダ暗号化をサポートする。

**ZIP64**
オリジナルのZIPフォーマットは、ZIPアーカイブ内のエントリに 65535 の制限があるのと同様に、様々なサイズ（ファイルの圧縮/非圧縮サイズ、アーカイブの合計サイズ）に4 GiBの制限があった。仕様のバージョン4.5（それは特定ツールのバージョン4.5と同じではない） では、PKWAREはこういった制限を回避するために16 EiB（264 バイト）まで増加させた "ZIP64" フォーマット拡張を導入した。ZIP64サポートは新規に発生したものである。例えば、Windows XPのファイルエクスプローラーはZIP64をサポートしないが、 Windows Vistaのエクスプローラーではサポートする。同様にDotNetZipやPerlのIO::Compress::Zip、PythonのzipfileのようなライブラリはZIP64をサポートする。Javaの組み込みモジュールjava.util.zipは 2010年9月現在ではサポートしていない。今後、OpenJDKに追加されてJava 7への同梱を予定している。

**長所と短所**
ZIPファイルのようにファイルを分割して圧縮するとランダムアクセスが可能である。他のデータを読み込むことなく個々のファイルを取り出すことができる。DEFLATE圧縮の可能性を限定するときでさえ、それぞれのファイルのために違う辞書圧縮を利用するとアーカイブ全体のサイズをより小さくできることがある。
この圧縮の手法は一般的に小さなファイルが大量にあるときのアーカイブとしては適切ではない。ZIPアーカイブフォーマットでは、個々のエントリに関する情報を持つメタデータは圧縮しない。これは、特に個々のエントリのサイズを小さくして、そのエントリ向けのメタデータのサイズを扱うようにアーカイブ可能な最大圧縮比率を設けて制限されているためである。
別の手法としては 圧縮されたtarアーカイブ（.tar.gz または .tgz） が使用される。それはファイルデータとメタデータがgzipで圧縮される1つの単位として圧縮される。この手法の欠点はランダムアクセスの効率が悪くなってしまうことである。

**ZIPと他のファイルフォーマットとの組み合わせ**
ZIPファイルフォーマットでは、セントラルディレクトリの後（ファイルの末尾）に、65,535バイト以下のデータを入れることのできるコメント欄がある。date=2024年9月
ZIPフォーマットやZIPの亜種であるJARフォーマットが持つこのような特性は、一見普通のファイルに見えるが、コンピューター内部に害を及ぼすJavaクラスを隠すことに悪用できてしまう。例えば、ウェブにアップロードされるGIFイメージがある。これはGIFARと呼ばれる手法で、Facebookのようなウェブアプリケーションに対して効率的な攻撃として知られている。

**実装**
.NETアプリケーションでは、.NET Framework 4.5で追加されたSystem.IO.Compression名前空間のZipArchiveクラスやZipFileクラスなどが使用できる。それ以前の場合、Microsoft Public License  でソースとバイナリが利用できる DotNetZipと呼ばれる無償のオープンソースライブラリがある。従来のパスワードを用いたZIP暗号化、WinZip互換のAES暗号化、ユニコード、ZIP64、コメント、分割アーカイブ、自己展開アーカイブといった多くのZIP機能をサポートする。Microsoft .NET 3.5 ランタイムライブラリはZIPフォーマットをサポートするクラスSystem.IO.Packaging.Packageを含む。要出典範囲|主としてISO/IEC国際標準Open Packaging Conventionsを使用するドキュメントフォーマットのために設計されている。|date=2024年9月

**Windows 圧縮フォルダー**
Windowsでは、Windows 98のためにリリースされたPlus!パック以降、エクスプローラーからZIP形式の圧縮と展開をサポートしている。マイクロソフトはこの機能を「圧縮フォルダー」と呼んでいる。圧縮フォルダーはZIPの機能を全てサポートしているわけではなく、例えばWindows 10ではAES暗号化、分割アーカイブ、パスワード付き圧縮などが行えない。また圧縮時にはシステムロケールが日本語に設定されたWindowsではファイル名にMicrosoftコードページ932を使用している。（Windows NT系の内部文字コード及びファイルシステムの文字コードはUnicodeであるが、互換性のためにMicrosoftコードページ932に変換している。変換できない文字が含まれるファイル名は圧縮できない。）展開時はhotfixを適用したWindows 7もしくはWindows 8以降でUTF-8に対応したため、ファイル名がMicrosoftコードページ932とUTF-8のどちらであっても問題なく展開できる。要出典範囲|macOSのFinderでは原則として圧縮・展開ともにUTF-8を想定しているため、macOSで作成したZIPファイルはhotfixを適用したWindows 7以降であればで問題なく展開できるが、逆にWindowsで作成したZIPファイルをmacOSで展開するとファイル名によっては文字化けもしくはエラーとなる。（これはファイル名の話でファイルの内容には影響しない。）|date=2021-06-28

**パスワード付きZIPファイルの脆弱性**
パスワード付きZIPファイルの暗号化方式として、最も標準的なのは Traditional PKWARE Encryption (ZipCrypto) であり、Windows 11のファイルエクスプローラで復元できるのもこの方式だけである。しかし、Traditional PKWARE Encryption (ZipCrypto) は暗号化方式としては脆弱であり、bkcrack などのツールを使うと、普通のパソコンで数分程度で暗号が解けてしまうので、暗号化方式としては無意味である。

**強力な暗号化についての議論**
2003年にWinZip 9.0パブリックベータをリリースしたとき、WinZipは独自のAES-256暗号を導入した。それは違うファイルフォーマットを用いた新たな仕様としてドキュメントに記載された。要出典|暗号の標準規格はプロプライエタリでは無いが、 PKWARE は2001年以降、PKZIP 5.0や6.0では使用されていた強力な暗号化仕様 (SES) を含めるようにAPPNOTE.TXTを更新しなかった。WinZipの技術コンサルタント Kevin KearneyやスタッフイットプロダクトマネージャMathew CovingtonはSESを差し控えるようにPKWAREを非難。これに対し、PKZIPチーフ技術オフィサーのJim Petersonは承認に基づく暗号化規格はまだ完全ではないと主張。しかし、バージョン 4.5の頃（PKWARE の FTP サイトで確認できる）に公開された最新のAPPNOTE.TXTには、SESだけではなく、同時期に存在したPKZIPプロダクトで作成された.ZIPファイルが用いたDeflate64、DCL Implode、BZip2も除外された。|date=2024年9月
この欠点を克服するためにPentaZipのような同時期に存在したプロダクトは違うファイルフォーマットにZIPアーカイブを暗号化する強力なZIP暗号化を実装した。
また別の議論では、PKWAREは2003年7月16日に安全な.ZIPファイルを作成するために強力な暗号と.ZIPを組み合わせるための方法を記載した特許を適用した。
結局PKWAREとWinZipはお互いのプロダクトをサポートすることに同意した。2004年1月21日にPKWAREはWinZipベースのAES互換フォーマットをサポートするとアナウンスした。WinZipベータの次のバージョンではSESベースのZIPファイルのサポートが行われた。要出典|PKWAREは最終的にSESを記載した.ZIPファイルフォーマット仕様のバージョン 5.2を公式にリリースした。自由ソフトウェア プロジェクト 7-Zipも（そのPOSIX 移植された p7zip が行うことで）ZIPファイルのAESをサポートしている。|date=2024年9月

**ソフトにおける固有の拡張子**
、以下に示す例はその一部である。ただし、圧縮アルゴリズムにzlibを使っているものでも、ZIP互換の格納方式を使っていないものは掲載しない。
 apk
 Android のアプリケーションアーカイブ
 crx
 Google ChromeやChromiumの拡張機能のアーカイブファイル
 docx, xlsx, pptx
 Microsoft Office（2007以降）の文書フォーマット (Office Open XML)
 epub
 IDPFが提唱する電子書籍の標準フォーマット
ipa
 iPhoneシリーズをはじめとしたiOS搭載デバイス向けのアプリケーションアーカイブ
 ipg
 iPodゲームのアーカイブファイル
 jar
 Javaのアーカイブファイル
 kmz
 Google Earthの標準ファイル形式。kmlをZIP圧縮したもの。
 nar
 伺かのINSTALL/1.x仕様に準拠したアーカイブファイル
 odt, ods, odp, odb, odg, odf
 OpenDocumentの文書フォーマット
 smzip
 StepManiaの各種の自動インストール型パッケージファイル
 wgt
 W3C Packaged Web Apps (W3C Widgets) のパッケージファイル。Bada widget、Tizen Web application、Opera widget など。
 wsz
 Winamp用のスキンファイル
 wmz
 Windows Media Player用のスキンファイル
 xpi
 Mozilla Firefox（及びそれをベースとするNetscapeシリーズのウェブブラウザなど）やMozilla Thunderbirdなどの拡張機能（アドオン）のインストーラファイル (XPInstall)
 3mf
 3Dプリンター向けの3Dファイル

**脚注**

**注釈**

**出典**

**関連項目**

**外部リンク**
 1950 (zlib)- 1951 (Deflate)- Judgment in favor of SEA in SEA v. PKWARE and Phil Katz- Current file format specification from PKWARE (including many recent features that are not widely supported)- Comparison of the performances of various methods of data compression (french)- ZIP2 file format specification- Zip Files All The Way Down- ZIP File Quine- Limitations of java.util.zip