web-dev-qa-db-ja.com

TLS / SSLを使用していても、アプリケーション層でデータを暗号化/復号化する必要はありますか?

実は元同僚からいくつかのプロジェクトをもらいました。これらはApp-Server TCPソケットベースのアプリケーションです。認証/ログインの相互作用の一部がRSA/AES暗号化/復号化を使用していることに気付きました

私が知っているように、トランスポート層にTLSソケットを採用した場合、私たちの間のデータは暗号化されます。

tLSを使用する場合でも、アプリケーションレイヤーコードでデータを暗号化/復号化する必要がありますか?またはそれは冗長な努力です。

7
Joseph C.

はいといいえ。

暗号化は、「持っている」または「持っていない」という命題ではありません。暗号化の概念は、コンテキストでのみ意味があります。

失敗をより明確に示す例として、安全に保管する必要のあるドキュメントがあるとします。 Dropboxアカウントにアップロードします。暗号化されていますか?

はい、転送中に暗号化されました。 DropboxはHTTPSを使用するため、アップロード(およびダウンロード)中にTLSを使用して暗号化されました。転送後、反対側で復号化されます。

はい、それはストレージで暗号化されています(私たちの知る限り)。 Dropboxは、アカウントに固有のキーを使用してサーバー上のすべてのデータを暗号化すると述べています。その後、オンデマンドで透過的に復号化されます。

しかしいいえ、ドキュメントはあなたにとって重要な方法で暗号化されていません。 Dropboxはファイルをすべてのコンピュータに同期し、プレーンテキストコピーをマシンに保存します。そのため、誰かがあなたのコンピュータを見ると、暗号化をまったく回避することなく、ドキュメントを読むことができます。

データを暗号化するときは、何を保護しようとしているのか、誰が保護しようとしているのかfromを把握する必要があります。暗号化で何を防止しようとしているのかを理解する必要があります。何を達成しようとしているのかを理解したら、暗号化がうまく機能しているかどうかがすぐにわかるはずです。

16
tylerl

多層防御の観点からは、データの分類によっては、アプリケーション層の暗号化を実装すると便利な場合があります。

次の例を想像してみてください。あなたは銀行であり、REST APIを使用して特定の銀行口座の残高情報を取得します。APIのURLは次のとおりです。

https://www.bank.com/api/balance/12345678

この例の銀行口座番号は12345678です。通信チャネルは暗号化されていますが、銀行口座番号は引き続きローカルにキャッシュでき、Webサーバーのログファイルに表示されます。

これは、機密情報がログに記録されるのを防ぐためにアプリケーションレイヤーを暗号化するのに適した理由です。

5
Jeroen