【问题标题】:Field level encryption using AWS KMS and AWS CloudHSM使用 AWS KMS 和 AWS CloudHSM 的字段级加密
【发布时间】:2023-03-10 23:55:01
【问题描述】:
需要为应用程序实施额外的安全级别。假设有一个包含 10'000'000 个用户的表。敏感字段是 user.first_name 和 user.last_name。我们需要在将数据存储到数据库之前对其进行加密,然后在应用程序级别解密以将其显示在 UI 上。
据我所知,使用 KMS 的推荐方法是:
写部分
- 调用KMS服务获取数据密钥
- 使用数据密钥加密字段
- 在应用程序级别将带有加密字段的用户记录保存到数据库中
阅读部分
- 从数据库中检索带有加密字段的记录
- 使用数据密钥解密字段
- 在 UI 上显示数据
我有一系列问题需要澄清:
- 为每个用户使用一个新的数据密钥有意义吗?
- 10'000'000 个用户意味着 10'000'000 个不同的数据密钥,存储它们并从进行解密的机器访问它们的最佳实践是什么?
- 可以为整个用户表使用一个数据键吗?
- 将单个密钥安全地存储在本地计算机上的最佳做法是什么?
- 如果数据密钥意外丢失会怎样?是否有任何恢复程序?
【问题讨论】:
标签:
amazon-web-services
security
encryption
aws-kms
【解决方案1】:
应根据组织政策和监管需求确定要实施的确切解决方案。但是,以下几点有望帮助您制定解决方案:
- 您可以使用伪随机数生成器为每个字段创建单独的数据键。数据密钥将用于加密原始数据,然后数据密钥本身将使用来自 KMS 的通用“客户主密钥”进行加密。然后,加密的数据密钥将与加密的数据(在您的情况下为名字和姓氏)一起存储。
- 在解密过程中,加密数据密钥(与加密数据一起存储)将首先使用 KMS 的主密钥解密,然后使用数据密钥解密数据
- KMS 可以配置为每年自动轮换主密钥。但是,KMS 会跟踪旧密钥,因此即使在主密钥轮换后,使用旧密钥完成的加密也可以在将来解密
- KMS 中的主密钥将跨多个可用区复制,因此具有高可用性
- 如果您有更严格的安全要求,您可以考虑使用 CloudHSM,它将密钥存储在不与其他 AWS 客户共享的专用硬件中
- 您还可以使用由 CloudHSM 支持的 KMS 自定义密钥存储。但是,在这种情况下,自动密钥轮换将不可用