banner left Boxtec Banner
Platzhalter BoxtecProdukteForumShopKontaktPlaygroundn/aJobs
 

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

mqtt:start [2017/01/27 16:41]
boxtec [Nachrichten signieren mit ECDSA]
mqtt:start [2017/01/27 21:39] (current)
boxtec [Nachrichten signieren mit ECDSA]
Line 1: Line 1:
-<block 40:0:white;red;4px solid #0000FF;arial,sans-serif/12pt;>Work in progress!</block> 
 {{ :undefined:mosquitto-logo-only.png?100 |Mosquitto Logo}} {{ :undefined:mosquitto-logo-only.png?100 |Mosquitto Logo}}
-====== MQTT message broker ======+====== Mosquitto MQTT message broker ======
 Das [[wpde>MQTT]] Nachrichtenprotokoll ermöglicht den Austausch von Nachrichten resp. Telemetriedaten zwischen Geräten. Im Open Source Bereich ist MQTT mittlerweile synonym mit der [[https://mosquitto.org/|Mosquitto MQTT Software Suite]]. Das [[wpde>MQTT]] Nachrichtenprotokoll ermöglicht den Austausch von Nachrichten resp. Telemetriedaten zwischen Geräten. Im Open Source Bereich ist MQTT mittlerweile synonym mit der [[https://mosquitto.org/|Mosquitto MQTT Software Suite]].
  
Line 9: Line 8:
  
 ===== Broker (Server) ===== ===== Broker (Server) =====
-Als Message Broker (Server) wird bisher fast ausschliesslich mosquitto eingesetzt. Zum momentanten Zeitpunkt in der Version 1.4.10 erhältlich. Da die Software zurzeit noch erhebliche Entwicklungsschritte erfährt, ist es auch für Linux User sinnvoll sich nicht auf die Pakete der Distribution zu verlassen, sondern die aktuelle Version herunterzuladen und zu kompilieren.+Als Message Broker (Server) wird bisher fast ausschliesslich Mosquitto eingesetzt. Zum momentanten Zeitpunkt in der Version 1.4.10 erhältlich. Da die Software zurzeit noch erhebliche Entwicklungsschritte erfährt, ist es auch für Linux User sinnvoll sich nicht auf die Pakete der Distribution zu verlassen, sondern die aktuelle Version herunterzuladen und zu kompilieren.
  
 ==== Mosquitto aus Quellen installieren ==== ==== Mosquitto aus Quellen installieren ====
Line 41: Line 40:
  
 ==== Mosquitto konfigurieren (Broker/Server) ==== ==== Mosquitto konfigurieren (Broker/Server) ====
-Damit wir den mosquitto Server als broker starten können, müsssen wir noch ein paar Kleinigkeiten konfigurieren:+Damit wir den Mosquitto Server als broker starten können, müsssen wir noch ein paar Kleinigkeiten konfigurieren:
  
-Einen User für mosquitto anlegen (soll ja nicht als root laufen..):+Einen User für Mosquitto anlegen (soll ja nicht als root laufen..):
 <code bash> <code bash>
 adduser --disabled-password mosquitto adduser --disabled-password mosquitto
Line 69: Line 68:
  
 ==== Einfacher Sub/Pub Test ==== ==== Einfacher Sub/Pub Test ====
-Nach dem der Server auf dem gleichen Rechner wie unter [[#mosquitto_konfigurieren_brokerserver|Mosquitto konfigurieren]] beschrieben läuft, können wir mit einem Client lauschen und mit einem anderen eine Nachricht senden. Am besten geht das mit zwei Terminalfenster nebeneinander.+Nach dem der Server auf dem gleichen Rechner wie unter [[#mosquitto_konfigurieren_brokerserver|Mosquitto konfigurieren]] beschrieben läuft, können wir mit einem Client lauschen und mit einem anderen eine Nachricht senden. Am besten geht das mit zwei Terminalfenstern nebeneinander.
  
 Im ersten Fenster subscriben wir auf alles (#): Im ersten Fenster subscriben wir auf alles (#):
Line 89: Line 88:
 ===== Weitere Schritte (things to try) ===== ===== Weitere Schritte (things to try) =====
 ==== Verbindung über Netzwerk ==== ==== Verbindung über Netzwerk ====
-Unser Demo mosquitto Server kann natürlich auch über das Netzwerk erreicht werden, dazu ist einfach beim Aufruf von mosquitto_sub resp. mosquitto_pub der Aufruf um ''-h hostname/ip'' zu erweitern:+Unser Demo Mosquitto Server kann natürlich auch über das Netzwerk erreicht werden, dazu ist einfach beim Aufruf von mosquitto_sub resp. mosquitto_pub der Aufruf um ''-h hostname/ip'' zu erweitern:
  
 <code bash> <code bash>
Line 99: Line 98:
 </code> </code>
  
-Wenn die IP Adresse des mosquitto server 192.0.2.25((https://tools.ietf.org/html/rfc5737)) ist.+Wenn die IP Adresse des Mosquitto server 192.0.2.25((https://tools.ietf.org/html/rfc5737)) ist.
  
  
Line 105: Line 104:
 Eine der Stärken von Unix ist unter anderem das Piping. Das bedeutet, dass wir die Ausgabe eines Programmes als Eingabe für ein anderes Programm verwenden könen und umgekehrt. Eine der Stärken von Unix ist unter anderem das Piping. Das bedeutet, dass wir die Ausgabe eines Programmes als Eingabe für ein anderes Programm verwenden könen und umgekehrt.
  
-Im Zusammenhang mit mosquitto ergeben sich daraus viele interessante Möglichkeiten, hier nur mal ein paar exemplarische Anregungen:+Im Zusammenhang mit Mosquitto ergeben sich daraus viele interessante Möglichkeiten, hier nur mal ein paar exemplarische Anregungen:
  
 === Logfile überwachen === === Logfile überwachen ===
Line 114: Line 113:
  
 === Statusmeldungen als Bildschirm Overlay ausgeben === === Statusmeldungen als Bildschirm Overlay ausgeben ===
-Mit aosd_cat((Paket **aosd-cat** in Debian-basierenden Distributionen)) kann man einfach Texte als Bildschirm Overlay ausgeben.+Mit aosd_cat((Paket **aosd-cat** in Debian-basierenden Distributionen)) kann man einfach Texte als Bildschirm Overlay ausgeben:
  
 <code bash> <code bash>
Line 147: Line 146:
 </file> </file>
  
-Nun kann dass password_file mit folgendem Befehl angelegt und ein erter User //testuser// erzeugt werden:+Nun kann dass password_file mit folgendem Befehl angelegt und ein erster User //testuser// erzeugt werden:
 <code bash> <code bash>
 sudo mosquitto_passwd -c /etc/mosquitto/mqtt_passwd testuser sudo mosquitto_passwd -c /etc/mosquitto/mqtt_passwd testuser
 </code> </code>
  
-Diese User können nun mit ACLs verwendet werden.+Diese User können nun zur Zugriffsteuerung mit ACLs verwendet werden.
 ==== ACL ==== ==== ACL ====
 Mosquitto bietet eingeschränkte Möglichkeiten zur Zugriffsbeschränkung mit der Konfiguration einer externen ACL((Access Control Lists)) Datei in der Mosquitto Konfiguration, z.B.: Mosquitto bietet eingeschränkte Möglichkeiten zur Zugriffsbeschränkung mit der Konfiguration einer externen ACL((Access Control Lists)) Datei in der Mosquitto Konfiguration, z.B.:
Line 245: Line 244:
  
 ==== Nachrichten signieren mit ECDSA ==== ==== Nachrichten signieren mit ECDSA ====
-Nachrichten die über Mosquitto nach dem MQTT Standard versendet werden, können unterwegs durch einen Angreifer recht problemlos verändert werden. Während man sicher damit leben kann, wenn der experimentelle Temperatursensor auf dem Tisch 0.5° höhere Werte meldet als er eigentlich hat. Wenn man aber z.B. über eine solche Nachricht grosse Lasten schaltet, sagen wir doch mal eine Sprinkler-Anlage, einen externen Alarm etc., dann gewinnt die Frage ob das Signal auch wirklich von dort kommt wo es vorgibt herzukommen an erheblichem Gewicht.+Nachrichten die über Mosquitto nach dem MQTT Standard versendet werden, können unterwegs durch einen Angreifer recht problemlos verändert werden. Man kann sicher damit leben, wenn der experimentelle Temperatursensor auf dem Tisch 0.5° höhere Werte meldet als er eigentlich hat. Wenn man aber z.B. über eine solche Nachricht z.B. Lasten schaltet, sagen wir doch mal eine Sprinkler-Anlage, einen externen Alarm etc., dann gewinnt die Frage ob das Signal auch wirklich von dort kommt wo es vorgibt herzukommen und man dem Inhalt der Nachricht trauen kann an erheblichem Gewicht.
  
-Für unser Beispiel haben wir uns für eine digitale Signatur mit einem digitalen Signatur Algortithmus((DSA)) auf Basis der [[wpde>Elliptic_Curve_Cryptography|Elliptische-Kurven-Kryptographie]]. Elliptische Kurven bieten im Gegensatz zu anderer Public Key Kryptographie bei viel geringerer Schlüsselgrösse viel höhere Sicherheit bietet.+Für unser Beispiel haben wir uns für eine digitale Signatur mit einem digitalen Signatur Algortithmus((DSA)) auf Basis der [[wpde>Elliptic_Curve_Cryptography|Elliptische-Kurven-Kryptographie]] entschieden. Elliptische Kurven bieten im Gegensatz zu anderer Public Key Kryptographie bei viel geringerer Schlüsselgrösse viel höhere Sicherheit.
  
 Als Parametrisierungs-Standard haben wir uns für //secp256k1((https://en.bitcoin.it/wiki/Secp256k1))// entschieden. Der Standard //secp256k1// bietet eine schnelle Berechnung bei angemessener Sicherheit und er wird unter anderem auch für Bitcoin und die meisten alternativen Kryptowährungen eingesetzt (damit sind um 15 Mia USD gesichert, was man als recht wirkungsvolle Bug-Bounty ansehen kann). Als Parametrisierungs-Standard haben wir uns für //secp256k1((https://en.bitcoin.it/wiki/Secp256k1))// entschieden. Der Standard //secp256k1// bietet eine schnelle Berechnung bei angemessener Sicherheit und er wird unter anderem auch für Bitcoin und die meisten alternativen Kryptowährungen eingesetzt (damit sind um 15 Mia USD gesichert, was man als recht wirkungsvolle Bug-Bounty ansehen kann).
Line 344: Line 343:
 </code> </code>
  
-Der Sender sendet mit jeder Sendung eine Timestamp, um Replay-Angriffe zu erschwerden, wird vom Empfänger jeweils nur ein nächstes Paket mit einer grösseren Timestamp akzeptiert. Pakete mit gültiger Signatur und gleichhohem oder kleineren Timestamp werden verworfen.+Der Sender sendet mit jeder Sendung eine Timestamp. Um Replay-Angriffe zu erschwerden, wird vom Empfänger jeweils nur ein nächstes Paket mit einer grösseren Timestamp akzeptiert. Pakete mit gültiger Signatur und gleichhohem oder kleineren Timestamp werden verworfen. 
 + 
 +Der Demo Code obige ist jenseits einer brauchbaren Implementation, zeigt aber auf wie einfach übertragene Nachrichten sicher signiert werden können. 
 + 
 + 
 +===== Fragen, Anregungen, Kommentare ===== 
 +Für Anmerkungen, Vorschläge und Korrekturen sind wir sehr dankbar, Fragen beantworten wir im Rahmen unserer Möglichkeiten gerne, bitte postet dazu in das entsprechende Forum Thema unter: 
 + 
 +http://forum.boxtec.ch/index.php/topic,3216.0.html
  
-Der obige ist jenseits einer brauchbaren Implementation, zeigt aber auf wie einfach übertragene Nachrichten sicher signiert werden können. 
 
mqtt/start.txt · Last modified: 2017/01/27 21:39 by boxtec
 
 

zum Seitenanfang

Letzte Aktualisierung: © boxtec internet appliances · the better security products