Gründe, die MAC-Adresse des Geräts nicht anzunehmen, sind eindeutig


18

Gibt es in einem Szenario, in dem Sie die Bereitstellung der Hardware steuern und feststellen können, dass alle Geräte mit demselben Hardwaremodell tatsächlich eindeutige MAC-Adressen für ihre Netzwerkschnittstellen haben, Nachteile beim Schreiben von Code, der diese Annahme verwendet? (Hinweis basierend auf einigen Antworten: Ich werde mit dieser Annahme keinen Netzwerkcode schreiben. Es ist nur eine einfache Möglichkeit, eine UUID pro Gerät zu haben, ohne die Geräte-HDD manuell generieren und mit einer ID aktualisieren zu müssen Bereitstellung auf dem Feld)

Die Hintergrundgeschichte ist, dass ich eine Implementierung eines privaten Hardware-IOT-Typs für einen Client untersuche. Wir werden eine Reihe von Hardwaregeräten mit Netzwerkfunktionen für die Installation an entfernten Standorten bereitstellen. Diese Geräte senden dann Nachrichten an eine API. Um die Komplexität des Setups zu verringern, wollte ich die MAC-Adresse der Netzwerkschnittstelle auf dem Gerät in der Nachricht senden, um diese Nachrichten an eine "device_id" auf der API-Seite zu binden. Mein Gedanke ist, dass, indem Sie es zu etwas machen, das vor der Verwendung nicht auf dem Gerät eingerichtet werden muss, es nur während des normalen Betriebs abgefragt werden kann. Ich kann davon ausgehen, dass wir feststellen können, dass die MAC-Adressen der einzelnen Geräte tatsächlich eindeutig sind.


4
Virtuelle Geräte haben MAC-Adressen generiert, die nur für die lokale Broadcast-Domäne eindeutig sind. Es gibt andere Fälle, in denen ein Mac mit einem anderen kollidieren könnte - auf einigen Geräten können Sie den Mac in der Firmware aktualisieren. HA-Geräte haben in einigen Fällen einen virtuellen Mac. Dies sind Beispiele, die für Ihr Szenario möglicherweise nicht relevant sind.
Paul

9
Menschen sind sehr verwirrt über die Eindeutigkeit von MAC-Adressen. Das Einzigartige an einer MAC-Adresse ist die einer Organisation zugewiesene OUI. Es wird nicht garantiert, dass die einzelnen Adressen innerhalb der OUI eindeutig sind, und die IEEE sagt, dass die Zuweisung der Adressen innerhalb der OUI vollständig im Ermessen des Eigentümers der OUI liegt.
Ron Maupin

2
Außerdem ist es für eine Person sehr einfach, die MAC-Adresse eines Geräts zu ändern. Dies bedeutet, dass MAC-Adressen so geklont oder zugewiesen werden können, dass Duplikate erstellt werden. Eine Person, die eine MAC-Adresse zuweist, soll das U / L-Bit setzen, aber das kommt selten vor.
Ron Maupin

5
Es muss identische MAC-Adressen in freier Wildbahn geben. Beispielsweise hat Intel 7 OUIs mit jeweils 16,7 Millionen Adressen unter ihrem jeweiligen Präfix registriert. Das sind insgesamt 116 Millionen Adressen. Heck, es gibt eine Intel-Netzwerkkarte auf fast jedem Motherboard. Wollen Sie mir sagen, dass es weltweit weniger als 116 Millionen Computer gibt? Nein natürlich nicht. Aber die logische Konsequenz ist: Natürlich sind MACs in keiner Weise einzigartig. Es ist nur so, dass die Wahrscheinlichkeit, zwei identische MACs im selben LAN zu haben, eher gering ist. Das ist also kein Problem.
Damon

7
Ich bin zufällig mit zwei identischen MAC-Adressen im selben Netzwerk gelandet - es war die Hölle zum Debuggen.
Christian

Antworten:


34

Basierend auf Ihren Aussagen, die Sie während der Bereitstellung bestätigen können, dass der Hersteller-MAC tatsächlich innerhalb des von Ihnen erstellten Netzwerks von Geräten eindeutig ist (was an sich keine Gewissheit ist, auch wenn dies der Fall sein sollte), geht es Ihnen wahrscheinlich gut. Bedenken Sie jedoch die folgenden Fragen:

  • Verwenden Sie den MAC für Sicherheitsüberprüfungen (Authentifizierung, Autorisierung)? In diesem Fall reicht ein MAC nicht aus. Denken Sie nicht einmal darüber nach. Verwenden Sie eine kryptografische Struktur und übertragen Sie alle Authentifizierungsanforderungen sicher.

  • Ist 48 Bit breit genug? Es ist wahrscheinlich, aber es lohnt sich zu fragen.

  • Müssen Sie jemals ein Gerät reparieren, indem Sie dessen Nic austauschen?

  • Wenn Sie ein Gerät in seiner Gesamtheit ersetzen oder dessen NIC ersetzen, müssen Sie in der Lage sein, die neue Adresse dem vorhandenen Schlüssel in Ihrer Datenbank zuzuordnen, um die Kontinuität der Datenerfassung für den Bereitstellungsort sicherzustellen?

  • Wird es eine Wartungsschnittstelle geben, über die ein Benutzer (autorisiert oder nicht autorisiert) die Netzwerkkarte auf ROM-, Treiber- oder Betriebssystemebene ändern kann? Ein Angreifer kann Fehler in Ihren Daten verursachen, wenn er den MAC ändert.

  • Werden Ihre Daten jemals mit anderen Datenquellen verknüpft, die MAC als Schlüssel verwenden?

  • Werden Sie den MAC jemals für andere Netzwerkzwecke verwenden, als nur durch das Layer2-LAN zu navigieren, mit dem das Gerät verbunden ist (verkabelt oder drahtlos)?

  • Ist das LAN, mit dem Ihre Geräte verbunden sind, ein privates Netzwerk oder ein Netzwerk, mit dem eine große Anzahl von Kunden (z. B. Mobiltelefone von Mitarbeitern) eine Verbindung herstellt?

Wenn Ihre Antworten sind

NO, yes, no, no, no, no, no, private

dann fällt mir kein wirklicher Fehler in deinem Plan ein.

Denken Sie daran, dass Sie keine global eindeutigen MACs benötigen, um dies zu realisieren. Sie müssen lediglich sicherstellen, dass die Untergruppe der Internetgeräte, die Ihre API aufrufen, eindeutig ist. Genau wie eine doppelte NIC, die in zwei verschiedenen Städten zugewiesen wurde, nicht kollidieren kann, weil sie sich in verschiedenen LANs befindet, können Sie auf einem MAC keine Datenbankschlüsselkollision haben, wenn Ihre API nicht jemals aufgerufen wird.


2
Nur zur Seite, Mitte der neunziger Jahre erzählte mir ein Sysadmin-Freund, er habe gerade eine Schachtel Nics von einem Hersteller erhalten, der alle dieselbe NIC besaß. Ich habe keine Ahnung, wie wahr diese Geschichte ist, aber es handelt sich um die einzige ihrer Art, die ich gehört habe, abgesehen von den allgemeinen Vorwürfen, dass einige Hersteller ihre Zuordnung zu dem einen oder anderen Zeitpunkt "überbeansprucht" haben.
Frank Thomas

Vielen Dank für die ausführliche Antwort. Ich denke, die einzige Antwort, die nicht passt, ist # 3. Aber wenn wir ein Gerät mit einem defekten Nic reparieren müssen, werden wir wahrscheinlich das gesamte Gerät ersetzen. Der Client steuert sowohl die API als auch die Hardware. Außerdem sind physische Kontrollen vorhanden, um den unbefugten physischen Zugriff auf die Geräte zu verhindern. Ich denke auch, dass es wichtig ist anzumerken, dass viele der Kommentare / Punkte hier mit dem Versuch zusammenhängen, den MAC für Netzwerkzwecke zu verwenden. Ich verstehe, dass es problematisch sein kann, anzunehmen, dass dies einzigartig ist. Dies ist nur für eine UUID / Gerät, das nicht generiert werden muss
Matt Phillips

cont: was ich verstehe wird gerätespezifisch / nic herstellerspezifisch sein.
Matt Phillips

7
@ FrankThomas: Es passiert . Ich habe einige Computerkonventionen besucht, bei denen eine Gruppe von ein paar Dutzend Fachleuten angab, dass sie darauf gestoßen sind. Offensichtlich waren die Aufarbeitungsabteilungen großer Hersteller besonders dazu geneigt.
TOOGAM

@FrankThomas hat gerade eine Schachtel mit Nics erhalten ... alle hatten dieselbe NIC
Dmitry Kudriavtsev

9

MAC-Adressen sind nicht eindeutig

Es kann und wird Duplikate mit MACs geben. Dafür gibt es mehrere Gründe, einer ist, dass sie nicht (global) eindeutig sein müssen.

Der MAC muss im lokalen Netzwerk eindeutig sein, damit ARP / NDP seine Aufgabe erfüllen kann und der Switch weiß, wohin eingehende Datagramme gesendet werden sollen. Normalerweise (nicht unbedingt) ist diese Voraussetzung erfüllt, und die Dinge funktionieren einwandfrei, einfach weil die Wahrscheinlichkeit, dass zwei identische MACs im selben LAN sind, selbst wenn sie nicht eindeutig sind, recht gering ist.

Ein weiterer Grund ist, dass es einfach mehr Geräte gibt als Adressen. Während 48-Bit-Adressen so klingen, als ob es bis zum Ende der Tage genug Adressen für alle gibt, ist dies nicht der Fall.

Der Adressraum ist in zwei 24-Bit-Hälften unterteilt (etwas komplizierter, aber die kleinen Details werden ignoriert). Die eine Hälfte ist die OUI, die Sie beim IEEE registrieren und Ihrem Unternehmen für rund 2000 Dollar zuweisen können. Die restlichen 24 Bits machen Sie, was Sie wollen. Natürlich können Sie mehrere OUIs registrieren, was auch die größeren Spieler tun.

Nehmen Sie als Beispiel Intel. Sie haben insgesamt 7 OUIs registriert und geben ihnen insgesamt 116 Millionen Adressen.
Die Hauptplatine meines Computers (die einen X99-Chipsatz verwendet) sowie die Hauptplatine meines Laptops und die Hauptplatine aller x86-basierten Computer, die ich in den letzten 10 bis 15 Jahren besessen habe, verfügten über eine Intel-Netzwerkkarte als Teil des Chipsatzes. Mit Sicherheit gibt es weltweit mehr als 116 Millionen Intel-basierte Computer. Daher können ihre MACs möglicherweise nicht eindeutig sein (im Sinne von global eindeutig).

Es wurde auch über Fälle berichtet, in denen ... billigere ... Hersteller Adressen einfach aus der OUI eines anderen "stehlen". Mit anderen Worten, sie verwendeten nur eine zufällige Adresse. Ich habe von Herstellern gehört, die die gleiche Adresse auch für ein komplettes Produktsortiment verwenden. Weder passt das wirklich noch ergibt es viel Sinn, aber was können Sie dagegen tun? Diese Netzwerkkarten existieren. Nochmals: Die Wahrscheinlichkeit, dass es zu einem praktischen Problem wird, ist immer noch sehr gering, wenn Adressen für das verwendet werden, was sie beabsichtigt sind. Sie müssen zwei davon im selben LAN haben, um es überhaupt zu bemerken.

Was tun gegen Ihr Problem?

Die Lösung ist vielleicht einfacher als Sie denken. Ihre IoT-Geräte werden höchstwahrscheinlich einige Zeit benötigen, normalerweise wird die Zeit automatisch über NTP bezogen. Die typische Präzision von NTP liegt im Mikrosekundenbereich (ja, das ist Mikro, nicht Milli). Ich bin nur gelaufen ntpq -c rl, um sicherzugehen, und mir wurde gesagt, dass ich 2 -20 bin .

Die Wahrscheinlichkeit, dass zwei Ihrer Geräte zum ersten Mal mit genau derselben Mikrosekunde eingeschaltet werden, ist sehr gering. Das ist im Allgemeinen möglich (vor allem, wenn Sie Millionen davon in kürzester Zeit verkaufen, herzlichen Glückwunsch zu Ihrem Erfolg!). Aber es ist nicht sehr wahrscheinlich - in der Praxis wird es nicht passieren. Sparen Sie also Zeit, nachdem Sie das System zum ersten Mal in einem permanenten Speicher hochgefahren haben.

Die Startzeit Ihres IoT-Geräts ist auf jedem Gerät gleich. Außer das stimmt überhaupt nicht .
Bei einem Timer mit hoher Auflösung sind die Startzeiten jedes Mal messbar unterschiedlich, auch auf demselben Gerät. Es ist vielleicht nur ein paar Uhr-Ticks anders (oder ein paar hunderttausend, wenn Sie so etwas wie den Zeitstempelzähler der CPU lesen), also nicht sehr einzigartig, aber es fügt sicher etwas Entropie hinzu.
Ebenso ist die Zeit, die connectfür die Rückgabe beim ersten Zugriff auf Ihre API-Site erforderlich ist, geringfügig, aber messbar unterschiedlich. In ähnlicher Weise getaddrinfowird für jedes Gerät eine etwas andere, messbare Zeit benötigt, wenn der Hostname Ihrer Web-API zum ersten Mal nachgeschlagen wird.

Verketten Sie diese drei oder vier Entropiequellen (MAC-Adresse, Zeitpunkt des ersten Einschaltens, Zeitpunkt des ersten Starts, Verbindungszeit) und berechnen Sie daraus einen Hash. MD5 wird für diesen Zweck gut geeignet sein. Dort bist du einzigartig.

Das garantiert zwar nicht wirklich die Einzigartigkeit, aber "so ziemlich" mit einer vernachlässigbaren Wahrscheinlichkeit des Scheiterns. Sie müssten über zwei Geräte mit identischen MACs verfügen, die zum ersten Mal in derselben Mikrosekunde eingeschaltet werden und genau die gleiche Zeit benötigen, um zu starten und eine Verbindung zu Ihrer Site herzustellen. Das wird nicht passieren. In diesem Fall sollten Sie sofort mit dem Lotto beginnen, da Sie anscheinend garantiert gewinnen werden.

Wenn "wird nicht passieren" jedoch als Garantie nicht ausreicht, übergeben Sie einfach jedem Gerät eine fortlaufend steigende Nummer (auf dem Server generiert), wenn es zum ersten Mal auf Ihre Web-API zugreift. Lassen Sie das Gerät diese Nummer speichern, fertig.


sollte der Befehl lautenntpq -c rl?
Tom

1
@Tom: Ja, ich bin mir nicht sicher, warum in meiner Antwort "r1" steht, muss auf jeden Fall "rl" sein !? Korrigiert das :)
Damon

Ich habe vor ungefähr 30 Jahren ein LAN verwaltet und wir hatten doppelte MACs. Der Hersteller verwendete die Seriennummer der E / A-Karte, um den MAC zu generieren, vergaß jedoch, die Modellnummer anzugeben, und es gab zwei verschiedene Modelle mit derselben Seriennummer. Zum Glück haben sie die Möglichkeit geboten, den MAC manuell einzustellen, sodass wir ihn auf einem der Geräte überschrieben haben.
Barmar

MAC-Adressen werden normalerweise vom Hersteller der Karte vergeben, nicht vom Hersteller des Chips. Intel müsste also nur Adressen für Intel-Boards und nicht für Intel-Chips beschaffen.
Plugwash

Wir werden wahrscheinlich einen ähnlichen Weg gehen wie in Ihrem letzten Absatz. Danke für die Ideen!
Matt Phillips

2

Da das Problem hier wirklich ein XY-Problem ist, gehe ich auf Folgendes ein: Wie erhalte ich eine eindeutige Kennung für ein Hardwareteil, wenn es zum ersten Mal gestartet wird, ohne dass Kennungen vorab darauf geladen werden müssen? Alle guten Methoden lassen sich auf eine Sache reduzieren: eine Entropiequelle zu haben.

Wenn Ihre Hardware hat etwas entwickelt , um eine Hardware-Entropiequelle zu sein (Anmerkung: Dies ist im Grunde eine Voraussetzung für jede richtige IoT Geräteimplementierung , da es für TLS benötigt wird , so dass Ihre Hardware sollte in diesem Sinne ausgelegt werden), um nur diese verwenden. Wenn nicht, müssen Sie kreativ werden.

Glücklicherweise hat fast jeder Computer, der jemals hergestellt wurde, eine hervorragende Entropiequelle: Quarzoszillatoren (Uhren). Die Rate eines bestimmten Kristall ist nicht nur abhängig von subtilen Temperaturänderungen, sondern unterliegt auch auf Temperatur Hysterese in der nichtlinearen Art und Weise. Um die Entropie zu messen, benötigen Sie jedoch eine zweite Uhr, um die erste zu messen. Dies bedeutet, dass Sie, wenn Ihr Computer über mindestens zwei abtastbare Uhren verfügt, die von der anderen gemessene Rate als Entropiequelle von sehr hoher Qualität verwenden können.


1
Dies ist eine gute Idee, vorausgesetzt, die Operation kann mit einem völlig nicht deterministischen Wert arbeiten. Die Frage ist, ob das Gerät bei erneuter Initialisierung und erneuter Werterhöhung den Anforderungen an Verwaltung und Kontinuität entspricht.
Frank Thomas

0

Ich möchte die Frage nicht direkt beantworten, da es andere sehr gute Antworten gibt, sondern ich möchte stattdessen einen anderen geeigneteren Wert vorschlagen, der möglicherweise als Geräte-ID verwendet werden kann.

Wenn dies von Ihrer Hardware unterstützt wird, können Sie die SMBIOS-UUID verwenden. Dies ist eine eindeutige ID für das Mainboard und damit für das Gerät. Beachten Sie, dass auch IoT-Geräte über mehrere Netzwerkkarten (LAN und WLAN) verfügen können. Wenn Sie also die MAC-Route auswählen, müssen Sie immer noch eine Methode finden, um eine einheitlich auszuwählen.

Auch wenn die UUID eindeutig ist, sollte sie nicht zu Sicherheitszwecken verwendet werden, da sie nur in einer freundlichen Umgebung eindeutig ist.


0

Ich hasse es, ein XY-Problem anzunehmen, weil das OP oft einen guten, wenn auch komplexen Grund dafür hat, Dinge so zu tun, wie sie es tun. Vielleicht möchten Sie aber auch andere Methoden zur Generierung einer eindeutigen Kennung für jedes Gerät untersuchen, z. B. die MAC-Adresse , ist in das Gerät "eingebaut" und erfordert keine Erstellung einer eigenen Kennung.

Wenn die Geräte alle vom selben Hersteller (oder noch besser vom selben Modell) stammen, können Sie die Seriennummer verwenden, um die Kennung zu generieren. Dies funktioniert jedoch auf Geräten verschiedener Hersteller nicht so gut, auch wenn Sie es mit dem Herstellernamen und der Modellnummer kombinieren, da bei eingebetteten / proprietären Geräten unterschiedliche Seriennummernformate und möglicherweise unterschiedliche APIs zum Abrufen der Seriennummer verwendet werden . Eine Alternative zur Seriennummer des Geräts könnte die Seriennummer des Motherboards, der CPU oder der Festplatte sein (ich glaube, bei der Windows-Lizenzierung wird eine Kombination dieser verwendet).

Beachten Sie auch, dass Dateisystem-Formatierer normalerweise eine eindeutige ID für jedes Dateisystem generieren. Sofern Sie nicht alle Geräte aus demselben Image vorbereiten (was ich aus unabhängigen Gründen empfehlen würde), ist auf jeder Festplatte bereits eine eindeutige ID im Dateisystem gespeichert, die Sie verwenden können.

Allerdings gibt es wirklich keinen Grund , MAC-Adressen nicht zu verwenden, insbesondere wenn Sie im Rahmen Ihres Bereitstellungsprozesses feststellen können, dass sie tatsächlich eindeutig sind (obwohl dies nicht einmal erforderlich sein sollte, vorausgesetzt, es handelt sich nicht um mehr als hier ein paar tausend Geräte). Bedenken Sie natürlich, dass alles, was Sie verwenden, vom Gerät gefälscht werden kann. Verlassen Sie sich daher nicht auf dieses Verfahren für die Authentifizierung in einer nicht vertrauenswürdigen Umgebung (Sie sagten, es sei eine private Einrichtung, wahrscheinlich handelt es sich um eine "vertrauenswürdige" Umgebung, in der dies nicht der Fall ist Sorgen Sie dafür, dass Ihre Kunden ihre eigenen Geräte gegen ihre eigenen Server fälschen, aber sie sollten dies natürlich berücksichtigen, wenn die Verwaltung der Geräte an Dritte oder Endbenutzer übergeben wird.


Ich bin mir nicht sicher, ob dies tatsächlich ein XY-Problem ist, zumindest nicht für unser Publikum. Dass das OP einen Mechanismus für seine Software benötigt, um ein Gerät dauerhaft zu identifizieren und dann logisch Werte daran zu binden, ist klar und eindeutig. Das OP stellt nicht die falsche Frage. Wenn sie gefragt hätten, welchen Mechanismus sie zur Identifizierung der Geräte verwenden könnten, wäre diese Frage als nicht aktuell eingestuft worden, da sie in Bezug auf die Programmierung steht und kein spezifisches Problem mit der Computerhardware oder -software darstellt. Peer Review zu einer technischen Entscheidung zu beantragen, ist nicht XY.
Frank Thomas

@FrankThomas Wie gesagt, ich hasse es, ein XY-Problem anzunehmen. Ich gehe hier nicht von einem XY-Problem aus. Ich stimme zu, dass es durchaus akzeptabel ist, eine Überprüfung einer bestimmten Lösung für ein Problem zu verlangen, auch wenn es andere Lösungen gibt. Aber die Leute werfen oft vor, solche Fragen seien XY-Probleme.
Micheal Johnson
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.