Por favor critique mi esquema de encriptación para un microcontrolador muy pequeño [cerrado]

0

Soy nuevo aquí y no soy un experto en criptografía; pero he estado usando la biblioteca de cifrado por un tiempo. Mi empresa está trabajando en un pequeño dispositivo de hardware. Está alimentado por un microcontrolador, por lo que la memoria es un problema con el que tenemos que lidiar. Así que decidimos idear nuestro esquema de cifrado al enviar mensajes a los dispositivos. Esto es lo que planeamos hacer.

  1. La distribución de claves no es un problema ya que físicamente actualizamos el secreto compartido casi todos los días y no se almacena en el dispositivo en sí.
  2. Para la clave de cifrado. El secreto compartido se concatena con un número aleatorio verdadero muy grande (usado como IV), luego se aplica una función de hash x veces para obtener una clave de longitud fija para el primer bloque de datos.
  3. Para cifrar el bloque de datos subsiguiente, un nuevo vector se deriva del número de bloque y el IV. Entonces se genera una nueva clave como en 2 solo para este bloque de datos. Por lo tanto, cada bloque de datos tiene su propia clave.
  4. Sabemos que algunas funciones de hash son caras, pero la velocidad no es un problema aquí ya que el dispositivo es lento para comenzar.

Así que esto es lo que hemos logrado y apreciaremos sus comentarios.

Editar: Después de más investigación. Encontré que lo que describí es solo el modo CTR aquí? Así que voy a ir con una implementación existente. ¿Alguna recomendación sobre una biblioteca? También escuché que algunas personas dijeron que habían encontrado problemas de plataforma cruzada entre iOS y Android. ¿Algún comentario sobre esto?

    
pregunta user2600798 24.04.2015 - 15:55
fuente

3 respuestas

6

Bueno, para empezar, la descripción de tu esquema no es una descripción de esquema. Esto es sólo una colección de intenciones vagas. La descripción de un esquema criptográfico debe ser tal que con solo leer la descripción, pueda escribir una implementación independiente que interactúe con la suya. Una buena descripción se parece a this . O that .

Además, en su descripción, en realidad no dice cómo, ya sabe, encripta las cosas. Parece aludir a algún esquema de derivación clave del que obtiene "vectores" que parecen depender del secreto compartido, pero no de los datos en sí. No está claro qué hacen estos vectores y cómo se cifran y descifran los datos.

En cualquier caso, diseñar su propio algoritmo criptográfico es una mala idea por la razón principal de que es extremadamente difícil encontrar un algoritmo seguro. La mayor parte de la capacitación en criptografía consiste en comprender que: hacer un algoritmo seguro es una tarea difícil. La razón conceptual de esto es que no hay pruebas de seguridad. Lo mejor que podemos hacer es anotar una especificación completa y detallada (incluida una implementación de referencia, vectores de prueba y una justificación sólida para por qué podría ser segura) y luego enviarla a un grupo de criptógrafos Y que intenten encontrar defectos. Se necesitan docenas de criptógrafos y varios años de esfuerzo. Es por eso que este tipo de trabajo se realiza a través de "competiciones" organizadas como se hizo para AES .

Una pregunta de diez líneas en security.SE no puede considerarse una alternativa razonable.

Además, la mayoría de las situaciones que requieren cifrado (para garantizar la confidencialidad de los datos) también necesitan algo para garantizar la integridad , porque los atacantes son malos , no juegue "según las reglas ", y puede intentar alterar los datos en tránsito, posiblemente para aprender cosas sobre los datos y las claves en función de cómo se comportan los sistemas cuando se enfrentan a los datos alterados. La integridad se obtiene mediante el uso de un MAC . Combinar el cifrado y un MAC de forma segura es más difícil de lo que parece , así que, de nuevo, es un trabajo para criptógrafos impulsados por la competencia (las soluciones recomendadas habituales son GCM y EAX , pero existe, de hecho, un competencia para obtener algo mejor).

Y cuando tiene un buen protocolo (un conjunto seguro de algoritmos seguros) que debería satisfacer sus necesidades, entonces aún no ha terminado; aún debe obtener una implementación que sea correcta, robusta, eficiente y (de manera crucial) no filtre información. Los ataques de canal lateral pueden ser particularmente mortales para el código descuidado en sistemas integrados. Una vez más, esto es una cuestión de ciencia y también de mucha habilidad, que no se puede improvisar.

Para resumir, necesita, al menos, alguna ayuda seria de un criptógrafo profesional (no, no estoy contratado en este momento). A menos que esté en un caso en el que los datos que desea proteger no sean interesantes, lo que garantiza la máxima seguridad: nada protege los datos más que hacer que los datos sean tan aburridos e inútiles que nadie realmente se moleste en intentar acceder a ellos.

    
respondido por el Tom Leek 24.04.2015 - 16:20
fuente
2

En general, las mejores dos reglas que gobiernan la creación de esquemas de encriptación cuando se busca seguridad confiable y no solo "seguridad del folklore" son:

Regla 1: por lo general, no necesita ejecutar su propio criptográfico

Regla 2: si necesita ejecutar su propio criptografía, consulte inmediatamente la regla 1.

Si por fin, por alguna razón, necesita ejecutar su propio crypto para que supere las dos reglas anteriores, entonces obtener asistencia profesional para esto. Puede ser costoso, pero la criptografía es un asunto complejo que requiere un alto conocimiento técnico y esto tiene un precio.

Esta cita de Bruce Schneier siempre es una buena cosa para recordar: " Cualquiera puede inventar un algoritmo de cifrado que ellos mismos no pueden romper; es mucho más difícil inventar uno que nadie más pueda romper ".

    
respondido por el WhiteWinterWolf 24.04.2015 - 16:18
fuente
0

Es esto basado en algún esquema existente. Si es así, ¿qué?

No puedo estar seguro en absoluto de lo difícil que sería su plan para romper con su descripción.

Como regla general, no es recomendable utilizar su propio código en lugar de utilizar las bibliotecas existentes, ya que sus posibilidades de cometer errores son altas.

Tratar de inventar tu propio algoritmo es mucho peor y es casi universalmente una mala idea. Es casi seguro que sea inseguro si este es un esquema que usted acaba de inventar.

Hay bibliotecas disponibles para dispositivos con muy poca memoria, incluso hay bibliotecas criptográficas disponibles para arduino. Si la seguridad es realmente importante, intente usar una biblioteca existente.

    
respondido por el Murphy 24.04.2015 - 16:21
fuente

Lea otras preguntas en las etiquetas