Encriptación de la capa de aplicación

Las APIs de Standard Payments admiten PGP o JWE para la encriptación de capa de aplicación.

Encriptación PGP

PGP es un conjunto estándar de algoritmos de encriptación, desencriptación y firma que proporcionan privacidad y autenticación criptográficas.

Cuando utilicen PGP para encriptar cargas útiles, los socios deben admitir lo siguiente:

  • La encriptación y desencriptación de cargas útiles con varias claves de PGP
  • La firma de las cargas útiles con varias claves de PGP
  • La verificación de una carga útil con varias firmas, cada una de las cuales puede ser la firma con la clave proporcionada por Google
  • La desencriptación de cargas útiles codificadas con base64 segura para la Web

Las claves públicas de PGP proporcionadas a Google deben tener una subclave para la encriptación. La subclave permite la rotación independiente a partir de la clave primaria. La clave primaria se utiliza para verificar la identidad. Las claves privadas deben ser claves RSA de 2048 (o más) bits que venzan en un año, con una vida útil máxima de dos años.

Antes de empezar el desarrollo, debes intercambiar las claves de PGP con Google. En este paso, generarás un par de claves públicas/privadas de PGP, proporcionarás la clave pública a Google y recibirás una clave pública de vuelta desde Google. Durante el desarrollo, solo necesitarás intercambiar las claves de zona de pruebas usadas para desarrollo y prueba fuera de producción. Antes de la prueba y el lanzamiento en producción, deberás realizar otro intercambio de claves de producción.

Genera una nueva clave de PGP

Suponiendo que tienes un objeto binario de GPG en tu ruta de acceso de sistema, puedes usar el siguiente comando POSIX para crear un nuevo par de claves.

$ gpg --full-generate-key

Cuando se te solicite, selecciona una clave RSA con al menos 2,048 bits de entropía y un vencimiento entre 1 y 2 años. Este comando debe crear una clave principal (con la etiqueta SC, por las siglas en inglés de generación de firma y certificado) y una subclave (con la etiqueta E, de encriptación).

Configuración de la biblioteca de PGP

Envío de cargas útiles

  1. Cuando firmes, debes utilizar SHA384 como el algoritmo de resumen. No uses SHA1 ni MD5.
  2. Cuando encriptes, debes utilizar AES256 como el algoritmo de encriptación simétrica. No uses CAST5 ni IDEA.
  3. Cuando encriptes o firmes mensajes, asegúrate de seleccionar la subclave con el propósito correspondiente. Utiliza la clave CAN_SIGN para firmar y la clave ENCRYPT_COMMS/ENCRYPT_STORAGE para encriptar.

Cómo recibir cargas útiles

  1. Cuando verifiques una carga útil, asegúrate de que tu biblioteca admita algoritmos hash modernos, como SHA384. Google comenzará a usarlo en todas las claves nuevas a partir del 14 de mayo de 2023.
  2. Cuando desencriptes una carga útil, asegúrate de que tu biblioteca admita algoritmos de encriptación simétricos modernos, como AES256. Google comenzará a usarlo en todas las claves nuevas a partir del 14 de mayo de 2023.

Ejemplo de encriptación de carga útil de GPG

El siguiente comando es un ejemplo de cómo seleccionar opciones seguras cuando se usa GPG. Se espera que esta operación se realice en un entorno confiable donde las personas no tengan acceso a las claves privadas ni a archivos de entrada sensibles.

gpg --output signed-and-encrypted.pgp \
  --sign --digest-algo SHA384 \
  --encrypt --cipher-algo AES256 \
  --armor \
  --recipient {key_id} \
  input.txt

GPG seleccionará automáticamente la clave correcta del paquete para cada operación que le pidas realizar.

Encriptación JWE con firma de JWS

JSON Web Encryption (JWE) es un estándar definido por rfc7516 para encriptar contenido a nivel de la aplicación. JSON Web Signature (JWS) es un estándar definido por rfc7515 para firmar contenido a nivel de la aplicación.

Las solicitudes y respuestas serán tokens de JWE encriptados con encriptación asimétrica (clave pública) con la opción de "Serialización compacta". El token de JWE contendrá la carga útil firmada como un token de JWS. JWS también utiliza claves asimétricas: clave privada para la firma y clave pública para la verificación.

Cuando envíes una carga útil, firma la carga útil primero y, luego, encríptala. Cuando recibas una carga útil, desencríptala primero y, luego, verifica la firma.

Cuando uses JWE, los socios deben admitir las siguientes opciones:

  • Es la serialización compacta.
  • Desencriptación de las cargas útiles de una o varias claves de JWE
  • El algoritmo RSA-OAEP, RSA-OAEP-256 o ECDH-ES para la administración de claves
  • El algoritmo A256GCM, A128GCM, A128CBC-HS256 o A256CBC-HS512 para la encriptación de contenido
    • Se completa en el encabezado enc.
  • El encabezado kid para identificar la clave de encriptación pública
  • Las cargas útiles del mensaje que utilizan encriptación JWE deben usar el tipo de contenido application/jose; charset=utf-8.

Cuando usen JWS, los socios deben admitir las siguientes opciones:

  • Es la serialización compacta.
  • Verificación de las cargas útiles de una de varias claves JWS
  • El algoritmo HS256, HS384, HS512, RS256, RS384, RS512, ES256, PS256, PS384 o PS512 para la creación de la firma
  • El encabezado kid para identificar la clave de firma privada

Las cadenas JWE/JWS se codificarán como cadenas UTF-8 y sus cargas útiles pueden ser bytes arbitrarios.

Las claves privadas deben ser claves RSA/ECDH-ES que venzan en un año con una vida útil máxima de dos años. Todas las identidades de clave privada deben permanecer siempre en el servidor del socio y, por lo tanto, todos los valores de firma se deben calcular en ese servidor.

Antes de empezar el desarrollo, debes intercambiar las claves JWE y JWS con Google. Las claves deben intercambiarse en formato JWK, como se define en rfc7517. En este paso, generarás un par de claves públicas/privadas, proporcionarás la clave pública a Google y recibirás una clave pública de vuelta desde Google. Durante el desarrollo, solo necesitarás intercambiar las claves de zona de pruebas usadas para desarrollo y prueba fuera de producción. Antes de la prueba y el lanzamiento en producción, deberás realizar otro intercambio de claves de producción.