장치 MAC 주소가 고유하지 않은 이유


18

하드웨어 프로비저닝을 제어하고 동일한 하드웨어 모델을 가진 모든 장치가 네트워킹 인터페이스에 대해 고유 한 MAC 주소를 가지고 있다고 판단 할 수있는 시나리오에서 해당 가정을 사용하는 코드를 작성하는 데 단점이 있습니까? (일부 답글을 기반으로 한 참고 사항 :이 가정을 사용하여 네트워킹 코드를 작성하지는 않겠습니다. 이전에는 ID로 장치 HDD를 수동으로 생성하고 업데이트하지 않고 장치 당 uuid를 갖는 터치가 적은 방법입니다 현장에 배치)

이것에 대한 배경 이야기는 클라이언트를위한 개인 하드웨어 IOT 유형 구현을 연구하고 있다는 것입니다. 원격 위치에 설치할 네트워킹 기능이있는 하드웨어 장치 세트를 프로비저닝합니다. 그런 다음 이러한 장치는 메시지를 보내 API와 다시 통신합니다. 설정의 복잡성을 줄이기 위해 메시지에서 장치의 네트워크 인터페이스 MAC 주소를 보내서 API 쪽의 "device_id"에 다시 연결하기를 바랐습니다. 내 생각은 사용하기 전에 장치에 설정할 필요가없는 것으로 만들어 정상적인 작동 중에 쿼리 할 수 ​​있다고 생각합니다. 각 기기의 MAC 주소가 실제로 고유하다고 판단 할 수 있다고 가정 할 수 있습니다.


4
가상 장치는 로컬 브로드 캐스트 도메인에서만 고유 한 MAC 주소를 생성했습니다. Mac이 다른 Mac과 충돌 할 수있는 다른 경우가 있습니다. 일부 장치에서는 펌웨어에서 Mac을 업데이트 할 수 있습니다. HA 장치에는 경우에 따라 가상 Mac이 있습니다. 이러한 예는 시나리오와 관련이 없을 수 있습니다.
Paul

9
사람들은 MAC 주소의 고유성에 대해 크게 혼란스러워합니다. MAC 주소의 고유 한 점은 조직에 할당 된 OUI입니다. OUI 내의 개별 주소는 고유 하지 않다고 IEEE는 OUI 내의 주소 할당은 OUI 소유자의 재량에 달려 있다고 말합니다.
Ron Maupin

2
또한 개인이 장치의 MAC 주소를 수정하는 것은 매우 쉽습니다. 이는 MAC 주소가 복제본을 생성하는 방식으로 복제되거나 할당 될 수 있음을 의미합니다. MAC 주소를 할당하는 개인은 U / L 비트를 설정해야하지만 거의 발생하지 않습니다.
Ron Maupin

5
실제로 동일한 MAC 주소 가 있어야합니다 . 예를 들어, 인텔은 7 개의 OUI를 등록했으며, 각각의 접두사 아래에 1670 만 개의 주소가 있습니다. 총 1 억 1700 만 개의 주소입니다. 거의 모든 마더 보드 에 인텔 네트워크 카드가 있습니다. 전 세계에 1 억 1 천 6 백만 대 미만의 컴퓨터가 있다고 말씀해 주시겠습니까? 물론 아닙니다. 그러나 논리적 결과는 다음과 같습니다. 물론 MAC는 어떤 식 으로든 고유하지 않습니다. 동일한 LAN에 두 개의 동일한 MAC이있을 가능성은 다소 낮기 때문에 문제가되지 않습니다.
데이먼

7
나는 순전히 같은 네트워크에서 두 개의 동일한 MAC 주소로 끝났다. 디버그하기는 어려웠다.
Christian

답변:


35

프로비저닝하는 동안 제조업체 MAC이 실제로 만드는 장치의 네트워크 내에서 고유하다는 사실을 확인한 진술에 따르면 (아직 확실하지는 않지만 확실하게 진행 중), 그러나 다음 질문을 고려하십시오.

  • 보안 검사 (인증, 권한 부여)에 MAC을 사용하고 있습니까? 그렇다면 MAC로는 충분하지 않습니다. 그것을 고려하지 마십시오. 암호화 구조를 사용하고 모든 인증 요청을 안전하게 전송하십시오.

  • 48 비트로 충분합니까? 아마도 가치가 있지만 물어볼 가치가 있습니다.

  • 장치를 교체하여 장치를 수리해야합니까?

  • 장치를 완전히 교체하거나 nic을 교체하는 경우 배포 위치에 대한 데이터 수집의 연속성을 보장하기 위해 데이터베이스의 기존 키에 새 주소를 연결할 수 있어야합니까?

  • ROM (드라이버) 또는 OS 레벨에서 nic을 변경할 수있는 유지 보수 인터페이스가 있습니까? 공격자가 MAC을 수정하려는 경우 데이터에 결함이 발생할 수 있습니다.

  • MAC을 키로 사용하여 데이터가 다른 데이터 소스와 결합됩니까?

  • 장치가 연결된 (유선 또는 무선) 계층 2 LAN을 단순히 탐색하는 것 이외의 다른 네트워킹 목적으로 MAC을 사용 하시겠습니까?

  • 장치가 연결된 LAN, 개인 네트워크 또는 직원 휴대폰과 같은 많은 임시 클라이언트가 연결되는 LAN입니까?

당신의 대답이

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

당신의 계획에 어떤 결함도 생각할 수 없습니다.

이를 막기 위해 전 세계적으로 고유 한 MAC이 필요하지 않습니다. API를 호출하는 인터넷 장치의 하위 집합이 고유한지 확인하면됩니다. 서로 다른 LAN에 있기 때문에 서로 다른 두 도시에 할당 된 중복 닉이 충돌 할 수없는 것처럼 API를 호출하지 않으면 MAC에서 데이터베이스 키 충돌을 수행 할 수 없습니다.


2
제쳐두고, 90 년대 중반, 한 sysadmin 친구는 제조업체에서 모두 같은 NIC를 가진 Nics 상자를 받았다고 말했습니다. 나는 그 이야기가 얼마나 사실인지 전혀 모른다. 그러나 일부 제조사들이 한 번에 다른 방식으로 할당을 과도하게 사용했다는 일반적인 주장을 넘어서, 내가 들었던 유일한 이야기에 관한 이야기이다.
Frank Thomas

자세한 답변 감사합니다. 나는 일치하지 않는 유일한 대답은 # 3이라고 생각합니다. 그러나 깨진 닉으로 장치를 수정 해야하는 경우 아마도 전체 장치를 대체 할 것입니다. 클라이언트는 API와 하드웨어를 모두 제어하며 장치에 대한 무단 물리적 액세스를 방지하기위한 물리적 제어 기능이 있습니다. 또한, 여기에있는 많은 의견 / 요점은 네트워킹 목적으로 MAC을 사용하려고 시도하는 것과 관련이 있으며, 내가 생각하기에는 문제가 될 수 있음을 이해하는 것이 중요하다고 생각합니다. 이것은 순수하게 생성 할 필요가없는 UUID / 장치를위한 것입니다
Matt Phillips

계속 : 내가 이해하는 것은 장치 / 닉 제조업체마다 다릅니다.
Matt Phillips

7
@FrankThomas는 : 그것은 일어나지 않습니다 . 저는 수십 명의 대부분의 전문가 그룹에 소수의 사람들이이 문제에 직면했다고 말한 컴퓨터 컨벤션에 가봤습니다. 분명히 대기업의 리퍼 비싱 부서는 특히 그렇게하는 경향이 있습니다.
TOOGAM

@FrankThomas는 단지 NIC를 상자를 받았습니다 ... 모두가 같은 NIC했다
드미트리 Kudriavtsev

9

MAC 주소는 고유하지 않습니다

MAC과 중복 될 수 있습니다. 그 이유는 여러 가지가 있습니다. 하나는 (전 세계적으로) 고유 할 필요가 없기 때문 입니다.

MAC은 로컬 네트워크에서 고유해야하므로 ARP / NDP가 작업을 수행 할 수 있으며 스위치는 들어오는 데이터 그램을 전송할 위치를 알고 있습니다. 일반적으로 (필요하지는 않지만) 전제 조건이 충족되고 상황이 정상적으로 작동합니다. 단순히 동일한 LAN에 두 개의 동일한 MAC이 고유하지는 않더라도 매우 낮기 때문입니다.

또 다른 이유는 단순히 주소보다 많은 장치가 존재하기 때문입니다. 48 비트 주소는 끝날 때까지 모든 사람에게 충분한 주소가있는 것처럼 들리지만 그렇지 않습니다.

주소 공간은 2 개의 24 비트 반으로 나뉩니다 (약간 더 복잡하지만 작은 세부 사항은 무시합시다). 절반은 IEEE에 등록하고 회사에 약 2000 달러를 할당 할 수있는 OUI입니다. 나머지 24 비트는 원하는대로합니다. 물론 여러 OUI를 등록 할 수 있으며, 이는 더 큰 플레이어가하는 일입니다.

인텔을 예로 들어 보겠습니다. 총 7 개의 OUI를 등록하여 총 1 억 1,600 만 개의 주소를 제공합니다.
내 컴퓨터의 메인 보드 (X99 칩셋 사용)와 노트북의 메인 보드 및 지난 10-15 년 동안 소유 한 모든 x86 기반 컴퓨터 의 메인 보드 는 칩셋의 일부로 인텔 네트워크 카드를 가지고있었습니다. 확실히 세계에는 1 억 1 천 6 백만 대 이상의 인텔 기반 컴퓨터가 있습니다. 따라서 MAC 고유 할 수 없습니다 (전 세계적으로 고유 한 의미로).

또한, 더 싸고 ... 제조업체가 단순히 다른 사람의 OUI로부터 주소를 "스털링"하는 사례도보고되었습니다. 즉, 그들은 단지 임의의 주소를 사용했습니다. 전체 제품군에 동일한 주소를 사용하는 제조업체에 대해서도 들었습니다. 그 중 어느 것도 실제로 적합하거나 많은 의미가 없지만, 그것에 대해 무엇을 할 수 있습니까? 이 네트워크 카드가 존재합니다. 다시 : 주소가 의도 한대로 사용되는 경우 실제 문제가 될 가능성 은 여전히 ​​매우 낮 습니다. 동일한 LAN에 두 개가 있어야 통지 할 수 있습니다.

이제 문제에 대해 어떻게해야합니까?

해결책은 생각보다 간단 할 것입니다. IoT 장치에는 시간 개념이 필요할 것입니다. 일반적으로 시간은 NTP를 통해 자동으로 얻습니다. NTP의 일반적인 정밀도는 마이크로 초 범위 (예, 밀리미터가 아닌 마이크로 미터)입니다. 나는 방금 달려서 2-20ntpq -c rl 으로 들었다 .

두 장치가 정확히 동일한 마이크로 초에 처음으로 켜질 가능성은 매우 낮습니다. 일반적으로 일어날 수 있습니다 (특히 짧은 시간에 수백만 대를 판매하는 경우 성공을 축하합니다!). 그러나 실제로는 그렇지 않을 것입니다. 따라서 영구 저장소에서 처음 부팅 한 후 시간을 절약하십시오.

IoT 장치의 부팅 시간은 모든 장치에서 동일합니다. 그건 사실이 아닙니다 .
고해상도 타이머가 주어지면 부팅 시간은 매번 같은 장치에서도 측정 할 수있는 차이가 있습니다. CPU의 타임 스탬프 카운터와 같은 것을 읽는 경우 수십만 개의 클록 틱 만 다르므로 매우 독특하지는 않지만 엔트로피가 추가됩니다.
마찬가지로 connectAPI 사이트에 처음 액세스 할 때 반환하는 데 걸리는 시간은 매번 약간 씩 다르지만 측정 가능할 수 있습니다. 마찬가지로 getaddrinfo웹 API의 호스트 이름을 처음으로 검색 할 때 모든 기기에 대해 약간 다른 측정 시간이 걸립니다.

엔트로피의 3 ~ 4 가지 소스 (MAC 주소, 최초 전원 공급 시간, 처음 부팅 시간, 연결 시간)를 연결하고 해시를 계산하십시오. MD5는 그 목적에 적합합니다. 당신은 독특합니다.

이것이 고유성을 실제로 보장 하지는 않지만 무시할 수없는 실패 가능성으로 "거의"보장합니다. 동일한 마이크로 초에 처음으로 켜진 동일한 MAC을 가진 두 개의 장치가 있어야하고, 부팅하고 사이트에 연결하는 데 정확히 같은 시간이 걸렸습니다. 그런 일은 일어나지 않을 것입니다. 그것이 발생하면 모든 출연으로 인해 복권을 즉시 시작해야합니다. 승리가 보장됩니다.

그러나 "발생하지 않을 것"이 보장만큼 충분하지 않은 경우, 처음으로 웹 API에 액세스 할 때 각 장치를 순차적으로 증가하는 수 (서버에서 생성됨)를 전달하십시오. 장치가 해당 번호를 저장하게하십시오.


명령은 다음 ntpq -c rl?
Tom

1
@Tom : 예, 왜 내 대답에 "r1"을 읽는지 잘 모르겠습니다. 확실히 "rl"이어야합니다!? 그 :) 수정합니다
데이먼

약 30 년 전에 LAN을 관리하고 있었고 MAC이 중복되었습니다. 공급 업체는 I / O 보드의 일련 번호를 사용하여 MAC을 생성했지만 모델 번호를 포함하는 것을 잊었으므로 동일한 일련 번호를 가진 두 가지 모델이있었습니다. 운 좋게도 MAC을 수동으로 설정하는 방법을 제공했기 때문에 장치 중 하나에서 MAC을 무시했습니다.
Barmar

MAC 주소는 일반적으로 칩 공급 업체가 아닌 보드 공급 업체가 할당합니다. 따라서 인텔은 인텔 칩이 아닌 인텔 보드의 주소 만 취득하면됩니다.
plugwash

우리는 아마도 당신의 마지막 단락과 비슷한 길을 갈 것입니다. 아이디어 주셔서 감사합니다!
Matt Phillips

2

여기서 문제는 실제로 XY 문제이므로 식별자를 미리로드하지 않고 처음 부팅 할 때 하드웨어에 대한 고유 식별자를 얻는 방법을 해결하려고합니다. 모든 좋은 방법은 엔트로피의 근원을 갖는 것입니다.

하드웨어에 하드웨어 엔트로피 소스로 설계된 것이있는 경우 (참고 : TLS에 필요하기 때문에 기본적으로 적절한 IoT 장치 구현의 요구 사항이므로 하드웨어 를 염두에두고 설계 해야 함) 그냥 사용하십시오. 그렇지 않다면 창의력을 발휘해야합니다.

운 좋게도 거의 모든 컴퓨터에는 엔트로피의 훌륭한 원천 인 수정 발진기 (clock)가 있습니다. 주어진 결정의 속도는 미묘한 온도 변화에 의존 할뿐만 아니라 비선형 방식으로 온도 이력 에도 영향을받습니다 . 그러나 엔트로피를 측정하려면 첫 번째 시간을 맞추기 위해 두 번째 시계가 필요합니다. 즉, 컴퓨터에 샘플링 할 수있는 클럭이 두 개 이상있을 때마다 하나의 속도를 다른 고품질의 엔트로피 소스로 사용할 수 있습니다.


1
op가 완전히 결정적이지 않은 값으로 작동 할 수 있다면 좋은 생각입니다. 문제는 장치를 다시 초기화하고 다시 얻은 가치가 관리 및 연속성에 대한 요구에 적합 할 것입니다.
Frank Thomas

0

다른 매우 좋은 답변이 있기 때문에 질문에 직접 대답하고 싶지 않지만 대신 장치 ID로 사용할 수있는 더 적합한 다른 값을 제안하고 싶습니다.

하드웨어에서 지원하는 경우 SMBIOS UUID 사용을 고려할 수 있습니다. 메인 보드 및 장치의 고유 ID입니다. IoT 장치에도 여러 개의 NIC (LAN 및 WiFi)가있을 수 있으므로 MAC 경로를 선택하는 경우 계속해서 하나를 선택하는 방법을 찾아야합니다.

또한 UUID는 고유하지만 친숙한 환경에서만 고유하게 보장되므로 보안 목적으로 사용해서는 안됩니다.


0

나는 종종 OP가 그들이하는 방식으로 일을하는 복잡한 이유가 있지만 XY 문제를 가정하는 것이 싫지만 MAC 주소와 같은 각 장치에 대해 고유 한 식별자를 생성하는 다른 방법을 찾고 싶을 수도 있습니다. 은 기기에 '내장'되어 있으며 고유 식별자를 생성하지 않아도됩니다.

장치가 모두 동일한 제조업체 (또는 더 나은 경우 동일한 모델)의 제품인 경우 일련 번호를 사용하여 식별자를 생성 할 수 있습니다. 내장 / 소유 장치의 경우 일련 번호 형식이 다르고 일련 번호를 얻기위한 다른 API로 인해 제조업체 이름 및 모델 번호와 결합하더라도 다른 제조업체의 장치에서는 제대로 작동하지 않습니다. . 장치 일련 번호의 대안은 마더 보드, CPU 또는 하드 디스크의 일련 번호 일 수 있습니다 (Windows 라이센스는 이들 조합을 사용한다고 생각합니다).

파일 시스템 포맷터는 일반적으로 각 파일 시스템에 대해 고유 한 ID를 생성한다는 점도 기억해야합니다. 동일한 이미지에서 모든 장치를 준비하지 않는 한 (관련이없는 이유로 권장하는 경우) 각 하드 디스크에는 사용할 수있는 파일 시스템에 저장된 고유 ID가 이미 있습니다.

그럼에도 불구하고 실제로 MAC 주소를 사용 하지 않는 이유는 없습니다 . 특히 프로비저닝 프로세스의 일부로 실제로 고유 한 것으로 결정할 수있는 경우 (우리가 더 이상 이야기하지 않는다고 가정하더라도 필요하지는 않지만) 여기에 수천 개의 장치가 있습니다). 물론 사용하는 모든 것이 장치에 의해 스푸핑 될 수 있으므로 신뢰할 수없는 환경에서 인증을 위해 이것에 의존하지 마십시오 (비공개 설정이라고 가정 할 수 있음). 클라이언트가 자신의 서버를 상대로 자신의 장치를 스푸핑하는 것에주의를 기울이지 만, 장치 관리가 제 3 자 또는 최종 사용자에게 양도되는 경우 분명히 명심해야합니다.


나는 이것이 실제로 XY 문제라는 것을 확신하지 못한다. OP는 자신의 소프트웨어가 장치를 지속적으로 식별하고 논리적으로 값을 논리적으로 묶는 메커니즘을 필요로합니다. OP는 잘못된 질문을하지 않습니다. 그들이 장치를 식별하기 위해 어떤 메커니즘을 사용할 수 있는지 물었다면,이 질문은 프로그래밍과 관련이 있고 컴퓨터 하드웨어 나 소프트웨어에 대한 특정 문제를 표현하지 않는 것에 대한 주제로 마무리되지 않았을 것입니다. 기술적 결정에 대한 동료 검토 요청은 XY가 아닙니다.
Frank Thomas

@FrankThomas 내가 말했듯이, 나는 XY 문제를 가정하는 것이 싫어. 여기서 XY 문제를 가정하지 않습니다. 다른 솔루션이 있더라도 문제에 대한 특정 솔루션의 검토를 요청하는 것이 완벽하게 허용됨에 동의합니다. 그러나 사람들은 종종 이런 종류의 질문을 XY 문제라고 비난합니다.
Micheal Johnson
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.