Encriptación de la capa de aplicación

Las APIs de pagos estándar admiten PGP o JWE para la encriptación de la capa de aplicación.

Encriptación de 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 se usa PGP para encriptar cargas útiles, los socios deben admitir lo siguiente:

  • Encripta y desencripta cargas útiles con varias claves de PGP.
  • Firma de cargas útiles con varias claves de PGP
  • Verificar una carga útil con varias firmas, cualquiera de las cuales puede ser la firma con la clave que proporciona Google
  • Desencriptación de cargas útiles codificadas en base64 seguras para la Web

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

Antes de comenzar el desarrollo, debes intercambiar claves PGP con Google. En este paso, generarás un par de claves pública y privada de PGP, le proporcionarás la clave pública a Google y recibirás una clave pública de Google. Durante el desarrollo, solo deberás intercambiar las claves de zona de pruebas que se usan para el desarrollo y las pruebas fuera de la producción. Antes de realizar las pruebas y el lanzamiento de producción, deberás realizar otro intercambio de claves de producción.

Genera una nueva clave de PGP

Si suponemos que tienes un binario de GPG en la ruta de acceso del 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 2048 bits de entropía y un vencimiento de 1 a 2 años. Este comando debe crear una clave maestra (etiquetada como SC, por “S” de firma y “C” de generación de certificados) y una subclave (etiquetada como E, por “E” de encriptación).

Configuración de la biblioteca de PGP

Envío de cargas útiles

  1. Cuando firmes, debes usar SHA384 como el algoritmo de resumen. No uses SHA1 ni MD5.
  2. Cuando encriptes, debes usar 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. Usa la clave CAN_SIGN para la firma y la clave ENCRYPT_COMMS/ENCRYPT_STORAGE para la encriptación.

Cómo recibir cargas útiles

  1. Cuando verifiques una carga útil, asegúrate de que tu biblioteca admita algoritmos de 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étrica 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 la 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 de confianza en el que las personas no tengan acceso a las claves privadas ni a los 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 que realice.

Encriptación de JWE con firma de JWS

La encriptación web JSON (JWE) es un estándar definido por la rfc7516 para encriptar contenido a nivel de la aplicación. La firma web JSON (JWS) es un estándar definido por la rfc7515 para firmar contenido a nivel de la aplicación.

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

Cuando envíes una carga útil, primero firma la carga útil y, luego, encriptarla. Cuando recibas una carga útil, primero desencripta y, luego, verifica la firma.

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

  • Serialización compacta.
  • Desencriptar cargas útiles de una de las múltiples 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 propaga en el encabezado enc.
  • Encabezado kid para identificar la clave de encriptación pública.
  • Las cargas útiles de los mensajes que usan la encriptación JWE deben usar el tipo de contenido application/jose; charset=utf-8.

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

  • Serialización compacta.
  • Verifica las cargas útiles de una de las múltiples claves de JWS.
  • El algoritmo HS256, HS384, HS512, RS256, RS384, RS512, ES256, PS256, PS384 o PS512 para la creación de firmas
  • 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 claves privadas siempre deben permanecer en el servidor del socio y, en consecuencia, todos los valores de la firma deben calcularse en el servidor del socio.

Antes de comenzar 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, generas un par de claves pública y privada, proporcionas la clave pública a Google y recibes una clave pública de Google. Durante el desarrollo, solo deberás intercambiar las claves de zona de pruebas que se usan para el desarrollo y las pruebas fuera de la producción. Antes de realizar las pruebas y el lanzamiento de producción, deberás realizar otro intercambio de claves de producción.