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 ohttpsin cifrar antes de enviar nada.
Pasos
- Cifra:
- SDK de Java:
sdk.encrypt(kid, plaintext)devuelve unEncryptResult; conservagetJweToken(). 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-streamsiempre usa streaming. - API:
POST /api/v3/crypto/encryptcon{"kid": "<kid>", "data": "<base64 plaintext>"}. Para un stream,POST /api/v3/crypto/stream/encryptcon un cuerpomultipart/form-datacuya partemetadatava antes de la partefile.
- SDK de Java:
- 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ó. - Descifra:
- SDK de Java:
sdk.decrypt(jwe)devuelve unDecryptResult; leegetDecryptedData(). 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>, odecrypt-file-streampara un artefacto de streaming. - API:
POST /api/v3/crypto/decryptcon{"jweToken": {...}}. Para un stream,POST /api/v3/crypto/stream/decryptcon el encabezadomultipart/mixedy las partes del texto cifrado.
- SDK de Java:
- Si el JWE está dirigido a varias claves, nombra aquella con la que descifra tu actor:
recipientKiden el cuerpo de la solicitud, el parámetro de consultarecipientKidpara un stream,sdk.decrypt(recipientKid, jwe)o--recipient-kiden la CLI. Solo se prueba ese destinatario. - 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>.party le cambian el nombre solo con un veredictoVALID.
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
- Concesiones de Capacidad: lo que permite que un actor use una clave.
Estas páginas están en inglés: