2

MySQLで列を暗号化する必要があり、AES_ENCRYPTを使用しています。このデータ列をWHERE句で安全に使用する方法を見つけたいと思います。私の質問はこれです-

1)同じパスフレーズでWHERE句の引数をAES_ENCRYPTし、生成された暗号化された文字列をWHERE句で使用できますか?または、列全体で復号化を実行する必要がありますか?

たとえば、これは安全ですか?

SELECT * from TABLE WHERE Enc_COL= AES_ENCRYPT('someColValue','same_passphrase');

またはそれはする必要がありますか

SELECT * from TABLE WHERE AES_ENCRYPT(Enc_COL,'same_passphrase')= 'someColValue';

2番目の例はもっと遅くなると思うので、最初の例が可能かどうか知りたいです。

4

1 に答える 1

1

使用する

SELECT * FROM `table`
WHERE `Enc_COL` = AES_ENCRYPT('text-to-encrypt', 'same_passphrase');

大丈夫なはずです。のインデックスがあることを確認しEnc_Colてください。そうすれば、テーブル全体をスキャンして結果を得る必要がなくなります。同じ入力とキーを使用する限り、同じ出力が得られます。

ちなみに、複数の列に同じキーを使用しないでください(暗号化する各列に固有の何らかのIVまたはノンスを使用するようにしてください)。すべての行を同じキーで暗号化し、データベースが危険にさらされている場合、誰かがキーを見つける可能性がはるかに高くなります。

于 2012-08-07T20:22:37.730 に答える