ユーザーが(機密情報を含む)ネストされた文字列のツリーを作成できるWebアプリケーションを作成しているとしましょう。これらの文字列はおそらく非常に短いです。保存する前に、このツリーのキーと値の両方を暗号化したいと考えています。ツリー内のすべての値は、ユーザーが指定した対称キーを使用してクライアント側で暗号化されます。同様に、読み取り時にクライアント側で復号化されます。
ツリーは Mongo データベースに永続化されます。
ツリー内のすべてのデータが同じキーを使用して暗号化されることを考慮して、ツリーをシリアル化して文字列全体を暗号化するか、値を個別に暗号化するかを決定できません。
どちらの長所と短所は何ですか?
私が知る限り、AES は 128 ビットのブロック サイズを使用します。つまり、文字列はエンコード時に最大 15 文字の長さになる可能性があり、シリアル化された文字列をエンコードすることを支持します (オーバーヘッドを避けたい場合)。
注: webapp は HTTPS、IP ホワイトリスト、および多要素認証の両方を使用しますが、Mongo データベースが盗まれた場合に備えて、データ侵害を防ぐ努力をしたいと考えています。それが私がここにいる目的です。これを達成する方法についてのアドバイスや考えをいただければ幸いです。
アップデート
さらに、私のサービスが信頼を刺激することも望んでいます。(HTTPS 経由ではありますが) 平文でデータを送信するということは、データを永続化する前に、ユーザーがデータを暗号化することを信頼する必要があることを意味します。クライアント側を暗号化すると、何を保存しているのかわからない (または知る必要がない) ことを強調できます。