Criptografia de mensagens em SecureDialogues

Criptografia, assinatura digital, proteção de dados são termos bastante comuns entre os profissionais de TI.


Já escrevi muitas publicações, artigos e livros interessantes sobre esses tópicos. Depois de ler um deles, decidi tentar minha mão no treino. E assim nasceu o projeto, que será discutido abaixo.


Resumo da aplicação


O aplicativo SecureDialogues adiciona um nível de criptografia às mensagens transmitidas por serviços como o Gmail . O próprio aplicativo executa autorização para os serviços configurados usando o protocolo OAuth2 , recebe e envia mensagens. Na sua essência, é um mensageiro regular que fornece proteção criptográfica às mensagens, a menos que um dos vários serviços de terceiros possa ser usado para transferência.


Os dados no disco rígido são criptografados usando o algoritmo AES com uma chave de 256 bits, extraída da senha inserida na inicialização, o RSA é usado para assinatura digital. As mensagens do usuário são codificadas com uma chave de sessão AES de 256 bits.


Os códigos-fonte estão disponíveis no link , wiki do projeto .


O lançamento do aplicativo no contêiner do docker está disponível, mais no link .


Objetivo da criação


O aplicativo foi criado para uma finalidade muito específica - foi interessante para mim trabalhar com criptografia em um projeto prático. E não em algo simples, como "insira o texto aqui, mas aqui leve a mensagem codificada", mas de forma que exista uma assinatura digital , criptografia assimétrica , chaves de sessão e outras coisas interessantes. Portanto, o projeto messenger foi escolhido.


Na ausência de toda a infraestrutura necessária para o envio de mensagens, essa função é delegada a serviços existentes, como o Gmail ou o VKontakte .


Descrição da interface


Quando você inicia, o aplicativo solicita que você digite uma senha:



Essa senha é usada para criptografar dados armazenados no disco rígido, como: chaves RSA , tokens de autorização para OAuth2 , dados sobre serviços e contatos.


Mensagens e informações sobre caixas de diálogo não são salvas , ou seja, no final do aplicativo, os dados sobre mensagens recebidas e caixas de diálogo abertas são perdidos.


Em lançamentos subsequentes, o aplicativo também solicita uma senha para descriptografar e baixar os dados salvos anteriormente.


Vista da janela principal do aplicativo:



Antes de poder enviar a primeira mensagem, você deve concluir duas etapas:


  • Configure uma conexão com o serviço para enviar mensagens ( mais no wiki );
  • Adicionar pessoa de contato ( mais no wiki );

A coisa mais importante, pela qual o contato é adicionado antes do início da troca, é a chave pública . Cada mensagem enviada entre usuários deve ser assinada pelo remetente. Se o destinatário não conseguir verificar a assinatura digital usando a chave pública, essa mensagem será descartada.


Além disso, a chave pública é usada para criptografar a chave da sessão.


Após a conclusão de todas as etapas preliminares, você pode iniciar o diálogo. Para fazer isso, existe um botão correspondente na janela principal do aplicativo ( mais no wiki ). Ao criar uma conversa, é gerada uma chave de sessão que criptografa todas as mensagens nessa conversa.


Todas as caixas de diálogo são exibidas na janela principal à esquerda. Após o seu interlocutor confirmar a criação de um diálogo, você pode enviar e receber mensagens nele:



Para enviar ou ler mensagens na caixa de diálogo desejada, você precisa selecioná-la clicando no botão esquerdo do mouse.


As mensagens do usuário remoto são exibidas à esquerda e as suas à direita. Se a mensagem ainda não tiver sido entregue, ela será exibida em cinza:



O aplicativo classifica a lista de caixas de diálogo na seguinte ordem - na parte superior, haverá caixas de diálogo ativas para as quais o envio de mensagens é permitido, e na parte inferior haverá caixas fechadas. A ordem também é afetada pelo momento em que a caixa de diálogo é alterada. O diálogo ativo que a última mensagem recebida será acima de tudo, e o primeiro fechado será na parte inferior. Para cada caixa de diálogo, um indicador do número de mensagens não lidas é exibido, se houver:



O status do diálogo é destacado em cores:


  • caixas de diálogo fechadas são vermelhas
  • diálogos ativos são mostrados em verde , é possível que eles enviem mensagens
  • diálogos em cinza estão sendo feitos.

Aqui está um exemplo de como é uma mensagem simples com texto hellow world! :



Troca de sinal


A troca de mensagens entre os interlocutores A e B consiste nas seguintes etapas:


  • a parte A gera um comando para criar uma caixa de diálogo ( CREATE_DIALOG ) e a assina com sua chave privada;
  • a parte B solicita ao usuário o consentimento para criar um diálogo e, se o usuário concorda, são geradas uma chave de sessão T e uma sequência aleatória R , que são criptografadas individualmente com a chave pública A e colocadas no corpo da mensagem ( VERIFY_KEY ). A mensagem inteira é assinada com a chave privada B.
  • O lado A descriptografa a chave da sessão e a sequência aleatória, criptografa a sequência aleatória com a chave da sessão e adiciona o resultado ao KEY_VERIFICATION mensagem KEY_VERIFICATION . Assina a mensagem inteira com sua chave privada.
  • o lado B descriptografa a sequência aleatória, verifique se o resultado corresponde à sequência R , se tudo estiver correto, a mensagem assinada ACCEPT_DIALOG , o que significa que o diálogo é estabelecido e é possível trocar mais mensagens.

O estabelecimento bem-sucedido do diálogo e a troca de sinais são mostrados na figura:



Desenvolvimento do projeto


No momento, o aplicativo já fornece recursos básicos para criptografia e autenticação de mensagens por meio de assinatura digital. Mas a lista de serviços suportados é extremamente pequena.


No futuro, está planejado aumentá-lo. O trabalho já está em andamento para incluir o VKontakte nele.


Também no projeto há um aumento no conteúdo de informações da interface do usuário, como adicionar um status para conectar-se a um serviço (ativo, erro de conexão etc.).


O algoritmo para verificar mensagens duplicadas não funciona da melhor maneira, está planejado para ser finalizado.

Source: https://habr.com/ru/post/pt452736/


All Articles