ZipCryptoには暗号強度が弱いという問題に加え、既知平文攻撃(Known Plaintext Attack)の脆弱性が存在します。これは暗号化ZIPの中に12バイト以上の既知の平文があれば残りのファイルを復号できてしまうというものです。
暗号化ZIPの中にファイルが1つしかない場合でも、その中に含まれる平文の一部がわかれば攻撃は可能です。しかし、平文の開始位置を正確に指定しなければいけないため、現実的には、暗号化ZIPの中に複数のファイルがありその中の1つが既知のファイル、つまり平文が入手できるファイルであった場合に攻撃が可能です。
暗号化ZIPではファイル名などは暗号化されないため、ZIPファイルの中に含まれるファイル名やCRC(Cyclic Redundancy Check:巡回冗長検査)を見ることができます。そのファイル名やCRCより既知のファイルかどうかの推測が可能です。例えばネット上で公開されている資料や、OSやアプリケーションに付属しているファイル、既に平文で送信したファイル等が暗号化ZIPの中に含まれる場合は、残りのファイルを復号することが可能です。

図4 暗号化ZIPではファイル名などが参照できる
図4の例では暗号化ZIPの中に含まれるPDFのファイル名よりウェブサイトで公開している資料と同じではないかと言うことが推測できます。ファイル名が同じでもバージョンが異なるということもありますが、CRCが一致することを確認することにより同一のファイルであると確認できます。
この例では提案書と製品資料を1つのZIPファイルに含めていますが、例えば見積書と製品資料や、セミナーの参加者名簿とセミナー案内を1つのファイルにすることはよくあるのではないでしょうか。それらの資料がウェブサイトで公開されていたり、何らかの方法で入手できたりした場合は攻撃に利用されてしまいます。
ZipCryptoの既知平文攻撃の脆弱性は1994年にその理論が最初に発表され、その後さらに効率的に攻撃する方法や、実際に攻撃を行うツールなどが公開されています。

図5 「bkcrack」による既知平文攻撃の例
図5はZipCryptoの既知平文攻撃の脆弱性を用いたツール「bkcrack」を用いた攻撃の例です。「secret.zip」の中には既知のファイル「readme.txt」と秘密のファイル「secret.txt」の2つのファイルが存在し、大小英字数字16桁のランダムなパスワードで暗号化されています。「bkcrack」により、既知のファイル「readme.txt」を用いて「secret.zip」の内部で使用している鍵を約8秒間で解析することができ、解析した鍵を用いて「secret.txt」を復号し取り出しています。
ファイルのサイズなどの条件によって解析時間は異なりますが、暗号化ZIPの中に既知のファイルがあれば短時間で残りのファイルを復号することが可能です。
ZipCryptoの既知平文攻撃の脆弱性が発表されてから既に20年以上が経ちますが、公開されている資料や案内などの既知のファイルと秘密にすべきファイルを一緒に1つのZIPファイルにすることは今でも良く行われており、既知のファイルを含めないことを徹底するのは難しいのではないでしょうか?
暗号化ZIPをメールに添付し、パスワードを別のメールで送付する方式に代わる手段としてはどのようなものが考えられるでしょうか?
ビジネスチャットでファイルを共有する
テレワークの推進により「Teams」や「Slack」などのビジネスチャットを導入する企業も増えています。これらのビジネスチャットでは外部のユーザーを招待して組織間を跨いだ共同作業を行うことも可能です。通信はTLSで暗号化されていますので、ファイルを暗号化して送信する必要はありません。また、招待されたユーザーのみが参加しているため、無関係の第三者に誤送信をするということも起こりません。
クラウド(SaaS)のファイル共有サービスを用いる
クラウド(SaaS)のファイル共有サービスを用いるのも良いでしょう。主要なファイル共有サービスでは、受信者の指定やパスワードの設定、有効期限の設定などが可能です。通信はTLSで暗号化されている他、誤送信してしまった場合でも、共有URLを無効にすることによりダウンロードされることを防ぐことができます。
クラウド(SaaS)のファイル共有サービスは、個人が契約したものを使わせるのではなく、法人契約したアカウントで使用させるようにし、操作ログなども取得して利用状況を把握できるようにしましょう。
ZIP以外の方法で暗号化する
ビジネスチャットやクラウドのファイル共有サービスが利用できない場合、利便性や安全性は劣りますが、暗号化ZIP(特にZipCrypto)以外の方法で暗号化してメールで送信し、パスワードはメール以外の別経路で送付する方法もあるでしょう。
WordやExcelなどのOffice製品では標準でパスワードを設定して暗号化する機能が備わっています。また、PDFでは「Adobe Acrobat」やフリーソフトの「PDF-XChange Editor」、「Cube PDF」などを用いることによりPDFを暗号化することが可能です。
Office文書やPDF以外のファイルなどの場合は、受信側が対応した圧縮・展開ソフトをインストールしていることを確認した上で、ZIP(AES-256)や7z(拡張子7z)で暗号化して送信する方法もあります。7zはオープンソースの圧縮・展開ソフト「7-Zip」の独自の形式です(7-Zipは7z以外にもZIPなど多くの形式に対応しています)。7zはZIP(AES-256)よりも暗号強度が強く、ファイル名の暗号化にも対応しているため、7zが利用できる場合は、ZIP(AES-256)よりも7zを用いることを推奨します。
なお、暗号化したファイルをメールに添付した場合は、メールサーバーやメールゲートウェイでのマルウェア検査ができなくなるため、エンドポイントのマルウェア対策ソフトでのリアルタイムスキャンの有効化や、EDR(Endpoint Detection and Response)の導入など、エンドポイントでのマルウェア対策をより強化する必要があります。
これまでも問題が指摘されてきた暗号化ZIPによるファイルの送受信ですが、内閣府・内閣官房での廃止の決定を機に、その運用を見直す動きが省庁だけでなく民間企業にも広がってきています。現在ではセキュアなファイルの送受信に使えるクラウドサービスなどさまざまな方法が登場してきています。これを機会にセキュリティと業務効率化を両立させる方法へ運用を見直してみてはいかがでしょうか。