DB全体を暗号化し、暗号化されているにもかかわらずデータを検索する機能を維持する方法を探しています。
Mongo での保存データの暗号化に関する多くの質問を見てきましたが、アプリケーションの完全なフローを完了するのに役立つ回答はありませんでした。ここで私の調査結果を発表し、フィードバックやさらなるアイデアを得たいと思っています (まだいくつか質問があります)。
暗号化オプション:
1.マングース暗号化。完全解決!最小限の作業でデータベースのすべてを暗号化できます!
2. Procona mongodb - テストする機会がありませんでした。インストールして実行するのに何時間も費やしましたが、運がありませんでした (これはおそらく私だけです..)。
3. モジュール レベルでデータを暗号化および復号化する get メソッドと send メソッドを作成します。
保存データの暗号化に関する私の要件は次のとおりです。
- アプリケーション層は、暗号化/復号化プロセスに関与する必要はありません。データが暗号化されていないように見えるはずです (ほとんどの場合)。
- 暗号化されたデータに対して検索とルックアップを実行できます。
- その方法はわかりませんが、うまくいけば、暗号化されたテキスト フィールドで部分的な単語やフレーズを検索できます。
- もちろん、オブジェクト ID を除いて、すべてのデータは暗号化されます。
私のアプローチ:
mongoose-encryption を使用して、この素晴らしいプラグインのすべての利点を活用したいと考えています。
また、暗号化されたフィールドの実際の値のハッシュをスキーマに追加して、暗号化されたフィールドで検索操作を実行できるようにしたいと考えています。
問題: mongoose-encryptions が非暗号化データを隠す前に、暗号化されていないデータを調整するための正しいマングース フックが見つからないようです。そのため、ハッシュを生成できません。
これは機能しません:
Users.pre('save', () => {
this.hashedName = hash(this.name)
console.log(":(")
});
また、前述のように、暗号化されたデータ内のパーシャルとフレーズを検索します。私のアプローチでは、「Danielle」という名前の人を見つけることができましたが、「Dani」で始まる名前のユーザーをハッシュで検索することはできません。
私のアプローチについてもご意見をお聞かせください。これが解決策を見つけるのが簡単ではないトピックであることは知っています。