使用AWS KMS和AWS CloudHSM进行现场级加密

时间:2019-09-13 13:18:25

标签: amazon-web-services security encryption aws-kms

需要为应用程序实现更高级别的安全性。假设有一个表有10'000'000个用户。敏感字段是user.first_name和user.last_name。我们需要先加密这些数据,然后再将其存储到数据库中,然后再在应用程序级别解密以在UI上显示它。

据我所知,建议使用KMS的方法是:

编写零件​​

  • 致电KMS服务获取数据密钥
  • 使用数据密钥加密字段
  • 在应用程序级别上,将带有加密字段的用户记录持久保存到数据库中

阅读部分

  • 从数据库中检索带有加密字段的记录
  • 使用数据密钥解密字段
  • 在用户界面上显示数据

我需要澄清一些问题:

  1. 为每个用户使用一个新的数据密钥有意义吗?
  2. 1万个用户意味着1万个不同的数据密钥,最好的做法是存储它们并从进行解密的计算机上访问它们?
  3. 可以为整个用户表使用一个数据密钥吗?
  4. 在本地计算机上安全存储单个密钥的最佳实践是什么?
  5. 意外丢失数据密钥会发生什么?有恢复程序吗?

1 个答案:

答案 0 :(得分:1)

应根据组织政策和法规需求确定要实施的确切解决方案。但是,以下几点希望可以帮助您开发解决方案:

  1. 您可以使用伪随机数生成器为每个字段创建一个单独的数据密钥。数据密钥将用于加密原始数据,然后将使用KMS的通用“客户主密钥”对数据密钥本身进行加密。然后,加密的数据密钥将与加密的数据(在您的情况下为名字和姓氏)一起存储。
  2. 在解密过程中,首先使用KMS的主密钥对加密的数据密钥(与加密的数据一起存储)进行解密,然后使用数据密钥对数据进行解密
  3. 可以将
  4. KMS配置为每年自动旋转主密钥。但是,KMS会跟踪旧密钥,以便将来即使在旋转主密钥之后也可以解密使用旧密钥进行的加密
  5. KMS中的主密钥将在多个可用区域中复制,因此它是高度可用的
  6. 如果您对安全性有更严格的要求,可以考虑使用CloudHSM将密钥存储在不与其他AWS客户共享的专用硬件中。
  7. 您还可以使用由CloudHSM支持的KMS自定义密钥存储。但是,在那种情况下,自动按键旋转将不可用