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 rl
untuk 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 connect
untuk kembali saat pertama kali Anda mengakses situs API Anda akan sedikit, tetapi terukur, berbeda setiap waktu. Demikian pula, getaddrinfo
akan 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.