密钥轮转

KMS提供了密钥轮转功能,您可以通过定期轮转来加强密钥使用的安全性,有效地提升业务数据的安全性。本文介绍KMS密钥轮转的原理和配置方法。

为什么需要密钥轮转

  • 减少每个密钥加密的数据量,降低密码分析(Cryptanalysis)攻击风险。

    一个密钥的安全性与被它加密的数据量呈负相关。数据量通常是指同一个密钥加密的数据总字节数。通过定期轮转密钥,可使每个密钥具有更小的密码分析攻击面,使加密方案整体具有更高的安全性。

  • 提前具备响应安全事件的能力。

    在系统设计和实现时引入密钥轮转的功能,使密钥轮转作为常规的系统安全管理事务之一,这样可以使系统在特定安全事件发生时具备实际执行能力。

  • 减小破解密钥的时间窗口。

    如果在定期轮转密钥的基础上,将旧密钥加密的密文数据用新密钥重新加密,则轮转周期即为一个密钥的破解时间窗口。这意味着恶意者只有在两次轮转事件之间完成破解,才能拿到数据。这对于保护数据不受密码分析攻击具有很强的实践意义。

  • 满足合规规范。

    密钥的周期性轮转功能可以方便企业符合各种合规规范。要求密钥进行轮转的标准、规范包含(但不限于):

    • 支付卡行业数据安全标准(PCI DSS)。

    • 中国国家密码管理局发布的密码行业相关标准,例如:《GM/T 0051-2016 密码设备管理-对称密钥管理技术规范》。

    • 美国国家标准技术委员会(NIST)发布的密码使用相关标准,例如:《NIST Special Publication 800-57 Recommendation for Key Management》。

密钥轮转原理

密钥支持多个密钥版本,同一个密钥下的多个密钥版本在密码学上互不相关,KMS通过生成一个新的密钥版本来实现密钥的轮转,并使用最新的密钥版本进行密码运算操作,不支持指定某一个密钥版本。

说明
  • 密钥轮转仅新增密钥版本,密钥ID、密钥ARN、别名等属性不会发生改变。

  • KMS不会删除任何密钥版本,密钥版本仅随密钥删除而删除。

密钥创建后KMS会生成初始密钥版本并将其设置为主版本,轮转后会生成一个新的密钥版本,并将新的密钥版本设置为主版本,具体请参见下图。

image..png

如果您设置了周期性自动轮转,则下一次的轮转时间=上一次的轮转时间+轮转周期。

说明
  • 您可以调用DescribeKey接口,返回的LastRotationDate字段即上一次的轮转时间,NextRotationDate字段即KMS计算出的启动执行下一次轮转任务的时间。

  • 如果密钥设置了周期性自动轮转,在两次轮转的间隙您又进行了立即轮转,计算下一次的轮转时间时,上一次的轮转时间取值为立即轮转的时间。

支持自动轮转的密钥

  • 仅默认密钥、软件密钥管理实例中的对称密钥支持。

  • 仅由KMS生成密钥材料的密钥支持轮转,自行导入密钥材料的密钥(BYOK)不支持轮转。

  • 仅处于已启用状态的密钥支持轮转。当密钥处于已禁用待删除状态时,已开启的轮转功能会被停止,当密钥重新启用时,轮转功能会重新启动。

默认密钥

定价

默认密钥仅用于云产品服务端加密,由KMS免费提供,但对默认密钥进行轮转为增值服务。

费用:59元/年/地域。购买后该地域下的所有默认密钥(包含服务密钥、主密钥)均支持轮转。

轮转方式及轮转日期

仅支持周期性自动轮转,不支持手动立即轮转。

轮转周期为365天且不支持修改。开启轮转后,当密钥版本创建时间满365天后会首次轮转,以后每隔365天轮转一次。

说明

轮转增值服务按年购买,请确保下次轮转时您的订单有效,否则不会发生轮转。

密钥轮转相关操作

开启周期性自动轮转

  1. 购买密钥轮转增值服务。

    1. 登录密钥管理服务控制台,在顶部菜单栏选择地域后,在左侧导航栏单击资源 > 密钥管理

    2. 默认密钥页签,单击购买增值服务,配置项设置完成后单击立即购买

      1. 密钥管理类型:选择密钥增值服务

      2. 密钥增值服务:选择默认密钥轮转

      3. 购买数量:一个地域只需购买1套。

    3. 仔细阅读并勾选服务协议,单击去支付完成购买。

  2. 开启密钥轮转。

    1. 服务密钥

      您无需配置,KMS会自动开启轮转。

    2. 主密钥

      设置方式

      说明

      通过控制台

      1. 密钥管理默认密钥页签,单击主密钥的ID。

      2. 在详情页面下方,单击密钥版本页签,然后单击设置轮转

      3. 设置轮转策略对话框,打开轮转状态开关,单击确定

        密钥详情页面,轮转状态变更为已开启轮转周期365天

      通过API

      调用UpdateRotationPolicy接口,设置EnableAutomaticRotation(是否开启自动轮转)和RotationInterval(自动轮转的时间周期)参数。

      说明

      RotationInterval参数只能设置为365d,否则KMS会返回400报错(Rejected.UnsupportedOperation)。

查看轮转详情

设置方式

说明

通过控制台

  1. 密钥管理默认密钥页签,定位到要查看的服务密钥或主密钥。

  2. 单击密钥ID,在详情页面查看轮转状态轮转周期密钥版本

通过API

调用DescribeKey接口,查看返回的AutomaticRotation(是否开启了自动轮转)和RotationInterval(自动轮转的时间周期)参数。

调用ListKeyVersions接口,查看返回的KeyVersions(密钥版本)参数。

软件密钥

配额

消耗KMS实例的密钥配额,密钥的每个密钥版本消耗一个密钥配额。例如密钥有V1、V2、V3三个密钥版本,则消耗3个密钥配额。如需提升配额,请参见升级KMS实例

轮转方式及轮转日期

支持周期性自动轮转和立即轮转。

  • 周期性自动轮转:自定义轮转周期(7~365天),周期性地生成新的密钥版本。

  • 手动立即轮转:立即生成一个新的密钥版本。

如何进行密码运算操作

用于云产品服务端加密时,您只需指定密钥即可,无需手动集成SDK进行密码运算操作。用于自建应用加密时,请通过如下API接口进行密码运算操作:

  • 生成数据密钥:AdvanceGenerateDataKey,KMS使用指定密钥的主版本对数据密钥进行加密。

  • 加密:AdvanceEncrypt,KMS使用指定密钥的主版本对明文进行加密。

  • 解密:AdvanceDecrypt,KMS使用传入的密文对应的密钥版本进行解密。

重要

如果您的密钥开启了自动轮转,请勿使用EncryptDecryptGenerateDataKey接口,上述接口在加密解密时使用的是密钥的初始密钥版本,不会使用轮转后生成的新密钥版本。

密钥轮转相关操作

开启周期性自动轮转

设置方式

说明

通过控制台

  • 创建密钥时开启。具体操作,请参见软件密钥

    1. 密钥管理用户主密钥页签,选择实例ID后,单击创建密钥

    2. 创建密钥面板中完成配置项设置,然后单击确定

  • 创建密钥时未开启,创建后再开启。

    1. 密钥管理用户主密钥页签,选择实例ID后,单击目标密钥的ID。

    2. 在密钥详情页单击设置轮转,在设置轮转策略对话框中打开定时自动轮转开关并设置轮转周期,单击确定

通过API

  • 创建密钥时开启。

    调用CreateKey接口,设置EnableAutomaticRotation(是否开启自动轮转)和RotationInterval(自动轮转的时间周期)参数。

  • 创建密钥时未开启,创建后再开启。

    调用UpdateRotationPolicy接口,设置EnableAutomaticRotation(是否开启自动轮转)和RotationInterval(自动轮转的时间周期)参数。

立即轮转

设置方式

说明

通过控制台

  1. 密钥管理用户主密钥页签,选择实例ID后,单击目标密钥的ID。

  2. 在密钥详情页单击设置轮转,在设置轮转策略选择立即轮转,然后单击确定

通过API

调用CreateKeyVersion接口。

查看轮转详情

设置方式

说明

通过控制台

  1. 密钥管理用户主密钥页签,选择实例ID后,单击目标密钥的ID。

  2. 在详情页面查看轮转状态轮转周期密钥版本

通过API

调用DescribeKey接口,查看返回的AutomaticRotation(是否开启了自动轮转)和RotationInterval(自动轮转的时间周期)参数。

调用ListKeyVersions接口,查看返回的KeyVersions(密钥版本)参数。