Pitch: Minha contribuição para esse mundo: Segurança ponta a ponta de verdade (Pelo menos em trocas de mensagem de texto)

Porquê estou publicando isso?

Olá meu nome é Augusto e atualmente vejo pouca divulgação científica entre os devs aqui na minha região e também muitos trabalhos de conclusão de curso sendo feito com temas irrelevantes somente para a obtenção do diploma, então venho apresentar um pouco do meu TCC para vocês para que assim, talvez, eu possa estar ajudando vocês e vocês me ajudando…

O problema 🧑‍💻

A segurança e privacidade do usuário na internet é um tópico cada vez mais importante nos dias atuais, tendo até tópicos e issues sendo criado nesse projeto…

Justamente pelo grande aumento do uso de computadores com internet e muitos serviços sendo disponibilizados online, como exemplo os comunicadores instantâneos: whatsapp, telegram, messenger…

Porém com o aumento do uso de internet também tem aumentado o número de computadores infectados por malwares, tendo um estudo da Kingsoft de 2016 mostrando que em média 2-5 milhões de computadores são infectados por dia.

Atualmente sabemos que esses comunicadores instantâneos utilizam criptografia entre um dispositivo e outro, porém não podem garantir que o dispositivo que recebeu ou enviou a mensagem já não esteja infectado por um malware…

Podendo esse malware saber a mensagem que o usuário vai enviar antes mesmo dele pressionar ENTER com a utilização de um keylogger ou até mesmo gravando a tela do usuário com “screenlogger”.

A Proposta 🗿🍷👉 ⌨️ 👉 🤖 👉 💻

Minha proposta busca uma solução para o problema citado acima, podemos com a utilização de um arduino conectado ao computador criar um middleware entre um teclado externo e o computador para realizar a criptografia de mensagens que precisam realmente ser seguras e privadas...

O arduino receberia a entrada de dados do usuário através do teclado e realizaria a criptografia da mensagem antes mesmo que ela fosse realmente digitada no computador, podendo ele visualizar e alterar a mensagem original através de um display também conectado ao arduino.

Mas e a outra ponta?

A outra ponta que receberia essa mensagem também teria que ter um mesmo dispositivo, porém no caso de quem recebe a mensagem existiria um programa em que você cola a mensagem recebida e envia para o arduino para que o mesmo realize a descriptografia da mensagem e mostre a mensagem original também através do display.

Desenvolvimento da solução

Versão 1

Já existe uma versão 1 funcional do projeto que está usando:

  • Arduino UNO,
  • Display lcd IC2
  • Cabo otg
  • Criptografia rot47
  • Linguagem Python e Arduino

Essa versão do projeto era a minha POC e usei somente esses componentes e a linguagem Python e Arduino e ela "resolveu" o problema com dos keylogger e screenlogger.

Que você pode acessar e conferir aqui: Repositório no Gitub, Não esquece de me seguir e deixar a star no repo para apoiar

Versão 2

Atualmente estou desenvolvendo a versão 2 e de apresentação para o meu tcc utilizando:

  • Arduino UNO
  • USB host shield
  • Display lcd IC2
  • Criptografia AES
  • linguagem Python e Arduino

Utilizando o USB host shield quero trazer mais praticidade e com a AES uma criptografia de uso real (Mesmo sabendo de sua defasagem atual)

Que você pode também pode acessar e conferir aqui: Repositório no Gitub, novamente não esquece de me seguir e deixar a star no repo para apoiar

Demostração

Já de antemão desculpem a qualidade mas segue um vídeo demonstração da POC no youtube Vídeo demonstração no youtube

achei a ideia muito boa, mais uma coisa que tenho percebido é que, infelizmente, se nao for transparente pro usuario utilizar, ele não utiliza, ou seja, se precisar de algum esforço e não gerar um retorno positivo ele simplesmente não usa. Claro que segurança é um otimo retorno, mais só da valor quem realmente foca nisso.

Bom dia Tomion, muito obrigado pelo comentário, e você teria alguma ideia de como eu poderia agregar valor ao projeto para que os usuários "casuais" também queiram usar?
Que show! eu não havia aberto o repositório do git porquê só estudo programação há 2 meses e não compreendo a estrutura dos projetos ainda, aliás e nem sei operar o git também :3. Mas eu achei sensacional o seu projeto e seus possiveis usos.
mantendo a criptografia antes do computador eu acho difícil, acabaria divergindo muito do seu projeto inicial, claro que isso nao é um problema (meu Tcc foi na area de ia pra compiladores e a conclusao acabou sendo que o algoritmo que usei não era bom pro problema). o que acaba sendo mais viavel é oq o whatsapp faz, ele gera uma chave exclusiva pra cada conversa, e mantem o envio das mensagens criptografadas. Talvez voce consiga fazer algo legal no mobile, visto que vc conseguiria criar um teclado virtual e inserir a criptografia nos eventos de teclado, da pra explorar a brincadeira

Me fez lembrar a maquina enigma que já existia desde a década 20, mas se popularizou mesmo com uso pelo alemães a partir da década de 30... A ideia de criptografia antes mesmo da transmissão e possuir as chaves também fora do computador é uma receita perfeita. Meus parabéns pelo seu trabalho, criatividade e perspicácia.

Bom dia Diletante, muito obrigado pelo comentário e sim tem inspiração no conceito da enigma machine, sendo que até o nome do repo no github é ModernEnigmaMachine kkkkk

Parabéns AugustoSavi, muito legal!

Eu não conheço os detalhes sobre a criptografia AES, porém, imagino que ao criptografar uma mensagem o resultado é um array de bytes que representa a mensagem codificada. Então, se você apenas tentar mostrar esse linguição de bytes como texto, vai ter caracteres "quebrados", já que pode haver bytes que não são associados a caracteres ASCII.

Como é tratado esse problema? A mensagem codificada é convertida para texto de alguma forma?

Boa noite, man não sei se entendi muito bem sua pergunta... Mas digamos que eu queira enviar enviar uma mensagem que precisa ser secreta pelo whatsapp, com o software no pc eu ativo o modo criptografia do Arduino e a mensagem digitada no teclado aparece antes no display do Arduino(sem ser enviada para o pc), quando eu clico enter a mensagem é criptografada com uma chave e enviada via serial para o pc, com um programa em python eu recebo essa string e digito ela(criptografada) e envio para o outra pessoa... A pessoa que recebeu essa mensagem criptografa vai ter que ter o mesmo software e dispositivo, com isso ela ativa o modo descriptografia, copia e envia a mensagem recebida para o arduino, com isso o Arduino vai descriptografar a mensagem e mostrar no lcd descriptografada. Alguns caracteres especias podem ser perdidos sim nesse processo do aes ou ate não ser suportado pelo lcd 16x2 (emojis e afins), atualmente não existe uma trativa para isso...(quem sabe em trabalhos futuros...) Mas pensando por cima teria que de usar um hardware mais potente com um lcd de alta resolução(Oled, tft)
Obrigado pela resposta **AugustoSavi**, realmente acho que não ficou claro minha pergunta, peço perdão. Mas vou te dar uma sugestão que resolve o problema que eu citei e o problema que você citou: > Alguns caracteres especias podem ser perdidos sim nesse processo do aes ou ate não ser suportado pelo lcd 16x2 Sugiro o seguinte, ao criptografar a mensagem, você pega os bytes do resultado e codifica eles usando base64, dessa forma tu sempre vai obter um texto ASCII válido. Logo, ao invés de mostrar no display a mensagem criptografada você mostra a mensagem criptografada e codificada em base64. Dessa forma, não corre risco de ter caracteres inválidos e ter o problema que eu citei. Por fim, no receptor da mensagem, vai ter que decodificar usando base64 antes de descriptografar. O que acha?

Parabéns pela idéia cara muito boa mesmo.

Parabéns pelo projeto, um ótimo tema e muito importante!

Saudade de ler sobre Arduino, fiz meu curso de técnico em Automação Industrial e mexi muitos anos nele, inclusive tenho um kit completo, mas está apenas guardado. Hoje em dia fico mais no mundo do software do que no do hardware.

Baita projeto, quando ouver a apresentação do TCC, bota o link ai pá noixxx

Parabéns pela ideia!! Tem um nicho que você pode pegar, que é o de quem ainda utiliza o FAX (sim, ele existe). Consultórios de Advocacia, Clínicas Médicas, Serviços Militares e até mesmo o Governo, ainda utiliza a velha tecnologia, para o envio seguro de documentos assinados.

Isso porque o FAX (ou fac-símile) utiliza a transmissão de imagem e não de dados, pela linha telefônica, o que a faz ser mais confiável que um e-mail autenticado.

Grandes empresas que fazem a troca de documentos de alto valor (confidenciais), também utilizam a tecnologia. Ex: FIFA (e tem uma questão, caso alguma empresa atenda a FIFA e não tenha FAX, ela tem que enviar o documento por Correios com aviso e mão própria).

Então, um equipamento como o seu, que "intercepta" as informações digitadas no teclado e cria um dado criptografado, já ajuda bastante na troca de textos.

É interessante pensar em algo para assegurar o envio de imagem, talvez entre um scanner e um PC, para criptografar o documento escaneado.

Mas corra... a blockchain está aí.. rsrs

Por ser uma tecnologia inovadora, o blockchain tem ganhado espaço no cenário mundial por se mostrar como um excelente aliado na hora de guardar informações e preservar dados de empresas ou terceiros.

Mais do que apenas atuar no segmento das criptomoedas, o blockchain pode contribuir para armazenar e validar registros de diversos outros tipos, como os documentos.

Já existem empresas que utilizam o blockchain para realizar a validação de documentos, assegurando economia de tempo, redução de custos e maior segurança e confiabilidade à operação. Essas são as principais vantagens de validar documentos através dessa tecnologia.

Dá pra pensar na Blockchain ao seu favor, também...