• Nenhum resultado encontrado

2. Análise

2.3. Análise dos desafios da implementação do demonstrador em hardware

2.3.2. Comunicação com o demonstrador

Como se pode ver na Imagem 17, é necessário estabelecer um método de comunicação entre utilizador e a placa FPGA com o demonstrador de modo a ser possível o envio de dados ao mesmo para este proceder à sua encriptação/desencriptação.

O protocolo porta série foi escolhido de forma a executar essa mesma tarefa pelo facto de, além de ser um protocolo ubiquamente usado nos sistemas embebidos, é de fácil

37 implementação a nível das linguagens de descrição de hardware, como o Verilog, linguagem eleita para a implementação do componente. É também facilmente implementável num terminal presente no computador, existindo bastantes soluções nos sistemas operativos usados que permitem o uso simplificado deste protocolo.

Imagem 20 - Diagrama da comunicação entre o demonstrador e o terminal

Em contrapartida, o uso de comunicação porta série nos modos escolhidos para a implementar, descritos no ponto seguinte, não permite aproveitar, de modo algum, todo o throughput, ou, no melhor dos casos, sequer a maioria do mesmo, que o demonstrador poderia oferecer. No entanto, não sendo esse o propósito desta dissertação, mas sim implementar, testar e demonstrar a funcionalidade de algumas contramedidas promissoras contra ataques de SCA de análise de traçado de potência, as funcionalidades da porta série neste demonstrador adaptam-se perfeitamente.

Como tal será para esse efeito implementada e usada uma porta série com um baud rate de 9600bps, sem recurso a qualquer tipo de handshakes, confirmação de paridade, com uma palavra de 8 bits de dados e 1 stop bit, permitindo desse modo uma rápida e eficiente a implementação em hardware.

O terminal para computador deve implementar duas funções essenciais, ser capaz de enviar qualquer tipo de ficheiro, seja este encriptado ou desencriptado, e receber consequentemente o mesmo após o demonstrador o ter processado, bem como ser capaz de analisar a integridade do mesmo, caso o processo de encriptação/desencriptação seja corrido sequencialmente, para efeitos de teste.

Deve ainda ser capaz de enviar e analisar vectores de teste pré-determinados permitindo a análise de possíveis erros no demonstrador, sendo esta capacidade essencial para algumas fases de teste.

38

Uma vez que uma GUI facilita o uso das ferramentas, é essencial escolher uma linguagem que combine a facilidade de estabelecer a comunicação porta série e a construção de um ambiente gráfico agradável de uma forma facilitada. Como tal, e pelo facto de ser orientada para correr em Microsoft Windows, optou-se por usar o C#.

De modo a possibilitar a confirmação da integridade do ficheiro após a sua encriptação, e posterior desencriptação, foi necessário escolher uma ferramenta capaz de o fazer. Para este efeito a escolha cai sobre o uso de uma função de hash, uma vez que este género de função deve gerar um valor distinto dependendo do ficheiro de entrada. A função será usada aquando do carregamento do ficheiro original para o programa, gerando o valor que será usado depois da desencriptação para estabelecer se o conjunto dos dois processos gerou um ficheiro final não corrompido.

Foi escolhido o uso da função MD5 para este efeito pelo facto de ser comummente usada para o mesmo, bem como pelo facto de ser rápida o suficiente a processar ficheiros com uma dimensão já considerável, permitindo a confirmação dos mesmos. Embora se saiba que é possível gerar colisões neste mesmo algoritmo, a possibilidade de estas ocorrerem por erro é irrelevante para o efeito que desejamos.

A nível dos vectores de teste existem dois conjuntos a considerar, o de funcionamento e o de teste de comprovação das contramedidas.

No primeiro conjunto, os valores devem ser comparados com o valor produzido mas, também, devem permitir ao utilizador visualizar o valor produzido, sendo este ou não o esperado, de modo a possibilitar a observação do erro, caso exista.

Para o segundo, é necessário ser possível escolher o conjunto de valores a enviar face ao protocolo de teste das contramedidas. Como tal, o utilizador tem que ser capaz de escolher entre variados grupos de plaintext bem como seleccionar o demonstrador que está a analisar.

Face às escolhas realizadas, foi possível retirar algumas conclusões quanto ao pretendido em termos de funcionamento do terminal e como devia ser implementado e, como tal, especificar o mesmo.

No Fluxograma 3 apresenta-se o funcionamento da função de envio para encriptação de um ficheiro de qualquer formato a partir do terminal. Nele parte-se do pressuposto que o

39 utilizador já escolheu o ficheiro a encriptar de modo a tornar a leitura mais clara. Introduz-se também o conceito de padding cuja necessidade é discutida no ponto 2.3.3.

Fluxograma 3 - Funcionamento do terminal durante a encriptação

Do mesmo modo, podemos delinear o funcionamento do envio e recepção do ficheiro a desencriptar bem como da comparação deste mesmo ficheiro com o original. As acções em causa estão representadas no Fluxograma 4.

40

Fluxograma 4 - Funcionamento do terminal durante a desencriptação

É necessário considerar o facto de os vectores de teste de funcionamento poderem ser analisados à medida que são executados, facilitando a tarefa de os analisar um a um. Como tal a execução destes mesmos vectores deverá seguir o representado no Fluxograma 5, permitindo desse modo testar a correcção da implementação. De sublinhar também que o utilizador necessitará de ser avisado para trocar o modo de funcionamento de encriptação para desencriptação, possibilitando assim que estes vectores permitam testar a funcionalidade de ambas as acções.

41 Envia vector de teste encriptação Evento de teste do vectores de funcionamento Recebe dados e testa a correcção Todos os vectores enviados? Não Fim do evento Avisa o utilizador para seleccionar o modo de encriptação Avisa o utilizador para seleccionar o modo de desencriptação Sim Envia vector de teste desencriptação Recebe dados e testa a correcção Todos os vectores enviados? Não

Fluxograma 5 - Funcionamento do terminal durante a execução do teste de funcionalidade

Para testar as contramedidas é necessário usar outro tipo de função, uma vez que este teste se baseia no uso de um protocolo extensamente discutido no ponto 3.6. A função que o implementará a nível do terminal seguirá a lógica de funcionamento descrita no Fluxograma 6. Com o uso desta implementação torna-se possível ao utilizador seleccionar a seed a testar de modo a poder comprovar o comportamento das contramedidas com os valores de teste desejado.

42 Envia bloco de dados Evento de envio de vectores de teste de contramedidas Recebe dados Todas as seed a testar enviadas? Não Fim do evento Escolhe seed em teste Sim Ultimo bloco de dados da seed? Não Incremente o valor do LSB Não

Fluxograma 6 - Funcionamento do terminal durante a execução do teste de traçado de potência