web-dev-qa-db-ja.com

マルチテナントクラウドSaaSで顧客指定の暗号鍵を管理するにはどうすればよいですか?

私はEUを拠点とする企業で働いており、機密性の高い(健康)データを処理および保存するための、OSに依存しないクラウドベースのSaaSプラットフォーム)をビジネスのお客様に提供したいと考えています。 Google Cloud Platformにソフトウェアを実装したいと考えています。

すべての機密データは、顧客から提供され、クラウドプラットフォームに保存されていない対称キーで暗号化する必要があります。 (Googleは信頼していますが、愛国者の行為は問題です。)

ただし、クライアントインターフェイスは、ブラウザ内でWebアプリとして実行するのが望ましいです。これにより、クライアント側の暗号化が複雑になります。また、多くの従業員は、企業顧客のドメイン内の暗号化されたデータにアクセスできる必要があります。したがって、暗号化キーは何らかの方法で従業員間で共有する必要があります。

1つのアイデアは、共有パスフレーズから(PBKDF2を使用して)暗号化キーを生成し、それをセッションCookie(lifetime = 0)に保存し、機密データにアクセスするリクエストごとにクラウドサーバーに転送することです。サーバーは要求された操作を実行してから、メモリからキーを削除します。

もちろん、GoogleまたはGoogleがこれを行いたい場合は、常にキーを抽出する方法があるかもしれませんが、ユーザーが管理するユーザー提供のキーでのみデータが暗号化されて保存されることを保証できます。

誰もがより良いアイデアを持っているのだろうか。事前にどうもありがとうございました。

5
Lucas

クラウドプロバイダー自体からクラウドのセキュリティを保証することは不可能です。クラウドプロバイダーは、実行中のVMインスタンスのメモリダンプを取得し、実行中の暗号化キーを抽出することを強制できます)インスタンス。実行中のVMを継続的かつ自動的に監視し、特にVMがAESを使用している場合) -NI。

真に安全なソリューションは、サーバーのキーの使用はもちろんのこと、復号化を回避します。したがって、暗号化をクライアント側で行い、サーバーを純粋にBLOBストレージとして使用します。

幸い、最近のブラウザーでは、KDFとAESを含むかなりの暗号を実行できます。 KDFの場合は、たとえば、 scrypt-js 、およびAESの場合 aes-js または aes-es

2
rustyx

サーバーが平文のデータを受け入れて暗号化することを期待している場合は、対称鍵でこれが可能であるとは思わないでください。セッション中に暗号化キーをメモリに保持するだけでは、データは保護されません(比較的ビジーなサービスの場合)。そのキーはメモリにあるため、データはすべての就業日に解読されやすくなります。

これは、誰かがバックアップを傍受したり、ディスクから直接データを盗もうとしたりすることに対する有効な防御策になる可能性があります。ただし、アクティブなサービスのハッキングには反対しません。

クライアントで暗号化が行われ、SaaS=クラウドで受信するすべてが暗号文である場合、クラウドはそのデータの処理を実行できなくなります。

1
CGretski