• ベストアンサー

暗号化ZIPファイル

ZIPファイルで、鍵付きのものが安全であるかのよう言われていますが、 次のような不安があります。 1.鍵のデータはZIPファイルの中にある。 2.鍵付きのZIPファイルを作成するソフトを、逆アセンブラすれば、鍵がどこに、どのように変換されて保存されているかが分かる。入力された鍵との比較方法もわかる。 3.よって、ZIPファイルをバイナリファイルとして解析すれば鍵が分かる。 4.解読されてしまう。 このような不安があるのですが、 そもそも、鍵のデータはZIPファイルの中に存在するかどうかも勉強不足で分かりません。 安全性の根拠を説明してあるHPなどありましたら 教えていただきたいと思います。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

まず、これのencryptionについての記述をざっと読んでみることをおすすめします。 http://www.pkware.com/documents/casestudies/APPNOTE.TXT > 1. 鍵のデータはZIPファイルの中にある。 ありません。鍵を使って特定のデータを暗号化したものは入っていますが。 .ZIP File Format Specificationにはtraditional PKWARE encryptionとStrong Encryption Specification (SESと略す) の2種類の方法が載っていて、いずれでも鍵をそのまま保存するということはしていません。 traditional encryptionでは、複合したヘッダ中のCRCがファイルのCRCと一致するか調べることで正しいパスワードが入力されたかをチェックしています。 ただ、仕様を見る限り、PKZIPだけでしか使われていないオレオレ暗号のようなのでその強度については疑問符がつきます。なお、traditional encryptionは過去のファイルを復号するために、復号方法のみが記されているだけです。 SESでも、ヘッダを複合したあとに乱数が入っているVDataのCRCがVCRC32の値と一致するかで正しいパスワードが入ったかを調べます。復号するにはErdDataを複合して、RDを取り出したうえでファイルセッション鍵を計算する必要がありますが... Encryptのところでまともな暗号を使っていたら、ファイルセッション鍵を見つけるのはまず現実的な時間ではできないでしょうね。 ZIPの実装にはWinZIPという実装もあり、こちらでも暗号のフォーマットが規定されています。 http://www.winzip.com/aes_info.htm こちらでは、パスワードを元に計算した値が、平文で入っている16 bitのpassword verification valueと一致するかで正しいパスワードかを判断するようです。 なお、password verification valueはPBKDF2でパスワードから実際の鍵を作る時に、余分に16bitとっておくことでやるようです。ただ、PBKDF2のアルゴリズムを考えると、この値からパスワードを求めるのはまず無理でしょうね。 http://www.winzip.com/win/en/aes_info.htm#key-generation > 2.鍵付きのZIPファイルを作成するソフトを、逆アセンブラすれば、鍵がどこに、どのように変換されて保存されているかが分かる。入力された鍵との比較方法もわかる。 逆アセンブラの必要もありません。仕様を見れば良いだけです。ただ、現代暗号は仕様を見ても鍵を知らないと復号できないように作られています。 上記に述べたとおり、入力された鍵を使って作られた何らかのデータが入ってはいますが、それから鍵を求める方法はtraditionalを除き現状、総当り以外にないと思います。 安全性の根拠を説明するサイトは知りませんが、仕様を見る限り、過去のファイルとの互換性のためにあるtraditional encryptionをさて置けば、SESもWinZIPの方式も手強そうに見えます。PBKDF2を使っているところを考えると、パスワード長を長くして強力にでき、繰り返し回数を増やして総当たり攻撃にかかる時間を簡単に増やせるところからWinZIPの方がSESより手強そうですが。

uyama33
質問者

お礼

ありがとうございました。 ゆっくり読んでみます。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4903/10364)
回答No.1

鍵というか、パスワードですよね。中には無いです。 根拠というか、そもそも入れる必要が無いので入ってません。 暗号化の仕組みで、暗号化するデータと共に解読鍵を送るという暗号化方式など、存在しないでしょう。暗号化の意味が無い。 ただ、パスワードを間違えても何度でもやり直せるので、ひたすらパスワードを変えながら解凍を試みるプログラムがあるので、かなり長いパスワードにしておかないとすぐに解読されます。 http://www.vector.co.jp/soft/win95/util/se078535.html

uyama33
質問者

お礼

ありがとうございます。 パスワードを間違えても何度でもやり直せるので の部分ですが、パスワードが正しいか、間違っているかを判断するには 例えば、入力されたパスワードを一定の法則で変換して、 ZIPファイルの一部のデータと比較しているのではないかと考えました。 この一部のデータがないと、パスワードの正誤判定が出来ないのではないかと思っています。 この部分と変換法則が分かれば、パスワードが解析できる と思ったのです。なぜ、正誤の判断が出来るのか不思議です。

すると、全ての回答が全文表示されます。

関連するQ&A