Android

7 jun, 2018

Project Capillary: criptografia end-to-end para envio de mensagens push simplificada

Publicidade

Artigo de Giles Hogben, publicado originalmente pelo Android Developers Blog. A tradução foi feita pela Redação iMasters com autorização.

***

Os desenvolvedores já usam HTTPS para se comunicar com o Firebase Cloud Messaging (FCM). O canal entre o endpoint do servidor FCM e o dispositivo é criptografado com SSL sobre TCP. No entanto, as mensagens não são criptografadas end-to-end (E2E) entre o servidor do desenvolvedor e o dispositivo do usuário, a menos que os desenvolvedores tomem medidas especiais.

Para esse fim, aconselhamos os desenvolvedores a usarem as chaves geradas no dispositivo do usuário para criptografar mensagens push end-to-end. Mas implementar essa criptografia E2E historicamente exigiu um conhecimento técnico e esforços significativos. É por isso que temos o prazer de anunciar a biblioteca open source Capillary, que simplifica muito a implementação da criptografia E2E para mensagens push entre servidores de desenvolvedor e dispositivos Android de usuários.

Também adicionamos uma funcionalidade para enviar mensagens que só podem ser descriptografadas em dispositivos que foram desbloqueados recentemente. Isso é projetado para oferecer suporte para a descriptografia de mensagens em dispositivos usando File-Based Encryption (FBE): mensagens criptografadas armazenadas em cache no armazenamento Device Encrypted (DE) e chaves de descriptografia de mensagens armazenadas no Android Keystore, exigindo autenticação do usuário. Isso permite que os desenvolvedores especifiquem mensagens com conteúdo confidencial, que permanecem criptografadas em cache até que o usuário tenha desbloqueado e descriptografado o dispositivo.

A biblioteca lida com:

  • Funcionalidade de criptografia e gerenciamento de chaves em todas as versões do Android de volta ao KitKat (API level 19).
  • Fluxos de trabalho de geração e registro de chaves.
  • Criptografia de mensagens (no servidor) e descriptografia (no cliente).
  • Proteção de integridade para impedir a modificação de mensagens.
  • Cache de mensagens recebidas em contextos não autenticados para serem descriptografados e exibidos no desbloqueio do dispositivo.
  • Casos-limite, como usuários adicionando/redefinindo o bloqueio do dispositivo depois de instalar o aplicativo, usuários redefinindo o armazenamento do aplicativo etc.

A biblioteca suporta criptografia RSA com autenticação ECDSA e criptografia via Web Push, permitindo que os desenvolvedores reutilizem códigos existentes no lado do servidor, desenvolvidos para enviar mensagens Web Push criptografadas pelo E2E para clientes baseados em navegador.

Junto com a biblioteca, também publicamos um aplicativo demo (finalmente, a equipe de privacidade do Google tem seu próprio aplicativo de mensagens!) que usa a biblioteca para enviar cargas FCM criptografadas por E2E de uma implementação de servidor baseada em gRPC.

O que a biblioteca não faz

A biblioteca open source e o aplicativo demo não são projetados para oferecer suporte de mensagens peer-to-peer e troca de chaves. Eles são projetados para que os desenvolvedores enviem mensagens push criptografadas por E2E de um servidor para um ou mais dispositivos. Você pode proteger mensagens entre o servidor do desenvolvedor e o dispositivo de destino, mas não diretamente entre dispositivos.

Ela não é uma solução abrangente do lado do servidor. Embora a funcionalidade de criptografia principal seja fornecida, os desenvolvedores precisarão adaptar partes do código do lado do servidor de amostra que são específicas de sua arquitetura (por exemplo, composição da mensagem, armazenamento do banco de dados para chaves públicas, etc).

Você pode encontrar mais detalhes técnicos descrevendo como arquitetamos e implementamos a biblioteca e a demonstração aqui.

***

Este artigo é do Android Developers Blog. Ele foi escrito por Giles Hogben. A tradução foi feita pela Redação iMasters com autorização. Você pode acessar o original em: https://android-developers.googleblog.com/2018/06/project-capillary-end-to-end-encryption.html