REST資格情報を保存するアプリケーション-GitHubキーおよびその他の機密データ(Webアプリのユーザーによってアップロードされる可能性があります)を構築しています。データを保護するための最適な方法を探していますしかし、データベースやWebアプリケーションサーバーが危険にさらされた場合に備えて、セキュリティリスクを下げる方法に迷っています。
現在、私は次の解決策を見ています:
暗号化された資格情報は、アプリケーションデータベースに格納されます。
資格情報の暗号化キーは、ファイアウォールの背後にある別のデータベースに保存されます。
私が見ると、これにより、アプリケーションデータベースが侵害された場合のリスクが軽減されます。
データベースはPostgreSQLであり、サーバーはおそらくApache2 + wsgiです。
このアーキテクチャは意味がありますか?冗長ですか?暗号化キーの保存に関して何を改善できますか?この使用例にはどのツールをお勧めしますか?前もって感謝します!
この質問に答える鍵は、メインWebアプリケーションへのアクセス権と、攻撃者がプログラムを再プログラムして好きなように実行できた場合に何が起こるかを考えることです。
この思考実験は、このシナリオで機密データの漏洩を完全に防止する唯一の方法をすばやく示しています。たとえば、クライアントのみが知っているキーを使用してクライアント上で機密データを暗号化することにより、Webアプリケーションがそれを見ることがありません。このアプローチは、多くの場合、Webアプリケーションでは実用的ではありません。ただし、クラウドバックアップなどの一部のアプリケーションで使用されます。
ただし、すべてが失われるわけではありません。いくつかの方法で、システム内のすべての機密データが大量に失われるリスクを劇的に減らすことができます。
1。暗号化されたデータを保存しますが、キーは保存しません。
サーバーが侵害された場合、攻撃者は暗号化されたデータのみを取得します。通常の操作では、キーはユーザーがパスワードなどとして指定できます。これには、ユーザーがパスワードを失うとデータも失うという欠点があります。
2。機密データ(またはキー)を、制限付きAPIを介してのみアクセス可能なファイアウォールの背後にある別のサーバーに配置します。
このアプローチの鍵は、攻撃者がメインのWebアプリケーションを危険にさらすことによってそれを呼び出すためのアクセス権を取得した場合に、取得できるものが制限されるように制限的なAPIを設計することです。これを実現する方法はたくさんありますが、基本的な考え方はどのサービスでも同じです。このようなAPIを実装する場合は、次の点を考慮してください。