¿Cómo crear un protocolo de comunicación UART seguro?

8

Me preguntaba cómo crear un protocolo de comunicación UART / USB seguro. Lo necesito para la comunicación entre un microcontrolador y una PC. Tengo ~ 10 comandos y pensé que usaría 10 comandos de reconocimiento separados para cada uno de ellos.

El intercambio debe ser así:

  • La PC envía un comando de activación a través de UART
  • µC reconoce que la PC está conectada y envía su comando a la PC, por ejemplo. %código%
  • PC hace lo que se le pidió (algunas cosas de hardware) y responde con 0x01 cuando se hace (niego el número para crear una "distancia" mayor entre los dos números)
  • µC sabe que envió ~0x01 y espera 0x01 desde la PC. Si algo diferente a ~0x01 regresa, el µC sabrá que algo salió mal y enviará una nueva solicitud o un mensaje de error

En caso de que el µC envíe ~0x01 , la PC comprenda 0x01 y envíe 0x02 de vuelta, pero el µC lee ~0x02 debido a algún ruido sería bastante malo.

¿Qué tan seguro es eso en términos de transmisión, o cómo puedo hacer esto más seguro?

    
pregunta JavaForStarters

2 respuestas

1

Creo que deberías definir comandos más largos incluyendo probablemente la suma de comprobación o CRC y esperar un ACK / NACK o una condición de error.

Puede tomar ejemplos de protocolos sencillos como TFTP ( RFC 1350 )

    
respondido por el Pat
2

Para una comunicación segura, debe considerar todos los hilos posibles a su línea de comunicación. Por lo tanto, debe definir si el sistema es accesible desde el exterior (sistemas de terceros, por ejemplo, inalámbricos)

En general, tienes que pensar en los siguientes hilos:

  • repetición
  • omisión
  • resecuenciación
  • manipulación
  • retraso
  • inserción
  • corrupción

Las medidas estándar contra hilos son:

  • Secuenciación o marcas de tiempo
  • supervisión de tiempo
  • códigos únicos de origen y destino
  • respuesta
  • identificación previa
  • algún tipo de suma de comprobación, código hash ...
  • técnicas cryprographic algunos de estos ya los has implementado con tu sencillo protocolo.
respondido por el user2572309

Lea otras preguntas en las etiquetas