Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 使用AWS KMS的确定性加密_Amazon Web Services_Encryption_Aws Kms - Fatal编程技术网

Amazon web services 使用AWS KMS的确定性加密

Amazon web services 使用AWS KMS的确定性加密,amazon-web-services,encryption,aws-kms,Amazon Web Services,Encryption,Aws Kms,我需要建立一个身份服务,该服务使用客户提供的密钥加密RDS中存储的敏感ID值,但也必须允许我们稍后使用明文ID查找记录。我们希望使用一个简单的确定性加密算法,但KMS API似乎不允许您指定IV,因此您永远无法获取相同的明文以加密到相同的值两次 我们还需要使用另一个非安全值查找数据,并检索加密的安全值并对其进行解密——因此,不幸的是,单向散列不起作用 综上所述,这意味着如果不使用暴力遍历所有记录并解密它们并与明文值进行比较,我们将无法执行安全ID的查找,而不是简单地使用已知的IV加密明文搜索值,

我需要建立一个身份服务,该服务使用客户提供的密钥加密RDS中存储的敏感ID值,但也必须允许我们稍后使用明文ID查找记录。我们希望使用一个简单的确定性加密算法,但KMS API似乎不允许您指定IV,因此您永远无法获取相同的明文以加密到相同的值两次

我们还需要使用另一个非安全值查找数据,并检索加密的安全值并对其进行解密——因此,不幸的是,单向散列不起作用

综上所述,这意味着如果不使用暴力遍历所有记录并解密它们并与明文值进行比较,我们将无法执行安全ID的查找,而不是简单地使用已知的IV加密明文搜索值,并使用该加密值作为索引来查找数据库中的匹配记录

我猜这是像SSN之类的东西的一个非常常见的要求,那么人们如何解决它呢

提前谢谢

稍后使用纯文本ID查找记录

那你就失去了很多安全感。也许您可以将ID的哈希(例如sha-256)存储在加密数据中,这样可以更容易地查找记录,但不会还原值

这种方法假设ID来自一个相当大的消息空间(可能有很多ID),因此不可能为每个可能的值创建映射

KMS API不允许您指定IV,因此您永远无法获得相同的明文来加密到相同的值两次

是的,KMS似乎为密文提供了自己的IV,以实施良好的安全实践

稍后使用纯文本ID查找记录

那你就失去了很多安全感。也许您可以将ID的哈希(例如sha-256)存储在加密数据中,这样可以更容易地查找记录,但不会还原值

这种方法假设ID来自一个相当大的消息空间(可能有很多ID),因此不可能为每个可能的值创建映射

KMS API不允许您指定IV,因此您永远无法获得相同的明文来加密到相同的值两次


是的,KMS似乎提供了自己的IV for ciphertext强制执行良好的安全实践

如果我正确理解您的用例,您的流程如下所示:

  • 客户提供密钥K,您使用该密钥加密机密S,该机密S存储在具有关联ID的RDS中
  • 给定一个非秘密密钥K,您希望能够查找并解密它
  • 如果客户正在重用密钥,这实际上并不难实现

  • 为客户创建KMS密钥

  • 使用此KMS密钥对客户的IV和客户指定的密钥进行加密,并将其存储在-最好由客户以某种方式命名。类似这样的Json结构:

    { “iv”:“somerandomivvalue”, “key”:“somerandomkey” }

    将允许您轻松地解析出这些值。ASM还允许您无缝地执行关键点旋转-这真是妙不可言

  • 如果您是偏执狂,您可以使用客户名称(或任何名称)和名称空间的加密散列

  • RDS现在在ASM中存储客户的数字ID、不安全值和名称空间值(或派生位置的某种方法)

  • 不用说,您需要限制对secrets manager vault的访问

  • 要使用该解决方案:

  • 客户发出读取安全值的请求
  • 服务访问ASM并为客户解密机密
  • 服务摘录IV和密钥
  • 服务使用IV和密钥初始化密码方案,并解密客户数据
  • 优点:您可以在完全控制下使用KMS密钥加密和解密ASM中的秘密值,并且可以存储和恢复以安全方式解密客户值所需的任何状态


    其他人可能会有更好的加密解决方案,但这应该是第一次尝试。

    如果我正确理解您的用例,您的流程如下:

  • 客户提供密钥K,您使用该密钥加密机密S,该机密S存储在具有关联ID的RDS中
  • 给定一个非秘密密钥K,您希望能够查找并解密它
  • 如果客户正在重用密钥,这实际上并不难实现

  • 为客户创建KMS密钥

  • 使用此KMS密钥对客户的IV和客户指定的密钥进行加密,并将其存储在-最好由客户以某种方式命名。类似这样的Json结构:

    { “iv”:“somerandomivvalue”, “key”:“somerandomkey” }

    将允许您轻松地解析出这些值。ASM还允许您无缝地执行关键点旋转-这真是妙不可言

  • 如果您是偏执狂,您可以使用客户名称(或任何名称)和名称空间的加密散列

  • RDS现在在ASM中存储客户的数字ID、不安全值和名称空间值(或派生位置的某种方法)

  • 不用说,您需要限制对secrets manager vault的访问

  • 要使用该解决方案:

  • 客户发出读取安全值的请求
  • 服务访问ASM并为客户解密机密
  • 服务摘录IV和密钥
  • 服务使用IV和密钥初始化密码方案,并解密客户数据
  • 优点:您可以在完全控制下使用KMS密钥对ASM中的秘密值进行加密和解密,并且可以存储和恢复在secur中解密客户值所需的任何状态