Alasan untuk tidak menganggap alamat MAC perangkat unik


18

Dalam skenario di mana Anda mengontrol penyediaan perangkat keras dan dapat menentukan bahwa semua perangkat dengan model perangkat keras yang sama memang memiliki alamat MAC unik untuk antarmuka jaringan mereka, apakah ada kelemahan dalam menulis kode yang menggunakan asumsi itu? (Catatan berdasarkan beberapa balasan: Saya tidak akan menulis kode jaringan menggunakan asumsi ini. Ini hanya dimaksudkan sebagai cara dengan sentuhan rendah untuk memiliki uuid per perangkat tanpa harus secara manual membuat dan memperbarui HDD perangkat dengan id sebelum penggelaran ke lapangan)

Backstory untuk ini adalah saya sedang meneliti implementasi perangkat keras IOT jenis implementasi untuk klien. Kami akan menyediakan satu set perangkat perangkat keras dengan kemampuan jaringan untuk dipasang di lokasi terpencil. Perangkat ini kemudian akan berkomunikasi kembali ke API dengan mengirim pesan. Untuk mengurangi kompleksitas pengaturan, saya berharap untuk mengirim alamat MAC dari antarmuka jaringan pada perangkat dalam pesan, untuk mengikat pesan-pesan ini kembali ke "device_id" di sisi API. Pikir saya adalah bahwa dengan membuatnya menjadi sesuatu yang tidak harus diatur pada perangkat sebelum digunakan, itu hanya dapat ditanyakan selama operasi normal. Saya dapat dengan aman berasumsi bahwa kita dapat menentukan bahwa alamat MAC dari setiap perangkat sebenarnya unik,


4
Perangkat virtual telah menghasilkan alamat MAC, yang unik hanya domain siaran lokal. Ada contoh lain di mana mac mungkin bertabrakan dengan yang lain - beberapa perangkat memungkinkan Anda memperbarui mac di firmware. Perangkat HA memiliki mac virtual dalam beberapa kasus. Ini adalah contoh, mereka mungkin tidak relevan dengan skenario Anda.
Paul

9
Orang-orang sangat bingung tentang keunikan alamat MAC. Yang unik tentang alamat MAC adalah OUI yang ditetapkan untuk suatu organisasi. Alamat individu dalam OUI tidak dijamin unik, dan IEEE mengatakan bahwa penetapan alamat dalam OUI sepenuhnya tergantung pada kebijakan pemilik OUI.
Ron Maupin

2
Juga, sangat mudah bagi seseorang untuk memodifikasi alamat MAC suatu perangkat. Itu berarti bahwa alamat MAC dapat dikloning atau ditugaskan dengan cara yang membuat duplikat. Seseorang yang memberikan alamat MAC seharusnya mengatur bit U / L, tetapi itu jarang terjadi.
Ron Maupin

5
Ada, harus ada alamat MAC yang identik di alam bebas. Sebagai contoh, Intel telah mendaftarkan 7 OUI, masing-masing memiliki 16,7 juta alamat di bawah awalan masing-masing. Itu total 116 juta alamat. Heck, ada kartu jaringan Intel di hampir setiap motherboard. Apakah Anda akan memberi tahu saya ada kurang dari 116 juta komputer di dunia? Tidak, tentu saja tidak. Tetapi konsekuensi logisnya adalah: Tentu saja MAC sama sekali tidak unik. Hanya saja kemungkinan memiliki dua MAC identik pada LAN yang sama agak rendah, jadi itu bukan masalah.
Damon

7
Saya berakhir dengan dua alamat MAC yang identik di jaringan yang sama secara kebetulan - Sungguh sulit untuk melakukan debug.
Kristen

Jawaban:


34

Berdasarkan pada pernyataan Anda bahwa Anda dapat mengonfirmasi selama menetapkan bahwa MAC pabrikan sebenarnya unik dalam jaringan perangkat yang Anda buat (yang tidak dengan sendirinya merupakan kepastian, meskipun seharusnya), Anda mungkin melanjutkan dengan baik, tetapi pertimbangkan pertanyaan-pertanyaan berikut:

  • Apakah Anda menggunakan MAC untuk pemeriksaan keamanan (otentikasi, otorisasi)? Jika demikian, MAC tidak cukup. Bahkan tidak mempertimbangkannya. Gunakan struktur kriptografi, dan kirimkan permintaan auth aman.

  • Apakah 48 bit cukup lebar? Mungkin, tapi patut ditanyakan.

  • Apakah Anda perlu memperbaiki perangkat dengan mengganti nic?

  • Jika Anda mengganti perangkat secara keseluruhan, atau mengganti nic, apakah Anda harus dapat mengaitkan alamat baru ke kunci yang ada dalam database Anda untuk memastikan kesinambungan pengumpulan data untuk lokasi penempatan?

  • Apakah akan ada antarmuka perawatan yang dengannya pengguna (resmi atau tidak) dapat mengubah nic di tingkat ROM, driver, atau OS? Seorang penyerang dapat memperkenalkan kelemahan pada data Anda jika mereka memodifikasi MAC.

  • Apakah data Anda akan digabungkan dengan sumber data lain menggunakan MAC sebagai kunci?

  • Apakah Anda pernah menggunakan MAC untuk tujuan jaringan apa pun selain hanya menavigasi LAN layer2 yang terhubung dengan perangkat (kabel atau nirkabel)?

  • Apakah LAN yang terhubung dengan perangkat Anda, menjadi jaringan pribadi, atau jaringan yang akan menghubungkan banyak klien sementara (seperti telepon seluler karyawan)?

Jika jawaban Anda benar

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

maka saya tidak bisa memikirkan kesalahan nyata dalam rencana Anda.

Perlu diingat, Anda tidak perlu MAC unik secara global untuk melakukan ini; Anda hanya perlu memastikan bahwa subset perangkat Internet yang memanggil API Anda unik. Sama seperti duplikat nic yang ditugaskan di dua kota yang berbeda tidak dapat bertabrakan karena mereka berada di LAN yang berbeda, Anda tidak dapat memiliki collision kunci basis data pada MAC jika tidak pernah memanggil API Anda.


2
Selain itu, Pada pertengahan 1990-an, seorang teman sysadmin mengatakan kepada saya bahwa dia baru saja menerima sekotak Nics dari produsen yang semuanya memiliki NIC yang sama. Saya tidak tahu seberapa benar kisah itu, tetapi hanya tentang satu-satunya dari jenisnya yang pernah saya dengar, di luar dugaan umum bahwa beberapa produsen telah "menggunakan secara berlebihan" alokasi mereka pada satu waktu atau yang lain.
Frank Thomas

Terima kasih atas jawaban terincinya. Saya pikir satu-satunya jawaban yang tidak cocok adalah # 3. Tetapi jika kita harus memperbaiki perangkat dengan nic yang rusak kita mungkin akan mengganti seluruh perangkat. Klien mengontrol api dan perangkat keras, dan akan ada kontrol fisik di tempat untuk mencegah akses fisik yang tidak sah ke perangkat. Juga, saya pikir penting untuk dicatat bahwa banyak komentar / poin di sini terkait dengan mencoba menggunakan MAC untuk keperluan jaringan, yang saya pahami bisa bermasalah untuk menganggapnya unik. Ini murni untuk uuid / perangkat yang tidak memerlukan pembangkit
Matt Phillips

cont: yang saya pahami akan spesifik perangkat / produsen nic.
Matt Phillips

7
@FrankThomas: Itu memang terjadi . Saya pernah ke beberapa konvensi komputer di mana sekelompok beberapa lusin sebagian besar profesional memiliki beberapa orang mengatakan mereka pernah mengalami ini. Rupanya departemen perbaikan pabrikan besar cenderung melakukan hal itu.
TOOGAM

@FrankThomas baru saja menerima sekotak Nics ... semuanya memiliki NIC yang sama
Dmitry Kudriavtsev

9

Alamat MAC tidak unik

Mungkin ada, dan akan ada duplikat dengan MAC. Ada beberapa alasan untuk itu, salah satunya adalah bahwa mereka tidak perlu (secara global) unik.

MAC harus unik di jaringan lokal, sehingga ARP / NDP dapat melakukan tugasnya, dan switch tahu ke mana harus mengirim datagram yang masuk. Biasanya (belum tentu) bahwa prasyarat terpenuhi dan semuanya berfungsi dengan baik, hanya karena kemungkinan memiliki dua MAC yang identik pada LAN yang sama, bahkan jika mereka tidak unik, cukup rendah.

Alasan lain adalah hanya ada lebih banyak perangkat daripada alamat. Sementara alamat 48 bit terdengar seperti ada cukup alamat untuk semua orang sampai akhir hari, itu tidak terjadi.

Ruang alamat dibagi menjadi dua bagian 24-bit (ini sedikit lebih rumit, tapi mari kita abaikan detail kecilnya). Setengahnya adalah OUI yang bisa Anda daftarkan dengan IEEE dan tetapkan ke perusahaan Anda sekitar 2.000 dolar. Sisanya 24 bit, Anda melakukan apa pun yang Anda inginkan. Tentu saja Anda dapat mendaftarkan beberapa OUI, yang merupakan apa yang pemain besar lakukan.

Ambil Intel sebagai contoh. Mereka telah mendaftarkan total 7 OUI, memberi mereka total 116 juta alamat.
Mainboard komputer saya (yang menggunakan chipset X99) dan mainboard laptop saya serta mainboard dari setiap komputer berbasis x86 yang saya miliki selama 10-15 tahun terakhir memiliki kartu jaringan Intel sebagai bagian dari chipset. Tentu saja ada lebih dari 116 juta komputer berbasis Intel di dunia. Dengan demikian, MAC mereka tidak mungkin unik (dalam arti global unik).

Juga, kasus telah dilaporkan tentang uh ... lebih murah ... produsen hanya "mencuri" alamat dari OUI orang lain. Dengan kata lain, mereka hanya menggunakan alamat acak. Saya pernah mendengar tentang produsen yang hanya menggunakan alamat yang sama untuk rangkaian produk yang lengkap juga. Tak satu pun dari itu benar-benar sesuai atau masuk akal, tetapi apa yang dapat Anda lakukan tentang itu. Kartu jaringan ini ada. Sekali lagi: Kemungkinan itu menjadi masalah praktis masih sangat rendah jika alamat digunakan untuk apa yang dimaksudkan, Anda perlu memiliki dua dari mereka di LAN yang sama untuk memperhatikan.

Sekarang, apa yang harus Anda lakukan dengan masalah Anda?

Solusinya mungkin lebih sederhana dari yang Anda pikirkan. Perangkat IoT Anda kemungkinan besar akan membutuhkan waktu, biasanya waktu secara otomatis diperoleh melalui NTP. Ketepatan khas NTP adalah dalam rentang mikrodetik (ya, itu mikro, bukan mili). Saya hanya berlari ntpq -c rluntuk memastikan dan diberitahu 2 -20 .

Kemungkinan dua perangkat Anda dinyalakan untuk pertama kalinya pada mikrodetik yang sama persis sangat rendah. Secara umum mungkin terjadi (terutama jika Anda menjual jutaan dari mereka dalam waktu yang sangat singkat, selamat atas kesuksesan Anda!), Tentu saja. Tapi itu tidak terlalu mungkin - dalam praktiknya itu tidak akan terjadi. Dengan demikian, hemat waktu setelah boot pertama kali di toko permanen.

Waktu boot perangkat IoT Anda akan sama pada setiap perangkat. Kecuali itu tidak benar sama sekali .
Diberi timer resolusi tinggi, waktu boot berbeda secara terukur bahkan pada perangkat yang sama, setiap waktu. Mungkin hanya beberapa jam yang berbeda (atau beberapa ratus ribu, jika Anda membaca sesuatu seperti penghitung waktu CPU), jadi tidak terlalu unik sama sekali, tetapi tentu saja menambahkan beberapa entropi.
Demikian pula, waktu yang diperlukan connectuntuk kembali saat pertama kali Anda mengakses situs API Anda akan sedikit, tetapi terukur, berbeda setiap waktu. Demikian pula, getaddrinfoakan mengambil jumlah waktu yang sedikit berbeda dan terukur untuk setiap perangkat saat mencari nama host API web Anda untuk pertama kalinya.

Gabungkan tiga atau empat sumber entropi (alamat MAC, waktu penyalaan pertama, waktu untuk boot untuk pertama kalinya, hubungkan waktu) dan hitung hash dari situ. MD5 akan baik-baik saja untuk tujuan itu. Di sana, Anda unik.

Meskipun itu tidak benar - benar menjamin keunikan, itu "cukup banyak" menjaminnya, dengan kemungkinan kegagalan yang bisa diabaikan. Anda harus memiliki dua perangkat dengan MAC identik yang dihidupkan untuk pertama kalinya pada mikrodetik yang sama, dan mengambil waktu yang sama persis untuk mem-boot, dan untuk terhubung ke situs Anda. Itu tidak akan terjadi. Jika itu terjadi, Anda harus segera mulai bermain lotre karena untuk semua penampilan, Anda dijamin akan menang.

Namun, jika "tidak akan terjadi" tidak cukup baik sebagai jaminan, cukup berikan setiap perangkat angka yang meningkat secara berurutan (dihasilkan di server) saat pertama kali mereka mengakses API web Anda. Biarkan perangkat menyimpan nomor itu, selesai.


adalah perintah yang seharusnyantpq -c rl?
Tom

1
@ Tom: Ya, saya tidak yakin mengapa itu berbunyi "r1" dalam jawaban saya, tentu harus "rl" !? Akan memperbaikinya :)
Damon

Saya mengelola LAN sekitar 30 tahun yang lalu dan kami memiliki duplikat MAC. Vendor menggunakan nomor seri papan I / O untuk menghasilkan MAC, tetapi mereka lupa untuk memasukkan nomor model, dan kami memiliki dua model yang berbeda dengan nomor seri yang sama. Untungnya mereka menyediakan cara untuk mengatur MAC secara manual, jadi kami mengesampingkannya di salah satu perangkat.
Barmar

Alamat MAC biasanya dialokasikan oleh vendor papan, bukan vendor chip. Jadi Intel hanya perlu mendapatkan alamat untuk papan intel bukan chip intel.
plugwash

Kami mungkin akan menuju rute yang mirip dengan paragraf terakhir Anda. Terima kasih atas ide-idenya!
Matt Phillips

2

Karena masalah di sini benar-benar merupakan Masalah XY, saya akan membahas pemecahannya: bagaimana cara mendapatkan pengidentifikasi unik untuk sebuah perangkat keras saat pertama kali melakukan booting tanpa harus melakukan pramuat pengidentifikasi ke dalamnya. Semua metode yang baik benar-benar bermuara pada satu hal: memiliki sumber entropi.

Jika perangkat keras Anda memiliki sesuatu yang dirancang untuk menjadi sumber entropi perangkat keras (catatan: ini pada dasarnya merupakan persyaratan untuk implementasi perangkat IoT yang tepat karena diperlukan untuk TLS, jadi perangkat keras Anda harus dirancang dengan mengingat hal itu), gunakan saja itu. Jika tidak, Anda harus kreatif.

Untungnya, hampir setiap komputer yang pernah dibuat memiliki sumber entropi yang sangat baik: osilator kristal (jam). Laju kristal yang diberikan tidak hanya tergantung pada perubahan suhu yang halus, tetapi juga tunduk pada histeresis suhu dengan cara nonlinier. Namun, untuk mengukur entropi, Anda perlu jam kedua untuk menghitung waktu pertama. Artinya, setiap kali komputer Anda memiliki setidaknya dua jam yang dapat Anda sampel, Anda dapat menggunakan laju satu yang diukur oleh yang lain sebagai sumber entropi berkualitas sangat tinggi.


1
Ini adalah ide yang bagus, asalkan op dapat bekerja dengan nilai yang sepenuhnya non-deterministik. Pertanyaannya adalah, jika perangkat diinisialisasi ulang, dan nilainya kembali, apakah akan sesuai dengan kebutuhan mereka untuk manajemen dan kontinuitas.
Frank Thomas

0

Saya tidak ingin langsung menjawab pertanyaan karena ada respons lain yang sangat baik tetapi saya ingin menyarankan nilai lain yang lebih cocok yang mungkin tersedia untuk digunakan sebagai id perangkat.

Jika didukung oleh perangkat keras Anda, Anda dapat mempertimbangkan menggunakan SMBIOS UUID. Ini adalah id unik untuk mainboard dan perangkat. Ingatlah bahkan perangkat IoT dapat memiliki beberapa NIC (LAN & WiFi) jadi jika Anda memilih rute MAC, Anda masih perlu menemukan metode untuk memilih satu secara konsisten.

Selain itu, meskipun UUID unik, tidak boleh digunakan untuk tujuan keamanan karena hanya dijamin unik dalam lingkungan yang ramah.


0

Saya benci mengasumsikan masalah XY karena sering OP memiliki alasan kompleks meskipun baik untuk melakukan hal-hal seperti yang mereka lakukan tetapi Anda mungkin ingin melihat metode lain untuk menghasilkan pengidentifikasi unik untuk setiap perangkat yang, seperti alamat MAC , "bawaan" ke perangkat dan tidak perlu membuat pengenal Anda sendiri.

Jika semua perangkat berasal dari pabrikan yang sama (atau, bahkan lebih baik, model yang sama) Anda dapat menggunakan nomor seri untuk menghasilkan pengidentifikasi. Ini tidak bekerja dengan baik di seluruh perangkat dari pabrikan yang berbeda, bahkan jika Anda menggabungkannya dengan nama pabrikan dan nomor model, karena format nomor seri yang berbeda dan kemungkinan API yang berbeda untuk mendapatkan nomor seri dalam hal perangkat tertanam / berpemilik . Alternatif untuk nomor seri perangkat mungkin nomor seri motherboard, CPU, atau hard disk (saya percaya lisensi Windows menggunakan kombinasi dari ini).

Perlu diingat juga bahwa pemformat sistem file biasanya menghasilkan ID unik untuk setiap sistem file. Kecuali jika Anda menyiapkan semua perangkat dari gambar yang sama (yang saya sarankan lakukan, untuk alasan yang tidak terkait), setiap hard disk sudah memiliki ID unik yang disimpan dalam sistem file yang dapat Anda gunakan.

Karena itu, sebenarnya tidak ada alasan untuk tidak menggunakan alamat MAC, terutama jika sebagai bagian dari proses penyediaan Anda, Anda dapat menentukan bahwa mereka sebenarnya unik (meskipun ini bahkan tidak perlu, dengan asumsi kita berbicara tidak lebih dari beberapa ribu perangkat di sini). Tentu saja, ingatlah bahwa apa pun yang Anda gunakan dapat dipalsukan oleh perangkat, jadi jangan mengandalkan ini untuk otentikasi di lingkungan yang tidak terpercaya (Anda mengatakan itu adalah pengaturan pribadi sehingga mungkin ini adalah lingkungan "tepercaya" di mana Anda tidak Peduli tentang klien Anda yang memalsukan perangkat mereka sendiri terhadap server mereka sendiri, tetapi mereka harus mengingat hal ini jika manajemen perangkat diserahkan kepada pihak ketiga atau pengguna akhir).


Saya sebenarnya tidak yakin bahwa ini sebenarnya masalah XY, setidaknya tidak untuk audiens kami. Bahwa OP membutuhkan mekanisme agar perangkat lunaknya dapat mengidentifikasi suatu perangkat secara terus-menerus, dan kemudian secara logis mengikat nilai-nilai padanya, jelas dan tidak ambigu. OP tidak mengajukan pertanyaan yang salah; jika mereka bertanya mekanisme apa yang dapat mereka gunakan untuk mengidentifikasi perangkat, pertanyaan ini akan ditutup sebagai offtopic karena memiliki hubungan dengan pemrograman, dan tidak mengungkapkan masalah spesifik dengan perangkat keras atau perangkat lunak komputer. Meminta peer review tentang keputusan teknis bukan XY.
Frank Thomas

@ FrankThomas Seperti yang saya katakan, saya benci mengasumsikan masalah XY. Saya tidak mengasumsikan masalah XY di sini. Saya setuju bahwa dapat diterima untuk meminta peninjauan solusi tertentu untuk suatu masalah walaupun ada solusi lain. Tetapi orang sering menuduh pertanyaan semacam itu sebagai masalah XY.
Micheal Johnson
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.