0

私は、パスワードを使用してレコードのファイルの機密性、整合性、および信頼性を保護する必要があります。レコードの数は潜在的に32^2を超える可能性があり、各レコードに個別にアクセスできます。

それを実装する1つの方法は

  1. 256ビットのランダムソルトを生成し、ファイルヘッダーに保存します。
  2. PKCS#5のHMAC-SHA256でPBKDF2を使用して、パスワードとソルトから派生キーを生成します。
  3. レコードごとに、96ビットのランダム初期化ベクトルを生成します。
  4. 派生キー、初期化ベクトル、および(追加の認証済みデータとして)ファイル内のレコードの位置を使用して、GCMモードでAES-256を使用して各レコードのコンテンツを暗号化します。
  5. その結果、各レコードには、初期化ベクトル、暗号化されたコンテンツ、およびMACが格納されます。

ただし、GCMとGMACを定義するNIST Special Publication SP800-38Dでは、初期化ベクトルを一意にするために、レコード数を32^2未満にする必要があります。

そこで、別の解決策を考案しました。派生キーをキーとして使用し、ファイル内のレコードの位置を認証(ソルト)するメッセージとして使用して、HMAC-SHA256で各レコードのキーを作成します。

したがって、問題は、キーを生成するときにすでに処理しているので、ファイル内のレコードの位置を追加の認証済みデータとして認証済み暗号化アルゴリズムに提供する必要があるかどうかです。

さらに、HMAC-SHA256(PBKDF2(HMAC-SHA256、password、salt、iterationCount、256)、blockAddress)によって生成されたと思われる異なるキーを使用してすべてのレコードが暗号化および認証されるため、本当に初期化ベクトルを使用する必要がありますか?

ファイルのサイズがわからないので、非常に大きくなる可能性があると思います。

4

1 に答える 1

0

私があなたのことを正しく理解していれば (少し免責事項です、申し訳ありません)、ファイル内のレコード内の位置を追加しなくても問題ありません。

いいえ、(セッション) キーを 1 回しか使用しない場合は、ランダム IV は必要ありません。ゼロで構成される IV を使用するだけで十分です (NIST 命名法に従う場合、1 つのデバイスとゼロに設定されたカウンターを使用する決定論的構築)。

于 2011-12-17T10:00:03.183 に答える