Cada vez mais precisamos de aparelhos que façam parte da grande rede (WEB), mas enquanto eles se comunicam com outros aparelhos, abrem uma porta para o roubo de dados ou invasões com o intuito de destruir ou apenas para causar danos ao sistema.
Horas e horas de desenvolvimento sobre um futuro produto que pode ser sucesso de vendas, pode virar um fracasso comercial ou dar muita dor de cabeça com recall, só por causa de falha de segurança.
Muitas vezes uma simples invasão pode permitir o acesso a todos os dados do usuário, outras vezes os dados corrompidos por alguém ou mesmo vírus podem travar o sistema ou trazer um funcionamento errôneo.
Pode parecer exagero, mas cada vez mais temos que desenvolver sistemas que estej am integrados com outros sistemas, tanto para os equipamentos de consumo (MP3, celulares, casa inteligente), como para a indústria, que além de ter uma linha de produção, possui toda um infraestrutura de instrumentação para medições real-time conectada ao sistema de monitoramento, bem como a própria produção em si.
Uma outra aplicação bem mais interessante para segurança de dados em sistemas microcontrolados está nos sistemas automotivos, onde temos um computador de bordo que aciona as portas e o motor com uma chave, que não é mais de metal, e envia via rádio um código criptografado ao veículo. Não é necessário dizer o que aconteceria se uma invasão neste sistema fosse realizada.
Quando estamos desenvolvendo um projeto, independentemente de sua aplicação, é muito comum dedicarmos tempo demais para o seu funcionamento, e logo esquecermos da segurança, e nos perguntarmos, por exemplo, quem gostaria de danificar ou invadir nosso equipamento que serve para abrir a válvula de fluxo de ar de uma caldeira? Pode esperar que há gente para isso, é só dar um motivo. Portanto, proteger os dados gravados no seu sistema microcontrolado é importante nos dias atuais.
Sistemas de proteções de dados, tanto para o programa que está rodando quanto para os dados que trafegam no sistema, já existem no mercado, porém aplicá-los é uma história a parte na vida do desenvolvedor.
Conforme foi apresentado na edição nº 442 desta revista, para os FPGAs temos a solução 1-Wire desenvolvida pela Dallas Semiconductor, hoje parte da Maxim. Como podemos ver na figura 1, um componente faz a verificação dos dados, utilizando uma chave secreta através de uma única conexão. A tecnologia 1-wire pode ser aplicada em microcontroladores, onde o algoritmo para a verificação dos dados trafegados é o SHA-1 (Box 1).
Figura 1 – A Tecnologia 1-wire
SHA
Secure Hash Algorithm é um conjunto de algoritmos de criptografia desenvolvido pela NSA (Agência Nacional de Segurança dos EUA) e publicado em 1993 pela pelo NIST (Instituto Nacional (EUA) de Padrões e Tecnologia). Os primeiros algoritmos formaram o SHA, porém como o mesmo apresentou problemas de quebra de segurança e não tinha um sistema de colisões de dados, fizeram adaptações e lançaram o SHA-1 e por este motivo o SHA ficou nomeado como SHA-0.
O SHA-1 foi criado para não ter problemas de colisões, porém alguns artigos publicados mostram a sua vulnerabilidade a colisões. Atualmente temos a versão SHA-2 que não apresenta problemas de colisão, pois nada foi reportado ainda, porém como ele é um sucessor da versão SHA-1, fica a dúvida quanto a sua integridade, por este motivo já está em desenvolvimento a versão SHA-3 que visa atender esta procura por um algoritmo que tenha os requisitos básicos de segurança.
Este algoritmo tem a finalidade de embaralhar os dados através de fórmulas matemáticas, de forma que se alguém tentar ler os dados e aplicar as fórmulas possíveis para desembaralhá-los, não encontre o dado original, mas que seja entendido pelo receptor da mensagem.
Abaixo, trazemos um exemplo de como uma frase seria transformada usando-se o SHA-1:
SHA1("The quick brown fox jumps over the lazy dog")
= 2fd4e1c6 7a2d28fc ed849ee1 bb76e739 1b93eb12
Conhecendo a criptografia
Os sistemas mais aplicados hoje em dia em criptografia são as chaves simétricas. Tais sistemas (figura 2) juntam as informações a serem enviadas e as criptografam com uma determinada chave e quando são recebidas são decodificadas utilizando a mesma chave. Esse tipo de criptografia obriga tanto o receptor quanto o transmissor da mensagem a utilizarem o mesmo tipo de chave. São diversos os algoritmos empregados neste processo, entre eles temos o RC4, o Blowfish, o Twofish, o DES e o AES.
Figura 2 - As chaves simétricas.
As chaves assimétricas (figura 3) utilizam um par de chaves públicas para aquele que envia os dados, e uma chave privada para o receptor.
Figura 3 – As chaves assimétricas.
Para exemplificar melhor, imagine que um dispositivo X envie seus dados para o dispositivo Y, logo o dispositivo X utiliza uma chave pública para criptografar os dados, estes dados são enviados para o dispositivo Y que utiliza uma chave privada para decifrar os dados. Provavelmente o leitor deve estar se perguntando onde se encontra a segurança, uma vez que podemos capturar as informações enviadas pelo dispositivo X e utilizar uma chave privada. Neste caso o que queremos proteger é a integridade dos dados enviados para o dispositivo Y. Uma outra pergunta pode aparecer: Então posso enviar outros dados ao dispositivo Y utilizando a mesma chave pública? Nesta situação não é tão fácil assim, pois somente com a combinação das chaves é possível ler os dados contidos nele.
Outro fator é a importância de que os dados enviados por X cheguem na íntegra ao dispositivo Y, é neste ponto que encontramos os algoritmos de HASH, e entre eles temos o SHA (ver box acima). Estes têm como finalidade receber uma cadeia de bits, independentes do tamanho, e bloca-los em tamanhos fixos, onde junto a estes dados são feitos cálculos e adicionado um marcador, se um bit for alterado o bloco de dados é condenado. Corre-se o risco de termos os dados interceptados entre os dispositivos X e Y e gerarmos um outros bloco de dados, onde o dispositivo Y pode receber normalmente, uma vez que os dados não foram corrompidos. Neste caso usaremos soluções de autenticação, como a vista na tecnologia 1-wire.
Um pouco de história...
A criptografia já se faz presente na história da humanidade há muitos anos. Desde os tempos de Júlio César, que inventou um dos primeiros mecanismos de criptografia que se tem notícia, o homem vem buscando formas de garantir o sigilo, a integridade e a autenticidade das suas informações. Porém, se por um lado a criptografia prevê a proteção da informação, por outro a criptoanálise visa desfazer a segurança aplicada. Saber desvendar as informações que alguém pode estar querendo proteger do acesso público pode ser estratégico. Ambas as áreas formam a criptologia.
Durante a Segunda Guerra Mundial, por exemplo, a critptografia desempenhou papel fundamental. O governo inglês criou o Government Codes and Ciphers School (GCCS), grupo de inteligência, cujo papel era tentar desvendar as mensagens trocadas pelos inimigos. Liderados por Alan Turing, o grupo conseguiu quebrar o algoritmo criptográfico utilizado pelo Enigma, computador alemão que cifrava as mensagens que eram trocadas entre os exércitos de Hitler. Essa descoberta colaborou em muito para mudar os rumos da Segunda Guerra, uma vez que a estratégia de Hitler era cercar a Inglaterra. A descoberta dos ingleses permitiu a decifração das mensagens trocadas entre os navios alemães. A estimativa de alguns historiadores é que a descoberta permitiu encurtar a guerra em, aproximadamente, dois anos.
(Texto extraído do artigo Criptografia na Prática, de Jansen Carlos Sena – PC & CIA 39)
Exemplos de algoritmos criptográficos
Apresentamos a seguir alguns sistemas de codificação:
KeeLoq: É um sistema de envio de dados blocados de forma unidirecional, ou seja, os blocos de tamanhos fixos e codificados são enviados somente pelo transmissor, como por exemplo a chave de um automóvel ou de uma casa. O sistema de transferência foi desenvolvido por Frederick Bruwer e o algoritmo por Willem Smit, ambos da Nanotec, que em 1995 foi adquirida pela Microchip. Para a segurança do sistema, utilizamos um sistema de código chamado “Rolling Code” ou código de salto. Este tipo de código impossibilita que alguém com um dispositivo receba os sinais enviados pelo transmissor e depois os replique da mesma forma, evitando assim que este código copiado abra a porta ou acione o dispositivo.
Diversas são as montadoras que utilizam este sistema em seu automóveis, entre elas a GM, FIAT, Toyota e Volkswagem. Na figura 4 temos um esquema de como a criptografia dos bits é feita. Para saber mais sobre o KeeLoq: http://en.wikipedia.org/wiki/KeeLoq.
Figura 4 – Esquema do algoritmo do KeeLoq
Tiny (TEA - Tiny Encript Algorithm): Conhecido pela sua simplicidade de implementação, este algoritmo possui falhas quando executadas funções de hash. Um exemplo foi a sua utilização no game Xbox da Microsoft, onde invasores utilizaram a falha para fazer cópias de jogos piratas. Mas, melhorias no algoritmo fizeram correções nestes erros e, com isso, temos as versões Xtea e XXTea, otimizando as chaves criptográficas. A vantagem do Tiny é que ele não possui patente de qualquer empresa.
RC4 ou ARC4: O algoritmo RC4 é um dos mais utilizados, teve sua principal aplicação em softwares para internet como o SSL – Secure Socket Layers e WEP para redes wireless. Foi desenvolvido em 1984 por Ronald Rivest para a empresa RSA Data Secure, que manteve segredo sobre o método de criptografia, porém anos mais tarde surgiu um algoritmo equivalente ao RC4 que poderia ser usado livremente, este algoritmo se chama ARC4. Ambos funcionam por fluxo, onde não se requer tantos cálculos matemáticos para a encriptação, o que o torna para alguns um algoritmo inseguro. O que ele faz é permutar os dados enviados com a chave utilizada.
AES – Advanced Encryption Standard: Um algoritmo de criptografia de chave simétrica, também é um dos algoritmos mais utilizados no mundo, ele foi adotado como padrão pelo NIST para proteger os dados do governo americano, o qual pretende tornar este algoritmo o mais empregado. O que tornou o AES o preferido do NIST foi a sua resistência a ataques e por exiogir pouca memória, podendo ser usado em aparelhos móveis. Para os leitores que desejam entender o funcionamento deste algoritmo, recomendo acessar o site: http://www.cs.bc.edu/~straubin/cs381-05/blockciphers/rijndael_ingles2004.swf.
A Texas instruments fornece no link http://www.ti.com/litv/pdf/slaa397a, como implementar o algoritmo AES no MSP430 usando linguagem C.
Existem vários outros algoritmos, porém é importante verificar o grau de relevância dos dados a serem criptografados, como também quanto de processamento o microcontrolador tem para rodar determinado algoritmo, pois dependendo do algoritmo aplicado o sistema irá necessitar de várias execuções, e com isso provocará a perda de tempo e maior consumo de energia.
Quando a criptografia atrapalha outros processos
Fazer o cálculo de dados criptografados requer operações e mais operações (ciclos e mais ciclos), o que exige velocidade de processamento, pois o microcontrolador não irá somente descriptografar ou criptografar os dados, mas fazer algo com eles, reproduzir imagens ou sons, mostrar ou calcular dados já descriptografados. Dependendo da aplicação é recomendável jogar esta função de criptografia para circuitos específicos, onde as tarefas consistem em receber os dados criptografados, descriptografar e enviá-los ao microcontrolador. Da mesma forma este circuito deve receber os dados do microcontrolador, criptografá-los e enviá-los.
Conclusão
Os requisitos exigidos para os projetos de eletrônica nos dias de hoje, não requerem do projetista apenas o conhecimento de eletrônica, mas também de programação, a qual envolve uma gama de outros conhecimentos, tais como lógica, matemática, criptografia entre outros específicos que estão vinculados aos seus determinados projetos.
Com a popularização dos aparelhos conectados via wireless, surge uma nova preocupação com os projetos que serão ainda desenvolvidos que é a segurança contra invasões externas, assunto que não era abordado há alguns anos, a não ser para determinados projetos. O intuito de espionar e invadir sistemas para roubar dados não é uma coisa recente, pois a criptografia é muito mais antiga que a própria eletrônica. Porém os aparelhos trocando informações através de uma rede serão corriqueiros.
Por este motivo a criação de sistemas seguros contra ataques pode determinar o sucesso ou fracasso de um projeto. Um exemplo está nos consoles de games, onde para cada sistema de bloqueio por parte do fabricante, com algumas dezenas de engenheiros elaborando uma solução, temos um incontável número de outros conhecedores do assunto prontos para encontrar uma fórmula que anule este bloqueio de modo a ganhar dinheiro com o resultado obtido. Mesmo que as empresas lucrem muito quando têm o seu sistema protegido contra cópias, devemos lembrar que um bom sistema de proteção dos dados traz uma certa confiança para o usuário final, para o qual desenvolvemos o projeto.
A criptografia, na minha opinião, é uma área muito complicada, que envolve um bom conhecimento matemático para quem deseja se aprofundar no assunto, porém conhecer e saber aplicar a criptografia é fundamental quando o assunto é proteger dados em equipamentos suscetíveis a invasões.