zipファイルを解凍する際にパスワードを要求されることがありますが、それはzipファイルのアーカイブデータが暗号化されている証拠です。今回はzipデータの暗号化を行う方法について解説します。

 zip形式で用いられている暗号化アルゴリズムは「ZipCrypto」といわれる、独自の方法です。zipファイルに対しては、AESやBlowfishといったより強力な暗号化アルゴリズムが仕様上は使えるのですが、これに関してはPKWARE社が特許を取っているため、zip標準として実装するにはPKWAREとライセンスを結ぶ必要があり、こういった高度な暗号化ができるzipアーカイバの大半が有料のソフトウェアです(ちなみにzipファイルを圧縮ファイル単位ではなく、まるごと暗号化するのであれば、仕様の範囲外となるためライセンスは不要です)。

 zip形式の暗号化の主な手順はこのようになります。

  1. パスワードより3つの32ビットキーを生成する
  2. 32ビットキーより12バイトの暗号ヘッダを作成して、アーカイブデータの前に追記する
  3. これらをもとにアーカイブ対象のデータを暗号化する
 まずは32ビットキーの生成の仕方から。32ビットキーは、それぞれ異なる初期値を持つ3つのunsigned int型に対し、パスワードの文字数だけ、決められた符号化を施します。