Cihaz MAC adresinin benzersiz olduğunu varsaymama nedenleri


18

Donanımın sağlanmasını denetlediğiniz ve aynı donanım modeline sahip tüm aygıtların ağ arabirimleri için gerçekten benzersiz MAC adresleri olduğunu belirleyebileceğiniz bir senaryoda, bu varsayımı kullanan kod yazmanın bir dezavantajı var mı? (Bazı cevaplara dayalı not: Bu varsayımı kullanarak ağ kodu yazmayacağım. Sadece daha önce bir id ile cihaz HDD'sini manuel olarak oluşturmak ve güncellemek zorunda kalmadan cihaz başına bir uuid'e sahip olmanın düşük dokunuşlu bir yolu olması gerekiyordu. alana dağıtma)

Bunun dayanak noktası, bir istemci için özel bir donanım IOT tipi uygulama uygulamayı araştırıyorum. Uzak konumlara kurulum için ağ özelliklerine sahip bir dizi donanım aygıtı tedarik edeceğiz. Bu cihazlar daha sonra mesaj göndererek bir API ile iletişim kurar. Kurulum karmaşıklığını azaltmak için, ağ arayüzünün MAC adresini mesajdaki aygıtta göndermeyi, bu mesajları API tarafındaki bir "aygıt_kidine" geri bağlamayı umuyordum. Benim düşüncem, kullanımdan önce cihazda ayarlanması gerekmeyen bir şey yaparak, normal çalışma sırasında sorgulanabilir. Her cihazın MAC adreslerinin aslında benzersiz olduğunu belirleyebileceğimizi güvenle söyleyebilirim,


4
Sanal cihazlar, yalnızca yerel yayın alanı için benzersiz olan MAC adresleri üretmiştir. Mac'in başka biriyle çarpışabileceği başka durumlar da vardır - bazı cihazlar mac'u ürün yazılımında güncellemenizi sağlar. HA cihazlarının bazı durumlarda sanal bir mac'u vardır. Bunlar örnektir, senaryonuzla ilgili olmayabilirler.
Paul

9
İnsanlar MAC adreslerinin benzersizliği konusunda büyük ölçüde kafası karışık. Bir MAC adresi hakkında benzersiz olan, bir kuruluşa atanan OUI'dir. OUI içindeki ayrı adreslerin benzersiz olduğu garanti edilmez ve IEEE, OUI içindeki adreslerin atanmasının tamamen OUI sahibinin takdirine bağlı olduğunu söyler.
Ron Maupin

2
Ayrıca, bir bireyin bir cihazın MAC adresini değiştirmesi çok kolaydır. Bu, MAC adreslerinin kopya oluşturacak şekilde klonlanabileceği veya atanabileceği anlamına gelir. MAC adresi atayan bir kişinin U / L bitini ayarlaması gerekir, ancak bu nadiren olur.
Ron Maupin

5
Orada vardır olmalıdır dışarı vahşi özdeş MAC adresleri. Örneğin, Intel her biri kendi öneki altında 16,7 milyon adrese sahip 7 OUI kaydetmiştir. Bu toplam 116 milyon adresdir. Heck, hemen hemen her anakartta bir Intel ağ kartı var . Bana dünyada 116 milyondan az bilgisayar olduğunu söyleyecek misin? Hayır tabii değil. Ancak mantıklı sonuç şudur: Elbette MAC'ler hiçbir şekilde benzersiz değildir. Sadece aynı LAN'da iki özdeş MAC'ye sahip olma olasılığı oldukça düşüktür, bu yüzden bu bir sorun değildir.
Damon

7
Tamamen aynı ağda iki özdeş MAC adresi buldum - Hata ayıklamak cehennemdi.
Christian

Yanıtlar:


34

Hazırlama sırasında üretici MAC'inin aslında oluşturduğunuz aygıtlar ağı içinde benzersiz olduğunu doğrulayabileceğiniz ifadelerine dayanarak (olması gerekse bile, kendinde ve kesin olarak kesin değildir), muhtemelen iyi gidiyorsunuz ancak aşağıdaki soruları göz önünde bulundurun:

  • Güvenlik denetimleri (kimlik doğrulama, yetkilendirme) için MAC kullanıyor musunuz? Öyleyse, MAC yeterli değildir. Düşünmeyin bile. Şifreleme yapısı kullanın ve tüm kimlik doğrulama isteklerini güvenli bir şekilde iletin.

  • 48 bit yeterince geniş mi? Muhtemelen öyle, ama sormaya değer.

  • Hiç bir cihazı nicini değiştirerek onarmanız gerekecek mi?

  • Bir aygıtı tamamen değiştirirseniz veya nicini değiştirirseniz, dağıtım konumu için veri toplamanın sürekliliğini sağlamak için yeni adresi veritabanınızdaki mevcut anahtarla ilişkilendirebilmeniz gerekir mi?

  • Bir kullanıcının (yetkili olsun ya da olmasın) ROM, sürücü veya işletim sistemi düzeyinde nic'i değiştirebileceği herhangi bir bakım arayüzü olacak mı? Bir saldırgan, MAC'de değişiklik yapacaksa verilerinize kusurlar ekleyebilir.

  • Anahtar olarak MAC kullanarak verileriniz diğer veri kaynaklarıyla birleştirilecek mi?

  • MAC'i, cihazın bağlı olduğu katman2 LAN'da (kablolu veya kablosuz) gezinmek dışında herhangi bir ağ amacıyla kullanacak mısınız?

  • Cihazlarınızın bağlı olduğu LAN, özel bir ağ mı yoksa çok sayıda geçici istemcinin (çalışanların cep telefonları gibi) bağlanacağı bir ağ mı olacak?

Eğer cevaplarınız

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

o zaman planında gerçek bir kusur düşünemiyorum.

Bunu kaldırmak için global olarak benzersiz MAC'lere ihtiyacınız olmadığını unutmayın; API'nizi çağıran İnternet cihazlarının alt kümesinin benzersiz olduğundan emin olmanız yeterlidir. İki farklı şehirde atanan yinelenen bir nic, farklı LAN'larda oldukları için çarpışamadığı gibi, API'nizi hiç çağırmazsa bir MAC üzerinde veritabanı anahtarı çarpışması yapamazsınız.


2
Sadece bir kenara, Doksanlı yılların ortalarında, bir sistem yöneticisi arkadaşım bana bir üreticiden aynı NIC'ye sahip bir kutu Nics aldığını söyledi. Bu hikayenin ne kadar doğru olduğu hakkında hiçbir fikrim yok, ancak bazı üreticilerin tahsislerini bir kerede "aşırı" kullandıkları iddialarının ötesinde, duyduğum türden sadece biriyle ilgili.
Frank Thomas

Ayrıntılı cevap için teşekkür ederim. Bence uymayan tek cevap # 3. Ancak, bir cihazı kırık bir nic ile düzeltmek zorunda kalırsak, muhtemelen tüm cihazın yerini alırız. İstemci hem apiyi hem de donanımı kontrol eder ve cihazlara yetkisiz fiziksel erişimi önlemek için fiziksel kontroller olacaktır. Ayrıca, buradaki yorumların / noktaların birçoğunun MAC'ı ağ amaçlı olarak kullanmaya çalışmakla ilgili olduğunu ve bunun benzersiz olduğunu varsaymak sorunlu olabileceğini düşünüyorum. Bu tamamen üretilmesi gerekmeyen bir uuid / cihaz içindir
Matt Phillips

devamı: anladığım cihaz / nic üreticisine özel olacak.
Matt Phillips

7
@FrankThomas: Olur . Birkaç düzine kişilik bir grup çoğunlukla profesyonellerin birkaç kişi bununla karşılaştıklarını söylediği bazı bilgisayar toplantılarına gittim. Görünüşe göre büyük üreticilerin yenileme departmanları bunu yapmaya eğilimlidir.
TOOGAM

@FrankThomas yeni bir Nics kutusu aldı ... hepsi aynı NIC'ye sahipti
Dmitry Kudriavtsev

9

MAC adresleri benzersiz değil

MAC'ler olabilir ve çoğaltılır. Bunun birkaç nedeni vardır, bunlardan biri (küresel olarak) benzersiz olmaları gerekmez .

MAC yerel ağda benzersiz olmalıdır, bu yüzden ARP / NDP işini yapabilir ve anahtar gelen datagramların nereye gönderileceğini bilir. Genellikle (zorunlu olarak değil), önkoşul yerine getirilir ve işler aynı şekilde çalışır, çünkü benzersiz olmasalar bile, aynı LAN'da iki özdeş MAC'ye sahip olma olasılığı oldukça düşüktür.

Başka bir neden, adreslerden daha fazla cihaz olması. 48 bit adresler gün sonuna kadar herkes için yeterli adres varmış gibi görünse de durum böyle değil.

Adres alanı iki adet 24 bit yarıya bölünür (biraz daha karmaşıktır, ancak küçük ayrıntıları görmezden gelelim). Bir yarısı, IEEE'ye kaydolabileceğiniz ve şirketinize yaklaşık 2000 dolar için atayabileceğiniz OUI'dir. Kalan 24 bit, ne istersen yaparsın. Tabii ki daha büyük oyuncuların yaptığı birkaç OUI kaydedebilirsiniz.

Intel'i örnek olarak alalım. Toplam 7 OUI kaydettiler ve onlara toplam 116 milyon adres verdi.
Bilgisayarımın anakartı (X99 yonga seti kullanan) ve dizüstü bilgisayarımın anakartı ve son 10-15 yıl içinde sahip olduğum her x86 tabanlı bilgisayarın anakartı , yonga setinin bir parçası olarak bir Intel ağ kartına sahipti. Elbette dünyada 116 milyondan fazla Intel tabanlı bilgisayar var. Bu nedenle, MAC'leri muhtemelen benzersiz olamaz (küresel olarak benzersiz bir anlamda).

Ayrıca, vakalar uh ... ucuz ... üreticilerin sadece bir başkasının OUI adreslerini "çalmak" bildirilmiştir. Başka bir deyişle, sadece rastgele bir adres kullandılar. Tam bir ürün yelpazesi için de aynı adresi kullanan üreticileri duydum. Bunların hiçbiri gerçekten uyumlu değildir veya çok anlamlı değildir, ancak bu konuda ne yapabilirsiniz? Bu ağ kartları var. Yine: Adresler amaçlandıkları şekilde kullanılıyorsa, pratik bir sorun haline gelme olasılığı hala çok düşüktür , hatta fark etmek için ikisinin aynı LAN'da olması gerekir.

Şimdi, probleminiz hakkında ne yapmalı?

Çözüm düşündüğünüzden daha basit olabilir. IoT cihazlarınızın büyük olasılıkla bir zaman kavramına ihtiyacı olacaktır, genellikle zaman otomatik olarak NTP aracılığıyla alınır. NTP'nin tipik hassasiyeti mikrosaniye aralığındadır (evet, bu mikro değil, mili değil). Sadece koştum ntpq -c rlemin olmak için ve 2 söylendi -20 .

Aynı mikrosaniyede iki cihazınızın ilk kez açılması ihtimali çok düşüktür. Genellikle gerçekleşmesi mümkündür (özellikle milyonları çok kısa sürede satarsanız, başarınız için tebrikler!), Elbette. Ama bu pek olası değil - pratikte olmayacak. Böylece, kalıcı mağazada önyükleme yaptıktan sonra zaman kazanın.

IoT cihazınızın önyükleme süresi her cihazda aynı olacaktır. Ancak bu hiç doğru değil .
Yüksek çözünürlüklü bir zamanlayıcı göz önüne alındığında, önyükleme süreleri her seferinde aynı cihazda bile ölçülebilir derecede farklıdır. Belki sadece birkaç saat keneler farklı (veya CPU'nun zaman damgası sayacı gibi bir şey okursanız birkaç yüz bin), bu yüzden tamamen benzersiz değil, ama kesinlikle biraz entropi ekliyor.
Benzer şekilde, connectAPI sitenize ilk kez eriştiğinizde geri dönüş süresi her seferinde biraz, ancak ölçülebilir şekilde farklı olacaktır. Benzer şekilde, getaddrinfoweb API'nızın ana makine adını ilk kez ararken her cihaz için biraz farklı, ölçülebilir bir zaman alacaktır.

Bu üç veya dört entropi kaynağını (MAC adresi, ilk açılış zamanı, ilk kez önyükleme zamanı, bağlantı zamanı) birleştirin ve bundan bir karma hesaplayın. MD5 bu amaç için gayet iyi olacak. Orada eşsizsiniz.

Bu benzersizliği gerçekten garanti etmese de , anlaşılır bir başarısızlık şansı ile "hemen hemen" bunu garanti eder. Aynı mikrosaniyede ilk kez açılan ve aynı önyükleme yapan ve sitenize bağlanan aynı MAC'lara sahip iki cihazınız olması gerekir. Bu olmayacak. Eğer olursa, hemen piyango oynamaya başlamalısınız çünkü tüm maçlarda kazanacağınız garantilidir.

Bununla birlikte, "olmayacak" bir garanti olarak yeterince iyi değilse, web API'nize ilk kez eriştiklerinde her cihazı sıralı olarak artan bir sayı (sunucuda oluşturulan) iletin. Cihaz bu numarayı saklasın, bitti.


komut olması gerekiyorduntpq -c rl?
Tom

1
@Tom: Evet, cevabımda neden "r1" okuduğundan emin değilim, kesinlikle "rl" olmalı !? Bunu düzeltir :)
Damon

Yaklaşık 30 yıl önce bir LAN yönetiyordum ve yinelenen MAC'larımız vardı. Satıcı MAC oluşturmak için I / O kartının seri numarasını kullandı, ancak model numarasını eklemeyi unuttular ve aynı seri numarasına sahip iki farklı modelimiz vardı. Neyse ki MAC'ı manuel olarak ayarlamak için bir yol sağladılar, bu yüzden cihazlardan birinde overrode ettik.
Barmar

MAC adresleri genellikle yonga satıcısı tarafından değil, pano satıcısı tarafından ayrılır. Bu nedenle Intel'in yalnızca Intel yongaları için değil, akıllı kartlar için adres alması gerekir.
plugwash

Muhtemelen son paragrafınıza benzer bir rotaya gideceğiz. Fikirler için teşekkürler!
Matt Phillips

2

Buradaki sorun gerçekten bir XY Sorunu olduğundan, bunu çözme konusuna değineceğim: tanımlayıcıları önceden yüklemeye gerek kalmadan ilk kez önyüklendiğinde bir donanım için benzersiz bir tanımlayıcı nasıl elde edilir. Tüm iyi yöntemler gerçekten bir şeye kaynar: bir entropi kaynağına sahip olmak.

Donanımınızda bir donanım entropi kaynağı olacak şekilde tasarlanmış bir şey varsa (not: TLS için gerekli olduğundan, temelde herhangi bir uygun IoT cihazı uygulaması için bir gerekliliktir, bu nedenle donanımınız bunu göz önünde bulundurarak tasarlanmalıdır), sadece bunu kullanın. Değilse, yaratıcı olmalısınız.

Neyse ki, şimdiye kadar yapılmış hemen hemen her bilgisayar mükemmel bir entropi kaynağına sahiptir: kristal osilatörler (saatler). Belirli bir kristalin oranı sadece hassas sıcaklık değişikliklerine bağlı değildir, aynı zamanda doğrusal olmayan yollarla sıcaklık histerezisine bile maruz kalır . Bununla birlikte, entropiyi ölçmek için, ilkini zamanlamak için ikinci bir saate ihtiyacınız vardır. Bunun anlamı, bilgisayarınızda örnekleme yapabileceğiniz en az iki saat olduğunda, diğeri tarafından ölçülen hızını çok yüksek kaliteli bir entropi kaynağı olarak kullanabilirsiniz.


1
Op tamamen belirleyici olmayan bir değerle çalışabiliyorsa, bu iyi bir fikirdir. Soru, cihazın yeniden başlatılması ve yeniden değer kazanılması durumunda, yönetim ve süreklilik ihtiyaçlarına uygun olup olmayacağıdır.
Frank Thomas

0

Başka çok iyi yanıtlar olduğu için doğrudan soruyu cevaplamak istemiyorum, ancak bunun yerine cihaz kimliği olarak kullanılabilecek daha uygun bir değer önermek istiyorum.

Donanımınız destekliyorsa SMBIOS UUID'yi kullanmayı düşünebilirsiniz. Bu, anakart ve dolayısıyla cihaz için benzersiz bir kimliktir. IoT cihazlarının bile birden fazla NIC'ye (LAN ve WiFi) sahip olabileceğini unutmayın, bu nedenle MAC yolunu seçerseniz, tutarlı bir şekilde bir tane seçme yöntemi bulmanız gerekir.

Ayrıca UUID benzersiz olsa da, sadece dostça bir ortamda benzersiz olduğu garanti edildiği için güvenlik amacıyla kullanılmamalıdır.


0

Bir XY sorunu varsaymaktan nefret ediyorum, çünkü genellikle OP, işleri yaptıkları gibi yapmak için karmaşık bir nedene sahip olsa da, MAC adresi gibi her cihaz için benzersiz bir tanımlayıcı oluşturmak için başka yöntemlere bakmak isteyebilirsiniz. , cihazda "yerleşiktir" ve kendi tanımlayıcınızı oluşturmanıza gerek yoktur.

Cihazların hepsi aynı üreticiden (veya daha iyisi aynı modelden) ise, tanımlayıcıyı oluşturmak için seri numarasını kullanabilirsiniz. Bu, farklı seri numarası formatları ve gömülü / tescilli cihazlar durumunda seri numarasını almak için muhtemelen farklı API'ler nedeniyle, üretici adı ve model numarasıyla birleştirseniz bile, farklı üreticilerin cihazlarında çok iyi çalışmaz. . Aygıtın seri numarasına bir alternatif, anakart, CPU veya sabit diskin seri numarası olabilir (Windows lisanslamasının bunların bir kombinasyonunu kullandığına inanıyorum).

Dosya sistemi formatlayıcılarının her dosya sistemi için genellikle benzersiz bir kimlik oluşturduğunu hatırlamakta fayda var. Aynı görüntüdeki tüm aygıtları (ilgisiz nedenlerle yapmanızı öneririm) hazırlamadığınız sürece, her sabit diskin kullanabileceğiniz dosya sisteminde depolanmış benzersiz bir kimliği olacaktır.

Gerçekten neden yok olsa söyledikten değil senin provizyon işleminin bir parçası olarak, bu bile gerekli olmamalıdır rağmen onlar (aslında benzersiz olduklarını belirleyebilir özellikle biz en fazla söz ediyoruz varsayarak, MAC adreslerini kullanmak birkaç bin cihaz). Tabii ki, kullandığınız her şeyin cihaz tarafından aldatılabileceğini unutmayın, bu nedenle güvenilmeyen bir ortamda kimlik doğrulaması için buna güvenmeyin (bunun özel bir kurulum olduğunu söylediniz, bu nedenle muhtemelen bu "güvenmediğiniz" bir ortamdır. müşterinizin kendi cihazlarını kendi sunucularına karşı aldatmasına dikkat edin, ancak cihazların yönetimi üçüncü taraflara veya son kullanıcılara devrediliyorsa bunu akılda tutmaları gerekir).


Aslında bunun bir XY problemi olduğundan emin değilim, en azından seyircilerimiz için değil. OP'nin yazılımını bir cihazı kalıcı olarak tanımlaması ve daha sonra değerleri mantıksal olarak ona bağlaması için bir mekanizmaya ihtiyaç duyması net ve açıktır. OP yanlış soru sormuyor; cihazları tanımlamak için hangi mekanizmayı kullanabileceklerini sorarlarsa, bu soru programlama ile bir ilişkisi olduğu ve bilgisayar donanımı veya yazılımıyla ilgili belirli bir sorunu ifade etmediği için offtopik olarak kapatılmış olurdu. Teknik bir karar hakkında akran değerlendirmesi istemek XY değildir.
Frank Thomas

@FrankThomas Dediğim gibi, bir XY sorunu varsaymaktan nefret ediyorum. Burada bir XY problemi olduğunu sanmıyorum. Başka çözümler olsa bile bir soruna belirli bir çözümün incelenmesinin tamamen kabul edilebilir olduğunu kabul ediyorum. Ancak insanlar genellikle bu tür soruları XY problemleri olmakla suçlarlar.
Micheal Johnson
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.