Skip to content

Cifrar y descifrar datos

Protege datos con una clave de tu tenant y recupéralos más tarde, como un JWE (RFC 7516), en una sola solicitud o en streaming para archivos grandes.

Quién puede hacerlo

Una aplicación autenticada como actor criptográfico de tu tenant. Su token debe llevar el scope de la operación, y el actor debe tener una concesión de capacidad activa para la operación sobre la clave:

Operación Scope Concesión de capacidad
Cifrar en una sola solicitud secure.encrypt ENCRYPT sobre la clave
Descifrar en una sola solicitud secure.decrypt DECRYPT sobre la clave
Cifrar un stream stream.encryptStream ENCRYPT sobre la clave
Descifrar un stream stream.decryptStream DECRYPT sobre la clave

Ningún rol de la consola realiza estas operaciones.

Antes de empezar

  • Existe una clave de cifrado en el tenant, con un identificador de clave que tu aplicación conoce. Consulta Crear una clave.
  • La aplicación puede obtener un token. Consulta Obtener un token de acceso para una aplicación.
  • Para archivos grandes, las operaciones de streaming necesitan HTTP/2 sobre https. El SDK se niega a hacer streaming sobre HTTP/1.1 o http sin cifrar antes de enviar nada.

Pasos

  1. Cifra:
    • SDK de Java: sdk.encrypt(kid, plaintext) devuelve un EncryptResult; conserva getJweToken(). Para archivos, sdk.encryptFile(kid, input, output) elige la operación de una sola solicitud o la de streaming según el límite de tamaño del servidor.
    • CLI criptográfica: AnkaSecureCLI encrypt-file --kid <kid> --input-file <file> --output-file <file>. Los archivos grandes se envían en streaming automáticamente; encrypt-file-stream siempre usa streaming.
    • API: POST /api/v3/crypto/encrypt con {"kid": "<kid>", "data": "<base64 plaintext>"}. Para un stream, POST /api/v3/crypto/stream/encrypt con un cuerpo multipart/form-data cuya parte metadata va antes de la parte file.
  2. Guarda el JWE exactamente como se devolvió. Un JWE hecho con una clave asimétrica o compuesta lleva un miembro de confirmación de clave, ank_kc; la plataforma rechaza un JWE sin él, o uno cuyo identificador de clave del destinatario, versión, algoritmo o tenant se editó.
  3. Descifra:
    • SDK de Java: sdk.decrypt(jwe) devuelve un DecryptResult; lee getDecryptedData(). Para archivos, sdk.decryptFile(input, output) elige el camino según el formato de la entrada.
    • CLI criptográfica: AnkaSecureCLI decrypt-file --input-file <file> --output-file <file>, o decrypt-file-stream para un artefacto de streaming.
    • API: POST /api/v3/crypto/decrypt con {"jweToken": {...}}. Para un stream, POST /api/v3/crypto/stream/decrypt con el encabezado multipart/mixed y las partes del texto cifrado.
  4. Si el JWE está dirigido a varias claves, nombra aquella con la que descifra tu actor: recipientKid en el cuerpo de la solicitud, el parámetro de consulta recipientKid para un stream, sdk.decrypt(recipientKid, jwe) o --recipient-kid en la CLI. Solo se prueba ese destinatario.
  5. En un descifrado en streaming, espera el veredicto. El texto en claro llega en la primera parte de la respuesta, antes de la comprobación de integridad del final del stream; la parte final del veredicto indica si se cumple. Trata la salida como no confiable hasta que el veredicto sea VALID. El SDK y la CLI lo hacen por ti: escriben en <output>.part y le cambian el nombre solo con un veredicto VALID.

Qué ves cuando funcionó

Un cifrado devuelve el JWE en la serialización JSON general (jweToken), con keyRequested, materialVersion, algorithmUsed y cualquier warnings, como una clave cerca de su límite de uso o de su fecha de retiro. El JWE de una clave compuesta lleva un destinatario por componente.

Un descifrado devuelve el texto en claro con la clave y la versión de material que se usaron. Un descifrado en streaming termina con una parte de veredicto cuyo verdict es VALID; con el SDK o la CLI, el archivo de salida existe solo entonces.

Si falla

Qué ves Causa Qué hacer
403 .../errors/forbidden Al token le falta el scope, el actor no tiene ninguna concesión de capacidad activa para la operación sobre la clave, se infringe una restricción de la concesión, su contexto de intercambio está suspendido, o el tenant o el actor no está en un estado que permita operaciones criptográficas Pide a un administrador del tenant que revise los roles y las concesiones del actor
404 .../errors/not-found La clave no existe en el tenant, o le falta la parte que necesita la operación Revisa el identificador de clave
409 .../errors/conflict La clave está suspendida o revocada Usa una clave activa; es permanente, no lo vuelvas a intentar
409 .../errors/key-protection-backend-not-configured El tenant no tiene backend de protección de claves Un administrador del tenant lo configura
413 .../errors/payload-too-large El texto en claro supera el límite de una sola solicitud Usa la operación de streaming, o deja que encryptFile elija
422 con un detalle que indica que no se pudo descifrar porque la clave no coincide o falló la integridad del texto cifrado ("Unable to decrypt: key mismatch or ciphertext integrity failure.") La etiqueta no se verifica, el JWE se editó, o su confirmación de clave falta o no coincide con el destinatario No uses los datos; obtén el JWE original
422 con un extensions.errorCode como JWE_ROOT_MEMBER_FORBIDDEN o JOSE_ACTOR_KID_REPEATED El JWE lleva un miembro o una forma que la plataforma no acepta Envía el JWE tal como lo produjo la plataforma
400 que nombra recipientKid El JWE está dirigido a varias claves y no se nombró ningún destinatario, o se nombró uno que no tiene Nombra uno de sus destinatarios
Un descifrado en streaming termina con el veredicto INVALID y sin contenido Se alteró el texto cifrado o su encabezado, o falló la confirmación de clave Descarta la salida; el SDK lanza StreamIntegrityException y no escribe ningún archivo
400 .../errors/pqc-transport-not-available-for-streaming Se envió una solicitud de streaming con el transporte de sesión PQC Vuelve a enviarla sin los encabezados X-PQC-Transport y X-PQC-Session
503 .../errors/key-protection-backend-unavailable El backend de protección de claves no está disponible temporalmente Vuelve a intentarlo después de Retry-After

Sin la consola

Estas operaciones no tienen pantalla en la consola.

Superficie Cómo
SDK de Java encrypt, encryptFile, encryptFileStream, decrypt, decryptFile, decryptFileStream en AuthenticatedSdk
CLI criptográfica AnkaSecureCLI encrypt-file, decrypt-file, encrypt-file-stream, decrypt-file-stream
API POST /api/v3/crypto/encrypt (encryptData), POST /api/v3/crypto/decrypt (decryptData), POST /api/v3/crypto/stream/encrypt (encryptStream), POST /api/v3/crypto/stream/decrypt (decryptStream)

Relacionado

Estas páginas están en inglés: