密钥轮转

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

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

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

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

适用范围

  • 密钥类型和来源:

    密钥类型

    密钥材料来源

    周期性自动轮转

    手动立即轮转

    软件密钥 (对称)

    KMS 生成

    支持

    支持

    外部导入 (BYOK)

    不支持

    支持

    软件密钥 (非对称)

    KMS 生成、外部导入 (BYOK)

    不支持

    硬件密钥(对称)

    KMS 生成(存储于数据库)

    支持

    支持

    KMS 生成 (存储于密码机)

    不支持

    外部导入 (BYOK)

    硬件密钥(非对称)

    KMS 生成、外部导入 (BYOK)

  • 密钥状态:密钥的状态为已启用

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

  • 特定密钥的附加条件:

    若为默认密钥,需要购买单独的轮转增值服务。

默认密钥设置轮转

计费说明

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

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

轮转方式及轮转日期

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

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

说明

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

开启轮转(周期性自动轮转)

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

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

    2. 默认密钥页签,单击购买轮转服务,完成配置项设置。

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

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

      3. 地域:选择默认密钥所在地域。

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

    3. 仔细阅读服务协议,单击立即购买后,单击订购完成购买。

  2. 开启密钥轮转。

    • 服务密钥

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

    • 主密钥

      通过控制台

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

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

      3. 设置轮转策略对话框,打开轮转状态开关,单击确定。密钥详情页面,轮转状态变更为已开启轮转周期365

      通过API

      • 创建密钥时开启。

        调用CreateKey接口,设置EnableAutomaticRotation(是否开启自动轮转)和RotationInterval(自动轮转的时间周期)参数。如果是KMS硬件密钥管理实例,还需要将密钥存储在加密数据库中,即KeyStorageMachenism需要同时设置为HsmEncryptedDatabase。

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

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

使用轮转密钥

默认密钥仅可用于云产品服务端加密,开启轮转后云产品将自动管理,无需人工操作。更多信息,请参见云产品集成KMS加密概述

查看轮转详情

通过控制台

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

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

通过API

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

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

KMS实例中的密钥设置轮转

配额消耗

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

轮转方式及轮转日期

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

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

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

开启轮转

  • 开启周期性自动轮转

    通过控制台

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

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

      2. 创建密钥面板中完成配置项设置,开启自动轮转并设置轮转周期,然后单击确定

        说明

        如果是KMS硬件密钥管理实例,请将密钥存储设置为数据库

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

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

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

    通过API

    • 创建密钥时开启。

      调用CreateKey接口,设置EnableAutomaticRotation(是否开启自动轮转)和RotationInterval(自动轮转的时间周期)参数。如果是KMS硬件密钥管理实例,还需要将密钥存储在加密数据库中,即KeyStorageMachenism需要同时设置为HsmEncryptedDatabase。

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

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

  • 手动立即轮转

    • 密钥材料由KMS生成的密钥。

      通过控制台

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

      2. 在密钥详情页下方的密钥版本区域单击设置轮转,在设置轮转策略选择立即轮转,然后单击确定

      通过API

      调用CreateKeyVersion接口。

    • 密钥材料由外部导入的自带密钥(BYOK)。

      1. 导入新的密钥材料

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

        2. 用户主密钥页签,选择实例ID后,单击目标密钥操作列详情按钮。

        3. 密钥材料和版本页签,单击左上角导入新的密钥材料。参照导入对称密钥材料,将密钥材料导入。

        4. 新的密钥材料导入后,生成一条新的密钥版本,可在密钥版本列表中查看,状态为“待轮转”。

          重要

          在新版本未执行轮转前,不允许导入新版本。

      2. 执行轮转

        1. 单击步骤1生成密钥版本操作列的轮转

        2. 立即轮转弹框内,确认密钥材料ID是否正确后,单击确定

使用轮转密钥

用于云产品服务端加密时,开启轮转后云产品将自动管理,无需人工操作。用于自建应用加密时,请通过如下API接口进行密码运算操作,接口默认使用轮转后最新版本的密钥。

使用阿里云SDK

阿里云SDK调用的是OpenAPI,加解密请调用以下接口。

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

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

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

使用KMS实例SDK时(不推荐)

不推荐新购用户使用该SDK。KMS实例SDK调用的是实例API,加解密请调用以下接口。

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

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

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

重要

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

查看轮转详情

通过控制台

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

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

通过API

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

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