© Excellent backgrounds/Shutterstock.com
MQTT-Security

Daten austauschen - aber sicher!


In den letzten beiden Teilen der Artikelserie wurde gezeigt, wie wichtig eine verschlüsselte Übertragung bei MQTT in Produktionsumgebungen ist, und es wurden neben Authentifizierungs- und Autorisierungsmechanismen fortgeschrittene Konzepte wie OAuth 2.0 und X.509-Clientzertifikat-Authentifizierung diskutiert. Doch wie kann man den Inhalt von MQTT-Nachrichten vor Manipulation schützen, falls keine verschlüsselte Kommunikation möglich ist?

Dieser letzte Teil der Artikelserie zeigt, wie man den Nachrichteninhalt von MQTT verschlüsseln kann, wie eine Datenintegritätsprüfung implementiert werden kann und diskutiert zusätzlich, welche Herausforderungen bei ressourcenbeschränkten Geräten in Sachen Sicherheit mit MQTT gelöst werden sollten.

Wenn keine verschlüsselte Verbindung eines MQTT-Clients mit dem MQTT Broker möglich ist, lohnt es sich, die Nutzdaten zu verschlüsseln. Was ist Nutzdatenverschlüsselung im Kontext von MQTT überhaupt? Man unterscheidet klassischerweise zwischen zwei Arten der Verschlüsselung: Ende-zu-Ende-Verschlüsselung (E2E Encryption) und Client-to-Broker-Verschlüsselung.

Bei beiden Arten der Verschlüsselung wird nur der Inhalt der Nachricht verschlüsselt, Metadaten wie etwa das Topic einer MQTT-Nachricht werden nicht verschlüsselt, da diese Information vom Broker für das Routing der Nachrichten verwendet wird. Es kann daher trotz Verschlüsselung aller Daten immer noch möglich sein, dass Angreifer zwar nicht den Inhalt der Nachrichten kennen, jedoch analysieren könnten, welche Topics im System aktiv sind.

Ende zu Ende verschlüsseln

Mit der Ende-zu-Ende-Verschlüsselung wird der Inhalt eines MQTT-PUBLISH-Pakets vor nicht vertrauenswürdigen Subscribern geschützt. Meist wird diese Technik angewandt, falls es für einen MQTT-Client nicht möglich ist, eine verschlüsselte Verbindung via TLS mit einem MQTT Broker herzustellen und wenn andere MQTT-Clients ebenfalls keine verschlüsselte Verbindung zum Broker aufbauen können. Besonders sinnvoll ist E2E-Verschlüsselung, wenn sich nicht vertrauenswürdige MQTT-Clients am Broker verbinden können, falls z. B. keine Authentifizierung implementiert ist. Die gesendeten Nutzdaten eines Clients (also die sogenannte Payload einer MQTT-PUBLISH-Nachricht) werden dabei auf Clientseite mit einem synchronen oder asynchronen Verschlüsselungsverfahren verschlüsselt. Der Inhalt der Nachricht ist damit vor nicht vertrauenswürdigen Subscriber-Clients (die den privaten Schlüssel nicht kennen) geschützt, da diese die Nachricht ohne den Schlüssel nicht entschlüsseln können. Abbildung 1 zeigt schematisch, wie eine Ende-zu-Ende-Verschlüsselung in einem MQTT-System aussehen kann.

obermaier_mqtt_1.tif_fmt1.jpgAbb. 1: Ende-zu-Ende-Verschlüsselung (schematisch)

Die E2E-Verschlüsselung ist dabei vom verwendeten Broker unabhängig und kann daher immer angewandt werden, egal welches MQTT-Broker-Produkt eingesetzt wird. Wichtig ist dabei, dass nur vertrauenswürdige MQTT-Clients Zugriff zum privaten Key oder Passwort für die Entschlüsselung haben. Dabei kann global ein einziger Schlüssel verwendet werden, oder es kann ein Schlüsselpaar pro Topic im System eingeführt werden. Letzteres ist komplexer zu implementieren, erlaubt jedoch, dass nicht jeder MQTT-Client Zugriff zu allen Schlüsse...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang