Cuando usted crea una clave asimétrica con un origen de material de clave externo, KMS no genera el material de clave. Debe importar su propio material de clave. Este tema describe cómo importar material de clave para una clave asimétrica.
Si su instancia de gestión de claves por software o su instancia de gestión de claves por hardware no admite la importación de material de clave, o si la importación falla, comuníquese con el soporte técnico de Alibaba Cloud para actualizar su instancia.
Características
En las industrias reguladas, las auditorías de cumplimiento suelen exigir que demuestre la custodia exclusiva del material de clave criptográfica. Cuando usted crea una clave asimétrica con un origen de material de clave externo, Key Management Service (KMS) no genera dicho material; usted proporciona e importa el suyo. A este proceso se le conoce como Bring Your Own Key (BYOK).
Tipo de gestión de claves | Importar material de clave asimétrica |
Clave predeterminada |
|
Clave protegida por software | |
Clave protegida por hardware |
Notas de uso
Después de la primera importación de material de clave, la clave queda vinculada a ese material y ya no admite la importación de otro distinto.
Puede importar el mismo material de clave varias veces en una clave de KMS según lo requiera, pero no puede importar materiales de clave distintos en una misma clave de KMS.
Si el material de clave de una clave caduca o se elimina, puede volver a importar el mismo material para que la clave esté disponible de nuevo. El material de clave no se puede exportar después de importarlo. Guárdelo de forma segura.
Alcance
Se adquirió y habilitó una instancia de KMS. Para obtener más información, consulte Purchase and enable a KMS instance.
Importar material de clave en la consola de KMS
Paso 1: Crear una clave asimétrica con un origen de material de clave externo
Antes de importar el material de clave, cree una clave asimétrica con un origen de material de clave externo.
Clave protegida por software
Inicie sesión en la consola de Key Management Service. En la barra de navegación superior, seleccione una región. En el panel de navegación izquierdo, elija .
En la pestaña Customer Master Keys, seleccione una instancia de gestión de claves por software en la lista desplegable Instance ID y haga clic en Create Key.
-
En el panel Create Key, complete la configuración de los parámetros y haga clic en OK.
Parámetro
Descripción
Key Type
Seleccione Asymmetric Key.
Key Specifications
Especificaciones de clave asimétrica: RSA_2048, RSA_3072, RSA_4096, EC_P256 y EC_P256K.
Key Usage
Uso de la clave. Valores válidos:
Encrypt/Decrypt: cifra y descifra datos.
Sign/Verify: genera y verifica firmas digitales.
Key Alias
Alias de la clave. Se admiten letras, dígitos, guiones bajos (_), guiones (-) y barras diagonales (/).
Tags
Etiquetas de la clave, que permiten clasificar las claves. Cada etiqueta consta de un par clave-valor.
NotaFormato de la clave y el valor de una etiqueta: pueden tener hasta 128 caracteres de longitud y contener letras, dígitos, barras diagonales (/), barras diagonales inversas (\), guiones bajos (_), guiones (-), puntos (.), signos más (+), signos igual (=), dos puntos (:), arrobas (@) y espacios.
La clave de una etiqueta no puede comenzar con
aliyunni conacs:.Cada clave admite hasta 20 pares clave-valor de etiquetas.
Description
Descripción de la clave.
Advanced Settings
Policy Settings: para obtener más información, consulte Key policy overview.
Key Material Origin: seleccione External (Import Key Material).
NotaLea detenidamente y seleccione I understand the methods and implications of using external key material.
Clave protegida por hardware
Inicie sesión en la consola de Key Management Service. En la barra de navegación superior, seleccione una región. En el panel de navegación izquierdo, elija .
En la pestaña Customer Master Keys, seleccione una instancia de gestión de claves por hardware en la lista desplegable Instance ID y haga clic en Create Key.
-
En el panel Create Key, complete la configuración de los parámetros y haga clic en OK.
Parámetro
Descripción
Key Type
Seleccione Asymmetric Key.
Key Specifications
Especificaciones de clave asimétrica: RSA_2048, RSA_3072, RSA_4096, EC_P256 y EC_P256K
Key Usage
Uso de la clave. Valores válidos:
Encrypt/Decrypt: cifra y descifra datos.
Sign/Verify: genera y verifica firmas digitales.
Key Alias
Alias de la clave. Se admiten letras, dígitos, guiones bajos (_), guiones (-) y barras diagonales (/).
Tags
Etiquetas de la clave, que permiten clasificar las claves. Cada etiqueta consta de un par clave-valor.
NotaFormato de la clave y el valor de una etiqueta: pueden tener hasta 128 caracteres de longitud y contener letras, dígitos, barras diagonales (/), barras diagonales inversas (\), guiones bajos (_), guiones (-), puntos (.), signos más (+), signos igual (=), dos puntos (:), arrobas (@) y espacios.
La clave de una etiqueta no puede comenzar con
aliyunni conacs:.Cada clave admite hasta 20 pares clave-valor de etiquetas.
Description
Descripción de la clave.
Advanced Settings
Policy Settings: para obtener más información, consulte Key policy overview.
Key Material Origin: seleccione External (Import Key Material).
NotaLea detenidamente y seleccione I understand the methods and implications of using external key material.
Paso 2: Descargar una clave pública de envoltura y un token de importación
Los parámetros para importar material de clave incluyen una clave pública de envoltura y un token de importación. La clave pública de envoltura cifra el material de clave y lo protege durante el proceso de importación. El token de importación autoriza dicha importación.
Busque la clave de destino y haga clic en Actions en la columna Details. En la página de detalles de la clave, dentro de la sección Key Material, haga clic en Obtain Parameters for Import.
-
En el cuadro de diálogo Obtain Parameters to Import Key Material, seleccione Public Key Type y Encryption Algorithm, y luego haga clic en Next.
Tipo de gestión de claves
Especificaciones de clave
Tipo de clave pública de envoltura
Algoritmo de cifrado
Clave protegida por software
RSA_2048
RSA_3072
EC_P256
EC_P256K
RSA_2048
RSAES_OAEP_SHA_256_AES_256_ECB_PKCS7_PAD
Clave protegida por hardware
RSA_2048
RSA_3072
RSA_4096
EC_P256
EC_P256K
RSA_2048
RSAES_OAEP_SHA_256_AES_256_ECB_PKCS7_PAD
RSAES_OAEP_SHA_256_AES_256_ECB_PKCS7_PAD: para conocer el proceso de cifrado detallado, consulte Example: Use OpenSSL to generate key material for the RSA_2048 algorithm.
-
Descargue la clave pública de envoltura y el token de importación, y guárdelos de forma segura.
-
Public Key Format:
DER Format: de manera predeterminada, el archivo descargado se llama
WrappingPublicKey**.bin.PEM Format: de manera predeterminada, el archivo descargado se llama
WrappingPublicKey**.pem.
-
Import Token: de manera predeterminada, el archivo descargado se llama
ImportToken***.txt.ImportanteUn token de importación tiene una validez de 24 horas y se puede reutilizar durante ese periodo. Una vez que caduca, debe obtener un token de importación y una clave pública nuevos.
La clave pública de envoltura y el token de importación deben usarse como un par. No puede usar una clave pública de envoltura de una descarga con un token de importación de otra.
-
Paso 3: Cifrar el material de clave con la clave pública de envoltura
Genere y cifre el material de clave en su entorno de sistema. A continuación se muestran las claves que intervienen en el proceso. Consulte la tabla siguiente para obtener más detalles.
Clave | Propósito | Proveedor | Notas |
Target Asymmetric Key (TAK) | Clave asimétrica de destino que se va a importar. | Su entorno de sistema o herramienta (como una infraestructura de gestión de claves sin conexión [KMI] o un módulo de seguridad de hardware sin conexión [HSM]). |
|
Import Wrapping Key (IWK) | Clave de cifrado que se usa para importar la TAK. | KMS de Alibaba Cloud. |
|
Ephemeral Symmetric Key (ESK) | Clave simétrica transitoria que cifra directamente TAKpriv. | Su sistema o herramienta en el entorno de origen. Destrúyala inmediatamente después de exportar la TAK. | N/D |
-
Cree una clave privada asimétrica de destino (TAKpriv). La especificación de la clave debe coincidir con la que seleccionó al crear la clave asimétrica. Si ya cuenta con una clave privada asimétrica de destino (TAKpriv), omita este paso.
NotaEl formato de TAKpriv debe cumplir lo siguiente: las claves privadas RSA se codifican según RFC 3447 y las claves privadas ECC según RFC 5915; después, se envuelven en formato PKCS#8 conforme a RFC 5208.
Cree una clave simétrica efímera (ESK).
Use la clave pública de envoltura de importación (IWKpub) para cifrar la clave simétrica efímera (ESK) y obtener el texto cifrado de la clave simétrica efímera (Cipher(ESK)).
Use la clave simétrica efímera (ESK) para cifrar la clave privada asimétrica de destino (TAKpriv) y obtener el texto cifrado de la clave privada (Cipher(TAKpriv)).
Ensamble los datos resultantes con el formato Cipher(ESK)||Cipher(TAKpriv) para obtener el material de clave cifrado.
Paso 4: Importar el material de clave
En la página de detalles de la clave, haga clic en Import Key Material. En el cuadro de diálogo Import Wrapped Key Material, complete la configuración y haga clic en OK.
Parámetro | Descripción |
Wrapped Key Material | Cargue el archivo de material de clave generado en Step 3: Encrypt the key material using the wrapping public key. |
Import Token | Cargue el archivo de token descargado en Step 2: Download a wrapping public key and an import token. |
Key Material Expired On | Puede seleccionar Never Expire o especificar una fecha de caducidad personalizada. Importante Si establece una fecha de caducidad para el material de clave, KMS eliminará el material caducado después de esa fecha y ya no podrá usarlo. Para restaurarlo, vuelva a importar el mismo material de clave. |
Una vez que el material de clave se importa correctamente, el estado de la clave cambia de Pending Import a Enabling.
Importación de material de clave con Alibaba Cloud SDK
Con Alibaba Cloud SDK puede crear claves RSA y ECC en KMS e importar el material de clave. A continuación se muestra un ejemplo de código Java que ilustra este proceso.
Un par de AccessKey de una cuenta de Alibaba Cloud tiene permisos sobre todas las operaciones de API. Se recomienda usar un usuario de RAM para invocar las operaciones de API o ejecutar tareas habituales de operación y mantenimiento. Para evitar riesgos de seguridad, no codifique su AccessKey ID ni su AccessKey Secret directamente en el código del proyecto. Codificar estas credenciales puede provocar filtraciones que comprometan todos los recursos de su cuenta.
Este tema incluye un ejemplo sobre cómo configurar las variables de entorno ALIBABA_CLOUD_ACCESS_KEY_ID y ALIBABA_CLOUD_ACCESS_KEY_SECRET para la autenticación de identidad.
Para obtener más información sobre cómo configurar las credenciales de acceso, consulte Manage access credentials.
El método para configurar las variables de entorno varía según el sistema operativo. Para más detalles, consulte Configure environment variables on Linux, macOS, and Windows.
Instalación del SDK
Agregue la dependencia de Maven a su proyecto para descargar automáticamente el paquete de instalación de Java desde el repositorio de Maven. Utilice Alibaba Cloud SDK V2.0.
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>kms20160120</artifactId>
<version>1.4.0</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>tea</artifactId>
<version>1.3.2</version>
</dependency>
package com.aliyun;
import java.security.InvalidAlgorithmParameterException;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.Provider;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.security.interfaces.ECPrivateKey;
import java.security.spec.ECGenParameterSpec;
import java.security.spec.MGF1ParameterSpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Random;
import javax.crypto.Cipher;
import javax.crypto.spec.OAEPParameterSpec;
import javax.crypto.spec.PSource.PSpecified;
import javax.crypto.spec.SecretKeySpec;
import javax.xml.bind.DatatypeConverter;
import com.aliyun.kms20160120.models.*;
import com.aliyun.kms20160120.Client;
import org.bouncycastle.asn1.gm.GMNamedCurves;
import org.bouncycastle.asn1.x9.X9ECParameters;
import org.bouncycastle.crypto.engines.SM2Engine;
import org.bouncycastle.crypto.params.ECDomainParameters;
import org.bouncycastle.crypto.params.ECPublicKeyParameters;
import org.bouncycastle.crypto.params.ParametersWithRandom;
import org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPublicKey;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
public class BringYourOwnAsymmetricKeySample {
private final static String dedicatedKmsInstanceId = "<yourKmsInstanceId>";
// The public endpoint of KMS.
private final static String endpoint = "kms.<regionId>.aliyuncs.com";
private final Client kmsClient;
private final String SM2PKE_SM4_ECB = "SM2PKE_SM4_ECB";
private final String RSAES_OAEP_SHA_256_AES_256_ECB_PKCS7_PAD = "RSAES_OAEP_SHA_256_AES_256_ECB_PKCS7_PAD";
private static Provider BC = new BouncyCastleProvider();
private static X9ECParameters x9ECParameters = GMNamedCurves.getByName("sm2p256v1");
private static ECDomainParameters ecDomainParameters = new ECDomainParameters(x9ECParameters.getCurve(), x9ECParameters.getG(), x9ECParameters.getN());
static {
java.security.Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
}
public static void main(String[] args) throws Exception {
// Initialize the KMS SDK.
Client client = BringYourOwnAsymmetricKeySample.createClient();
BringYourOwnAsymmetricKeySample sample = new BringYourOwnAsymmetricKeySample(client);
// Create and import an external key of the EC_SM2 type.
sample.doByok("EC_SM2", "EC_SM2", sample.SM2PKE_SM4_ECB, "SM4");
// Create and import an external key of the EC_P256 type.
sample.doByok("EC_P256", "RSA_2048", sample.RSAES_OAEP_SHA_256_AES_256_ECB_PKCS7_PAD, "AES_256");
// Create and import an external key of the RSA type.
sample.doByok("RSA_2048", "RSA_2048", sample.RSAES_OAEP_SHA_256_AES_256_ECB_PKCS7_PAD, "AES_256");
}
/**
* <b>description</b> :
* <p>Initialize the client using credentials.</p>
*
* @return Client
* @throws Exception
*/
public static Client createClient() throws Exception {
// We recommend that you use the more secure credential-based initialization without hardcoding AccessKey pairs. For more information, see: https://www.alibabacloud.com/help/document_detail/378657.html.
com.aliyun.credentials.Client credential = new com.aliyun.credentials.Client();
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
.setCredential(credential);
// For the endpoint, see https://api.alibabacloud.com/product/Kms.
config.endpoint = endpoint;
return new Client(config);
}
public BringYourOwnAsymmetricKeySample(Client kmsClient) {
this.kmsClient = kmsClient;
}
public void doByok(String targetKeySpec, String wrappingKeySpec, String wrappingAlgorithm, String ephemeralKeySpec) {
try {
// Create an external ECC key.
CreateKeyResponseBody.CreateKeyResponseBodyKeyMetadata keyMetadata = this.createExternalKeyInDkms(dedicatedKmsInstanceId, targetKeySpec, "SIGN/VERIFY");
String keyId = keyMetadata.getKeyId();
// Obtain the parameters for importing key material.
GetParametersForImportResponse parametersForImportResponse = this.getParametersForImport(keyId, wrappingKeySpec,
wrappingAlgorithm);
String importToken = parametersForImportResponse.body.getImportToken();
String publicKeyBase64 = parametersForImportResponse.body.getPublicKey();
// Generate the ephemeral symmetric key.
byte[] ephemeralSymmetricKeyPlaintext = this.generateEphemeralSymmetricKey(ephemeralKeySpec);
// Generate the target asymmetric key.
byte[] targetAsymmetricKeyPlaintext = this.generateTargetAsymmetricKey(targetKeySpec);
// Use the import wrapping key public key to encrypt the ephemeral symmetric key.
byte[] ephemeralSymmetricKeyCipher = this.encryptEphemeralSymmetricKey(publicKeyBase64,
wrappingAlgorithm, ephemeralSymmetricKeyPlaintext);
// Use the ephemeral symmetric key to encrypt the target asymmetric key.
byte[] targetAsymmetricKeyCipher = this.encryptTargetAsymmetricKey(ephemeralSymmetricKeyPlaintext, targetAsymmetricKeyPlaintext,
wrappingAlgorithm);
// Generate the key material.
byte[] encryptedKeyMaterial = new byte[ephemeralSymmetricKeyCipher.length + targetAsymmetricKeyCipher.length];
System.arraycopy(ephemeralSymmetricKeyCipher, 0, encryptedKeyMaterial, 0, ephemeralSymmetricKeyCipher.length);
System.arraycopy(targetAsymmetricKeyCipher, 0, encryptedKeyMaterial, ephemeralSymmetricKeyCipher.length, targetAsymmetricKeyCipher.length);
String encryptedKeyMaterialBase64 = DatatypeConverter.printBase64Binary(encryptedKeyMaterial);
// Import the key material to KMS.
this.importKeyMaterial(keyId, encryptedKeyMaterialBase64, importToken, 0L);
} catch (Exception e) {
e.printStackTrace();
}
}
private GetParametersForImportResponse getParametersForImport(String keyId, String keySpec, String algorithm) throws Exception {
GetParametersForImportRequest request = new GetParametersForImportRequest();
request.setKeyId(keyId);
request.setWrappingKeySpec(keySpec);
request.setWrappingAlgorithm(algorithm);
return this.kmsClient.getParametersForImport(request);
}
private CreateKeyResponseBody.CreateKeyResponseBodyKeyMetadata createExternalKeyInDkms(String dedicatedKmsInstance, String keySpec, String keyUsage) throws Exception {
CreateKeyRequest request = new CreateKeyRequest();
// Create an external key.
request.setOrigin("EXTERNAL");
request.setDKMSInstanceId(dedicatedKmsInstance);
request.setKeySpec(keySpec);
request.setKeyUsage(keyUsage);
return kmsClient.createKey(request).body.keyMetadata;
}
private byte[] generateEphemeralSymmetricKey(String ephemeralSymmetricKeySpec) throws Exception {
// If the ephemeral symmetric key is AES_256, the length is 32 bytes.
int ephemeralSymmetricKeyLength = 32;
if ("SM4".equals(ephemeralSymmetricKeySpec)) {
ephemeralSymmetricKeyLength = 16;
}
byte[] key = new byte[ephemeralSymmetricKeyLength];
new Random().nextBytes(key);
return key;
}
private byte[] generateTargetAsymmetricKey(String keySpec) throws Exception {
PrivateKey privateKey = null;
// Generate an SM2 key and obtain the D value of the private key.
if ("EC_SM2".equals(keySpec)) {
ECPrivateKey ecPrivateKey = (ECPrivateKey) generateSm2KeyPair().getPrivate();
byte[] dT = ecPrivateKey.getS().toByteArray();
byte[] d = new byte[32];
if (dT.length == 33) {
System.arraycopy(dT, 1, d, 0, 32);
}
return dT.length == 32 ? dT : d;
}
// Generate an RSA or ECC private key.
if (keySpec.contains("RSA")) {
String[] keySpecAttrs = keySpec.split("_");
int bits = Integer.parseInt(keySpecAttrs[keySpecAttrs.length - 1]);
privateKey = generateRsaKeyPair(bits).getPrivate();
} else if (keySpec.contains("EC")) {
if (keySpec.contains("P256K")) {
// Generate an EC_P256K private key.
privateKey = generateEccKeyPair("secp256k1").getPrivate();
} else {
// Generate an EC_P256 private key.
privateKey = generateEccKeyPair("secp256r1").getPrivate();
}
}
if (privateKey != null) {
// Return the private key in PKCS#8 format.
return privateKey.getEncoded();
}
return null;
}
private KeyPair generateEccKeyPair(String keySpec)
throws NoSuchAlgorithmException, InvalidAlgorithmParameterException {
ECGenParameterSpec ecSpec = new ECGenParameterSpec(keySpec);
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("EC");
keyPairGenerator.initialize(ecSpec, new SecureRandom());
return keyPairGenerator.generateKeyPair();
}
private KeyPair generateRsaKeyPair(int length) throws Exception {
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(length);
return keyGen.genKeyPair();
}
private KeyPair generateSm2KeyPair() throws Exception {
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("EC", "BC");
keyGen.initialize(new ECGenParameterSpec("sm2p256v1"), new SecureRandom());
return keyGen.genKeyPair();
}
private byte[] encryptEphemeralSymmetricKey(String publicKeyBase64, String wrappingAlgorithm, byte[] ephemeralSymmetricKeyPlaintext) throws Exception {
PublicKey publickey = null;
byte[] enchbk = null;
if ("RSAES_OAEP_SHA_256_AES_256_ECB_PKCS7_PAD".equals(wrappingAlgorithm)) {
publickey = parseDerPublicKey("RSA", publicKeyBase64);
Cipher oaepFromAlgo = Cipher.getInstance("RSA/ECB/OAEPWithSHA-1AndMGF1Padding");
OAEPParameterSpec oaepParams = new OAEPParameterSpec("SHA-256", "MGF1", new MGF1ParameterSpec("SHA-256"), PSpecified.DEFAULT);
oaepFromAlgo.init(Cipher.ENCRYPT_MODE, publickey, oaepParams);
enchbk = oaepFromAlgo.doFinal(ephemeralSymmetricKeyPlaintext);
} else if ("SM2PKE_SM4_ECB".equals(wrappingAlgorithm)) {
publickey = parseDerPublicKey("EC", publicKeyBase64, BC);
BCECPublicKey localECPublicKey = (BCECPublicKey) publickey;
ECPublicKeyParameters ecPublicKeyParameters = new ECPublicKeyParameters(localECPublicKey.getQ(), ecDomainParameters);
SM2Engine sm2Engine = new SM2Engine(SM2Engine.Mode.C1C3C2);
sm2Engine.init(true, new ParametersWithRandom(ecPublicKeyParameters));
enchbk = sm2Engine.processBlock(ephemeralSymmetricKeyPlaintext, 0, ephemeralSymmetricKeyPlaintext.length);
} else {
throw new Exception("Invalid wrappingAlgorithm");
}
return enchbk;
}
private PublicKey parseDerPublicKey(String keyType, String pemKey) throws Exception {
byte[] derKey = DatatypeConverter.parseBase64Binary(pemKey);
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(derKey);
return KeyFactory.getInstance(keyType).generatePublic(keySpec);
}
private PublicKey parseDerPublicKey(String keyType, String pemKey, Provider provider) throws Exception {
byte[] derKey = DatatypeConverter.parseBase64Binary(pemKey);
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(derKey);
return KeyFactory.getInstance(keyType, provider).generatePublic(keySpec);
}
private byte[] encryptTargetAsymmetricKey(byte[] secretKey, byte[] targetAsymmetricKeyPlaintext, String wrappingAlgorithm)
throws Exception {
if ("RSAES_OAEP_SHA_256_AES_256_ECB_PKCS7_PAD".equals(wrappingAlgorithm)) {
SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding", "BC");
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
return cipher.doFinal(targetAsymmetricKeyPlaintext);
} else if ("SM2PKE_SM4_ECB".equals(wrappingAlgorithm)) {
SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey, "SM4");
Cipher cipher = Cipher.getInstance("SM4/ECB/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
return cipher.doFinal(targetAsymmetricKeyPlaintext);
}
throw new Exception("Invalid WrappingAlgorithm");
}
private void importKeyMaterial(
String keyId,
String material,
String token,
Long expire
) throws Exception {
ImportKeyMaterialRequest req = newImportKeyMaterialRequest(
keyId, material, token, expire);
this.kmsClient.importKeyMaterial(req);
}
private ImportKeyMaterialRequest newImportKeyMaterialRequest(
String keyId,
String material,
String token,
Long expire
) {
ImportKeyMaterialRequest request = new ImportKeyMaterialRequest();
request.setEncryptedKeyMaterial(material);
request.setImportToken(token);
request.setKeyId(keyId);
request.setKeyMaterialExpireUnix(expire);
return request;
}
}
Preguntas frecuentes
-
¿Es compatible la eliminación del material de clave?
Sí, es compatible.
ImportanteCuando el material de clave importado caduca o se elimina, la clave deja de estar disponible. Debe volver a importar el mismo material de clave para restaurarla.
-
Eliminación directa del material de clave
Consola: en la página de detalles de la clave, dentro de la sección Key Material, haga clic en Delete Key Material.
API: invoque la operación DeleteKeyMaterial para eliminar el material de clave. Esta operación no elimina la clave.
-
Eliminación automática por parte de KMS tras la caducidad
Establezca una fecha de caducidad al importar el material de clave. Una vez transcurrido ese tiempo, KMS elimina automáticamente el material caducado.
-
-
¿Cómo vuelvo a importar el mismo material de clave?
Si el material de clave caduca o se elimina, puede importarlo de nuevo para que la clave siga funcionando.
-
Elimine el material de clave caducado.
En la página de detalles de la clave, haga clic en la pestaña Key Material y luego en Delete Key Material.
-
Descargue nuevamente la clave pública de envoltura y el token de importación. Para más información, consulte Step 2: Download a wrapping public key and an import token.
NotaEl proceso de envoltura de clave no altera el contenido del material de clave. Puede utilizar una clave pública de envoltura y un algoritmo distintos para importar el mismo material de clave.
-
Cifre el material de clave con la clave pública de envoltura. Para más información, consulte Step 3: Encrypt the key material using the wrapping public key.
NotaEl material de clave debe ser idéntico al que caducó anteriormente.
Utilice el token de importación para cargar el material de clave cifrado. Para más información, consulte Step 4: Import key material.
-
-
¿Cómo determino si el material de clave se importó de forma externa o lo generó KMS?
-
Método 1: compruébelo en la consola de KMS.
En la página Keys, haga clic en la pestaña Customer Master Keys, seleccione un Instance ID, busque la clave correspondiente, haga clic en Actions dentro de la columna Details y revise el campo Key Material Origin en la página de detalles.
-
Método 2: compruébelo invocando la operación DescribeKey.
Si el valor de
OriginesEXTERNAL, el material de clave se importó externamente. Si el valor deOriginesAliyun_KMS, el material de clave lo generó KMS.
-
-
¿Cómo roto una clave que utiliza material de clave externo?
En una clave simétrica protegida por software con material de clave externo importado, solo se admite la rotación manual inmediata. La rotación periódica automática no es compatible. Para más información, consulte Bring Your Own Keys (BYOKs) with imported key material..
Las claves asimétricas protegidas por software con material de clave externo importado no admiten rotación.
Las claves protegidas por hardware (simétricas o asimétricas) con material de clave externo importado tampoco admiten rotación.