OpenWeave 공장 프로비저닝 도구

GitHub에서 소스 보기

OpenWeave Factory 프로비저닝 도구는 Weave 지원 기기에 지속적인 기기별 구성 정보를 프로비저닝할 수 있는 편리한 방법을 제공합니다. 공장 프로비저닝 도구는 고객에게 배송하기 전에 개별 ID 및 사용자 인증 정보 정보를 스탬프하는 제조 라인 프로세스의 일부로 사용하기 위한 것입니다. 또한 개발 프로세스 중에 사용되는 사전 프로덕션 하드웨어를 맞춤설정하는 데 사용할 수도 있습니다.

작업 이론

OpenWeave Factory 프로비저닝 도구를 사용하는 이유는 선택한 구성 정보를 기기의 영구 구성 저장소에 삽입하는 것입니다. 구성 정보는 런타임에 기기 펌웨어가 선택하여 사용할 수 있습니다. 영구적인 기기 구성은 일반적으로 기기의 내부 플래시 내에 저장되지만 데이터가 정확히 어떻게 저장되는지와 형식에 따라 플랫폼에 따라 다를 수 있습니다. Factory 프로비저닝 도구 자체는 최종 저장소 형식과 별개이며 기기 펌웨어의 코드를 사용하여 올바른 방식으로 데이터를 작성합니다. 또한 도구 사용자 인터페이스는 구성 중인 하드웨어 유형과 거의 관련이 없습니다. 즉, 다양한 하드웨어 플랫폼에 기반한 제품 라인 전반에서 비슷한 제조 과정을 사용할 수 있습니다.

Factory Provisioning Tool은 디버그나 제어 인터페이스(예: JTAG 또는 SWD 포트)를 통해 대상 기기에 연결된 호스트 머신에서 실행되도록 설계되었습니다. 이 도구는 프로비저닝 정보를 기기의 RAM에 특별하게 인코딩된 형식으로 삽입하는 방식으로 작동합니다. 그러면 기기 재시작이 지시합니다. 그러면 기기에 내장된 펌웨어가 인코딩된 데이터를 찾아 무결성을 검증하고 포함된 값을 플랫폼에 적합한 형식으로 영구 저장소에 작성합니다.

삽입된 프로비저닝 데이터를 감지하고 처리하는 기기 내 코드는 OpenWeave 기기 레이어에 내장되어 있으며 지원되는 모든 플랫폼에서 사용 설정할 수 있습니다. 이 코드를 사용 설정하면 기기가 부팅될 때마다 기기 초기화 프로세스 초반에 코드가 자동으로 실행됩니다. 코드는 플랫폼별 RAM 영역을 스캔하여 작동합니다. 보통의 메모리 마운트가 있는 플랫폼 (예: <1M)에서는 검사 시 사용 가능한 모든 RAM이 포함됩니다.

RAM에 배치하면 프로비저닝 데이터가 쉽게 식별할 수 있는 접두사로 인코딩되어 검색 프로세스 중에 빠르게 찾을 수 있습니다. 처리 전 데이터의 유효성을 확인하기 위해 암호화 해시에 기반한 무결성 검사 값이 사용됩니다.

기본적으로 프로비저닝 도구는 대상 기기 플랫폼에 따라 프로비저닝 데이터를 삽입할 RAM 위치를 선택합니다. 이 옵션은 도구의 인수를 통해 재정의할 수 있습니다. 일반적으로 기기 펌웨어가 프로비저닝 데이터를 받기 위해 RAM 위치를 예약할 필요는 없습니다. 일반적으로 프로비저닝 데이터는 다른 용도로 할당된 RAM 위치에 작성되지만 일반적으로 기기 부팅 프로세스 초기에 사용되지 않습니다. 일반적인 선택지는 초기 시스템 스택의 상단 또는 힙 아레나의 맨 끝입니다.

Factory Provisioning Tool은 대상 기기에 접속하기 위해 일련의 외부 개발 도구를 사용합니다. 사용되는 특정 도구는 대상 기기의 유형에 따라 다릅니다. 현재 두 가지 기기 인터페이스가 지원됩니다.

  • 기기의 JTAG 또는 SWD 포트에 연결된 SEGGER J-Link 디버그 프로브
  • Espressif ESP32에 연결된 USB 직렬 포트

J-Link 인터페이스는 호스트 머신에 별도로 설치되어야 하는 SEGGER J-Link Commander 도구 (JLinkExe)를 사용합니다.

ESP32 인터페이스는 Espressif's ESP-IDF SDK의 일부로 제공되는 Espressif esptool.py 명령어를 사용합니다.

프로비저닝할 수 있는 정보 유형

OpenWeave Factory 프로비저닝 도구는 다음 유형의 정보를 프로비저닝할 수 있습니다.

  • 기기 일련번호
  • 제조업체에서 할당한 Weave 기기 ID
  • 제조업체에서 할당한 Weave 인증서 및 비공개 키
  • 위브 페어링 코드
  • 제품 버전 번호
  • 제조일

일반적으로 기기가 올바르게 작동하려면 위의 모든 정보가 필요하지만 모든 정보를 동시에 프로비저닝할 필요는 없습니다. 따라서 다양한 유형의 정보를 프로비저닝하는 과정은 제조 공정의 다른 시점에서 이뤄집니다. 또한 후속 프로비저닝 단계에서 이전에 프로비저닝된 값을 새 값으로 바꿀 수 있습니다.

프로비저닝 정보 소스

기기 프로비저닝 정보는 다음과 같은 방법으로 공장 프로비저닝 도구에 제공할 수 있습니다.

  • 명령줄 인수
  • 프로비저닝 CSV 파일 사용
  • Nest 프로비저닝 서버에서 값 가져오기

명령줄

가장 간단한 형태로 기기 프로비저닝 정보는 OpenWeave Factory Provisioning Tool의 명령줄에 직접 지정됩니다. 예를 들면 다음과 같습니다.

./weave-factory-prov-tool --target nrf52840 --device-id 18B4300000000001 \
    --pairing-code NESTUS --mfg-date 2019/04/01

Weave 인증서 및 비공개 키와 같은 바이너리 데이터 값은 base64 문자열 또는 원하는 데이터를 원시 (바이너리) 형식으로 포함하는 파일 이름으로 지정할 수 있습니다.

사용 가능한 명령줄 인수의 전체 목록은 아래를 참고하세요.

CSV 파일 프로비저닝 중

기기의 대량 프로비저닝을 수용하기 위해 Factory 프로비저닝 도구는 CSV 형식의 프로비저닝 데이터 파일에서 프로비저닝 데이터를 읽을 수도 있습니다. 이 파일의 열은 특정 프로비저닝 데이터 유형(Serial_Num, Certificate, Private_Key 등)에 대응해야 합니다. 파일의 행은 Weave 기기 ID(Device_Id)로 색인이 생성된 특정 기기의 개별 값을 제공합니다. 프로비저닝할 특정 기기의 ID를 명령줄에 지정해야 합니다. 예를 들면 다음과 같습니다.

./weave-factory-prov-tool --target nrf52840 --device-id 18B4300000000001 \
    --prov-csv-file ./dev-provisioning-data.csv

지원되는 CSV 열은 다음과 같습니다.

이름 형식 설명
Device_Id 16진수 Weave 기기 ID입니다. 반드시 존재해야 합니다.
Serial_Num 문자열 기기 일련번호
Certificate base64 문자열 제조업체에서 할당한 Weave 기기 인증서
Private_Key base64 문자열 제조업체에서 할당한 Weave 비공개 키입니다.
Pairing_Code 문자열 위브 페어링 코드입니다.
Product_Rev 정수 제품 버전 번호입니다.
Mfg_Date YYYY/MM/DD 기기 제조일자입니다.

CSV 파일에는 어떤 순서로든 열이 표시될 수 있습니다. Device_Id를 제외한 모든 열은 선택사항입니다. CSV 파일에 없는 모든 값은 기기에 프로비저닝되지 않습니다.

사용자는 CSV 파일 외에도 명령줄에 개별 프로비저닝 값을 지정할 수 있습니다. 이 경우 명령줄 값이 파일의 값보다 우선합니다.

Factory Provisioning Tool에서 CSV 파일을 지원하는 방법은 weave 도구의 gen-provisioning-data 명령어 출력과 호환됩니다.

Nest 프로비저닝 서버

Factory Provisioning Tool은 HTTPS 기반 프로토콜을 사용하여 Nest 프로비저닝 서버에서 선별된 프로비저닝 정보를 가져오는 기능을 지원합니다. 프로비저닝 서버 프로토콜을 사용하여 프로비저닝 서버에서 제조업체가 할당한 Weave 기기 인증서, 해당 비공개 키, Weave 페어링 코드를 가져올 수 있습니다.

프로비저닝 도구의 네트워크 위치는 프로비저닝 도구 명령줄에 기본 URL을 제공하여 지정됩니다. 원하는 프로비저닝 정보는 명령줄에서 Weave 기기 ID를 지정하여 선택합니다. 예를 들면 다음과 같습니다.

./weave-factory-prov-tool --target nrf52840 --device-id 18B4300000000001 \
    --prov-server https://192.168.172.2:8000/

사용자는 프로비저닝 서버 URL 외에도 명령줄에서 개별 프로비저닝 값을 지정할 수 있습니다. 이 경우 명령줄에서 지정된 값이 서버에서 반환한 값보다 우선합니다.

출고 시 프로비저닝 지원 사용 설정 / 사용 중지

기기 펌웨어의 OpenWeave 팩토리 프로비저닝 지원은 WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING 컴파일 시간 구성 옵션에 의해 제어됩니다. 이 옵션은 기본적으로 사용 설정되어 있습니다. 이 기능은 애플리케이션의 WeaveProjectConfig.h 파일에서 옵션을 재정의하여 사용 중지할 수 있습니다. 예를 들면 다음과 같습니다.

#define WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING 0

일반적으로 프로덕션 기기에서 기기 디버그 인터페이스가 사용 중지되었다면 프로덕션 기기 펌웨어에서 초기화를 사용 설정하는 것이 안전합니다. 이는 하드웨어 수단 (예: SoC에서 퓨즈 불기) 또는 소프트웨어 (예: 부팅 프로세스의 일부로 디버그 액세스를 차단하는 보안 부트로더를 통해)를 통해 달성할 수 있습니다.

Factory 프로비저닝 도구 실행

OpenWeave Factory 프로비저닝 도구는 다음 명령줄 옵션을 지원합니다.

옵션 설명
--target <string> 대상 기기 유형 nrf52840, esp32를 선택할 수 있습니다.
--load-addr<16자리 숫자 프로비저닝 데이터를 쓸 기기 메모리의 주소입니다.
--상세, -v 출력 상세 출력 수준 조정 여러 인수를 사용하여 상세 출력을 높입니다.
--serial-num<string> 기기 일련번호를 설정합니다.
--device-id<16자리 숫자> 제조업체에서 할당한 기기 ID를 설정합니다.
--device-cert <base-64> | <file-name> 제조업체에서 할당한 Weave 기기 인증서를 설정합니다.
--device-key <base-64> | <file-name> 제조업체에서 할당한 Weave 기기 비공개 키를 설정합니다.
--pairing-code <string> 기기 페어링 코드를 설정합니다.
--product-rev<integer> 기기의 제품 버전을 설정합니다.
--mfg-date <YYYY/MM/DD> | 오늘 | 현재 기기의 제조일을 설정합니다.
--jlink-cmd<path-name> JLink 명령어의 경로입니다. 기본값은 'JLinkExe'입니다.
--jlink-if SWD | JTAG J-Link 인터페이스 유형입니다. 기본값은 SWD입니다.
--jlink-speed <integer> | 적응형 | 자동 J-Link 인터페이스 속도입니다.
--jlink-sn<string> J-Link 프로브 일련번호입니다.
--esptool-cmd<path-name> esptool 명령어 경로입니다. 기본값은 'esptool.py'입니다.
--port <path-name> ESP32의 COM 포트 기기 이름입니다. 기본값은 /tty/USB0입니다.
--speed <integer> COM 포트의 전송 속도입니다. 기본값은 115200입니다.
--prov-csv-file<file-name> 프로비저닝 CSV 파일에서 기기 프로비저닝 데이터를 읽습니다.
--prov-server<url> 프로비저닝 서버에서 기기 프로비저닝 데이터를 읽습니다.
--disable-server-validation HTTPS를 사용하는 경우 프로비저닝 서버에서 제공하는 인증서의 유효성 검사를 사용 중지합니다.

Examples

다음 명령어는 기기 ID, 일련번호, 제품 버전, 페어링 코드를 특정 값으로 설정합니다. 제조일이 현재 날짜로 설정되어 있습니다. 또한 기기 인증서와 비공개 키는 openweave-core 소스 저장소와 함께 제공된 CSV 파일에 지정된 테스트 값으로 설정됩니다.

./weave-factory-prov-tool --target nrf52840 --device-id 18B4300000000042 \
    --serial-num JAYS_DEVICE_42 --product-rev 1 --pairing-code NESTUS --mfg-date today \
    --prov-csv-file ~/projects/openweave-core/certs/development/device/test-dev-provisioning-data.csv