web-dev-qa-db-ja.com

unzipプログラムは、パスワードが正しいかどうかをどのようにチェックしますか?

明らかに、どのような種類のデータベースとも接続しません。これはどのようにして可能ですか?

31
Andy_ye

それを「パスワード保護」と考えることは、実際の状況を少し誤解します。

Zipファイルをパスワードで保護すると、アーカイブは、パスワードをキーとして使用する対称アルゴリズム(暗号化と復号化に同じキー)を使用して暗号化されます。

解凍プログラムは、鍵が正しいかどうかを「確認」します。これは、正面玄関の鍵が正しいかどうかを確認するのと同じ方法です。ロックを開くと、正しい鍵でした。

したがって、この場合、解凍プログラムは指定されたパスワードを使用してデータを復号化しようとし、出力が適切に構造化されたアーカイブである場合、それは正しいパスワードでした。

(私は今のところ、暗号論争のWRT衝突と考えられる重複キー全体をスキップしています。これは、概念があるかどうか理論ではなく、特定の実装ではなく、欠陥)

[〜#〜] edit [〜#〜]:ユーザーとして MobyDisk Zipの場合、コメントで指摘具体的には、構造とファイルツリーは暗号化されず、ファイル自体だけでなく、各ファイルのチェックサムも暗号化されます。使用するパスワードによってファイルが復号化され、復号化されたチェックサムが一致すれば、正しいパスワードが得られました。

71
Shadur

特定のZip暗号アルゴリズムに依存します。

たとえば、元のZip仕様では、パスワードを使用して3つの32ビット復号化キーのセットを初期化していました。次に、Zipヘッダー(最初に配置されたランダムな12バイト)が復号化され、その後:

「ヘッダーが復号化された後、バッファの最後の1または2バイトは、復号化されるファイルのCRCの上位ワード/バイトである必要があります...これは、提供されたパスワードが正しいかどうかをテストするために使用できます。 」

Zip Spec 、セクション6.1)

37
hft