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
- Cuando firmes, debes usar
SHA384
como el algoritmo de resumen. No usesSHA1
niMD5
. - Cuando encriptes, debes usar
AES256
como el algoritmo de encriptación simétrica. No usesCAST5
niIDEA
. - 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 claveENCRYPT_COMMS
/ENCRYPT_STORAGE
para la encriptación.
Cómo recibir cargas útiles
- 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. - 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
- Se propaga en el encabezado
alg
(rfc7518 sección 4.1).
- Se propaga en el encabezado
- El algoritmo A256GCM, A128GCM, A128CBC-HS256 o A256CBC-HS512 para la encriptación de contenido
- Se propaga en el encabezado
enc
.
- Se propaga en el encabezado
- 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
- Se propaga en el encabezado
alg
(RFC 7518, sección 3.1).
- Se propaga en el encabezado
- 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.