19

私は PHP のmcryptライブラリと AES-256(rijndael) アルゴリズムを使用しています。これは、キーと初期化ベクトルの両方を実行する必要があります。

私の論理的な頭脳は、実際にはこれに沿っていません。鍵一つじゃ足りない?

理論的なシナリオ:
所有者のみが復号化できるようにデータベースに格納された機密データを暗号化した場合、ユーザーのハッシュ化されたパスワードをキーまたはデータの初期化ベクトルに使用するのは適切でしょうか?

キーは初期化ベクトルよりもプライベートであると見なすべきですか、それともその逆ですか?

4

4 に答える 4

12

いいえ、実際、ほとんどの実装ではIVが不可欠です。IVは、公共の使用にも安全であると見なされます。たとえば、IVはWEPおよびWPA1/WPA2のプレーンテキストで送信されます。この同じキー+ivを使用して同じプレーンテキストを暗号化すると、問題が発生します。IVを使用しない限り、暗号テキストは同じになります。攻撃者がこのキーを使用して任意のプレーンテキストを暗号化し、暗号文を表示できる場合。これは、攻撃者が取得した他の暗号文をブルートフォースするはるかに高速な方法です。

それだけでなく、IVはランダムでなければなりません。そうでないと、CWE-329に違反することになります。これが問題になる理由はもう少し微妙で、最初はわかりませんでした。あなたはこれについて言及しませんでしたが、CBCまたはCMACモードのいずれかを使用していることを願っています

パスワードでのハッシュ関数の使用は、String2Key関数の使用とほぼ同じです。攻撃者がSQLインジェクションを使用してキーを取得できない限り、これは堅実な設計です。

于 2011-02-24T18:39:16.390 に答える
7

キーと IV の単一ソースとしてハッシュ化されたパスワードを使用しないでください。経験則として、暗号化されたデータを更新するたびにランダムな IV を生成し、このデータで IV を保存する必要があります。キーは複数回再利用できますが、ソルト付きハッシュを使用し、ソルトをデータと共に保存します。

ユーザーのパスワードをハッシュして暗号化キーとして使用すると、同じパスワードを持つユーザーは同じキーを持つことになります。データベースの構造と侵入者のアクセス権によっては、同じパスワードを持つユーザーが検出されるという不幸なケースが発生する可能性があります。このハッシュに少なくとも一意のユーザー名を追加します。

データの更新ごとに IV を変更しないと、データの変更に関する情報が漏洩する可能性があります。CBC または CFB モードでは、同一の最初の平文ブロックは、最初の平文が変更されるまで同一の暗号文に暗号化されるため、この変更の位置を特定できます。

于 2011-02-25T10:09:53.037 に答える
7

初期化ベクトル (IV) はまったく鍵ではなく、秘密でもありません。実際、それはしばしば公開されます (たとえば、暗号化されたデータの先頭に追加されます)。暗号化アルゴリズムへの追加のランダム入力として使用されるため、異なる IV を使用するたびに同じクリア データを暗号化した結果が異なります。この方法では、暗号化されたデータに関する統計を収集できません。それ自体で暗号化強度が「向上」するわけではありません。

IV が使用される方法と理由を示す素敵な図については、こちらを参照してください。

于 2011-02-24T18:06:33.603 に答える
0

ブロック暗号の EBP モード、またはほとんどのストリーム暗号を使用している場合、異なる平文で同じキー + IV の組み合わせを使用すると、攻撃者はキーの XOR 結果を直接見ることができます。これにより、キー自体とパスワードがある程度明らかになります。

しかし、IVは絶対に必要だということですか?いいえ。次の平文ブロックで毎回パスワードを変更する限り (同じブロックが 2 回目であっても)、IV がなくてもまったく問題ありません。実際、IV が行うことは、上記のプロセスの自動化だけです。

于 2015-03-12T04:51:10.567 に答える