> ## Documentation Index
> Fetch the complete documentation index at: https://docs.basaltic.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# Crear una clave

> Especificaciones, usos y la única opción que no puede cambiar después de que la clave exista.

<a id="creating-a-key" />

## Crear una clave

<Tabs>
  <Tab title="Console">
    Vaya a **KMS** y elija **Create Key**. En **Key details**, déle un **Name** y una **Description** opcional; en **Cryptography**, elija una **Key spec** y un **Key usage**.

    Las opciones de especificación son **AES-256 symmetric (recommended)**, **RSA-2048
    asymmetric**, **RSA-4096 asymmetric** y **ECDSA P-256 asymmetric (sign
    only)**. **Key usage** está bloqueado a lo que la especificación elegida admita: una especificación RSA es la única que le permite elegir entre **Encrypt /
    Decrypt** y **Sign / Verify**.
  </Tab>

  <Tab title="API">
    ```bash theme={null}
    POST https://kms.sa-saopaulo-1.basaltic.sh/v1/keys
    {
      "name": "prod-master",
      "key_spec": "aes-256",
      "description": "Master key for the payments data store"
    }
    ```
  </Tab>

  <Tab title="CLI">
    ```bash theme={null}
    basaltic kms key create \
      --name prod-master --key-spec aes-256 \
      --description "Master key for the payments data store"
    ```
  </Tab>

  <Tab title="Go">
    ```go theme={null}
    key, err := kms.New(cfg).CreateKey(ctx, &kms.CreateKeyRequest{
        Name:        "prod-master",
        KeySpec:     "aes-256",
        Description: basaltic.String("Master key for the payments data store"),
    })
    ```

    KMS es regional; una clave solo se puede usar desde la región en la que se creó.
  </Tab>
</Tabs>

La llamada es sincrónica. La respuesta lleva la clave ya en `enabled`, listo para las operaciones de cifrado - no hay nada que sondear.

`name` es único por cuenta y cae en el CRN, por lo que tiene que ser URL-safe: `^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$`.

El nombre se fija después de la creación porque las políticas de IAM se dirigen a la clave por su CRN. Una actualización que contiene `name` devuelve un error de validación, incluso cuando el valor no ha cambiado, está vacío o es `null`. Las claves existentes conservan sus nombres actuales. La eliminación de una clave y la reutilización de su nombre no preserva la identidad de la clave ni el material criptográfico.

<a id="specs-and-usages" />

### Especificaciones y usos

Una clave se fija a un **uso** en la creación: ya sea `encrypt_decrypt` o `sign_verify`. La **spec** decide qué usos son posibles.

| `key_spec` | Puede cifrar | Puede firmar | Uso predeterminado |
| - | - | - | - |
| `aes-256` | Sí — AES-GCM | No | `encrypt_decrypt` |
| `rsa-2048` | Sí — OAEP-SHA256 | Sí | ninguno, debes elegir |
| `rsa-4096` | Sí — OAEP-SHA256 | Sí | ninguno, debes elegir |
| `ecdsa-p256` | No | Sí — SHA-256 | `sign_verify` |

Omita `key_usage` para `aes-256` o `ecdsa-p256` y se aplicará el único uso que la especificación admite. Si se omite para una especificación RSA, la solicitud se rechazará — RSA puede hacer ambas cosas, por lo que el servicio no adivina.

<Warning>
  Una clave RSA fijada a `encrypt_decrypt` **rechaza firmar y verificar**, y viceversa, aunque el algoritmo podría hacer cualquiera de las dos cosas. El rechazo es `400 KMS_INVALID_KEY_USAGE`. Escoja el uso deliberadamente: ni la especificación ni el uso pueden ser cambiados más tarde, y `PATCH /v1/keys/{key_id}` solo edita `description` y `tags`. Para cambiar cualquiera de ellas, cree una nueva clave.
</Warning>

<a id="find-a-key" />

## Encuentra una llave

Use `GET /v1/keys?name=prod-master` para obtener una coincidencia de nombre exacta y que distinga entre mayúsculas y minúsculas dentro de su cuenta, o pase el CRN completo de la clave como el parámetro de consulta `crn` codificado en URL. Estos filtros se combinan con `state` y paginación. Un CRN mal formado o uno para otra cuenta, región o tipo de recurso devuelve una página vacía.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.