5

最近 PyCrypto を使用して取り組んでいるプロジェクトで、AES を使用して独自の暗号化方法を作成しました。ハッシュを使用して 32 バイトのパスワードを生成し、それを CBC を使用して AES-256 ビット暗号化にフィードします。ファイル入力は、16 で割り切れるように準拠するために PKCS#7 パディングを使用してパディングされます。

問題なくファイルを暗号化および復号化でき、最初に暗号化された入力ファイルと出力ファイルは同じ SHA-256 ハッシュを持っています。

私が見つけた唯一の問題は、間違ったパスフレーズを指定した場合でも復号化が行われることです。パスフレーズが間違っている場合、復号化をすばやく失敗させる必要があるため、これは私がやっていることの問題です。

どうすればこれを実現できますか? AES 暗号化の他の方法については聞いたことがありますが、PyCrypto は ECB、CBC、CFB、OFB、CTR、および OpenPGP のみをサポートしているようです。正しいパスフレーズがないと復号化に失敗する、暗号的に強力な AES を実装するにはどうすればよいですか?

4

3 に答える 3

5

変更されたときに暗号文が解読されないようにする最善の方法は、認証タグを追加することです。認証タグは、暗号文の認証と完全性を提供するために使用されます。

このタグは、暗号文上の MAC (SHA-256 を使用した AES-CMAC または HMAC など) で構成されている場合があります。ただし、これには安全を確保するための 2 つ目のキーが必要です。

もう 1 つの方法は、GCM などの認証された暗号化を使用することです。GCM は単一のキーを使用し、認証タグを生成します (サイズは構成可能)。

正しく生成された IV を使用していることを確認してください。IV は暗号文の前に付けることができ、認証タグを計算するときに含める必要があります)。また、プレーン テキストのサイズが隠されている可能性があることを忘れないでください。

暗号文を復号化するに、タグの正確性を確認する必要があります。

一般に、後で正確なパスワードにアクセスする必要がない限り、パスワードを暗号化しないでください。パスワードの検証には、代わりに PBKDF2 を使用してください。

于 2013-02-20T21:09:39.610 に答える
3

正しいキーを持っているかどうかを知ることができる AES (またはその他の暗号化アルゴリズム) については何もありません。とは言っても、実際に数学の領域外で暗号化を使用したい場合、これは非常に便利な機能です。

必要なのは、メッセージの先頭に既知の値を持つブロックを追加することです。これにより、最初のブロックを復号化した後、既知の値と比較して、間違ったキーを持っているかどうかを知ることができます。暗号化しているデータに既知のヘッダーがある場合は、代わりにこれを使用できます。

または、キーの暗号化ハッシュ (SHA-256 など) をメッセージと共に送信することもできます。攻撃者は、ハッシュを解読できる場合にのみキーを回復できます。

于 2013-02-20T20:12:47.063 に答える
0

必要なフェイルファスト プロパティを提供するには、暗号化するデータの前にヘッダーを追加する必要があります。既知の定数「マジックナンバー」と連結されたランダムな「交絡因子」ナンス(暗号化されたソルトに似ています)を使用することをお勧めします。交絡因子の存在は、塩のように、事前に計算されたテーブルに基づいて攻撃に対する防御手段を提供します。

このようなヘッダーが存在する場合は、ヘッダーを解読してマジック ナンバー フィールドを検証するだけで済みます。既知の定数と一致しない場合、キーはダメです。一致する場合は、ヘッダーを破棄し、残りの入力を処理します。

于 2013-02-21T01:25:15.780 に答える