まず、誰かがあなたのコードファイルを読み取るのに十分なアクセス権を取得した場合、おそらく彼はあなたの復号化ルーチンとキーを取得することを覚えておいてください-あなたの暗号化はデータベースへのアクセス権を取得する攻撃者からのみあなたを保護します。
MySQLを使用して部分的なメールアドレスと電話番号を検索する場合、暗号化を使用することはできません-データがMySQLが読み取れない方法で暗号化されている場合、MySQLは読み取ることができないため、検索できませんそれ。
ただし、次のことを行うことができます。
- データをハッシュし、「email_hash」列にハッシュを保存します
- データを暗号化し、2番目の列「email_crypt」に保存します
電子メールXの行を検索する場合は、email_hash = hash(X)の場所を選択します。行の電子メールアドレスを知りたい場合は、email_cryptを選択して復号化します。
ただし、これにより、攻撃者は特定の電子メールがデータベースにあるかどうかをテストできます(つまり、ハッシュをブルートフォースする可能性があります)。これを防ぐには、ハッシュにHMACメソッドを使用し、キーを秘密にしておく必要があります。
これで、「ハッシュをスキップして、プレーンな電子メールアドレスを暗号化し、同じ暗号化された文字列を含む行を探すことで検索を実行できます」と考えることができます。いいえ、それはできません。データを暗号化する場合は、データと一緒に保存するランダムな「IV」を使用して、同じデータを2回暗号化すると、異なる結果が得られるようにします。IVを一定の値に設定することもできますが、これは暗号化を使用する非標準的な方法であり、セキュリティの問題を引き起こす可能性があるため、そうしないでください。また、AES-CBCなどの適切なチェーンモードを使用します。