Spark Core och Android Garage öppnare. Minus Spark molnet. (10 / 19 steg)
Steg 10: Säker kommunikationskanal arkitekturen
Den svåraste delen av detta projekt var utformningen av en säker kanal som är resistenta mot Replay och Man-In-The-Middle -attacker. Jag tror att jag har kunnat uppnå detta, och jag genomfört lösningen på ett sätt som gör det mycket enkelt att återanvända i andra Spark Core projekt.
Detta steg ger en överblick över hur detta bibliotek är utformade och användas.
SecureChannelServer
Alla de krypto primitiver och session etableringen protokollet genomförs av SecureChannelServer. Genomförandet delegerar faktiska kommunikation och -meddelanden till CommunicationChannel och SecureMessageConsumer gränssnitt. Detta är de endast två gränssnitt för en användare av detta bibliotek måste genomföra.
Observera att metoden endast delade denna klass har loop(). Avsikten är att anropas från den huvudsakliga loop() metoden application.cpp, servas av Spark kärna bibliotek.
Detaljer om hur den här klassen fungerar är i ett följande steg.
CommunicationChannel
Används för att genomföra ett särskilt meddelande tillvägagångssätt, till exempel TCP/IP över WiFi till exempel. Det vet ingenting om kryptera eller dekryptera data. Använd i stället SecureChannelServer kommer detta gränssnitt när det behövs att läsa eller skriva krypterade data.
SecureMessageConsumer
Genomförandet kommer att ta emot krypterade meddelanden och återkommer klartext Svaren tillbaka till SecureChannelServer. Det är helt agnostiker hur meddelandet var dekrypteras eller hur det mottogs.
Denna design strategi gör det mycket enkelt att utveckla och testa SecureChannelServer. Om du tittar in core-firmware/bibliotek/garage/tester, hittar du övningsprov implementeringar av båda gränssnitten, vilket gjorde det möjligt för mig att skriva och felsöka all krypto kod utan något behov av hårdvara eller ens nätverk.
WiFiCommunicationChannel Klass
Hanterar detaljerna i anslutning kärnan till WiFi, hantera en TCP/IP server på port 6666 och hantera klientanslutningar. Detta är den klass som pingar testservern varje minut för att kontrollera anslutningen.
Garage Klass
Detta är vår implementering av gränssnittet SecureMessageConsumer . Det fungerar som garage dörren controller, hantering maskinvarunärmare Aktivera switchen, och läsa den dörr sensorn.
Hänvisas till UML-diagrammet för mer detaljer.