KMS提供了密钥轮转功能,您可以通过定期轮转来加强密钥使用的安全性,有效地提升业务数据的安全性。本文介绍KMS密钥轮转的原理和配置方法。
为什么需要密钥轮转
减少每个密钥加密的数据量,降低密码分析(Cryptanalysis)攻击风险。
一个密钥的安全性与被它加密的数据量呈负相关。数据量通常是指同一个密钥加密的数据总字节数。通过定期轮转密钥,可使每个密钥具有更小的密码分析攻击面,使加密方案整体具有更高的安全性。
提前具备响应安全事件的能力。
在系统设计和实现时引入密钥轮转的功能,使密钥轮转作为常规的系统安全管理事务之一,这样可以使系统在特定安全事件发生时具备实际执行能力。
减小破解密钥的时间窗口。
如果在定期轮转密钥的基础上,将旧密钥加密的密文数据用新密钥重新加密,则轮转周期即为一个密钥的破解时间窗口。这意味着恶意者只有在两次轮转事件之间完成破解,才能拿到数据。这对于保护数据不受密码分析攻击具有很强的实践意义。
满足合规规范。
密钥的周期性轮转功能可以方便企业符合各种合规规范。要求密钥进行轮转的标准、规范包含(但不限于):
支付卡行业数据安全标准(PCI DSS)。
中国国家密码管理局发布的密码行业相关标准,例如:《GM/T 0051-2016 密码设备管理-对称密钥管理技术规范》。
美国国家标准技术委员会(NIST)发布的密码使用相关标准,例如:《NIST Special Publication 800-57 Recommendation for Key Management》。
密钥轮转原理
密钥支持多个密钥版本,同一个密钥下的多个密钥版本在密码学上互不相关,KMS通过生成一个新的密钥版本来实现密钥的轮转,并使用最新的密钥版本进行密码运算操作,不支持指定某一个密钥版本。
密钥轮转仅新增密钥版本,密钥ID、密钥ARN、别名等属性不会发生改变。
KMS不会删除任何密钥版本,密钥版本仅随密钥删除而删除。
密钥创建后KMS会生成初始密钥版本并将其设置为主版本,轮转后会生成一个新的密钥版本,并将新的密钥版本设置为主版本,具体请参见下图。
如果您设置了周期性自动轮转,则下一次的轮转时间=上一次的轮转时间+轮转周期。
您可以调用DescribeKey接口,返回的
LastRotationDate
字段即上一次的轮转时间,NextRotationDate
字段即KMS计算出的启动执行下一次轮转任务的时间。如果密钥设置了周期性自动轮转,在两次轮转的间隙您又进行了立即轮转,计算下一次的轮转时间时,上一次的轮转时间取值为立即轮转的时间。
支持自动轮转的密钥
仅默认密钥、软件密钥管理实例中的对称密钥支持。
仅由KMS生成密钥材料的密钥支持轮转,自行导入密钥材料的密钥(BYOK)不支持轮转。
仅处于已启用状态的密钥支持轮转。当密钥处于已禁用或待删除状态时,已开启的轮转功能会被停止,当密钥重新启用时,轮转功能会重新启动。
默认密钥
定价
默认密钥仅用于云产品服务端加密,由KMS免费提供,但对默认密钥进行轮转为增值服务。
费用:59元/年/地域。购买后该地域下的所有默认密钥(包含服务密钥、主密钥)均支持轮转。
轮转方式及轮转日期
仅支持周期性自动轮转,不支持手动立即轮转。
轮转周期为365天且不支持修改。开启轮转后,当密钥版本创建时间满365天后会首次轮转,以后每隔365天轮转一次。
轮转增值服务按年购买,请确保下次轮转时您的订单有效,否则不会发生轮转。
密钥轮转相关操作
开启周期性自动轮转
购买密钥轮转增值服务。
登录密钥管理服务控制台,在顶部菜单栏选择地域后,在左侧导航栏单击 。
在默认密钥页签,单击购买增值服务,配置项设置完成后单击立即购买。
密钥管理类型:选择密钥增值服务。
密钥增值服务:选择默认密钥轮转。
购买数量:一个地域只需购买1套。
仔细阅读并勾选服务协议,单击去支付完成购买。
开启密钥轮转。
服务密钥
您无需配置,KMS会自动开启轮转。
主密钥
设置方式
说明
通过控制台
在密钥管理的默认密钥页签,单击主密钥的ID。
在详情页面下方,单击密钥版本页签,然后单击设置轮转。
在设置轮转策略对话框,打开轮转状态开关,单击确定。
密钥详情页面,轮转状态变更为已开启,轮转周期为365天 。
通过API
调用UpdateRotationPolicy接口,设置EnableAutomaticRotation(是否开启自动轮转)和RotationInterval(自动轮转的时间周期)参数。
说明RotationInterval参数只能设置为365d,否则KMS会返回400报错(Rejected.UnsupportedOperation)。
查看轮转详情
设置方式 | 说明 |
通过控制台 |
|
通过API | 调用DescribeKey接口,查看返回的AutomaticRotation(是否开启了自动轮转)和RotationInterval(自动轮转的时间周期)参数。 调用ListKeyVersions接口,查看返回的KeyVersions(密钥版本)参数。 |
软件密钥
配额
消耗KMS实例的密钥配额,密钥的每个密钥版本消耗一个密钥配额。例如密钥有V1、V2、V3三个密钥版本,则消耗3个密钥配额。如需提升配额,请参见升级KMS实例。
轮转方式及轮转日期
支持周期性自动轮转和立即轮转。
周期性自动轮转:自定义轮转周期(7~365天),周期性地生成新的密钥版本。
手动立即轮转:立即生成一个新的密钥版本。
如何进行密码运算操作
用于云产品服务端加密时,您只需指定密钥即可,无需手动集成SDK进行密码运算操作。用于自建应用加密时,请通过如下API接口进行密码运算操作:
生成数据密钥:AdvanceGenerateDataKey,KMS使用指定密钥的主版本对数据密钥进行加密。
加密:AdvanceEncrypt,KMS使用指定密钥的主版本对明文进行加密。
解密:AdvanceDecrypt,KMS使用传入的密文对应的密钥版本进行解密。
如果您的密钥开启了自动轮转,请勿使用Encrypt、Decrypt和GenerateDataKey接口,上述接口在加密解密时使用的是密钥的初始密钥版本,不会使用轮转后生成的新密钥版本。
密钥轮转相关操作
开启周期性自动轮转
设置方式 | 说明 |
通过控制台 |
|
通过API |
|
立即轮转
设置方式 | 说明 |
通过控制台 |
|
通过API | 调用CreateKeyVersion接口。 |
查看轮转详情
设置方式 | 说明 |
通过控制台 |
|
通过API | 调用DescribeKey接口,查看返回的AutomaticRotation(是否开启了自动轮转)和RotationInterval(自动轮转的时间周期)参数。 调用ListKeyVersions接口,查看返回的KeyVersions(密钥版本)参数。 |