Biblioteca de cifrado para Arduino

Estoy usando un Arduino para leer un teclado y abrir una huelga eléctrica al ingresar el PIN del teclado. Para este boceto, quería usar algún tipo de encriptación ligera para almacenar los PIN en EEProm. ¿Alguien sabe de una biblioteca así? Escuché que puede ser posible usar TwoFish.

Respuestas (7)

No desea cifrar contraseñas (PIN), desea codificarlas . Cuando alguien ingresa una contraseña, usted codifica esa contraseña y compara el hash con el hash almacenado. La ventaja de este método (utilizado durante más de 30 años) es que incluso si alguien obtiene la fuente y los hashes, aún no puede saber qué PIN coinciden con los hashes, siempre que elija una función de hash lo suficientemente fuerte .

No desea implementar el cifrado usted mismo; desea usar la biblioteca de otra persona, particularmente una con una implementación abierta que haya sido probada por una gran comunidad. El cifrado es difícil, las pruebas son difíciles y las pruebas de cifrado son condenadamente difíciles, así que consiga que otra persona lo haga por usted.

Debe consultar la Biblioteca criptográfica AVR , que tiene licencia GPLv3. También hay una implementación de Skein para AVR .

Votado a favor: un buen recurso, y esto debe establecerse como la respuesta a la pregunta.

Ese enlace que Hristos publicó, aunque posiblemente útil, ciertamente no cuenta como "cifrado". En realidad es solo "ofuscación".

La criptografía adecuada es notoriamente fácil de equivocarse, incluso para las personas que conocen las matemáticas.

En respuesta a la publicación original, ¿cuáles son los métodos de ataque que le permitirían a alguien acceder a los PIN en la EEProm? Seguramente si han llegado tan lejos en sus dispositivos electrónicos, ¿pueden simplemente "cortar el cable rojo" y abrir la puerta?

Si de alguna manera tiene un sistema en el que los atacantes pueden apoderarse de los contenidos de EEProm sin tener suficiente acceso para abrir su puerta, probablemente desee rediseñarlo. Puede buscar funciones de hash unidireccionales similares al hash de contraseñas de Unix; de esa manera, la EEProm no necesita contener una clave de descifrado; el problema es que el espacio de búsqueda de PIN es muy pequeño . Si puedo descargar la versión hash del PIN, puedo probar rápidamente los 10,000 PIN posibles, sospecho que cualquier computadora portátil moderna los ejecutará todos en unos segundos.

Estoy de acuerdo (y estoy de acuerdo anteriormente), un hash unidireccional sería útil y si está programando el sistema, puede hacer que el pin sea tan largo como desee, por ejemplo, 8 dígitos dan 100 000 000 combinaciones, lo que debería llevar mucho más tiempo.

El problema que preveo es que si pueden ver sus pines, también pueden ver su programa que encripta/verifica/descifra sus pines. Además, si tienen su chip, ¿no pueden simplemente alterar el programa para que siempre dé un resultado positivo (sin pasar por alto el control) para cualquier pin ingresado?

¿Cómo planea decodificar los PIN encriptados para verificar si el usuario ingresó un PIN válido? Deberá almacenar la clave de descifrado... momento en el cual, si el atacante puede leer su eeprom, también puede leer su flash para encontrar la clave de cifrado. Básicamente, hace que todo su cifrado sea completamente inútil. Además, como dijeron las otras personas, si ya tiene la capacidad de leer su chip, podría escribir un nuevo programa. Mucho más simple simplemente abrir la puerta de una patada, dudo que alguien se tome la molestia de intentar piratear su chip.

Aquí hay un método de encriptación simple en C que fácilmente podría ser portado a Arduino. Esta parece ser la forma más fácil de cifrar datos con los recursos limitados de arduino.

-EDITAR- Para mantener la clave fuera de su programa, puede hacer que la mitad del PIN sea la clave. Esto significa que su programa toma la mitad clave del PIN para descifrar el 1/2 PIN encriptado almacenado en EEProm. Si la clave descifrada de EEProm coincide con la parte de su pin que no es la clave, la puerta se desbloqueará. Esto solo funcionaría en una situación en la que los intrusos no puedan derribar la puerta o reprogramar el Arduino.

Pero si no tienen acceso a su chip, no necesita cifrar el pin.

Odio no responder la pregunta mientras hago otra, pero...

¿Hay alguna razón por la que su dispositivo no sea a prueba de manipulaciones? He visto interruptores de botón en orificios para tornillos implementados 'en el banco' para detectar el tipo de manipulación que le preocupa. Entonces... aquí viene el niño con una micro antorcha de butano que logra obtener su chip sin desatornillar nada (o dañar el chip)... de alguna manera, conocía el diseño de su sistema a prueba de manipulaciones que (también, con suerte) incluye la detección de cambios en luz ambiental y/o sonido. Cuando se quita la cubierta, ambos se vuelven bastante diferentes... de día o de noche.

Si ese es el caso, debería ser un sistema de dos partes donde las piezas expuestas se comuniquen con algo donde el cifrado se implemente más fácilmente. Además, cuenta de sumas de control (ayuda) para el niño con la antorcha.

Creo que le estás pidiendo a un destornillador que sea un martillo.

Estos comentarios son realmente acertados. No tiene nada de malo intentar experimentar para aprender sobre encriptación, pero este no es realmente un buen proyecto para aprender esas cosas. Realmente quieres un buen libro de texto y una computadora, y como dice @bigiain, las matemáticas son notoriamente fáciles de equivocarse.

Para comprender mejor cómo funciona la criptografía y a qué se enfrenta, el Manual de criptografía aplicada es excelente y gratuito:

Si solo desea proteger su proyecto, esta es una forma ineficiente de hacerlo. Si está interesado en la criptografía, comience con este libro y una computadora.

Entiendo criptografía, leo a Bruce Schneier y he programado durante más de veinte años. Entiendo que la verdadera amenaza es simplemente derribar la puerta y pasar por delante de cualquier tipo de controlador Arduino. Simplemente no puedo en buena conciencia instalarlo con PIN de texto claro en la EEProm si se puede evitar. Volar
Existe una gran cantidad de métodos simples de ofuscación que serían igual de efectivos en esta función si desea evitar almacenar PIN de texto claro. Los respondedores anteriores solo intentaban ayudarlo a comprender qué hace y qué no hace la criptografía. Aquí hay una biblioteca AES: hoozi.com/Articles/AESEncryption.htm También me gustaría decir que solo porque hayas programado durante 20 años, no significa que "entiendes" la criptografía. Es un campo totalmente diferente. Un mecánico de automóviles de 20 años es una persona hábil, pero no esperaría que diseñara un bus CAN desde cero. Compruebe su actitud, por favor.
Oh dios... 20 años de codificación y crees que es posible cifrar datos de tiempo de ejecución???? Abandonar.