web-dev-qa-db-ja.com

key_derivationおよびkey_verification関数は、7-Zipアーカイブの暗号化メカニズムにどのように実装されていますか?

パスワードで保護されたファイルのパスワード回復がどのように機能するのか知りたいです。そして、7-Zip暗号化メカニズムの正確なフローを知りたいです:) !!

7-Zipは、CBCモードでAES-256暗号化アルゴリズムを使用して、ファイルまたはフォルダーを暗号化します。キーは、SHA-256ハッシュ関数を使用してユーザーのパスフレーズから生成されます。パスフレーズは、SHA-256 2 ^ 19(524288)回使用してハッシュされ、徹底的な検索のコストが増加します。また、辞書攻撃のリスクを軽減するために、ハッシュの前にパスフレーズにソルトが追加されます。

私の最初の質問は、key_derivation関数が256ビットキーを生成するためにどのように機能するかということです。 AES CBCモードのIVの重要性とその生成方法は何ですか?

私の2番目で最も重要な質問は、7-Zipアーカイブを復号化するためにキーをどのように検証するかです。 key_verification関数はどのように機能しますか?

2
Gopal

キーリカバリはこのように機能します。このツールは、考えられる多くのパスフレーズを推測します。パスフレーズごとに、そのパスフレーズが正しいかどうかをテストします。正しいパスフレーズが見つかるまで、または疲れて諦めるまで、それは続きます。

では、パスフレーズが正しいかどうかをどのように判断するのでしょうか。通常、メソッドは次のようになります。鍵導出アルゴリズム(7Zipプログラムを使用してアーカイブを復号化するときに使用されるものと同じもの)を使用して、導出されたAES-256鍵を計算します。次に、このキーの下にある暗号文のいくつかのブロックを復号化してみます。

通常、平文には固定位置にハードコードされた定数があるため、この定数が試行復号化の固定位置に表示されるかどうかを確認することで、推測が正しいかどうかを確認できます。 (一部のファイル形式では、ハードコードされた定数はありませんが、チェックサムがあるため、復号化してチェックサムが正しいかどうかを確認できます。または、一部のファイル形式では、平文が通常ASCIIであることがわかっている場合があります。したがって、試行復号化をチェックして、もっともらしいASCII text)のように見えるかどうかを確認できます。使用される正確な方法はファイル形式によって異なりますが、通常、この段階は深刻な障壁ではありません。

このアプローチは、試行復号化、ブルートフォース辞書検索、または辞書攻撃として知られています。すべての賢さは、私があまり話さなかった部分にあります。パスフレーズでもっともらしい推測のリストをインテリジェントな順序で作成する方法です。

パスワードクラッキングで使用されるブルートフォースヒューリスティック も参照してください。

1
D.W.