# Protocolo Signal

O Protocolo Signal (anteriormente conhecido como Protocolo TextSecure) é um protocolo criptográfico não federado que pode ser usado para fornecer criptografia de ponta a ponta para chamadas de voz, chamadas de vídeo e conversas de mensagens instantâneas. O protocolo foi desenvolvido pela Open Whisper Systems em 2013 e foi introduzido pela primeira vez no aplicativo TextSecure de código aberto, que mais tarde se tornou o Signal. Vários aplicativos de código fechado afirmam ter implementado o protocolo, como o WhatsApp, que diz criptografar as conversas de "mais de um bilhão de pessoas em todo o mundo". O Facebook Messenger também afirma oferecer o protocolo para conversas secretas opcionais, assim como o Skype para suas conversas privadas.
O protocolo combina o algoritmo de Double Ratchet, pré-chaves e um aperto de mãos (handshake) Diffie–Hellman de curva elíptica triplo (3-DH), e usa Curve25519, AES-256 e HMAC-SHA256 como primitivas.

## História

O desenvolvimento do protocolo Signal foi iniciado por Trevor Perrin e Moxie Marlinspike (Open Whisper Systems) em 2013. A primeira versão do protocolo, TextSecure v1, foi baseada em Off-the-Record Messaging (OTR).
Em 24 de fevereiro de 2014, a Open Whisper Systems lançou o TextSecure v2, que migrou para o Axolotl Ratchet. O design do Axolotl Ratchet é baseado na troca de chave efêmera que foi introduzida pelo OTR e a combina com uma catraca de chave simétrica modelada após o Silent Circle Instant Messaging Protocol (SCIMP). Trouxe suporte para comunicação assíncrona ("mensagens offline") como sua grande novidade, bem como melhor resiliência com ordem distorcida de mensagens e suporte mais simples para conversas com múltiplos participantes. A Axolotl Ratchet foi nomeada em homenagem à salamandra aquática Axolotl, criticamente ameaçada de extinção, que possui extraordinárias capacidades de autocura. Os desenvolvedores se referem ao algoritmo como autocorretivo porque ele impede automaticamente que um invasor acesse o texto não criptografado de mensagens posteriores após ter comprometido uma chave de sessão.
A terceira versão do protocolo, TextSecure v3, fez algumas alterações nas primitivas criptográficas e no protocolo de cabeamento. Em outubro de 2014, pesquisadores da Universidade de Ruhr de Bochum publicaram uma análise do TextSecure v3. Entre outras descobertas, eles apresentaram um ataque de compartilhamento de chave desconhecido ao protocolo, mas, em geral, descobriram que era seguro.
Em março de 2016, os desenvolvedores renomearam o protocolo como protocolo Signal. Eles também renomearam Axolotl Ratchet como algoritmo Double Ratchet para melhor diferenciar entre a catraca e o protocolo completo porque alguns usaram o nome Axolotl ao se referir ao protocolo completo.
Em outubro de 2016, o protocolo Signal era baseado no TextSecure v3, mas com mudanças criptográficas adicionais. Em outubro de 2016, pesquisadores da Universidade de Oxford do Reino Unido, da Universidade de Tecnologia de Queensland da Australia, e da Universidade de McMaster do Canadá publicaram uma análise formal do protocolo, concluindo que ele é criptograficamente sólido.
Outra auditoria do protocolo foi publicada em 2017.

## Propriedades

O protocolo fornece confidencialidade, integridade, autenticação, consistência de participantes, validação de destino, confidencialidade persistente, segurança pós-comprometimento (também conhecido como sigilo futuro), preservação de causalidade, desvinculação de mensagens, repúdio de mensagem, repúdio de participação e assincronicidade. Não fornece preservação do anonimato e requer servidores para a retransmissão de mensagens e armazenamento de material de chave pública.
O protocolo Signal também oferece suporte a bate-papos em grupo criptografados de ponta a ponta. O protocolo de chat em grupo é uma combinação de dupla catraca par a par e criptografia multicast. Além das propriedades fornecidas pelo protocolo de um para um, o protocolo de chat em grupo fornece consistência do locutor, resiliência fora de ordem, resiliência de mensagem perdida, igualdade computacional, igualdade de confiança, mensagens de subgrupo, bem como associação expansível e contratável.

### Autenticação

Para autenticação, os usuários podem comparar manualmente as impressões digitais da chave pública por meio de um canal externo. Isso possibilita que os usuários verifiquem as identidades uns dos outros e evitem um ataque man-in-the-middle. Uma implementação também pode optar por empregar um mecanismo de confiança no primeiro uso para notificar os usuários se a chave de um correspondente for alterada.

### Metadados

O protocolo Signal não impede que uma empresa retenha informações sobre quando e com quem os usuários se comunicam. Pode então haver diferenças em como os provedores de serviço de mensagens escolhem lidar com essas informações. A política de privacidade do Signal afirma que os identificadores dos destinatários são mantidos nos servidores do Signal apenas pelo tempo necessário para transmitir cada mensagem. Em junho de 2016, Moxie Marlinspike disse ao The Intercept: "a informação mais próxima aos metadados que o servidor do Signal armazena é a última vez que cada usuário se conectou ao servidor, e a precisão dessas informações se reduz ao dia, e não a hora, minuto e segundo."
Em outubro de 2018, o Signal Messenger anunciou que implementou um recurso de "remetente selado" no Signal, que reduz a quantidade de metadados aos quais os servidores do Signal têm acesso, ocultando o identificador do remetente. A identidade do remetente é transmitida ao destinatário em cada mensagem, mas é criptografada com uma chave que o servidor não possui. Isso é feito automaticamente se o remetente estiver nos contatos do destinatário ou se tiver acesso ao seu perfil do Signal. Os usuários também podem habilitar a opção de receber mensagens de "remetente selado" de pessoas que não são contatos e que não têm acesso ao seu perfil do Signal. Um grampo contemporâneo do dispositivo do usuário e/ou dos servidores do Signal ainda poderia revelar que o endereço IP do dispositivo acessou um servidor do Signal para enviar ou receber mensagens em determinados momentos.

## Uso

A Open Whisper Systems apresentou o protocolo pela primeira vez em seu aplicativo TextSecure. Mais tarde, eles mesclaram um aplicativo de chamada de voz criptografado chamado RedPhone no aplicativo TextSecure e o renomearam como Signal. O RedPhone usava ZRTP para criptografar suas chamadas. Em março de 2017, o Signal fez a transição para um novo sistema de chamadas baseado em WebRTC, que também introduziu a capacidade de fazer chamadas de vídeo. O novo sistema de chamadas do Signal usa o protocolo Signal para a criptografia de ponta a ponta.
Em novembro de 2014, a Open Whisper Systems anunciou uma parceria com o WhatsApp para fornecer criptografia de ponta a ponta, incorporando o protocolo Signal em cada plataforma cliente WhatsApp. A Open Whisper Systems disse que o protocolo já havia sido incorporado no cliente mais recente do WhatsApp para Android e que o suporte para outros clientes, mensagens de grupo/mídia e verificação de chaves viriam logo em seguida. Em 5 de abril de 2016, o WhatsApp e a Open Whisper Systems anunciaram que terminaram de adicionar a criptografia de ponta a ponta a "todas as formas de comunicação" no WhatsApp e que os usuários agora podem verificar as chaves uns dos outros. Em fevereiro de 2017, o WhatsApp anunciou um novo recurso, o WhatsApp Status, que usa o protocolo Signal para proteger seu conteúdo. Em outubro de 2016 o Facebook, empresa controladora do WhatsApp, também implantou um modo opcional chamado Conversas Secretas no Facebook Messenger, que fornece criptografia de ponta a ponta usando uma implementação do protocolo Signal.
Em setembro de 2015, a G Data Software lançou um novo aplicativo de mensagens chamado Secure Chat que usava o protocolo Signal. A G Data descontinuou o serviço em maio de 2018.
Em setembro de 2016, o Google lançou um novo aplicativo de mensagens chamado Allo, que apresentava um modo de navegação anônima opcional que usava o protocolo Signal para a criptografia de ponta a ponta. Em março de 2019, o Google descontinuou o Allo em favor do aplicativo Mensagens no Android. Em novembro de 2020, o Google anunciou que usaria o protocolo Signal para fornecer criptografia de ponta a ponta por padrão para todas as conversas baseadas em RCS entre usuários de seu aplicativo de mensagens, começando com conversas de um-para-um.
Em janeiro de 2018, a Open Whisper Systems e a Microsoft anunciaram a adição do suporte ao protocolo Signal para um modo opcional do Skype chamado de conversas privadas.

## Influência

O protocolo Signal teve influência em outros protocolos criptográficos. Em maio de 2016, o Viber disse que seu protocolo de criptografia é uma implementação personalizada que "usa os mesmos conceitos" do protocolo Signal. Os desenvolvedores do Forsta disseram que seu aplicativo usa uma implementação personalizada do protocolo Signal.
O algoritmo de Double Ratchet que foi introduzido como parte do protocolo Signal também foi adotado por outros protocolos. O OMEMO é um protocolo de extensão do XMPP (XEP) que foi introduzido no aplicativo de mensagens Conversations e aprovado pela XMPP Standards Foundation (XSF) em dezembro de 2016 como XEP-0384. O Matrix é um protocolo de comunicação aberto que inclui Olm, uma biblioteca que fornece criptografia de ponta a ponta opcional em uma base de sala para sala por meio de uma implementação de algoritmo Double Ratchet. Os desenvolvedores do Wire disseram que seu aplicativo usa uma implementação personalizada do algoritmo de Double Ratchet.

## Implementações

O Signal Messenger mantém as seguintes bibliotecas do protocolo Signal sob a licença GPLv3 no GitHub:
* libsignal-protocol-c: Uma biblioteca escrita em C com permissões de licenciamento adicionais para o App Store da Apple.
* libsignal-protocol-java: uma biblioteca escrita em Java.
* libsignal-protocol-javascript: uma biblioteca escrita em JavaScript.
Também existem bibliotecas alternativas escritas por terceiros em outras linguagens, como TypeScript.