揭秘谷歌云平台加密技术:从密钥管理到客户端加密

本文深入解析谷歌云平台的加密服务,包括Cloud KMS、Secret Manager和Confidential Computing的使用场景与限制,并探讨客户端加密库Tink的优势与不足,帮助开发者选择合适的安全方案。

云加密技术揭秘:谷歌云平台

本文是我们云加密系列的第二篇,概述了谷歌云平台(GCP)提供的加密服务:何时使用它们、何时不使用它们,以及重要的使用注意事项。请继续关注本系列后续关于其他云服务的文章。

在Trail of Bits,我们经常遇到使用云提供商加密产品和服务来实现安全目标的产品和服务。然而,一些云提供商的加密工具和服务名称不透明或使用场景不明显。本指南基于Trail of Bits广泛的审计经验,深入探讨这些服务之间的差异,并解释重要的注意事项,帮助您选择正确的解决方案来增强项目的安全性。

引言

在本文发布时,谷歌云平台的加密产品明显少于亚马逊网络服务(我们在本系列的前一篇文章中讨论过)。直觉上,产品少可能是好事:需要跟踪的服务和软件越少,用户的复杂性和认知负担就越小。然而,这确实存在风险,即您的服务或软件可能变成一种瑞士军刀:在几件事上足够好,但在任何事上都不出色。

我们将探讨谷歌云平台中的三种加密产品,以及谷歌推荐的客户端加密解决方案。

谷歌云服务

Cloud KMS

您应该使用Cloud KMS的情况: 如果您以任何身份使用谷歌云平台。

您可以将Cloud KMS视为实际上是三种不同产品的集合,它们在一个方便的API中提供不同级别的保护:

  • 使用软件密钥的Cloud KMS
  • Cloud HSM,所有加密操作都在HSM硬件中执行
  • Cloud EKM,密钥存储在外部提供商中,适用于需要维护对其加密材料主权的客户

无论您最终使用这三种产品中的哪一种,都可以通过谷歌KMS API使用它。反过来,您可以将您的密钥与所有其他GCP服务一起使用,否则这些服务将使用Cloud KMS进行密钥管理。

除非另有说明,您几乎肯定不需要Cloud HSM或Cloud EKM。

何时使用谷歌Cloud HSM

如果您关心FIPS 140验证级别大于1,那么Cloud HSM对您的用例至关重要。否则,您不需要它。

如果您不确定是否关心这一点,请记住,FIPS 140级别1基本上是通过FedRAMP向美国政府销售服务中使用的任何加密模块必须达到的最低标准,并且不会显著影响加密安全性。

有些客户关心级别1与级别3,但如果您正在处理这种情况,您可能会知道。

何时使用谷歌Cloud EKM

如果您国家的监管机构坚持要求您维护对加密材料的控制,您可以使用Cloud EKM来满足他们的要求,而无需完全拆除您的云架构。

否则,仅使用带有软件密钥的Cloud KMS即可完成任务。

Secret Manager

您应该使用谷歌云Secret Manager的情况: 如果您需要管理和轮换服务密码(例如,访问关系数据库)。

您不应该使用谷歌云Secret Manager的情况: 如果您想存储您的网上银行密码。

如果您曾经使用过密码管理器,Secret Manager应该是一种熟悉的体验。它存储您的应用程序在谷歌云环境中运行所需的秘密——例如数据库密码、API密钥和其他您真的不应该直接提交到源代码中的敏感信息。

Secret Manager使用版本控制机制来维护过去凭据的历史记录,这对于在密钥轮换期间避免操作事件非常有用。

Confidential Computing

您应该使用Confidential Computing的情况: 如果您确定它适合您的威胁模型。

您不应该使用Confidential Computing的情况: 如果您不确定,或者甚至没有威胁模型。(Trail of Bits进行轻量级和传统威胁模型;如果您需要帮助,请联系我们!)

广义上讲,Confidential Computing就像DRM,只不过权力动态是颠倒的。

Confidential Computing旨在让您进行计算,而您的服务提供商不知道您正在运行什么软件,或者该软件正在处理什么数据。

这不仅仅是一种技术,而是一套不同的工具和技术,致力于实现这一目标。学术研究人员提出的一些技术依赖于同态加密。其他技术依赖于可信执行环境。

谷歌在这方面有多项投入,因此我们预计随着新技术的出现,这种情况会发生变化,但他们目前的产品依赖于AMD SEV作为可信执行环境。不幸的是,过去几年中针对AMD SEV存在旁道攻击(即CVE-2021-46744和CVE-2023-20575)。

在没有关于您可能构建什么或您试图防范什么威胁的任何上下文的情况下,很难在一篇普遍可用的博客文章中提炼出清晰的指导,但如果我必须在这里说一些简短而精辟的话:请谨慎行事并咨询专家。

GCP的客户端加密

三款工具用于零信任基础设施炒作,
七款用于产品团队的无代码设置,
九款用于各种类型的DBA,
一款用于数学极客保护数据流
在谷歌云中容器所在之处。
一款Tink加密一切,一款Tink用于签名,
一款Tink管理密钥,并确保上下文绑定
在谷歌云中容器所在之处。
(向托尔金致歉)

Tink是谷歌开发的唯一加密库,GCP客户被鼓励使用它来为谷歌的云产品进行客户端加密。

Tink的出色之处

正如人们所期望的那样,Tink提供了客户端加密库所需的所有基本功能:Tink加密和解密数据;签名消息和验证签名;甚至提供用于确定性加密和处理结构化数据的专用实用程序。

但Tink还提供了一个JSON Web Tokens(JWT)模块,成功忽略了JOSE标准的不安全部分。

除了拒绝支持完全不安全的选项(如alg=none)之外,Tink的JWT库比大多数库更安全的最大原因归结为一个加密工程原则:Tink中的密钥不仅仅是原始字节字符串。

Tink强制执行这样一个原则:加密密钥的身份既是原始字节,也是密钥要使用的算法的参数选择。

作为一个具体示例,解析基于非对称签名(即ECDSA)的JWT所需的代码与解析基于对称消息认证码(即HMAC)的JWT所需的代码不同。

因此,开发人员很难意外地将任何常见的JWT漏洞引入到使用Tink的应用程序中。

Tink可以改进的地方

Tink目前不包括任何可搜索加密的实用程序。因此,虽然您可以使用Tink成功加密GCP中的SQL记录,但没有简单的方法使用Tink搜索客户端加密的数据。

缺乏机制意味着在使用客户端加密与关系数据库时,您面临一个 Catch-22:要么加密给定字段,要么能够在SQL查询中使用所述字段值。您不能同时做这两件事。

总结

我们希望这个简要概述能澄清谷歌的一些加密产品,并帮助您为项目选择最佳方案。请继续关注本博客系列即将发布的文章,涵盖其他云加密服务!

同时,如果您想更彻底地探索这些产品和服务,以评估它们是否适合您的安全目标,请随时联系我们的加密团队。我们定期举行办公时间,持续约一小时,让您与我们的密码学家会面并提出任何问题。

如果您喜欢这篇文章,请分享: Twitter LinkedIn GitHub Mastodon Hacker News

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计