Criptografia PGP
O PGP é um conjunto padrão de algoritmos de criptografia, descriptografia e assinatura que oferecem privacidade e autenticação criptográfica.
Ao usar o PGP para criptografar payloads, os parceiros precisam oferecer compatibilidade com:
- a criptografia e descriptografia de payloads com várias chaves PGP;
- a assinatura de payloads com várias chaves PGP;
- a verificação de um payload com várias assinaturas, sendo que qualquer uma delas pode ser a assinatura com a chave fornecida pelo Google;
- a descriptografia de payloads codificados em base64 seguros para a Web.
As chaves públicas PGP fornecidas ao Google precisam ter uma subchave usada para criptografia. Ela permite a rotação independente da chave mestra. A chave mestra é usada para a verificação da identidade. Chaves privadas precisam ser RSA de 2048 bits ou mais e expirar em um ano, com duração máxima de dois anos.
Para começar o desenvolvimento, é necessário trocar chaves PGP com o Google. Nesta etapa, é preciso gerar um par de chaves públicas/privadas PGP, fornecer uma chave pública ao Google e receber uma chave pública do Google. Durante o desenvolvimento, será necessário trocar as chaves do sandbox usadas no desenvolvimento e teste fora da produção. Para fazer o teste de produção e o lançamento, será preciso executar outra troca de chaves de produção.
Como gerar uma nova chave PGP
Supondo que você tenha um binário GPG no caminho do sistema, use o seguinte comando POSIX para criar um novo par de chaves.
$ gpg --full-generate-key
Quando solicitado, selecione uma chave RSA com pelo menos 2048 bits de entropia e expiração de 1-2 anos. Esse comando criará uma chave mestra (rotulada como SC de "S"igning and "C"ertificate, ou geração de assinatura e certificado) e uma subchave (rotulada como "E" de "E"ncryption, ou criptografia).
Criptografia JWE
O JSON Web Encryption (JWE) é um padrão definido por rfc7516 (em inglês) para criptografar conteúdo no nível do aplicativo.
Ao usar o JWE para criptografar payloads, os parceiros precisam oferecer compatibilidade com as seguintes opções:
- Descriptografia de payloads de uma de várias chaves JWE.
- Serialização compacta.
- Compressão JWE (ou seja, zip="DEF").
- O algoritmo RSAES-PKCS1-V1_5 para gerenciamento de chaves.
- O algoritmo AES-CBC + HMAC-SHA2 para criptografia de conteúdo.
Chaves privadas precisam ser RSA que expiram em um ano com um ciclo de vida máximo de dois anos. Todas as identidades de chave privada precisam sempre permanecer no servidor do parceiro e, portanto, todos os valores de assinatura precisam ser calculados no servidor do parceiro.
O cliente e o servidor irão criptografar o corpo JSON de acordo com a especificação do JSON Web Encryption (JWE). Todo o corpo do POST ou da resposta será um token JWE, usando a opção "Serialização compacta" do JWE.
Para começar o desenvolvimento, é necessário trocar chaves JWE com o Google. Nesta etapa, é preciso gerar um par de chaves públicas/privadas, fornecer uma chave pública ao Google e receber uma chave pública do Google. Durante o desenvolvimento, será necessário trocar as chaves do sandbox usadas no desenvolvimento e teste fora da produção. Para fazer o teste de produção e o lançamento, será preciso executar outra troca de chaves de produção.
Os parceiros precisam oferecer a compatibilidade de envio e recebimento de mensagens usando a compactação do JWE (ou seja, zip="DEF"). Solicitações e respostas serão criptografadas pela criptografia assimétrica (chave pública) usando chaves JWE trocadas entre si. Além disso, a verificação de assinatura do JWS pode ser usada com o JWE, em que o conteúdo é assinado antes da criptografia e verificado após a descriptografia. O JWS também usa chaves assimétricas, chave privada para assinatura e chave pública para verificação.