Während der Projektlaufzeit wurden 4 unabhängige Unterprojekte
bearbeitet.
Unterprojekt: Proof of Concept von Authorisierungsszenarien im IoT-
Umfeld
• Laufzeit: 2018/06-2018/09 (4 Monate)
• Rolle im Projekt: Entwickler, Architekt
• Technologie: Scala, Akka-HTTP, Scala.js, SBT, OAuth 2.0, OpenID
Connect, UMA 2.0, Keycloak
Detaillierte Beschreibung: Es wurden Nutzungsszenarien für EBikes
untersucht. Ein Fahrradbesitzer authorisiert mittels "User Managed Access"
(UMA) eine andere Person zur Nutzung des Fahrrads. Das Fahrrad wird
mittels OAuth 2.0 "Device Flow" authorisiert, auf Besitzer- und Nutzer-
Daten zuzugreifen. Verschiedene Nutzer authorisieren sich mittels UMA
gegenseitig, auf bestimmte Daten (z.B. aufgezeichnete Fahrten)
zuzugreifen.
Alle User-Interfaces wurden als "Single-Page Application" mittels Scala.js
umgesetzt. Das Backend (der Resource-Server) wurde mittels Akka-HTTP
implementiert. Die Kommunikation erfolgte mittels JSON und der circe-
JSON-Bibliothek, wodurch dieselben Datenmodelle sowohl in den User-
Interfaces als auch im Backend genutzt werden konnten.
Unterprojekt: Entwicklung eines Handshake-Endpunktes für IoT Devices
und eines zug. Konfigurationstools
• Laufzeit: 2018/03 - 2018/05 (3 Monate)
• Rolle im Projekt: Entwickler
• Technologie: Java, SpringBoot 1.5 / 2, Card Verifiable Certificates
(CVC), Certificate-Chains, EdDSA, Diffie-Hellman
Detaillierte Beschreibung: Mittels eines 2-Schritt-Handshakes wird ein
"shared secret" zwischen IoT-Devices und einem Backend etabliert und
beide Seiten zugleich authentisiert. Der Handshake ist an den Diffie-
Hellman Key-Exchange-Algorithmus angelehnt. Da es sich um
"Constrained Devices" handelt und um Bandbreite zu sparen, werden CVCs
und EdDSA-Schlüssel verwendet.
Unterprojekt: Bewertung möglicher Protokoll-Stacks,
Kommunikationspatterns, Kommunikationssetups und System-
Architekturen für IoT-Devices
• Laufzeit: 2018/01 - 2018/02 (2 Monate)
• Rolle im Projekt: Rechercheur, Entwickler, Tester
• Technologie: Scala, Eclipse Californium, UDP, DTLS, COAP(S), TCP, TLS, HTTP(S), LWM2M
Detaillierte Beschreibung: Die verschiedenen Protokoll-Stacks wurden
anhand der folgenden Kriterien bewertet: Direktheit, Sicherheit,
Zustandslosigkeit, Cloud-Support, Reifegrad, Kosten-Effizienz, Robustheit
und geeignete Nachrichtengrößen. Bei den Kommunikationspatterns wurde
untersucht, wie mit Devices kommuniziert werden kann, die die meiste
Zeit nicht erreichbar sind. Dabei wurde das Konzept "Digital Twin"
beleuchtet. Die Bewertung des Kommunikationssetup befasste sich damit,
wie eine sichere Kommunikation zwischen Devices und Backend hergestellt
werden kann. Hier wurden "pre-shared keys" bei denen Devices vorab im
System registriert werden müssen, mit der Verwendung von
Zertifikatsketten verglichen. Schließlich wurde eine Software-Architektur
aufgestellt, die dem Konzept des "Digital Twin" Rechnung trägt.
Unterprojekt: Anbindung von Devices an das Internet der Dinge (IoT)
• Laufzeit: 2015/04 - 2017/12 (33 Monate)
• Rolle im Projekt: Entwickler, Architekt
• Technologie: Scala, Akka, Streaming, Event Sourcing, MongoDB,
RabbitMQ, Redis, Docker, Cloud Foundry, ELK-Stack, Grafana, Kamon,
InfluxDB, LWM2M, Maven, SBT, Gatling
Detaillierte Beschreibung: Es wurde ein Backend zur Anbindung von
Devices entwickelt, die Status-Informationen senden (Telemetry) und
Befehle entgegennehmen können (Control). Die Devices sind nur zu
bestimmten Zeitpunkten erreichbar. Alle Events werden aufgezeichnet, um
daraus ein Bild vom momentanen Device Zustand ableiten zu können.
Das Backend ist in Form eines Flussgraphen implementiert, an das die Ein-
und Ausgaben als Daten-Sourcen bzw. -Senken angebunden sind.
Backpressure verhindert, dass das System überladen werden kann. Das
Backend kann in einer geclusterten Umgebung laufen, da zusätzliche
Instanzen ohne Datenverlust jederzeit gestartet und wieder beendet
werden können.
Die Implementierung des Backend basiert auf Akka Streams und Aktoren.
Außerdem kommen die Bibliotheken Shapeless, Cats und Monocle zum
Einsatz.
Kenntnisse: Scala, LWM2M, Streaming, Event Sourcing, UDP, DTLS, COAP, OAuth 2.0,
OpenID Connect, UMA 2.0
Eingesetzte Produkte: Akka, MongoDB, RabbitMQ, Redis, Docker, CloudFoundry, Elastic Search,
Logstash, Kibana, Grafana, InfluxDB, Maven, SBT, Keycloak, Kamon,
Gatling