如何在多租户云 SaaS 中管理客户提供的加密密钥?

信息安全 加密 云计算 SaaS 多租户
2021-09-08 01:56:32

我在一家总部位于欧盟的公司工作,我们想为商业客户提供某种独立于操作系统的基于云的 SaaS 平台,用于处理和存储敏感(健康)数据。我们想在谷歌云平台上实现我们的软件。

所有敏感数据都应使用客户提供的对称密钥进行加密,而不是存储在云平台上。(我们相信谷歌,但爱国者行为是个问题。)

但是,客户端界面最好在浏览器中作为 Web 应用程序运行。这使得客户端加密变得复杂。此外,许多员工应该有权访问企业客户域内的加密数据。因此,必须以某种方式在员工之间共享加密密钥。

一种想法是从共享密码短语(使用 PBKDF2)生成加密密钥,将其存储在会话 cookie 中(生命周期 = 0),并针对访问敏感数据的每个请求将其传输到云服务器。服务器执行请求的操作,然后从其内存中删除密钥。

当然,如果我们或 Google 想要这样做,可能总有办法提取密钥,但我们可以确保数据使用仅由客户管理的用户提供的密钥加密存储。

我想知道是否有人有更好的想法。非常感谢您提前。

2个回答

云提供商本身不可能保证云中的安全性,云提供商可以(被迫)获取任何正在运行的 VM 实例的内存转储,并从正在运行的实例中提取任何加密密钥。甚至可以连续自动监控正在运行的 VM 并在使用 AES 密钥时立即提取它们,尤其是在 VM 使用 AES-NI 时。

真正安全的解决方案将避免解密,更不用说使用服务器上的密钥了。加密客户端也是如此,并将服务器纯粹用作 blob 存储。

幸运的是,这些天你可以在浏览器中进行相当多的加密,包括 KDF 和 AES。对于 KDF,您可以使用例如scrypt-js,对于 AES aes-jsaes-es

如果您希望服务器接受明文数据然后对其进行加密,请不要认为对称密钥可以做到这一点;仅在会话期间将加密密钥保存在内存中并不能真正保护数据,因为(对于相对繁忙的服务)该密钥将在内存中,因此数据在整个工作日都容易被解密。

这可能是防止有人拦截您的备份或试图直接从磁盘窃取数据的有效防御措施;但不反对主动服务的黑客攻击。

如果加密发生在客户端,并且您在 SaaS 云中收到的只是密文,它可能会起作用——但是云将无法对这些数据进行任何处理。