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
- Cuando firmes, debes utilizar
SHA384como el algoritmo de resumen. No usesSHA1niMD5. - Cuando encriptes, debes utilizar
AES256como el algoritmo de encriptación simétrica. No usesCAST5niIDEA. - Cuando encriptes o firmes mensajes, asegúrate de seleccionar la subclave con el propósito correspondiente. Utiliza la clave
CAN_SIGNpara firmar y la claveENCRYPT_COMMS/ENCRYPT_STORAGEpara encriptar.
Cómo recibir cargas útiles
- 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. - 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
- Que se complete en el encabezado
alg(rfc7518, artículo 4.1).
- Que se complete en el encabezado
- El algoritmo A256GCM, A128GCM, A128CBC-HS256 o A256CBC-HS512 para la encriptación de contenido
- Se completa en el encabezado
enc.
- Se completa en el encabezado
- El encabezado
kidpara 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
- Que se complete en el encabezado
alg(rfc 7518, artículo 3.1)
- Que se complete en el encabezado
- El encabezado
kidpara 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.