「パスワードを付けた」は「書庫全体を閉じた」ではない
パスワード付きZIPは、鍵のない箱に見えやすいです。ファイルを持っている人でも、パスワードがなければ中は見えない、と思いがちです。形式はそれより細かいです。ZIP は先にディレクトリがあり、そのあとファイルが並びます。暗号化フラグは各ファイルのローカルヘッダと中央ディレクトリに付きます。.zip ファイル全体には付きません。パスワードを付けた、は少なくとも一つの圧縮データ流が、どれかの算法で覆われた、という意味です。ディレクトリが読めないことではありません。すべての項目が同じ算法、同じパスフレーズを使ったことでもありません。
日本の事務では、『ZIP にパスワードを掛け、次のメールでパスワードを送る』が長く使われてきました。相手がエクスプローラーでダブルクリックできれば十分、という判断です。給与台帳、身分証のスキャン、SSH 秘密鍵、データベースのダンプ、伏せていない顧客表は、いま開いているフォルダの外へ、平文の手がかりを増やしてよい内容ではありません。問うのは『この圧縮ソフトは賢いか』ではありません。『この一回の梱包が、出ていけない内容を、平文のファイル名、平文の項目、弱い暗号流として渡していないか』です。前のノートは近い受け渡しを書いています。暗号化せずクラウドへ上げたファイルは、事業者、同期クライアント、内容ハッシュに原文が残ることがあります。先にパスワード付きZIPにしてから上げるのは、問いを『クラウドはファイルを見られるか』から『この容器はどの層を閉じたか』へ移すだけです。
本稿は PKWARE の APPNOTE.TXT 6.3.10(2022年11月1日)、WinZip AES 仕様 AE-1 / AE-2、および 7-Zip の 7z 形式における AES-256 の説明 に留めます。層が公開文で確かめられ、この端末の一覧と突き合わせやすいからです。社内方針、ウェブの『暗号化圧縮』、古い画面は、もう一層を重ねます。道具を変えたら、その版の暗号化オプションと Method をやり直してください。下の ZipCrypto の文を、すでに AES-256 を選んだ書庫や、『ファイル名を暗号化』を入れた書庫へ貼らないでください。
従来暗号、AES拡張、ファイル名の暗号化は、三つの別の層
『ZIPは暗号化されているか』を Yes / No で聞くと、少なくとも三層が落ちます。第一は従来の PKWARE 暗号化です。画面では ZipCrypto や Zip 2.0 と出ることが多いです。APPNOTE 第6節は対象を狭く書いています。PKZIP が暗号化するのは、圧縮したあとのデータ流です。暗号化された各ファイルは、データ領域の先頭に 12 バイトの暗号化ヘッダを置きます。32ビット鍵が三つ、パスフレーズで初期化され、ZIP がもともと使う CRC-32 で更新されます。拡張子はまだ .zip です。エクスプローラーや古い展開ソフトは、パスワード欄を出すことが多いです。互換は良いです。強度は別の問いです。
第二は、同じ ZIP 容器のあとから足された AES です。WinZip は基本構造を変えず、一事だけ足します。圧縮メソッドを十進の 99 にし、ローカルヘッダと中央ディレクトリの両方へ 11 バイトの追加フィールド 0x9901 を置きます。ベンダー識別は ASCII の AE です。強度バイト 0x01 / 0x02 / 0x03 は、128、192、256 ビット鍵に対応します。本当の圧縮メソッド(たとえば Deflate の 8)は、この追加フィールドへ移ります。AES を知らない古い道具は、暗号文を平文として解くのではなく、『未対応の圧縮メソッド 99』と返すことが多いです。この層が守るのはファイルの中身です。既定では、中央ディレクトリのファイル名を暗号文へ書き換えません。
第三は『ディレクトリも覆う』です。ZIP の Strong Encryption は中央ディレクトリの暗号化を選択肢として書き、general purpose bit 6 や bit 13 などの旗が要ります。従来の ZipCrypto に、この層はありません。7z 形式は別の道を取ります。7-Zip の形式ページは AES-256 を使い、パスフレーズから SHA-256 ベースの関数で鍵を導き、多くの反復で総当たりのコストを上げると書いています。コマンドラインの -mhe=on がファイル名を暗号化します。これを入れないと、中身が AES でも、一覧は先に名前を出せます。7-Zip の日本語画面では『ファイル名を暗号化』です。ZIP 形式のままでは、このチェックは期待どおりに効かないことが多いです。名前まで隠したいなら、圧縮形式を 7z にしてから入れてください。
| 層 | たいてい閉じるもの | 既定でまだ見えやすいもの | その場での見分け |
|---|---|---|---|
| ZipCrypto / 従来 PKWARE | そのファイルの圧縮データ流 | ファイル名、未暗号化の項目、書庫の形 | 7z l -slt の Method に ZipCrypto |
| WinZip AES(AE-1 / AE-2) | そのファイルの中身(AES + HMAC) | ファイル名。同じ書庫の未暗号化の他項目 | 圧縮メソッド 99、追加フィールド 0x9901、Method に AES- |
| 7z + ファイル名の暗号化 | 中身とディレクトリヘッダ | -mhe=on が切れていると、名前が先に出ることがある |
7-Zip の『ファイル名を暗号化』、または -mhe=on |
製品ページや右クリックの『AES-256』は、中身の算法に答えるだけです。ファイル名が平文ヘッダにあるか、パスワードのない項目が混ざっているかには答えません。確かめるときは、先に Method とファイル一覧を見て、そのあとパスフレーズの長さを見てください。
ZipCrypto:仕様自身が弱いと書いており、既知平文の研究線を止めない
従来暗号が弱いのは、巷の噂ではありません。形式の定義者が、すでに一段下げています。APPNOTE 6.0.1 は、この形式を considered weak by today's standards と書き、低い安全要件か、より古い ZIP プログラムとの互換に限ると勧めています。同じ節に骨格もあります。鍵の初期値は 305419896、591751049、878082192 の 32ビット整数三つです。update_keys はパスフレーズの各バイトで CRC-32 を呼びます。データ領域先頭の 12 バイト暗号化ヘッダが鍵をさらに掻き混ぜ、末尾の 1 バイトまたは 2 バイトを CRC の上位と照合して、パスフレーズが正しそうかを見ます。これはストリーム暗号です。AES-GCM のような、認証タグ付きのブロックモードではありません。
仕様は、12 バイトヘッダの目的を『データへの平文攻撃を無効にするため』とも書いています。公開研究は別の道を取りました。1994年、Eli Biham と Paul C. Kocher は A Known Plaintext Attack on the PKZIP Stream Cipher を出し、既知の平文の一続きがあれば内部状態を戻せることを示しました。Michael Stay の 2002年の ZIP Attacks with Reduced Known Plaintext は、必要な平文量をさらに下げました。書庫には予測しやすい先頭がよく付きます。PDF の %PDF、Office 文書の固定ヘッダ、XML 宣言、PNG 署名です。攻撃手順は本稿の範囲外です。結論に残す要点は、弱点は算法にあり、『パスワードが6文字だから』ではない、です。パスフレーズを長くしても、『従来暗号は仕様が弱いと書いており、既知平文の研究線がある』は書き換えられません。
互換が、まだ残っている理由です。Windows のエクスプローラーは普通の ZIP を作って開けますが、ZIP へパスワードを付ける標準画面はありません。Microsoft Q&A の独立アドバイザー回答は、パスワードを付けるには 7-Zip などの第三者ツールが要り、そうしたツールが作った ZipCrypto の書庫にはエクスプローラーが入力欄を出すことが多い、と書いています。相手がダブルクリックできればよい、という理由で、ZipCrypto を既定のまま残すソフトは少なくありません。得るのは『相手はソフトを入れなくてよい』です。払うのは、仕様がすでに認めている弱い暗号化です。7-Zip は ZIP を AES-256 で書けます。変えたあと、ZipCrypto しか知らないシステムの展開は、開けないことがあります。互換と強度の取り違えであり、『どちらも暗号化と書いてあるから同じ』ではありません。
ファイル名、CRC、未暗号化の項目:暗号文の流れに入っていないものは平文のまま
中身の層を AES へ変えても、ZIP は既定では『一覧できる容器』です。ローカルヘッダと中央ディレクトリの FileName は平文の欄です。general purpose bit 0 が意味するのは、この項目のデータ流が暗号化された、だけです。bit 11 はファイル名が UTF-8 であることであり、ファイル名が暗号化されたことではありません。2004年、Tadayoshi Kohno の WinZip 暗号化方式の分析は、形式の事実を三つ、平たい文で書いています。暗号化ファイルのメタデータは漏れる、ファイル名は認証されない、同一書庫に暗号化ファイルと未暗号化ファイルを同時に置ける。実装の欠陥ではなく、容器が許している形です。
WinZip 自身の AES 説明は、混在書庫を正式に許しています。ZIP 内のファイルをすべて暗号化せよ、という要求はありません。暗号化ファイルが同じ方法、同じパスフレーズを使え、という要求もありません。一つの書庫は、未暗号化ファイルと Zip 2.0、AES-128、AES-192、AES-256 を任意に組み合わせてよいです。フォルダ項目は、体積を抑えるため暗号化しないほうがよい、とまで書いてあります。実務の結果はこうです。給与-2026-09.xlsx と readme.txt を同じ書庫へ入れると、表だけがパスワードを聞き、説明文とディレクトリ名は持っている人なら読めます。受け手、メールの中継、ドライブのプレビュー、同期クライアントが先に見るのは、この一覧であることが多いです。解けたあとのセルではありません。日本の『パスワード別送』も、この層は直しません。次のメールでパスフレーズを隠しても、最初の添付のヘッダはすでに名前を出しています。
平文ヘッダには、大きさと検査値もあります。WinZip は、AE-1 が未暗号化内容の CRC を ZIP ヘッダへ置き、AE-2 は CRC を 0 にして 10 バイトの認証コードで完全性を見ると書いています。FAQ の理由は、4 バイト以下のファイルでは、CRC そのものが原文の推定を助け、使った暗号化とは無関係だ、です。WinZip 11 以降、大半のファイルは完全性の確認を増やすため AE-1 に戻ります。ただし未圧縮サイズが 20 バイト未満のファイルと、自分で検査を持つ BZIP2 は、AE-2 のまま CRC を置きません。鍵導出は PBKDF2(RFC 2898)、反復 1000 回、擬似乱数関数は HMAC-SHA1 です。仕様は HMAC-SHA1 の出力が 160 ビットであるとも書いています。したがって 192 / 256 ビット AES の実効的な探索空間を、理論上の鍵長のまま読むことはできません。これらの数字を『破る』必要はありません。公開仕様にすでに書いてあります。
その場で確かめる:原文を出さず、先に Method とファイル名を見る
『パスワードを付けたから安全だ』という標語は、それ自体では証明になりません。検査はこの端末で終わる数歩に分け、各歩は一つの問いだけに答えてください。本物の給与表、証明書、秘密鍵で試さないでください。
いま使っている身分証のスキャン、本番の鍵、生きている従業員表を『どんな見た目か』のために梱包しないでください。捨てられるカナリアを用意してください。例はファイル名 canary-payroll-20260905.txt、本文は一度きりの印だけです。確かめるのはディレクトリと Method であり、本物をもう一度圧縮することではありません。
- メモ帳でカナリアテキストを書き、ファイル名はわざと業務に見えるものにします。例は
canary-payroll-20260905.txtです。ランダムなパスフレーズが要るときは、パスワードジェネレーターで 6–128 文字を引いてください(既定は 16。8 未満は弱いと出ます)。この列は書庫のパスワードだけに使い、新しいログインパスワードにはしないでください。 - 普段の外出し方で ZIP を一つ作ります。既定が ZipCrypto のソフトも、AES-256 を手で選ぶソフトもあります。題を隠すためにファイル名を変えないでください。7z をもう一つ作り、『ファイル名を暗号化』を入れたものと切ったものを比べてください。
- まだパスフレーズを入れないでください。7-Zip で開くか、端末で
7z l -slt canary.zipを実行します。一覧にすでにcanary-payroll-20260905.txtが出るかを見ます。次にMethod =の行を探します。ZipCryptoなら従来暗号、AES-256なら中身の層の AES です。本文を出さなくてもこの二項目が読めるなら、それらは『先にパスワードを入れる』層にはありません。 - 7z でも同じように一覧します。ファイル名の暗号化が切れていると、名前はまだ出ることが多いです。
-mhe=onを入れると、パスフレーズを入れるまでカナリア名は出てはいけません。第三層があるかの対照であり、『7z は ZIP より必ず神秘的だ』ではありません。差はディレクトリヘッダが覆われているかです。 - カナリア書庫を、普段使うドライブかメール下書きへ置いてください(他人には送らないでください)。プレビューやウェブ画面が内部のファイル名を出すかを見ます。前のノートは、暗号化していないファイルの重複排除とプレビューが原文を要ると書いています。ここでは中身が閉じていても、ディレクトリ名は先に索引されることがあります。終わったらカナリア書庫と元ファイルを消し、ごみ箱も見てください。
最初の確かめの細部、つまりこの端末が平文本文を圧縮ソフトへ渡したかは、ブラウザで暗号化するなら、平文が端末を出ていないことをその場で確かめる とは違います。圧縮ソフトは、梱包するためにほぼ必ずこの端末で原文を読みます。本稿が確かめるのは、『梱包したあと、暗号文の流れに入っていないものはまだ何か』です。カナリアのファイル名が、パスワードを入れる前に 7z l -slt やドライブのプレビューへ出るなら、信頼の境界は『相手はパスワードを持っていない』より大きいです。Method がまだ ZipCrypto なら、買ったのは互換であり、仕様が言う強い暗号化ではありません。
開いてすぐ使えるファイル暗号化で、「ファイル全体の暗号文」と「書庫のパスワード」を分ける
欲しいのが『先にこの端末でファイル全体を暗号文にし、メールかドライブかはあとで決める』なら、登録は不要です。ファイルを MakePwd へ渡す必要もありません。ファイル暗号化 を開き、今のタブで AES-256-GCM を塊ごとにかけ、.lock または .enc をダウンロードしてください。パスフレーズは PBKDF2-HMAC-SHA256、100,000 回で伸ばし、ファイルごとに独立した salt を使います。単一ファイルは 5 GB までです。ファイル、パスフレーズ、平文は業務データとしてアップロードしません。どのツールも開いてすぐ使え、アカウントはなく、この列を預かるパスワード保管庫もありません。
ファイル暗号化が答えるのは、『これらのバイトはブラウザを出る前に暗号文になったか』です。『ZIP は既定でファイル名を閉じるか』には答えません。ダウンロード名は自分で決められるので、給与明細-2026.xlsx.zip のように題を広告する名前を出す必要はありません。.lock の先頭には元のファイル名が残ることがあるので、名前そのものが機微なら、暗号化する前に変えてください。暗号文はドライブやメールを通れます。パスフレーズは別経路で送ってください。例は ワンタイムリンク です。鍵は URL の # フラグメントにあり、HTTP と一緒にサーバーへは送られません。作成も閲覧も公開で、サーバーが一時保存するのは暗号文だけです。ランダムなパスフレーズが要るときは、パスワードジェネレーター で 6–128 文字を引き、そのページだけでコピーしてください。暗号化せずクラウドへ上げたあと事業者がまだ何を見られるかは、前のノートです。本稿は、『パスワード付きZIPのあと、まだ何が残るか』だけを結論の線へ落とします。
よくある質問
ZIPにパスワードを付けたら、書庫全体が暗号化されますか?
いいえ。PKWARE APPNOTE は暗号化フラグを各ファイルの general purpose bit 0 に置きます。覆うのはその項目の圧縮データ流であり、容器全体ではありません。ファイル名はローカルヘッダと中央ディレクトリにあります。WinZip の AES 説明は、同一ZIPに未暗号化の項目と Zip 2.0、AES-128、AES-192、AES-256 を混ぜてよく、パスワードも違ってよいと書いています。
ZipCrypto と AES-256 のZIPは、どこが違いますか?
ZipCrypto は APPNOTE 第6節の従来 PKWARE 暗号化です。32ビット鍵が三つ、12バイトの暗号化ヘッダ、CRC-32 による鍵更新です。仕様自身が今日の基準では弱いと書き、低い安全要件か古いZIPプログラムとの互換に限ると勧めています。WinZip AES は追加フィールド 0x9901、圧縮メソッド 99、salt、パスワード検証値、HMAC-SHA1 認証コードを使います。拡張子はどちらも .zip なので、見るべきは Method であり、末尾ではありません。
パスワードを入れなくても、中のファイル一覧は見えますか?
従来のZIPと、ファイル名の暗号化を入れていない書庫では、たいてい見えます。7-Zip の 7z l -slt は、平文を展開せずにファイル名と Method を出します。7z 形式は -mhe=on でファイル名を暗号化できます。その層がディレクトリヘッダも覆います。Windows のエクスプローラーに、ZIPへパスワードを付ける標準画面はありません。
パスワード付きZIPと MakePwd のファイル暗号化は同じですか?
違います。書庫のパスワードが答えるのは、その容器がどのZIP暗号化を使ったかです。ファイル暗号化は今のタブで AES-256-GCM によりファイル全体を暗号化し、.lock / .enc を書き、単一ファイルは 5 GB まで、ファイルとパスフレーズはアップロードせず、開いてすぐ使えます。パスフレーズは別経路で送ってください。例はワンタイムリンクの # フラグメントです。
次に書庫を作る前に覚える三つのこと
第一に、『パスワードを付けた』は、少なくとも一つのファイルのデータ流が、どれかの ZIP 暗号化で覆われた、という意味です。書庫のディレクトリが読めないことではありません。すべての項目が暗号化されたことでもありません。第二に、ZipCrypto(仕様が弱いと書き、既知平文の研究線がある)、WinZip AES(中身は強い。ファイル名は既定で平文ヘッダのまま)、7z のファイル名の暗号化は、三つの別の境界です。拡張子が .zip か .7z かでは、今いる層は分かりません。第三に、一度きりのカナリアと 7z l -slt で、Method と、パスフレーズを入れる前に出る名前を確かめてください。本物の表で試さないでください。
暗号化せずクラウドへ上げたあと、事業者がまだ何を見られるかを続けるなら、暗号化せずクラウドへ上げたファイルを、事業者・同期クライアント・内容ハッシュはまだ何を見られるか を読んでください。暗号化そのものが平文をこの端末の外へ出していないかをその場で見るなら、ブラウザで暗号化するなら、平文が端末を出ていないことをその場で確かめる があります。パスフレーズを別に送り、メール本文へ置きたくないときは、URLのハッシュ記号の後ろに鍵を置ける理由と、その保護が効かなくなるとき を読んでください。本稿が扱うのは、『パスワード付きZIPを送ったあと、既定の暗号化・ファイル名・未暗号化の項目はまだ何を残すか』を、結論に書ける範囲へ落とすことだけです。