Gründe, nicht davon auszugehen, dass die MAC-Adresse des Geräts eindeutig ist

4844
Matt Phillips

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

Die Hintergrundgeschichte dazu ist, dass ich die Implementierung einer privaten Hardware-IOT-Implementierung für einen Client erforsche. Wir werden eine Reihe von Hardwaregeräten mit Netzwerkfunktionen bereitstellen, um sie an entfernten Standorten zu installieren. Diese Geräte kommunizieren dann wieder mit einer API, indem sie Nachrichten senden. Um die Installationskomplexität zu reduzieren, hatte ich gehofft, die MAC-Adresse der Netzwerkschnittstelle auf dem Gerät in der Nachricht zu senden, um diese Nachrichten auf eine "device_id" auf der API-Seite zurückzubinden. Meiner Meinung nach ist es so, dass das Gerät nur während des normalen Betriebs abgefragt werden kann, wenn es zu etwas gemacht wird, das vor der Verwendung nicht auf dem Gerät eingerichtet werden muss. Ich kann sicher davon ausgehen, dass wir feststellen können, dass die MAC-Adressen der einzelnen Geräte tatsächlich eindeutig sind.

17
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. Bei einigen Geräten können Sie den Mac in der Firmware aktualisieren. HA-Geräte verfügen in einigen Fällen über einen virtuellen Mac. Dies sind Beispiele, die möglicherweise für Ihr Szenario nicht relevant sind. Paul vor 6 Jahren 4
Die Menschen sind sehr verwirrt über die Einzigartigkeit von MAC-Adressen. Einzigartig an einer MAC-Adresse ist die einer Organisation zugewiesene OUI. Die einzelnen Adressen innerhalb der OUI sind nicht garantiert eindeutig, und die IEEE teilt mit, dass die Zuweisung der Adressen innerhalb der OUI vollständig im Ermessen des Inhabers der OUI liegt. Ron Maupin vor 6 Jahren 9
@RonMaupin ugh. das erinnert an dieses eine Projekt, an dem ich gearbeitet habe. Das Unternehmen bestellte einige billige chinesische Netzwerkkarten, um Geld zu sparen. Alle hatten die gleiche MAC-Adresse. Wir mussten jedem manuell einen neuen in der Treibersoftware zuweisen. Keltari vor 6 Jahren 1
Außerdem ist es für eine Einzelperson sehr einfach, die MAC-Adresse eines Geräts zu ändern. Das bedeutet, dass MAC-Adressen so geklont oder so zugewiesen werden können, dass Duplikate erstellt werden. Eine Einzelperson, die eine MAC-Adresse zuweist, soll das U / L-Bit setzen, aber das passiert selten. Ron Maupin vor 6 Jahren 2
Es gibt **, es müssen ** identische MAC-Adressen in freier Wildbahn geben. Beispielsweise hat Intel 7 OUIs registriert, die jeweils 16,7 Millionen Adressen unter ihrem jeweiligen Präfix haben. Das sind insgesamt 116 Millionen Adressen. Heck, es gibt eine Intel-Netzwerkkarte auf fast jedem Motherboard. Wirst du 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 in demselben LAN zu haben, eher gering ist, daher ist dies kein Problem. Damon vor 6 Jahren 5
Ich hatte zufällig zwei identische MAC-Adressen im selben Netzwerk - es war die Hölle zu debuggen. Christian vor 6 Jahren 7
Basierend auf Ihrem Nachtrag, in dem Sie erklären, wofür Sie dies verwenden, sollten Sie stattdessen die UUID der Firnware verwenden. Die UUID wird von vielen Produkten genau für diesen Zweck verwendet. Dieser Wert kann über die von Ihrem Betriebssystem bereitgestellte DMI-Schnittstelle gelesen werden ("dmidecode" in Linux oder WMI in Windows). Ich poste dies als Kommentar, weil es die Frage, die Sie gestellt haben, nicht wirklich beantwortet. Wes Sayeed vor 6 Jahren 1
Ein Beispiel für etwas, das auf einer LAN-Party mit ~ 1000 Personen passiert ist: Einer meiner Freunde konnte das Netzwerk nicht ordnungsgemäß mit einem hohen Prozentsatz der ausgelassenen Pakete verwenden. Wir fanden heraus, dass er und eine andere Person im Netzwerk denselben Netzwerkchip mit demselben Fehler hatten, der dazu führte, dass beide eine MAC-Adresse von * Herstellerpräfix * 000000000000 hatten. Vergessen Sie also nicht die Fehler, die Probleme verursachen! Kevin vor 6 Jahren 0

5 Antworten auf die Frage

34
Frank Thomas

Aufgrund Ihrer Aussagen, die Sie während der Bereitstellung bestätigen können, dass der Hersteller-MAC tatsächlich innerhalb des Netzwerks der von Ihnen erstellten Geräte eindeutig ist (was an und für sich nicht sicher ist, auch wenn dies der Fall sein sollte), sind Sie wahrscheinlich in Ordnung. Bedenken Sie jedoch die folgenden Fragen:

  • Verwenden Sie den MAC für Sicherheitsüberprüfungen (Authentifizierung, Autorisierung)? Wenn ja, reicht ein MAC nicht aus. Betrachte es nicht einmal. Verwenden Sie eine kryptografische Struktur und übertragen Sie alle Authentifizierungsanforderungen sicher.

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

  • Müssen Sie jemals ein Gerät reparieren, indem Sie das Gerät ersetzen?

  • Wenn Sie ein Gerät vollständig austauschen oder dessen Gerät ersetzen, müssen Sie die neue Adresse dem vorhandenen Schlüssel in Ihrer Datenbank zuordnen können, um die Kontinuität der Datenerfassung für den Bereitstellungsspeicherort sicherzustellen.

  • Gibt es eine Wartungsschnittstelle, über die ein (autorisierter oder nicht autorisierter) Benutzer die Einstellungen auf ROM-, Treiber- oder Betriebssystemebene ändern kann? Ein Angreifer könnte Fehler in Ihre Daten einbringen, wenn er den MAC ändern würde.

  • Werden Ihre Daten jemals mit anderen Datenquellen verbunden, wobei MAC als Schlüssel verwendet wird?

  • Verwenden Sie den MAC jemals für andere Netzwerkzwecke als zum Navigieren in dem Layer2-LAN, mit dem das Gerät verbunden ist (verkabelt oder drahtlos)?

  • Handelt es sich bei dem LAN, mit dem Ihre Geräte verbunden sind, um ein privates Netzwerk oder um ein Netzwerk, an das sich viele transiente Clients (z. B. Mitarbeiter von Mobiltelefonen) anschließen?

Wenn deine Antworten sind

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

Dann fällt mir kein echter Fehler in Ihrem Plan ein.

Beachten Sie, dass Sie keine global eindeutigen MACs benötigen, um dies zu erreichen. Sie müssen lediglich sicherstellen, dass die Teilmenge der Internetgeräte, die Ihre API aufrufen, eindeutig ist. So wie ein in zwei verschiedenen Städten zugewiesenes Duplikat nicht kollidieren kann, weil es sich um unterschiedliche LANs handelt, können Sie keine Datenbankschlüsselkollision auf einem MAC haben, wenn Ihre API nicht aufgerufen wird.

Nebenbei gesagt, Mitte der neunziger Jahre erzählte mir ein sysadminischer Freund, dass er gerade eine Schachtel Nics von einem Hersteller erhalten hatte, der alle dieselbe NIC hatte. 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 Behauptungen, dass einige Hersteller ihre Zuteilung irgendwann "überlastet" haben. Frank Thomas vor 6 Jahren 2
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 Netzwerk reparieren müssen, würden wir wahrscheinlich das gesamte Gerät ersetzen. Der Client kontrolliert sowohl die API als auch die Hardware. Außerdem gibt es physische Kontrollen, um den unberechtigten physischen Zugriff auf die Geräte zu verhindern. Ich denke, es ist wichtig zu beachten, dass viele der Kommentare / Punkte hier mit dem Versuch zusammenhängen, den MAC für Netzwerkzwecke zu verwenden, was meines Erachtens problematisch sein kann, wenn man davon ausgeht, dass es einzigartig ist. Dies ist nur für ein Gerät, das keine Generierung benötigt Matt Phillips vor 6 Jahren 0
cont: was ich verstehe, wird gerätespezifisch sein. Matt Phillips vor 6 Jahren 0
@FrankThomas: [Es kommt vor] (https://i.pinimg.com/600x315/72/33/da/7233dab90bb1d5acaddbfcee94ec9f5a.jpg). Ich habe an einigen Computer-Konventionen teilgenommen, bei denen eine Gruppe von ein paar Dutzend, hauptsächlich Profis, ein paar Leute sagten, dass sie dies angetroffen haben. Offensichtlich waren anscheinend große Reparaturabteilungen großer Hersteller dazu in der Lage. TOOGAM vor 6 Jahren 7
@FrankThomas * erhielt gerade eine Schachtel Nics * ... * alle hatten die gleiche NIC * Dmitry Kudriavtsev vor 6 Jahren 0
Gute Liste. Man sollte jedoch auch die Möglichkeit erwähnen, dass Boxen mit einer Anzahl von NICs ausgestattet sind, die nicht gleich einer ist. Hagen von Eitzen vor 6 Jahren 0
@DmitryKudriavtsev, ja, ja, ja. habe nicht bemerkt, dass ich misspoke war, bis der 5-Minuten-Bearbeitungszeitraum abgelaufen war. Ich wusste, dass mich jemand anrufen würde .... Frank Thomas vor 6 Jahren 0
es passiert immer noch. Einige IOT-Hersteller initialisieren die MAC ihrer NICs nicht standardmäßig mit zufälligen Werten. Rui F Ribeiro vor 6 Jahren 0
9
Damon

MAC-Adressen sind nicht eindeutig

Es kann mit MACs Duplikate geben und wird es geben. Dafür gibt es mehrere Gründe, zum einen, 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 notwendigerweise) ist diese Voraussetzung erfüllt und die Dinge funktionieren gut, einfach weil die Wahrscheinlichkeit, dass zwei identische MACs in demselben LAN vorhanden sind, selbst wenn sie nicht eindeutig sind, ziemlich gering ist.

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

Der Adressraum ist in zwei 24-Bit-Hälften unterteilt (etwas komplizierter, aber ignorieren Sie die unbedeutenden Details). Die eine Hälfte ist die OUI, die Sie bei der 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 die größeren Spieler tun.

Nehmen Sie Intel als Beispiel. Sie haben insgesamt 7 OUIs registriert, wodurch sie insgesamt 116 Millionen Adressen erhalten.
Das Mainboard meines Computers (das ein X99-Chipset verwendet) sowie das Mainboard meines Laptops sowie das Mainboard jedes x86-basierten Computers, den ich in den letzten 10-15 Jahren besaß, hatten eine Intel-Netzwerkkarte als Teil des Chipsets. Es gibt sicherlich weit mehr als 116 Millionen Intel-basierte Computer auf der Welt. Daher können ihre MACs möglicherweise nicht eindeutig sein (im Sinne von global einzigartig).

Es wurden auch Fälle von ähm ... billiger gemeldet ... Hersteller haben Adressen einfach von einer anderen OUI "gestohlen". Mit anderen Worten, sie haben nur eine zufällige Adresse verwendet. Ich habe von Herstellern gehört, die nur dieselbe Adresse für ein komplettes Produktsortiment verwenden. Keines davon passt sich wirklich an oder macht viel Sinn, aber was können Sie dagegen tun? Diese Netzwerkkarten sind vorhanden. Nochmals: Die Wahrscheinlichkeit, dass es zu einem praktischen Problem wird, ist immer noch sehr gering, wenn Adressen für das, was sie beabsichtigen, verwendet werden. Sie müssen zwei davon im selben LAN haben, um es überhaupt zu bemerken.

Nun, was ist mit Ihrem Problem zu tun?

Die Lösung ist vielleicht einfacher als Sie denken. Ihre IoT-Geräte benötigen höchstwahrscheinlich eine gewisse Zeit, normalerweise wird die Zeit automatisch über NTP bezogen. Die typische Präzision von NTP liegt im Mikrosekundenbereich (ja, das ist Mikro, nicht Milli). Ich lief ntpq -c rlnur um sicher zu gehen und man sagte mir 2 -20 .

Die Wahrscheinlichkeit, dass zwei Ihrer Geräte zum ersten Mal genau in derselben Mikrosekunde eingeschaltet werden, ist sehr gering. Es ist im Allgemeinen möglich, zu passieren (vor allem, wenn Sie in kurzer Zeit Millionen davon verkaufen, Glückwünsche zu Ihrem Erfolg!), Sicher. Es ist jedoch nicht sehr wahrscheinlich - in der Praxis wird es nicht passieren. So sparen Sie die Zeit nach dem ersten Hochfahren im permanenten Speicher.

Die Startzeit Ihres IoT-Geräts ist auf jedem Gerät gleich. Nur stimmt das überhaupt nicht .
Bei einem hochauflösenden Timer unterscheiden sich die Startzeiten jedes Mal auf demselben Gerät messbar. Es ist vielleicht nur ein paar Uhrzeitzähler anders (oder ein paar Hunderttausend, wenn Sie etwas wie den Zeitstempelzähler der CPU lesen), also nicht ganz eindeutig, aber es wirkt gewissermaßen entropisch.
In ähnlicher Weise ist die Zeit, die Sie connectfür den ersten Zugriff auf Ihre API-Site benötigen, etwas, aber messbar, jedes Mal anders. Ebenso getaddrinfodauert es für jedes Gerät eine etwas andere, messbare Zeit, wenn der Hostname Ihres Web-API zum ersten Mal nachgeschlagen wird.

Verketten Sie diese drei oder vier Entropiequellen (MAC-Adresse, Zeitpunkt des ersten Einschaltens, Startzeitpunkt, Verbindungszeitpunkt) und berechnen Sie daraus einen Hashwert. MD5 wird zu diesem Zweck gut funktionieren. Da bist du einzigartig.

Dies garantiert zwar nicht wirklich die Einzigartigkeit, garantiert aber "ziemlich viel", mit einer vernachlässigbaren Chance des Scheiterns. Sie müssten zwei Geräte mit identischen MACs haben, die zum ersten Mal in derselben Mikrosekunde eingeschaltet sind und die gleiche Zeit in Anspruch nahmen, um zu booten und eine Verbindung zu Ihrem Standort herzustellen. Das wird nicht passieren. In diesem Fall sollten Sie sofort mit dem Lottospiel beginnen, denn bei allen Auftritten gewinnen Sie garantiert.

Wenn jedoch "nicht passieren" als Garantie nicht gut genug ist, übergeben Sie einfach jedes Gerät eine fortlaufend ansteigende Anzahl (auf dem Server generiert), wenn Sie zum ersten Mal auf Ihre Web-API zugreifen. Lassen Sie das Gerät diese Nummer speichern, fertig.

War der Befehl "ntpq -c rl?" Tom vor 6 Jahren 0
@Tom: Ja, ich bin mir nicht sicher, warum es in meiner Antwort "r1" liest, muss auf jeden Fall "rl" sein !? Wird das korrigieren :) Damon vor 6 Jahren 1
Ich habe vor etwa 30 Jahren ein LAN verwaltet und wir hatten doppelte MACs. Der Hersteller verwendete die Seriennummer der E / A-Platine, um den MAC zu generieren, vergaß jedoch, die Modellnummer anzugeben, und wir hatten zwei verschiedene Modelle mit derselben Seriennummer. Glücklicherweise haben sie die Möglichkeit geschaffen, den MAC manuell einzustellen. Daher überschreiben wir ihn auf einem der Geräte. Barmar vor 6 Jahren 0
MAC-Adressen werden normalerweise vom Kartenhersteller und nicht vom Chipanbieter zugewiesen. Intel müsste also nur Adressen für Intel-Boards erwerben, nicht für Intel-Chips. plugwash vor 6 Jahren 0
Wir gehen wahrscheinlich eine Route, die Ihrem letzten Absatz ähnlich ist. Danke für die Ideen! Matt Phillips vor 6 Jahren 0
2
R..

Da das Problem hier wirklich ein XY-Problem ist, gehe ich auf die Lösung des Problems ein: Wie erhält man beim ersten Start eine eindeutige Kennung für eine Hardware, ohne dass Kennungen vorab geladen werden müssen? Alle guten Methoden laufen wirklich auf eine Sache hinaus: 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), verwenden Sie nur das. Wenn nicht, musst du 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 Takte verfügt, die Sie abtasten können, die von einer anderen gemessene Rate als eine Entropiequelle von sehr hoher Qualität verwenden kann.

Dies ist eine gute Idee, vorausgesetzt, die Op kann mit einem völlig nicht deterministischen Wert arbeiten. Die Frage ist, ob das Gerät neu initialisiert und der Wert neu definiert wird, ob es seinen Anforderungen an Verwaltung und Kontinuität entspricht. Frank Thomas vor 6 Jahren 1
0
Robert

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

Wenn dies von Ihrer Hardware unterstützt wird, können Sie die Verwendung der SMBIOS-UUID in Betracht ziehen. Dies ist eine eindeutige ID für das Mainboard und somit für das Gerät. Denken Sie daran, dass auch IoT-Geräte über mehrere Netzwerkkarten (LAN und WLAN) verfügen können. Wenn Sie sich für die MAC-Route entscheiden, müssen Sie jedoch eine Methode für die konsistente Auswahl finden.

Auch wenn die UUID einzigartig ist, sollte sie nicht für Sicherheitszwecke verwendet werden, da sie nur in einer freundlichen Umgebung eindeutig ist.

0
Micheal Johnson

Ich hasse es, ein XY-Problem anzunehmen, da das OP oft einen guten, wenn auch komplexen Grund hat, Dinge so zu tun, wie sie es tun, aber Sie möchten vielleicht andere Methoden zum Generieren eines eindeutigen Bezeichners für jedes Gerät, z, ist im Gerät "eingebaut" und erfordert keine Generierung eines eigenen Bezeichners.

Wenn alle Geräte vom selben Hersteller stammen (oder besser vom selben Modell), können Sie die Seriennummer verwenden, um die Kennung zu generieren. Dies funktioniert jedoch bei Geräten unterschiedlicher Hersteller nicht so gut, selbst wenn Sie es mit dem Herstellernamen und der Modellnummer kombinieren, da unterschiedliche Seriennummernformate und möglicherweise andere APIs zum Ermitteln der Seriennummer bei eingebetteten / proprietären Geräten zur Verfügung stehen . Eine Alternative zur Seriennummer des Geräts kann die Seriennummer des Motherboards, der CPU oder der Festplatte sein (ich glaube, die Windows-Lizenzierung verwendet eine Kombination davon).

Beachten Sie auch, dass Dateisystem-Formatierer normalerweise eine eindeutige ID für jedes Dateisystem generieren. Wenn Sie nicht alle Geräte mit demselben Image vorbereiten (was ich aus Gründen, die nicht miteinander zusammenhängen, empfehle), hat jede Festplatte bereits eine eindeutige ID im Dateisystem, die Sie verwenden können.

Allerdings gibt es wirklich keinen Grund, keine MAC-Adressen zu verwenden, insbesondere wenn Sie als Teil Ihres Bereitstellungsprozesses feststellen können, dass sie tatsächlich eindeutig sind (obwohl dies nicht unbedingt erforderlich sein sollte, vorausgesetzt, wir sprechen nicht mehr als ein paar tausend Geräte hier). Denken Sie jedoch daran, dass das, was Sie verwenden, vom Gerät möglicherweise gefälscht wird. Verlassen Sie sich daher nicht auf die Authentifizierung in einer nicht vertrauenswürdigen Umgebung (Sie sagten, es handelt sich um eine private Einrichtung, also vermutlich eine "vertrauenswürdige" Umgebung, in der Sie dies nicht tun Achten Sie darauf, dass Ihr Client die eigenen Geräte gegen die eigenen Server spoofing. Sie sollten dies jedoch unbedingt berücksichtigen, wenn die Verwaltung der Geräte an Dritte oder Endbenutzer übergeben wird.

Ich bin nicht wirklich sicher, dass 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 anschließend Werte logisch mit ihm zu verknüpfen, 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 offenkundig eingestuft worden, weil sie eine gewisse Beziehung zur Programmierung hatte und kein spezifisches Problem mit Computerhardware oder -software ausdrückte. Die Beantragung einer Peer-Review zu einer technischen Entscheidung ist nicht XY. Frank Thomas vor 6 Jahren 0
@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, die Überprüfung einer bestimmten Lösung eines Problems zu verlangen, auch wenn andere Lösungen vorhanden sind. Aber die Menschen werfen diesen Fragen oftmals XY-Probleme vor. Micheal Johnson vor 6 Jahren 0