密钥封装是使用一个密钥加密另一个密钥的过程,加密后便可以安全存储或通过不受信任的渠道进行传输。密钥封装可能基于对称加密或非对称加密(根据具体情况而定)。
在 Cloud Key Management Service 中,密钥封装用于安全导入用户提供的加密密钥。导入密钥需要一个导入作业,并且每个导入作业都有一个导入方法,用于指定要使用的密钥封装协议。
Cloud KMS 要求已导入密钥材料采用特定格式。 在封装密钥材料以进行导入之前,您可能需要将其转换为 Cloud KMS 要求的格式。格式化密钥以进行导入包含所需格式的详细信息,并说明如何根据需要将密钥转换为所需的格式。
正确设置密钥材料的格式后,Google Cloud CLI 可以自动封装密钥材料,然后再将其安全传输到 Cloud KMS。如需了解详情,请参阅导入密钥。 您也可以使用适当的加密协议手动封装您的密钥。在 Linux 上使用 OpenSSL 封装密钥提供了一个示例来说明如何执行此操作。
导入方法
Cloud KMS 提供了以下导入方法:
导入方法 | 导入作业密钥类型 | 密钥封装算法 |
---|---|---|
RSA_OAEP_3072_SHA1_AES_256 | 3072 位 RSA | 带有 SHA-1 和 AES-KWP 的 RSAES-OAEP |
RSA_OAEP_4096_SHA1_AES_256 | 4096 位 RSA | 带有 SHA-1 和 AES-KWP 的 RSAES-OAEP |
RSA_OAEP_3072_SHA256_AES_256(推荐) | 3072 位 RSA | 采用 SHA-256 和 AES-KWP 的 RSAES-OAEP |
RSA_OAEP_4096_SHA256_AES_256 | 4096 位 RSA | 采用 SHA-256 和 AES-KWP 的 RSAES-OAEP |
RSA_OAEP_3072_SHA256 | 3072 位 RSA | 使用 SHA-256 算法的 RSAES-OAEP |
RSA_OAEP_4096_SHA256 | 4096 位 RSA | 使用 SHA-256 算法的 RSAES-OAEP |
密钥封装算法
Cloud KMS 提供的导入方法对应于以下密钥封装算法:
采用 SHA-1/SHA-256 和 AES-KWP 的 RSAES-OAEP
此密钥封装算法是一种混合加密方案,它由非对称密钥封装操作和对称密钥封装操作组成:
- 导入作业中的公钥用于加密一次性 AES-256 密钥。使用 RSAES-OAEP 和 MGF-1 以及导入方法指定的摘要算法执行加密。一次性 AES-256 密钥是在执行封装时生成的。
- 可使用第 1 步中的一次性 AES-256 密钥并通过使用填充算法封装 AES 密钥来加密目标密钥材料。
用于导入的封装密钥材料是一个单字节数组,由第 1 步的结果和第 2 步的结果组成。换句话说,第 1 步和第 2 步的结果合并在一起便构成了封装密钥材料。
此算法与 PKCS #11 密钥封装算法 CKM_RSA_AES_KEY_WRAP 相同。如果要从 HSM 导入密钥,并且您的 HSM 支持此算法,您便可以直接使用该算法。此外,也可以分别使用 PKCS #11 机制 CKM_RSA_PKCS_OAEP 和 CKM_AES_KEY_WRAP_PAD 执行上述的第 1 步和第 2 步。
如果来源 HSM 或其他密钥提供商(若未使用 HSM)不支持 RSA AES 密钥封装机制,则您必须使用导入作业的公钥手动封装密钥材料。如需了解如何使用 OpenSSL 执行此操作的示例,请参阅在 Linux 上使用 OpenSSL 封装密钥。
采用 SHA-256 的 RSAES-OAEP
这是一种非对称密钥封装操作,它通过 RSAES-OAEP 使用导入作业中的公钥,采用 MGF-1 和 SHA-256 摘要算法,直接加密目标密钥材料。它基于 PKCS #11 RSA OAEP 机制 CKM_RSA_PKCS_OAEP。由于此导入方法的大小限制,因此不适合导入 RSA 私钥。