
Prueba de concepto que demuestra un ataque de canal lateral mediante análisis de potencia contra una implementación vulnerable de RSA en Arduino (Atmega328P), con configuración de hardware detallada y metodología de medición.
Recientemente, observé gente implementando criptografía para Arduino por sí mismos, como se indica en este tema en StackOverflow:
https://stackoverflow.com/questions/39189065/rsa-encryption-decryption-functions-for-arduino
Se pueden encontrar varios por internet, algunos por cierto están en bibliotecas bien conocidas.
Decidí hacer esta pequeña PoC (Prueba de concepto) para mostrar por qué es importante no solo no inventar tu propio algoritmo criptográfico, sino también utilizar una implementación robusta de dichos algoritmos.
Esta PoC realiza un ataque de canal lateral (ataque de análisis de potencia) contra una mala implementación de una rutina auxiliar utilizada en la implementación de RSA (exponenciación rápida).
Un ataque de canal lateral es un método para comprometer un sistema criptográfico explotando la fuga de información indirecta en lugar de atacar directamente el algoritmo o protocolo criptográfico en sí.
Este tipo de fuga puede originarse de diversas fuentes como información de tiempos, consumo de potencia, emisiones electromagnéticas o incluso sonido.
Tales ataques pueden ser muy efectivos para comprometer sistemas criptográficos como RSA sin requerir que el atacante resuelva los problemas matemáticos subyacentes que garantizan la seguridad del esquema criptográfico (Kocher, Jaffe, & Jun, 1999).
Este documento realizará un ataque de análisis de potencia sobre una vulnerabilidad conocida en una implementación del algoritmo RSA en un firmware para Arduino (Atmega328P).
Nota: Lo hice rápido, por favor perdón por los errores ortográficos/gramaticales que eventualmente encontrarás.
Los ataques de análisis de potencia implican medir el consumo de potencia de un dispositivo durante operaciones criptográficas.
El Análisis Diferencial de Potencia (DPA) implica el análisis estadístico de patrones de consumo de potencia a través de múltiples operaciones criptográficas para extraer secretos, siendo más sofisticado que el Análisis Simple de Potencia (SPA), que correlaciona directamente las fluctuaciones de potencia con operaciones criptográficas específicas para deducir secretos.
El Análisis Diferencial de Potencia (DPA) y el Análisis Simple de Potencia (SPA) pueden usarse para extraer claves privadas analizando patrones en el consumo de potencia durante los cómputos RSA.
Estos ataques pueden revelar la clave privada identificando patrones de uso de potencia distintivos asociados con diferentes bits de la clave (Kocher, Jaffe, & Jun, 1999).
RSA (Rivest-Shamir-Adleman) es un algoritmo de cifrado de clave pública ampliamente utilizado, nombrado en honor a sus inventores: Ron Rivest, Adi Shamir y Leonard Adleman, quienes lo introdujeron en 1977 (Paar & Pelzl, 2010).
Sigue siendo uno de los métodos más seguros para transmitir datos de forma segura a través de internet.
Uno de los fundamentos de la seguridad de RSA reside en la dificultad de factorizar números compuestos grandes en sus factores primos (Menezes, van Oorschot, & Vanstone, 1996).
Este problema, conocido como el problema de factorización, implica encontrar los números primos que multiplicados forman un número grande dado.
El cifrado RSA se basa en la suposición de que este problema de factorización es computacionalmente lo suficientemente difícil como para hacer poco práctico romper el cifrado factorizando el módulo en sus factores primos (Menezes, van Oorschot, & Vanstone, 1996).
La Figura 1 ilustra el proceso de cifrado y descifrado RSA utilizando un ejemplo simple.

Figura 1 - Ejemplo de RSA.
Tenga en cuenta que en este caso, 3 y 33 son públicos. El número 7 en el ejemplo es la clave privada.
La función Phi (N), la función totiente de Euler, calcula todos los números coprimos en el intervalo de 1 a 33.
El valor 33 se obtiene de la multiplicación de P y Q; en este caso, 11 multiplicado por 3.
El resultado de la función Phi se obtiene multiplicando (P - 1) por (Q - 1); en este caso, 10 multiplicado por 2.
La operación e<sup>-1</sup> mod 20 denota la operación de inverso modular (Menezes, van Oorschot, & Vanstone, 1996).
Nota: Si desea profundizar en RSA, lo cual no es necesario para entender este documento. Hay una introducción rápida a estas operaciones básicas de teoría de números dentro de este repositorio en el archivo number_theory.md. La explicación puede mejorar su comprensión de las operaciones RSA.
El experimento utilizó un osciloscopio DS1102 (presentado en la Figura 2) fabricado por Rigol.
El manual del osciloscopio se puede encontrar en las referencias (RIGOL Technologies, Inc., 2017).
También se utilizó una fuente de alimentación genérica (presentada en la Figura 3).

Figura 2 - Osciloscopio utilizado en el experimento.

Figura 3 - Fuente de alimentación utilizada en el experimento.
La Ley de Ohm es un principio fundamental en el campo de la ingeniería eléctrica y la física.
Establece que la corriente que fluye a través de un conductor entre dos puntos es directamente proporcional al voltaje a través de los dos puntos e inversamente proporcional a la resistencia entre ellos (Boylestad, 2015).
La Figura 4 muestra un circuito y la Ley de Ohm.

Figura 4 - Ilustración de la Ley de Ohm.
La Ley de Ohm implica que si aumenta el voltaje a través de un conductor, la corriente también aumentará, siempre que la resistencia permanezca constante (Johnson & Hilburn, 2013). La Figura 5 presenta un ejemplo de aplicación de la Ley de Ohm cuyo objetivo es encontrar la corriente en el circuito.

Figura 5 - Ejemplo de la Ley de Ohm.
La Ley de Voltaje de Kirchhoff (LVK) es un principio fundamental en la ingeniería eléctrica y la física (Boylestad, 2015).
Establece que la suma de todas las diferencias de potencial eléctrico (voltajes) alrededor de cualquier red o lazo cerrado es cero (Boylestad, 2015).
La Figura 6 ilustra la Ley de Voltaje de Kirchhoff.

Figura 6 - Ilustración de la Ley de Kirchhoff.
Hay un ejemplo de la aplicación de la Ley de Kirchhoff en la Figura 7 para encontrar la corriente a través de las resistencias R1 y R2.
