¿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 debería 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. 0x01
  • La PC hace lo que se le pidió (algunas cosas de hardware) y responde ~0x01cuando se hace (niego el número para crear una "distancia" mayor entre los dos números)
  • µC sabe que se envió 0x01y espera ~0x01de la PC. Si ~0x01vuelve a aparecer algo diferente , el µC sabrá que algo salió mal y enviará una nueva solicitud o un mensaje de error

En el caso de que el µC envíe 0x01, la PC lo comprende 0x02y lo envía, ~0x02pero el µC lee ~0x01debido 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?

JavaForStarters
fuente
1
Es posible que desee revisar la pregunta mía relacionada y las muy buenas respuestas a la misma.
Eugene Sh.
1
Por "más seguro" lo entiendo, significa menos propenso a errores de transmisión, no agrega criptografía, etc. para resistir las escuchas y lo que no. Incluso eso es un campo bastante vasto: en.wikipedia.org/wiki/Error_detection_and_correction
Fizz
2
Es posible que desee buscar la codificación de Hamming . Tomará hasta 16 comandos (4 bits) y los ampliará de manera sistemática a 7 bits (que se pueden transmitir a través de un UART estándar). Puede elegir corregir cualquier error de un solo bit o detectar si se han recibido dos bits incorrectos.
Neil_UK
2
1) 7 bit + un bit de paridad es unidireccional y es simple. No detectará todos los errores posibles, pero detectará muchos. 2) Un método más robusto es enviar dos bytes, primero con el comando real y segundo con el 'no' del primer comando. 3) Aún mejor es enviar un byte de "comando que viene", seguido del comando, seguido del complemento del comando, seguido de un byte de "fin del comando". Los bytes 'comando entrante' y 'fin del comando' deben seleccionarse para que no se superpongan con ninguno de los bytes del comando y el complemento
user3629249
1
Si solo necesita 10 comandos, puede colocar dos copias en cada byte (para redundancia), más bits de paridad. O bien, dado que tiene un espacio de símbolos de 256 símbolos y solo necesita 10, simplemente puede elegir símbolos diferentes (todos los símbolos difieren en varios bits) o elegir solo símbolos con números pares de unos y ceros. Ciertamente no tiene que preocuparse por los errores de un solo bit.
mkeith

Respuestas:

1

Creo que debería definir comandos más largos que incluyan probablemente suma de verificación o CRC y esperar una condición de ACK / NACK o error.

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

Palmadita
fuente
1

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, debe pensar en los siguientes hilos:

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

Las medidas estándar contra hilos son:

  • Secuencia o marcas de tiempo
  • supervisión de tiempo
  • códigos únicos de origen y destino
  • respuesta
  • procedimiento de identificación
  • algún tipo de suma de comprobación, código hash ...
  • Algunas de estas técnicas criptográficas ya las has implementado con tu simple protocolo.
usuario2572309
fuente