Hallo, ich versende UDP-Pakete zwischen zwei Arduinos welche jedoch nicht direkt verbunden sind sondern über Switches miteinander kommunizieren. Mir stellt sich nun die Frage wie ich diese Verbindung absichern könnte? Bei einer direkten Verbindung ist dies kein Problem da ich einfach alle 200ms ein Paket versenden würde auf welches der andere Arduino antwortet. Sollte die Verbindung unterbrochen werden erkennt dies der Arduino da keine Antwort erfolgt und schlägt Alarm. Bei einer Verbindung über Switches ist dieses Verfahren jedoch nicht mehr sicher, da ja jeder die MAC-Adresse faken könnte und eigene Pakete versenden könnte. Auch ein Angriff über ARP-Poisoning wäre denkbar.. Wie stelle ich zwischen Arduinos jetzt am besten eine sichere Verbindung her? LG Max
Du könntest aus den MAC Adressen der arduinos jeweils eine checksum bilden und im Datenstrom mitsenden. Vorausgesetzt, es sind beiden MCs immer beide MAC Adressen bekannt.
Athlon schrieb: > Du könntest aus den MAC Adressen der arduinos jeweils eine checksum > bilden und im Datenstrom mitsenden. Vorausgesetzt, es sind beiden MCs > immer beide MAC Adressen bekannt. Hallo, danke für deine Antwort! Das verstehe ich nicht, wenn ein Angreifer theoretisch den Switchcache vollschreibt und dieser in Folge als HUB agiert oder einen ARP-Poisioning Angriff startet kann dieser ja die Checksumme trotzdem lesen und in sein Angreiferpaket auch einfügen oder?
Faustregel: Definiere die Angriffstypen, vor denen du dich schützen möchtest. "Alles" ist unmöglich. Wenn du damit rechnest, dass das Netzwerk als ganzes kompromittiert ist, dann wirst du um harte Krypto nicht herumkommen, entweder indem du eine Art VPN benutzt, die Daten verschlüsselst oder zumindest signierst. Ob das mit den Arduinos angemessen gut funktionieren kann, weiß ich nicht.
Max E. schrieb: > Bei einer Verbindung über Switches ist dieses Verfahren jedoch nicht > mehr sicher, da ja jeder die MAC-Adresse faken könnte und eigene Pakete > versenden könnte. Das Problem ist eher umgekehrt: Sobald du ueber ein Level-3 -Device gehst (Router) ist die MAC-Adresse nicht mehr die gleiche.
Wie wärs mit einer OTP Verschlüsselung, jeder Arduino bekommt eine SD Karte, Flash o.Ä. mit dem Schlüssel.
S. R. schrieb: > Faustregel: Definiere die Angriffstypen, vor denen du dich > schützen > möchtest. "Alles" ist unmöglich. > > Wenn du damit rechnest, dass das Netzwerk als ganzes kompromittiert ist, > dann wirst du um harte Krypto nicht herumkommen, entweder indem du eine > Art VPN benutzt, die Daten verschlüsselst oder zumindest signierst. Ob > das mit den Arduinos angemessen gut funktionieren kann, weiß ich nicht. Nun ja, man geht ja immer vom schlimmsten Standpunkt aus..:) Ich denke nicht das der Arduino stark genug für verschlüsselte TLS bzw. VPN Verbindungen ist..Was sagst du zu der eventuellen Lösung am Ende des Beitrags? olibert schrieb: > Max E. schrieb: >> Bei einer Verbindung über Switches ist dieses Verfahren jedoch nicht >> mehr sicher, da ja jeder die MAC-Adresse faken könnte und eigene Pakete >> versenden könnte. > > Das Problem ist eher umgekehrt: Sobald du ueber ein Level-3 -Device > gehst (Router) ist die MAC-Adresse nicht mehr die gleiche. Was? Die MAC-Adresse der Arduinos bleibt immer gleich, egal ob Router oder nicht. Kathi schrieb: > Wie wärs mit einer OTP Verschlüsselung, jeder Arduino bekommt eine SD > Karte, Flash o.Ä. mit dem Schlüssel. Dies könnte die Lösung sein. Wenn ich den Arduino automatisch alle 200ms ein Paket senden lasse welches ein mit einem Hash verschlüsselt wurde und als Inhalt mit jedem Paket eine aufsteigende Zahl sendet und dem zweiten Arduino einen Zähler programmiere welcher die Zahl des Datenpakets mit dem internen Zähler vergleicht könnte dies klappen oder irre ich mich? Die verschlüsselten Datenpakete könne zwar auch abgefangen, gespeichert werden und nachträglich gesendet werden jedoch ist der Aufwand doch höher als im Klartext. Oder denkt ihr das dies zu einfach zu durchschauen ist?
:
Bearbeitet durch User
Du könntest dich an Keeloq anhängen. Soweit ich weiß ist es relativ schwer knackbar (es ist nur eine SideChannel Attacke bekannt: http://de.wikipedia.org/wiki/Keeloq) Hier hab ich auch noch etwas Sourcecode gefunden: http://www.pittnerovi.com/jiri/hobby/electronics/keeloq/ Gruß Roland
Um es richtig zu machen, könnte man hinter beide Arduinos jeweils VPN-Router setzen, die den Datenstrom verschlüsseln. Kryptographie auf 8-Bittern mit nur 2K Ram würde ich nicht machen wollen. Da bleibt ja kaum Platz und Rechenzeit für die eigentliche Anwendung.
Gibt es Arduino auch mit xmega? Die haben ein AES-Einheit in hardware. Das würde das Ver- und Entschlüsseln schon mal massiv beschleunigen. Gruß Jonas
Für eine reine Authentifizierung scheint mir das alles ein wenig heftig ... Es ist einfacher ein Kennwort festzulegen, dieses an die Message anzuhängen, eine sichere Checksumme mit allem herstellen und das Kennwort einfach nicht mitzusenden. Der Empfänger hängt das Kennwort wieder an und siehe da - nur wenn das Kennwort bekannt ist, ist das Paket echt.
Kuk dir ab wie es Funkschlüssel für PKWs machen. Da ist meistens ein LFSR drinnen das mit einem definierten Wert geladen wird. Bei jedem Senden wird dann ein Schritt weiter gezählt. Damit ist jede Nachricht nur so lange gültig bis eine neuere Nachricht kommt. Damit man den Code auch öffentlich machen kann kannst du ja das Generator-Polynom aus einem (vom user eingegebenen) Passcode berechnen. Der Rechenaufwand ist minimal (die Funkschlüssel in Autos haben einen lächerlich kleinen µC) und es ist sehr schwer den nächsten Key zu raten. Wenn es für Autos mit Wert von ein paar zigtausend € gut genug ist, dann reicht es auch für einen Arduino....
:
Bearbeitet durch User
> Der Rechenaufwand ist minimal (die Funkschlüssel in Autos haben einen
lächerlich kleinen µC) und es ist sehr schwer den nächsten Key zu raten.
Kommt drauf an wie oft gesendet wird. Je häufiger ich die selben Daten
sende desdo unsicherer wird es.
Ellen Moore schrieb: >> Der Rechenaufwand ist minimal (die Funkschlüssel in Autos haben einen > lächerlich kleinen µC) und es ist sehr schwer den nächsten Key zu raten. > > Kommt drauf an wie oft gesendet wird. Je häufiger ich die selben Daten > sende desdo unsicherer wird es. Und da ein LFSR ein lineares System ist, braucht es nicht viel. Selbst für den Autoschlüssel gibt es schon besseres: http://www.atmel.com/Images/Atmel-2600-AVR411-Secure-Rolling-Code-Algorithm-for-Wireless-Link_Application-Note.pdf ATiny als Sender impmenetiert AES basierender HMAC. (2.6 kByte Code)
Max E. schrieb: >> Das Problem ist eher umgekehrt: Sobald du ueber ein Level-3 -Device >> gehst (Router) ist die MAC-Adresse nicht mehr die gleiche. > > Was? Die MAC-Adresse der Arduinos bleibt immer gleich, egal ob Router > oder nicht. Die MAC-Adressen sind nur innerhalb einer Broadcast Domain von Bedeutung. Wird ein UDP-Paket zB über PPP übertragen, wird der Ethernet-Header nicht mit übertragen. Hast Du einen Rechner mit zwei Ethernet-Interfaces, der IP-Pakete von einem Interface zum anderen routet, wird die Mac-Adresse nicht mit übertragen. Der Router setzt hier seine eigene ein. fchk
Deswegen gibt es ja IP-Adressen und das ARP-Protokol innerhalb der Broadcast Domäne?
Max E. schrieb: > ich versende UDP-Pakete zwischen zwei Arduinos welche jedoch nicht > direkt verbunden sind sondern über Switches miteinander kommunizieren. > > Mir stellt sich nun die Frage wie ich diese Verbindung absichern könnte? Definiere "absichern"! Bevor man über eine Absicherungsmaßnahme nachdenken kann, muß man erstmal wissen wovor man sich absichern will. > Wie stelle ich zwischen Arduinos jetzt am besten eine sichere > Verbindung her? Gegenfrage: warum glaubst du, gibt es Netzwerkprotokolle wie TCP und darauf aufbauend z.B. HTTPS? Dein Anspruch, mit UDP eine "sichere" Netzwerkverbindung aufzubauen, ist in etwa so sinnvoll, wie über Postkarten ein vertrauliches Gespräch zu führen.
Max E. schrieb: >> Das Problem ist eher umgekehrt: Sobald du ueber ein Level-3 -Device >> gehst (Router) ist die MAC-Adresse nicht mehr die gleiche. > > Was? Die MAC-Adresse der Arduinos bleibt immer gleich, egal ob Router > oder nicht. Hier fehlen offensichtlich Netzwerktechnik-Grundlagen. Warum sollte ein Router die urspruengliche MAC-Adresse durchreichen ?
jonas biensack schrieb: > Gibt es Arduino auch mit xmega? Nein, aber mit Cortex-M3 (Arduino Due - Atmel Sam3x8e) Alternativ: Draufgeschissen auf die Arduino kacke. STM32F4 Discovery - da bekommst du 2 boards zum preis von einem arduino, deutlich mehr leistung, ram usw. und ne crypto/hasheinehit hat das ding auch. Ich habe ein Problem damit, zu verstehen was der TO moechte: Max E. schrieb: > Mir stellt sich nun die Frage wie ich diese Verbindung absichern könnte? Absichern gegen was genau? Max E. schrieb: > Sollte die Verbindung unterbrochen werden Das ist aber etwas voellig anderes als das: > Das verstehe ich nicht, wenn ein Angreifer theoretisch den Switchcache > vollschreibt und dieser in Folge als HUB agiert oder einen > ARP-Poisioning Angriff startet kann dieser ja die Checksumme trotzdem > lesen und in sein Angreiferpaket auch einfügen oder? Was genau willst du denn jetzt? Das sind 2 paar Schuhe und die haben nichts mit ein ander zu tun. Max E. schrieb: > UDP-Pakete [...] Verbindung absichern Von hinten durch die Brust in's Auge... da passt was vorne und hinten nicht.
Max D. schrieb: > Da ist meistens ein LFSR drinnen das mit einem definierten Wert geladen > wird. > Bei jedem Senden wird dann ein Schritt weiter gezählt. Bedeutet UDP nicht: - jedes Paket kann anders geroutet werden - die Reihenfolge der empfangenen Pakete kann sich ändern gegenüber der gesendeten Reihenfolge - Pakete können verloren gehen Ich denke, alls dies müßte bei der Überlegung berücksichtigt werden. Klar, im beschriebenen Szenario klingt alles noch sehr lokal und das passt das schon. Doch irgendwann überlegt man sich, das Internet dazwischenzuschalten...
olibert schrieb: > Max E. schrieb: >>> Das Problem ist eher umgekehrt: Sobald du ueber ein Level-3 -Device >>> gehst (Router) ist die MAC-Adresse nicht mehr die gleiche. >> >> Was? Die MAC-Adresse der Arduinos bleibt immer gleich, egal ob Router >> oder nicht. > > Hier fehlen offensichtlich Netzwerktechnik-Grundlagen. Warum sollte ein > Router die urspruengliche MAC-Adresse durchreichen ? Hier liegt offensichtlich ein Mißverständnis vor. Natürlich behalten die Arduinos ihre MAC-Adressen, aber in den Ethernet-Paketen stehen sie nicht mehr drin, sobald mindestens ein Router dazwischen steckt. Aber das ist auch egal, die MAC-Adressen schützen nicht gegen einen Angreifer, der seine eigene Netzwerkkarte einigermaßen unter Kontrolle hat. Schützen kann nur ein Geheimnis, das beide Arduinos kennen und der Angreifer nicht. Das Geheimnis verwendet man dann als Schlüssel für einen keyed hash, mit dem die Nachrichten "signiert" werden. Und gegen diverse replay- und Verzögerungsangriffe hilft am besten ein Challenge-Response-Verfahren: eine Seite denkt sich eine Zufallszahl aus, schickt sie an die Gegenseite, und die baut diese Zahl in ihre Antwort ein (natürlich mit dem Hash gesichert). Dann weiß der Empfänger, daß die Antwort "frisch" ist, d.h. höchstens so alt wie die Zufallszahl. Das Problem dabei ist, daß ein richtiger Hash für einen AVR ein etwas dicker Brocken ist (geht zwar, aber eben nicht so einfach nebenbei). Da kann man versuchen, auf der Grundlage eines symmetrischen Verschlüsselungsalgorithmus etwas zu basteln, aber das ist kniffelig, wenn die Nachricht länger als die Blockgröße des Algorithmus ist. Außerdem ist ein AES für den AVR immer noch ein dicker Brocken (wenn auch nicht so dick wie ein Hash). Dann nimmt man einen anderen Algorithmus, z.B. XTEA, aber der hat dann wieder eine kleinere Blockgröße...
Für eine sichere Datenübertragung ist bei UDP die jeweilige Anwendung zuständig. Ein TCP mit kastrierten Kontrollfunktionen welche du wieder hinzufügst? UDPS, spannend
schon bitter zu sehen wie hilflos hier einige sind wenns um sicherheit geht... HMAC reicht doch für das was er fordert?! und das bekommt man mit nem atmega locker hin
.... schrieb: > schon bitter zu sehen wie hilflos hier einige sind wenns um sicherheit > geht... HMAC reicht doch für das was er fordert?! und das bekommt man > mit nem atmega locker hin Ja das geht locker, siehe dazu auch meinen Link auf eine Atmel APP Note weiter oben. Aber ein HMAC alleine schützt nicht vor Replay Attacken. Wenn das eine Anforderung ist wirds halt komplizierter, da bei UDP die Reihenfolge nicht 100% garantiert werden kann.
Lattice User schrieb: > Aber ein HMAC alleine schützt nicht vor Replay Attacken. Wenn das eine > Anforderung ist wirds halt komplizierter, da bei UDP die Reihenfolge > nicht 100% garantiert werden kann. Die Frage ist ob er überhaupt mehre Pakete abschickt. Wenn er nach jedem Paket auf eine Antwort wartet, dann kann sich auch die Reihenfolge nicht ändern, weil es immer nur ein paket gibt.
Axel Schwenke schrieb: > Definiere "absichern"! Bevor man über eine Absicherungsmaßnahme > nachdenken kann, muß man erstmal wissen wovor man sich absichern will. > Das habe ich doch beschrieben. Es soll wenn jemand aus irgendeinem Grund die Datenpakete zwischen den beiden Arduinos abfängt nicht möglich sein Rückschlüsse auf den Paketinhalt zu schließen. > > Gegenfrage: warum glaubst du, gibt es Netzwerkprotokolle wie TCP und > darauf aufbauend z.B. HTTPS? Um ein Standardprotokoll für viele Enduser zu haben. > > Dein Anspruch, mit UDP eine "sichere" Netzwerkverbindung aufzubauen, ist > in etwa so sinnvoll, wie über Postkarten ein vertrauliches Gespräch zu > führen. Nun ja, es ist mir klar das UDP natürlich Übertragungstechnisch einige Nachteile gegenüber TCP hat, jedoch sind diese in einem Lokalen Netzwerk zu vernachlässigen. Kaj schrieb: > Max E. schrieb: > Das ist aber etwas voellig anderes als das: >> Das verstehe ich nicht, wenn ein Angreifer theoretisch den Switchcache >> vollschreibt und dieser in Folge als HUB agiert oder einen >> ARP-Poisioning Angriff startet kann dieser ja die Checksumme trotzdem >> lesen und in sein Angreiferpaket auch einfügen oder? > Was genau willst du denn jetzt? > Das sind 2 paar Schuhe und die haben nichts mit ein ander zu tun. Nein sind SIE nicht, beide Angriffe haben zur Folge das die Datenpakete zwischen den Arduinos gelesen werden können, Darum gehts.
Lattice User schrieb: > Aber ein HMAC alleine schützt nicht vor Replay Attacken. Wenn das eine > Anforderung ist wirds halt komplizierter, da bei UDP die Reihenfolge > nicht 100% garantiert werden kann. Noch ein kleines Challenge-Response-Verfahren drumherum gebastelt und man ist auf der sicheren Seite. Bei geschicktem Design des Protokolls wäre dann die Nachrichtenreihenfolge egal. Wenn man nicht zwingend State-of-the-Art-Krypto benötigt kann man auch darüber nachdenken "kleine" Algorithmen wie z.B. XXTEA-Verschlüsselung als MAC zu missbrauchen. In "professionellen" bzw. sicherheitskritischen Anwendungen wäre das natürlich ein No-Go. Bin gerade auf dem Weg heim, werde schauen, dass ich nachher mal einen kleinen Vorschlag für eine Lösung skizziere.
:
Bearbeitet durch User
Max E. schrieb: >> Definiere "absichern"! Bevor man über eine Absicherungsmaßnahme >> nachdenken kann, muß man erstmal wissen wovor man sich absichern will. >> > Das habe ich doch beschrieben. Es soll wenn jemand aus irgendeinem Grund > die Datenpakete zwischen den beiden Arduinos abfängt nicht möglich sein > Rückschlüsse auf den Paketinhalt zu schließen. Ok, das ist jetzt neu. Nun, gegen unbefugte Mitleser hilft natürlich Verschlüsseln. Meist will man außerdem, daß der Angreifer nicht erkennt, wenn man die gleiche Nachricht noch einmal sendet (oder Nachrichten teilweise übereinstimmen), also sollte jede Nachricht einen Zähler oder so etwas enthalten (damit der Klartext inhaltsgleicher Nachrichten sich unterscheidet), und ein Blockalgorithmus im ECB-Modus verbietet sich auch (weil dann gleiche Schlüsseltextblöcke für gleiche Klartextblöcke stehen würden). Der IPsec-Standard war mal für genau solche Anwendungen gedacht. Irgendein Blockalgorithmus im CBC-Modus, als IV nimmt man den letzten verschlüsselten Block vom vorigen Paket. Nachteil ist, daß man den IV ausdrücklich mitschicken muß, die Pakete werden also alle um eine Blockgröße länger.
Lattice User schrieb: > Aber ein HMAC alleine schützt nicht vor Replay Attacken. Wenn das eine > Anforderung ist wirds halt komplizierter, da bei UDP die Reihenfolge > nicht 100% garantiert werden kann. Wenn er ne sequenznummer hat und die vom hmac mit geschützt is?
Lattice User schrieb: > Aber ein HMAC alleine schützt nicht vor Replay Attacken. Wenn das eine > Anforderung ist wirds halt komplizierter, da bei UDP die Reihenfolge > nicht 100% garantiert werden kann. Also sich nicht wiederholende Nonce/IV ist doch absoluter Standard, jedenfalls bei seriöser Kryptographie. BTW: warum HMAC/CBC/usw? Einfach OCB nehmen, das macht beides!
.... schrieb: > Lattice User schrieb: >> Aber ein HMAC alleine schützt nicht vor Replay Attacken. Wenn das eine >> Anforderung ist wirds halt komplizierter, da bei UDP die Reihenfolge >> nicht 100% garantiert werden kann. > > Wenn er ne sequenznummer hat und die vom hmac mit geschützt is? Vorrausgestzt diese Sequenznummer zählt auch über Neustarts hinweg, d.h. beide Seiten müssen sie ständig in einen nichtflüchtigen Speicher ablegen.
Lattice User schrieb: > Patentverseucht. 1. in den USA 2. für Open-Source-Software und/oder nichtkommerzielle Zwecke gibt es eine unbegrenzte, kostenlose Patentlizenz 3. ansonsten nett fragen, der Patentinhaber ist kein Patent-Troll 4. für Hobbyisten völlig egal 5. who cares :) Siehe http://web.cs.ucdavis.edu/~rogaway/ocb/license.htm
Max E. schrieb: > Axel Schwenke schrieb: > >> Definiere "absichern"! Bevor man über eine Absicherungsmaßnahme >> nachdenken kann, muß man erstmal wissen wovor man sich absichern will. > > Das habe ich doch beschrieben. Es soll wenn jemand aus irgendeinem Grund > die Datenpakete zwischen den beiden Arduinos abfängt nicht möglich sein > Rückschlüsse auf den Paketinhalt zu schließen. Nein, das hast du oben nicht so beschrieben. Da ging es dir darum, daß niemand eigene Pakete einschleusen kann: Max E. schrieb: > ... ist dieses Verfahren jedoch nicht > mehr sicher, da ja jeder die MAC-Adresse faken könnte und eigene Pakete > versenden könnte. Und irgendwie ging es auch noch um verlorene Pakete. Solange du nicht genau spezifizierst, gegen welche Art von Angriff du dich absichern willst, so lange kann dir auch keiner eine fundierte Antwort geben. >> Gegenfrage: warum glaubst du, gibt es Netzwerkprotokolle wie TCP und >> darauf aufbauend z.B. HTTPS? > > Um ein Standardprotokoll für viele Enduser zu haben. Das auch. Vor allem aber, um einige der angeführten Probleme zu lösen. TCP kümmert sich z.B. um verlorene Pakete. SSL/TLS (als Basis von HTTPS) erlaubt die zuverlässige Identifikation beider Endpunkte und verschlüsselt versendete Inhalte. Es schützt (wenn korrekt verwendet) also sowohl vor passiven Mitlesern als auch vor aktiven Störern, die z.B. versuchen ihre eigenen Pakete einzuschleusen. >> Dein Anspruch, mit UDP eine "sichere" Netzwerkverbindung aufzubauen, ist >> in etwa so sinnvoll, wie über Postkarten ein vertrauliches Gespräch zu >> führen. > > Nun ja, es ist mir klar das UDP natürlich Übertragungstechnisch einige > Nachteile gegenüber TCP hat, jedoch sind diese in einem Lokalen Netzwerk > zu vernachlässigen. Ach ja? Ist dir noch nicht aufgefallen, daß zumindest einige deiner Probleme genau von TCP adressiert werden? Und wieder andere von auf TCP aufbauenden Protokollen? Was soll vor diesem Hintergrund nochmal der Vorteil von UDP sein? XL
Um welche Datenmengen je 200ms geht es eigentlich? Für nur wenigen Byte (Licht an/aus) sind viele der beschriebenen Verfahren nicht optimiert.
Max E. schrieb: > Nun ja, man geht ja immer vom schlimmsten Standpunkt aus..:) Nein, geht man nicht. Am Ende steht eine Kostenabwägung zwischen "was kostet der zusätzliche Schutz" und "was ist der schlimmste zu erwartende Verlust, wenn der bereits vorhandene Schutz versagt". > Ich denke nicht das der Arduino stark genug für verschlüsselte TLS bzw. > VPN Verbindungen ist..Was sagst du zu der eventuellen Lösung am Ende des > Beitrags? Soweit ich das verstehe, willst du dich schützen vor: - kaputten/verzögerten Paketen - eingeschleusten Paketen - Mithörern (- zusätzlich physischen Zugriff?) Was noch? Du spezifizierst das nie! Hier ein Bröckchen, da ein Bröckchen, "am besten ALLES" ist eben nicht die richtige Vorgehensweise! (Und wissenschaftlich schonmal garnicht.) Zusätzlich wird es nochmal schwieriger, wenn du immer wieder die gleichen Daten regelmäßig überträgst (z.B. ein Sensor, wenn sich der Wert nicht ändert). Wenn du dich vor allen Angriffen schützen willst, dann kannst du deinen Arduino wegwerfen, weil ordentlich harte, (asymmetrische) Krypto in schnell und klein macht der nicht. Definiere die Szenarien, dann findet man auch Lösungen. Definiere keine Szenarien und die Lösung lautet "stell einen PC daneben, der ein VPN baut".
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.