Amazon SSE-S3 密钥轮换如何工作?
How does Amazon SSE-S3 key rotation work?
我正在努力思考 Amazon 的服务器端加密选项,这样我就可以开始要求 S3 在我的应用程序上传文件时加密我的静态数据。
到目前为止,AWS 管理的加密密钥选项听起来像我正在寻找的 (Model C):
但后来它说
As an additional safeguard, this key itself is encrypted with a
periodically rotated master key unique to Amazon S3 that is securely
stored in separate systems under AWS control.
这种轮换是如何进行的?这是否意味着每次 AWS 轮换其密钥加密密钥时,他们都必须重新加密存储在 S3 中的每个 Data Key
???
我觉得这很疯狂,我不想在试图说服老板这是个好主意时听起来很疯狂:)
对于您上传的每个对象,都会生成一个新的加密密钥,用于在将对象存储到磁盘之前对其进行加密。
将对象加密存储意味着拥有存储在磁盘上的原始数据的人在计算上无法解密它...但是,当然,拥有该密钥的任何人都可以解密它,因此密钥必须以相对无用的形式安全存储,这是通过使用主密钥加密它们来实现的。
要破坏存储的对象,您必须拥有该对象的特定加密密钥...但即使您拥有它也无用,因为它也已被加密。要解密它,或者至少代表您使用它,您必须拥有主密钥,或者与控制主密钥并可以代表您使用它的实体建立信任关系。
到目前为止,我所做的一切当然都是显而易见的。
加密密钥本身很小,每个只有几十个字节。当主密钥轮换时,对象特定的加密密钥会用旧密钥解密,并用新密钥重新加密。存储新版本,丢弃旧版本
由于密钥很小,如果对象本身被解密和重新加密,这不是大规模的操作...但只有每个对象的加密密钥被解密和重新加密当主密钥轮换时。
公寓大楼可以做几个类比,其中钥匙存放在一个公用密码箱中,更改密码箱锁将通过限制对单个公寓钥匙的访问来限制以后对单个公寓的访问。密码箱。这个类比不成立,因为物理钥匙很容易被复制,还有其他原因......但很明显,在这个例子中,改变密码箱锁(相对简单的操作)与改变一个或多个公寓的锁无关(a更实质性的操作)。
最重要的是,在这种情况下,他们会为 encrypt/decrypt 您上传的每个对象创建一个新的密钥,然后以加密的形式存储该密钥...定期对您透明,他们更改他们存储的该密钥的表示作为预防措施。
Michael 的回答很好地解释了无备份主密钥的信封加密和轮换 material。
不幸的是,这不是 AWS 的工作方式。当您轮换主密钥时,AWS 绝不会重新加密任何数据密钥(或数据)。如果您正在轮换使用 AWS 密钥 material 生成的 CMK,则只需将新的支持密钥添加到现有 CMK。 AWS 管理的 CMK 由当前支持密钥和所有历史支持密钥(用于解密旧的、轮换的数据密钥)组成。除非客户删除整个钥匙串,否则 AWS 永远不会丢弃 HBK 支持 material。每次轮换密钥时,CMK 都会积累更多的 HBK material.
导入的主密钥不支持密钥备份。如果您手动轮换使用客户导入密钥 material 的 CMK,如果您希望在轮换之前解密使用此密钥加密的旧数据,则必须保留旧密钥。您可以将新密钥与旧密钥别名相关联,以在应用程序内切换安全上下文,而无需进行任何代码更改。
根据您上面的类比,AWS 从不更换密码箱。它会在旧密码箱旁边创建另一个(新的)密码箱(并假装它们都是 'the lockbox')。它继续使用旧密码箱中的钥匙打开现有公寓,而新钥匙则放入新密码箱中。当您指示它 'delete' 时,它会销毁所有关联的密码箱。
您可以在此处阅读 AWS "Cryptographic Details" 白皮书第 11 页和第 12 页的完整详细信息:
https://d0.awsstatic.com/whitepapers/KMS-Cryptographic-Details.pdf
我正在努力思考 Amazon 的服务器端加密选项,这样我就可以开始要求 S3 在我的应用程序上传文件时加密我的静态数据。
到目前为止,AWS 管理的加密密钥选项听起来像我正在寻找的 (Model C):
但后来它说
As an additional safeguard, this key itself is encrypted with a periodically rotated master key unique to Amazon S3 that is securely stored in separate systems under AWS control.
这种轮换是如何进行的?这是否意味着每次 AWS 轮换其密钥加密密钥时,他们都必须重新加密存储在 S3 中的每个 Data Key
???
我觉得这很疯狂,我不想在试图说服老板这是个好主意时听起来很疯狂:)
对于您上传的每个对象,都会生成一个新的加密密钥,用于在将对象存储到磁盘之前对其进行加密。
将对象加密存储意味着拥有存储在磁盘上的原始数据的人在计算上无法解密它...但是,当然,拥有该密钥的任何人都可以解密它,因此密钥必须以相对无用的形式安全存储,这是通过使用主密钥加密它们来实现的。
要破坏存储的对象,您必须拥有该对象的特定加密密钥...但即使您拥有它也无用,因为它也已被加密。要解密它,或者至少代表您使用它,您必须拥有主密钥,或者与控制主密钥并可以代表您使用它的实体建立信任关系。
到目前为止,我所做的一切当然都是显而易见的。
加密密钥本身很小,每个只有几十个字节。当主密钥轮换时,对象特定的加密密钥会用旧密钥解密,并用新密钥重新加密。存储新版本,丢弃旧版本
由于密钥很小,如果对象本身被解密和重新加密,这不是大规模的操作...但只有每个对象的加密密钥被解密和重新加密当主密钥轮换时。
公寓大楼可以做几个类比,其中钥匙存放在一个公用密码箱中,更改密码箱锁将通过限制对单个公寓钥匙的访问来限制以后对单个公寓的访问。密码箱。这个类比不成立,因为物理钥匙很容易被复制,还有其他原因......但很明显,在这个例子中,改变密码箱锁(相对简单的操作)与改变一个或多个公寓的锁无关(a更实质性的操作)。
最重要的是,在这种情况下,他们会为 encrypt/decrypt 您上传的每个对象创建一个新的密钥,然后以加密的形式存储该密钥...定期对您透明,他们更改他们存储的该密钥的表示作为预防措施。
Michael 的回答很好地解释了无备份主密钥的信封加密和轮换 material。
不幸的是,这不是 AWS 的工作方式。当您轮换主密钥时,AWS 绝不会重新加密任何数据密钥(或数据)。如果您正在轮换使用 AWS 密钥 material 生成的 CMK,则只需将新的支持密钥添加到现有 CMK。 AWS 管理的 CMK 由当前支持密钥和所有历史支持密钥(用于解密旧的、轮换的数据密钥)组成。除非客户删除整个钥匙串,否则 AWS 永远不会丢弃 HBK 支持 material。每次轮换密钥时,CMK 都会积累更多的 HBK material.
导入的主密钥不支持密钥备份。如果您手动轮换使用客户导入密钥 material 的 CMK,如果您希望在轮换之前解密使用此密钥加密的旧数据,则必须保留旧密钥。您可以将新密钥与旧密钥别名相关联,以在应用程序内切换安全上下文,而无需进行任何代码更改。
根据您上面的类比,AWS 从不更换密码箱。它会在旧密码箱旁边创建另一个(新的)密码箱(并假装它们都是 'the lockbox')。它继续使用旧密码箱中的钥匙打开现有公寓,而新钥匙则放入新密码箱中。当您指示它 'delete' 时,它会销毁所有关联的密码箱。
您可以在此处阅读 AWS "Cryptographic Details" 白皮书第 11 页和第 12 页的完整详细信息:
https://d0.awsstatic.com/whitepapers/KMS-Cryptographic-Details.pdf