Étape 10 : Sécuriser le canal de Communication Architecture
La partie la plus délicate de ce projet est la conception d’un canal sécurisé qui serait résistant aux attaques de relecture et de Man-In-The-Middle . Je crois que j’ai pu atteindre cet objectif, et j’ai appliqué la solution d’une façon qui le rend très facile à réutiliser dans n’importe quel autre projet Spark base.
Cette étape donne un aperçu de comment cette bibliothèque est conçue et utilisée.
SecureChannelServer
Toutes les primitives cryptographiques et le protocole de mise en place de session sont mis en œuvre par le SecureChannelServer. La mise en œuvre délègue la communication réelle et traitement aux interfaces CommunicationChannel et SecureMessageConsumer du message. Ce sont seulement deux interfaces qu'utilisateur de cette bibliothèque doit implémenter.
Notez que la méthode publique uniquement que cette classe a est loop(). Elle est destinée à être appelée par la méthode principale loop() en application.cpp, desservis par les bibliothèques principales de l’étincelle.
Les détails du fonctionne de cette classe sont à une étape suivante.
CommunicationChannel
Sert à mettre en œuvre une approche de communication spécifiques, tels que TCP/IP via WiFi par exemple. Il ne sait rien sur crypter ou décrypter les données. Au lieu de cela, SecureChannelServer utilisera cette interface chaque fois qu’il a besoin pour lire ou écrire des données chiffrées.
SecureMessageConsumer
Mise en œuvre recevra les messages décryptés et renvoie les réponses en texte brut vers le SecureChannelServer. Il est complètement agnostique de la façon dont le message a été déchiffré, ou comment elle a été reçue.
Cette approche de conception le rend très facile de développer et de tester le SecureChannelServer. Si vous regardez à l’intérieur du noyau-firmware/bibliothèques/garage/tests, vous trouverez le test factice des implémentations de ces deux interfaces, qui rend possible pour moi d’écrire et de déboguer le code crypto sans aucune nécessité pour le matériel ou même réseau.
WiFiCommunicationChannel Classe
Gère les détails de connexion le noyau au WiFi, gestion d’un serveur TCP/IP sur le port 6666 et gestion des connexions client. Il s’agit de la classe ping le serveur de test à chaque minute pour vérifier la santé de la connexion.
Garage Classe
Il s’agit de notre implémentation de l’interface SecureMessageConsumer . Il agit comme le contrôleur de porte de garage, gère les détails de matériel d’actionner l’interrupteur et de lecture du capteur de porte.
Veuillez consulter le diagramme UML pour plus de détails.