3

ファイルの aes256-cbc 暗号化を行う単純なソフトウェアを開発しています。GNU/Linux と libgcrypt-1.5.0 を使用しています。IV は OpenSSL の rand 関数でランダムに生成され、IV は出力ファイルの暗号文の前に保存されます。PKCS#7 パディング メソッドを使用しています。

今、私はどのように進めるかについて疑問があります:

  1. ファイルの暗号化には、入力したパスワードを 50,000 回繰り返した sha256 を使用する方が良いですか、それともユーザーが指定したパスワードを使用する方が良いですか?

  2. 入力したパスワードの正確性を確認したい場合は、暗号化されたファイル (明らかに暗号化されています) に保存する必要があります。これを行うのは正しいですか?

4

3 に答える 3

3
  1. indiv が提案するように、PBKDF2 を使用してキーを派生させます。
  2. 異なるソルトで PBKDF2 を使用して認証キーを取得し、MAC を暗号化されたデータに追加します (暗号化後は暗号化前よりも安全です)。パスワードが正しいかどうか、およびデータが改ざんされていないかどうかを確認するために、MAC を検証します。MAC を選択する際に不明な点がある場合は、SHA-512 で HMAC を使用してください (質問に従って AES-256 を使用していると仮定します)。

異なるパディングで PBKDF2 を 2 回使用する代わりに、PBKDF2 の 1 回の呼び出しを使用して、暗号化キーと認証キーを合わせたサイズのキーを一度に生成することにより、暗号化キーと認証キーの両方を同時に生成できます。

キーが適切かどうかを判断するためのパディングによっては、CBC パディング オラクル攻撃が発生する可能性があることに注意してください。ファイル暗号化の場合、正確な状況によってはこのような攻撃が適用されない場合がありますが、ビット フリッピング攻撃やその他のデータへの悪意のある変更も防止したいため、とにかくデータ認証に適切な MAC を使用するのが賢明な方法のようです。

于 2013-01-27T16:34:48.177 に答える
3
  1. どちらの選択も正しくありません。PBKDF2のように、パスワードからキーを導出するために作成されたアルゴリズムを使用する必要があります。関数gcry_kdf_deriveを参照してください。
于 2013-01-27T16:30:18.420 に答える
0

1.ファイルの暗号化には、入力したパスワードを50,000回繰り返したsha256を使用する方が良いですか、それともユーザーが指定したパスワードを使用する方が良いですか?

「生の」パスワードをキーとして直接使用することはありません。キーは、総当り攻撃に対して強化されたもので伸ばす必要があります。String-to-Key (S2K) のもの、または scrypt のようなメモリ ハード ハッシュを使用した Password Based Key Derivation Function (PBKDF) を見てください。


2.入力されたパスワードの正確性を確認したい場合は、暗号化されたファイル (明らかに暗号化されています) に保存する必要があります。これを行うのは正しいですか?

いいえ。GCM などの認証済み暗号化モードを使用します。認証済み暗号化モードは、このタスクのために特別に構築されており、機密性と信頼性の両方を提供します。

パスワードの下で、暗号化されたファイルが検証されるか、検証されません。理由を気にしないでください。それ以外の場合は、ステップ 1 からすべてを元に戻す可能性のあるオラクルを設定しています (ここでは適用される場合と適用されない場合があります)。

于 2015-03-04T01:49:49.980 に答える