
Prova de conceito demonstrando um ataque de canal lateral por análise de potência contra uma implementação RSA vulnerável em Arduino (Atmega328P), com configuração de hardware detalhada e metodologia de medição.
Recentemente, observei pessoas implementando criptografia para Arduino por conta própria, como mencionado neste tópico no Stackoverflow:
https://stackoverflow.com/questions/39189065/rsa-encryption-decryption-functions-for-arduino
Várias delas podem ser encontradas na internet, algumas, a propósito, estão em bibliotecas bem conhecidas.
Decidi fazer este pequeno PoC (Prova de conceito) para mostrar por que é importante não inventar seu próprio algoritmo de criptografia, mas também usar uma implementação robusta de tais algoritmos.
Este PoC realiza um ataque de canal lateral (ataque de análise de potência) contra uma má implementação de uma rotina auxiliar usada na implementação RSA (exponenciação rápida).
Um ataque de canal lateral é um método de comprometer um sistema criptográfico explorando vazamento indireto de informações, em vez de atacar diretamente o algoritmo ou protocolo criptográfico em si.
Esse tipo de vazamento pode se originar de várias fontes, como informações de temporização, consumo de energia, emissões eletromagnéticas ou até mesmo som.
Tais ataques podem ser altamente eficazes para comprometer sistemas criptográficos como o RSA, sem exigir que o atacante resolva os problemas matemáticos subjacentes que garantem a segurança do esquema criptográfico (Kocher, Jaffe, & Jun, 1999).
Este artigo realizará um ataque de análise de potência sobre uma vulnerabilidade bem conhecida em uma implementação do algoritmo RSA em um firmware para Arduino (Atmega328P).
Nota: Fiz isso com pressa, por favor, perdoe-me pelos erros de ortografia/gramática que você eventualmente encontrará.
Ataques de análise de potência envolvem medir o consumo de energia de um dispositivo durante operações criptográficas.
A Análise Diferencial de Potência (DPA) envolve análise estatística de padrões de consumo de energia em múltiplas operações criptográficas para extrair segredos, tornando-se mais sofisticada que a Análise Simples de Potência (SPA), que correlaciona diretamente flutuações de potência com operações criptográficas específicas para deduzir segredos.
A Análise Diferencial de Potência (DPA) e a Análise Simples de Potência (SPA) podem ser usadas para extrair chaves privadas analisando padrões no consumo de energia durante computações RSA.
Esses ataques podem revelar a chave privada identificando padrões distintos de uso de energia associados a diferentes bits da chave (Kocher, Jaffe, & Jun, 1999).
RSA (Rivest-Shamir-Adleman) é um algoritmo de criptografia de chave pública amplamente utilizado, nomeado após seus inventores: Ron Rivest, Adi Shamir e Leonard Adleman, que o introduziram em 1977 (Paar & Pelzl, 2010).
Ele continua sendo um dos métodos mais seguros para transmitir dados de forma segura pela internet.
Um dos fundamentos da segurança do RSA reside na dificuldade de fatorar grandes números compostos em seus fatores primos (Menezes, van Oorschot, & Vanstone, 1996).
Este problema, conhecido como problema da fatoração, envolve encontrar os números primos que se multiplicam para formar um determinado número grande.
A criptografia RSA depende da suposição de que este problema de fatoração é computacionalmente difícil o suficiente para tornar impraticável quebrar a criptografia fatorando o módulo em seus fatores primos (Menezes, van Oorschot, & Vanstone, 1996).
A Figura 1 ilustra o processo de criptografia e descriptografia RSA usando um exemplo simples.

Figura 1 - Exemplo RSA.
Observe que neste caso, 3 e 33 são públicos. O número 7 no exemplo é a chave privada.
A função Phi (N), função totiente de Euler, calcula todos os números coprimos no intervalo de 1 a 33.
O valor 33 é obtido da multiplicação de P e Q; neste caso, 11 multiplicado por 3.
O resultado da função Phi é obtido multiplicando (P - 1) por (Q - 1); neste caso, 10 multiplicado por 2.
A operação e<sup>-1</sup> mod 20 denota a operação de inverso modular (Menezes, van Oorschot, & Vanstone, 1996).
Nota: Se desejar se aprofundar no RSA, o que não é necessário para entender este artigo. Há uma introdução rápida a essas operações básicas de teoria dos números neste repositório, no arquivo number_theory.md. A explicação pode aprimorar seu entendimento das operações RSA.
O experimento utilizou um osciloscópio DS1102 (apresentado na Figura 2) fabricado pela Rigol.
O manual do osciloscópio pode ser encontrado nas referências (RIGOL Technologies, Inc., 2017).
Uma fonte de alimentação genérica também foi usada (apresentada na Figura 3).

Figura 2 - Osciloscópio usado no experimento.

Figura 3 - Fonte de alimentação usada no experimento.
A Lei de Ohm é um princípio fundamental no campo da engenharia elétrica e da física.
Ela afirma que a corrente que flui através de um condutor entre dois pontos é diretamente proporcional à tensão entre os dois pontos e inversamente proporcional à resistência entre eles (Boylestad, 2015).
A Figura 4 mostra um circuito e a Lei de Ohm.

Figura 4 - Ilustração da Lei de Ohm.
A Lei de Ohm implica que, se você aumentar a tensão através de um condutor, a corrente também aumentará, desde que a resistência permaneça constante (Johnson & Hilburn, 2013). A Figura 5 apresenta um exemplo de aplicação da Lei de Ohm cujo objetivo é encontrar a corrente no circuito.

Figura 5 - Exemplo da Lei de Ohm.
A Lei de Tensão de Kirchhoff (KVL) é um princípio fundamental na engenharia elétrica e na física (Boylestad, 2015).
Ela afirma que a soma de todas as diferenças de potencial elétrico (tensões) em qualquer rede ou malha fechada é zero (Boylestad, 2015).
A Figura 6 ilustra a Lei de Tensão de Kirchhoff.

Figura 6 - Ilustração da Lei de Kirchhoff.
Há um exemplo da aplicação da Lei de Kirchhoff na Figura 7 para encontrar a corrente sobre os resistores R1 e R2.

Figura 7 - Exemplo da Lei de Kirchhoff.
O divisor de tensão é uma consequência da Lei de Tensão de Kirchhoff (KVL) e estabelece uma maneira de calcular a Vout, que é a tensão entre o resistor R1 e R2.
A fórmula do divisor de tensão é apresentada na Figura 8.