Biblioteca de cifrado para Arduino

9

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

mad_z
fuente

Respuestas:

12

No desea cifrar las contraseñas (PIN), desea hacer un hash . Cuando alguien ingresa una contraseña, usted usa 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 hash, aún no puede saber qué PIN coinciden con los hash, siempre que elija una función 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 muy difíciles, así que haz que alguien más lo haga por ti.

Debería revisar la Biblioteca de cifrado AVR , que tiene licencia GPLv3. También hay una implementación de Skein para AVR .

Craig Trader
fuente
1
Upvoted: un buen recurso, y esto debe establecerse como la respuesta a la pregunta.
Lou
9

Ese enlace que Hristos publicó, aunque posiblemente sea útil, ciertamente no cuenta como "cifrado". Realmente 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 permitirían que alguien tenga acceso a los PIN en EEProm? ¿Seguramente si han llegado tan lejos en su electrónica pueden simplemente "cortar el cable rojo" y abrir la puerta?

Si de alguna forma hacer tener un sistema en el que los atacantes podrían hacerse con el contenido EEProm sin tener ya acceso suficiente para abrir su puerta, es probable que desee rediseñarlo. Usted podría mirar a las funciones hash unidireccionales similares a Unix hash de la clave - de esa manera la EEPROM no necesita t contienen una clave de descifrado - el problema es el espacio de búsqueda de contactos es muy pequeña - si puedo descargar la versión del algoritmo hash PIN, puedo probar rápidamente los 10,000 PIN posibles, sospecho que cualquier computadora portátil moderna los ejecutará en unos segundos.

bigiain
fuente
Estoy de acuerdo (y de acuerdo anteriormente), un hash unidireccional sería útil y si está programando el sistema, entonces podría hacer el pin todo el tiempo que desee, por ejemplo, 8 dígitos dan 100 000 000 combinaciones, lo que debería llevar mucho más tiempo.
Amós
1

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

Amós
fuente
1

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

davr
fuente
1

Aquí hay un método de encripción simple en C que fácilmente podría ser portado al Arduino. Esta parece ser la forma más fácil de cifrar datos con los recursos limitados del 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 de la clave del PIN para descifrar el 1/2 PIN cifrado 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.

Hristos
fuente
Pero si no tienen acceso a su chip, no necesita cifrar el pin.
Amós
1

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

¿Hay alguna razón por la cual su dispositivo no es a prueba de manipulaciones? He visto interruptores de botón en agujeros de tornillo 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 desenroscar 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 detectar 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 comunican con algo donde el cifrado se implementa más fácilmente. Además, las sumas de verificación (ayuda) representan al niño con la antorcha.

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

Tim Post
fuente
1

Estos comentarios son realmente acertados. No hay nada de malo en intentar experimentar para aprender sobre el cifrado, pero este no es realmente un buen proyecto para aprender tales cosas. Realmente quieres un buen libro de texto y una computadora, y como dice @bigiain, las matemáticas son muy fáciles de equivocar.

Para una mejor comprensión de cómo funciona la criptografía y a qué se enfrenta, el Manual de Criptografía Aplicada es excelente y gratuito:

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

Lou
fuente
Entiendo la 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 cualquier tipo de controlador Arduino. No puedo, en buena conciencia, instalarlo con PIN de texto claro en EEProm si se puede evitar. Fly
Existen varios métodos simples de ofuscación que serían tan efectivos en este rol si desea evitar almacenar PIN de texto sin cifrar. Los respondedores anteriores solo intentaban ayudarlo a comprender lo que hace y no hace la criptografía. Aquí hay una biblioteca AES: hoozi.com/Articles/AESEncryption.htm También me gustaría decir que solo porque haya programado durante 20 años, no significa que "entienda" la criptografía. Es un campo totalmente diferente. Un mecánico de automóviles de 20 años es una persona experta, pero no esperaría que diseñara un autobús CAN desde cero. Comprueba tu actitud, por favor.
Lou
Oh dios ... 20 años de codificación y crees que es posible cifrar los datos de tiempo de ejecución ????? Dejar.
MickLH