Paso 10: Fije arquitectura de canal de comunicación
La parte más delicada de este proyecto fue el diseño de un canal seguro que sería resistente a los ataques de Replay y Man In The Middle . Creo que fui capaz de conseguirlo, y he implementado la solución de una manera que hace muy fácil volver a utilizar en cualquier otro proyecto del núcleo de la chispa.
Este paso da a tener una visión general de cómo se diseña y se utiliza esta biblioteca.
SecureChannelServer
Todas las primitivas criptográficas y el protocolo de establecimiento de sesión son ejecutadas por el SecureChannelServer. La aplicación delega la comunicación real y procesamiento de interfaces CommunicationChannel y SecureMessageConsumer de mensajes. Estas son las dos interfaces que debe implementar un usuario de esta biblioteca.
Tenga en cuenta que el método solo publico que esta clase tiene es loop(). Está diseñado para ser llamado desde el método principal loop() en application.cpp, mantenido por las bibliotecas del núcleo de la chispa.
Los detalles del funcionamiento de esta clase son en un siguiente paso.
CommunicationChannel
Se utiliza para implementar un enfoque de comunicación específicos, como TCP/IP por WiFi por ejemplo. Sabe nada acerca de cifrar o descifrar los datos. En cambio, SecureChannelServer utilizará esta interfaz cada vez que necesita para leer o escribir datos cifrados.
SecureMessageConsumer
Aplicación recibirá mensajes descifrados y devolverá las respuestas del texto a la SecureChannelServer. Es completamente independiente de cómo el mensaje fue descifrado, o cómo fue recibido.
Este enfoque de diseño, es muy fácil de desarrollar y probar el SecureChannelServer. Si miras dentro de núcleo-firmware/bibliotecas/garaje/pruebas, usted encontrará implementaciones de prueba simulada de ambas interfaces, que permite escribir y depurar todo el código cifrado sin necesidad de hardware o incluso red.
WiFiCommunicationChannel Clase
Se encarga de los detalles de conectarse a la base WiFi, administrar un servidor de TCP/IP en el puerto 6666 y gestiona las conexiones de cliente. Esta es la clase que hace ping el servidor de prueba a cada minuto para comprobar la conexión.
Garaje Clase
Se trata de la implementación de la interfaz SecureMessageConsumer . Actúa como el controlador de puerta de garaje, manipulación de las características de hardware de activar el interruptor y leyendo el sensor de la puerta.
Por favor consulte el diagrama UML para más detalles.