Abrir una sesión post-cuántica (ML-KEM)
Establece una clave de sesión con un mecanismo de encapsulamiento de claves post-cuántico, para que los cuerpos de las solicitudes y las respuestas viajen cifrados con ella además de con TLS.
Quién puede hacerlo
Cualquier cliente. El handshake no necesita token: se ejecuta antes de iniciar sesión, y la sesión que abre la usan después la solicitud del token y las llamadas autenticadas.
Antes de empezar
- Elige un KEM que admita el despliegue.
GET /api/v3/pqc-handshake/supported-algorithmslos lista; el SDK usaML-KEM-768salvo que se le indique otro. - Ten en cuenta las operaciones de streaming y de interoperabilidad: nunca se envían con la clave de sesión, y se rechaza una solicitud de streaming que lleva los encabezados de sesión.
Pasos
- Con el SDK de Java, activa el transporte en las propiedades que pasas a
AnkaSecureSdk:pqc.transport.enabled=truey, de forma opcional,pqc.kem.algorithm=<KEM>(predeterminadoML-KEM-768) ypqc.session.ttl.seconds(predeterminado600: el SDK reutiliza una sesión durante esa cantidad de segundos desde que la abrió y luego hace un handshake nuevo). Un KEM que el SDK no admite se rechaza cuando se construye el SDK, antes de cualquier solicitud. Después, el SDK hace el handshake, cifra cada solicitud que tiene cuerpo (incluida la solicitud del token) y descifra las respuestas; las solicitudes de streaming, de interoperabilidad y de handshake, y las solicitudes sin cuerpo, se envían sin cambios. - Con la CLI criptográfica, establece las mismas propiedades en su archivo de configuración,
~/.ankasecure-crypto/config.propertiessalvo que--config-pathnombre otro. Un archivo escrito porAnkaSecureCLI initya las lleva, con el transporte desactivado. La CLI pasa el archivo completo al SDK, que las aplica como se indica arriba;AnkaSecureCLI view-sessionmuestraPQC Transport: Enabledy el KEM que resuelve, o nombra los KEM admitidos cuando el configurado no está entre ellos. Con el transporte activado, usa los comandos de streaming explícitos (comoencrypt-file-stream) para los archivos grandes. - Con la API, genera un par de claves para el KEM elegido y llama a
POST /api/v3/pqc-handshake/initcon{"clientPublicKeyBase64": "<public key>", "algorithm": "ML-KEM-768"}. La respuesta llevaciphertextBase64ysessionId. Desencapsula el texto cifrado con tu clave privada para obtener la clave de sesión AES-256, y luego envía cada solicitud conX-PQC-Transport: trueyX-PQC-Session: <sessionId>y su cuerpo cifrado con esa clave. El formato del cuerpo se describe en PQC transport in the SDK (en inglés). - Usa la sesión dentro de los 5 minutos. Una sesión nueva vence entonces, salvo que antes la use una solicitud que demuestre una identidad, una llamada autenticada o la solicitud del token; ese primer uso la extiende a 4 horas.
Qué ves cuando funcionó
El handshake responde 200 con ciphertextBase64 y sessionId. Las llamadas cifradas responden con un cuerpo cifrado que abre la clave de sesión. Un rechazo escrito antes de que la capa de transporte pudiera cifrar nada, como una sesión perdida, llega como un application/problem+json sin cifrar.
Si falla
| Qué ves | Causa | Qué hacer |
|---|---|---|
400 | Falta el cuerpo o no es JSON válido, o la clave pública falta, es demasiado grande, no es válida o no es una clave del algoritmo solicitado, o el algoritmo no es uno de los que lista el despliegue | Envía una clave pública de un algoritmo de la lista |
415 unsupported-media-type | La solicitud no es application/json | Envía JSON |
503 .../errors/pqc-session-capacity con Retry-After | El despliegue tiene su número máximo de sesiones pendientes; no se ejecutó ningún intercambio de claves | Vuelve a hacer todo el handshake después del intervalo |
503 dependency-not-ready con Retry-After | Una dependencia de la plataforma no está disponible temporalmente; no existe ninguna sesión | Vuelve a hacer todo el handshake después del intervalo |
400 con extensions.code pqc.session.notfound en una llamada posterior | El servidor ya no tiene la sesión | Abre una sesión nueva; el SDK lo hace una vez por su cuenta y vuelve a enviar la solicitud |
400 .../errors/pqc-transport-not-available-for-streaming | Se envió una solicitud de streaming con los encabezados de sesión | Vuelve a enviarla sin ellos; TLS ya la protege |
Sin la consola
El handshake no tiene pantalla en la consola.
| Superficie | Cómo |
|---|---|
| SDK de Java | pqc.transport.enabled, pqc.kem.algorithm y pqc.session.ttl.seconds en las propiedades que se pasan a AnkaSecureSdk |
| CLI criptográfica | Las mismas propiedades en el archivo de configuración de la CLI (~/.ankasecure-crypto/config.properties de forma predeterminada); AnkaSecureCLI view-session muestra el estado del transporte |
| API | POST /api/v3/pqc-handshake/init (operación initializeHandshake) |
Relacionado
Esta página está en inglés: