Alat Penyediaan Factory OpenWeave

Lihat sumber di GitHub

Alat Penyediaan Pabrik OpenWeave memberikan cara yang mudah untuk menyediakan informasi konfigurasi per perangkat yang persisten ke perangkat yang mendukung Weave. Alat Penyediaan Pabrik dimaksudkan untuk digunakan sebagai bagian dari proses lini produksi yang memberi stempel setiap perangkat dengan informasi identitas dan kredensial unik sebelum dikirimkan kepada pelanggan. Alat ini juga dapat digunakan oleh developer untuk mempersonalisasi hardware praproduksi yang digunakan selama proses pengembangan.

Teori operasi

Tujuan Alat Penyediaan Pabrik OpenWeave adalah memasukkan informasi konfigurasi tertentu ke dalam penyimpanan konfigurasi persisten perangkat, tempat informasi tersebut dapat diambil dan digunakan saat runtime oleh firmware perangkat. Konfigurasi perangkat persisten biasanya disimpan dalam flash internal perangkat, meskipun detail tentang cara penyimpanan data, dan formatnya, bervariasi dari satu platform ke platform yang lain. Alat Penyediaan Pabrik itu sendiri tidak bergantung pada format penyimpanan akhir, dan mengandalkan kode dalam firmware perangkat untuk menulis data dengan cara yang benar. Antarmuka pengguna alat ini juga sebagian besar tidak bergantung pada jenis hardware yang dikonfigurasi, yang berarti bahwa proses manufaktur serupa dapat digunakan di seluruh lini produk yang didasarkan pada platform hardware yang berbeda.

Alat Penyediaan Pabrik dirancang untuk bekerja pada mesin host yang terhubung ke perangkat target melalui beberapa bentuk antarmuka debug atau kontrol - misalnya, port JTAG atau SWD. Alat ini berfungsi dengan memasukkan informasi penyediaan ke RAM perangkat dalam bentuk yang dienkode secara khusus. Perangkat kemudian diinstruksikan untuk memulai ulang, pada saat kode bawaan firmware perangkat menemukan data yang dienkode, memvalidasi integritasnya, dan menulis nilai yang dimuat ke penyimpanan persisten dalam format yang sesuai untuk platform.

Kode di perangkat yang mendeteksi dan memproses data penyediaan yang dimasukkan disertakan dalam Lapisan Perangkat OpenWeave, dan dapat diaktifkan di platform apa pun yang didukung. Setelah diaktifkan, kode akan berjalan secara otomatis setiap kali perangkat melakukan booting, pada titik awal proses inisialisasi perangkat. Kode ini beroperasi dengan memindai region RAM khusus platform. Di platform dengan jumlah memori yang cukup (misalnya, <1 M), pemindaian mencakup semua RAM yang tersedia.

Saat ditempatkan di RAM, data penyediaan dienkode dengan awalan yang mudah diidentifikasi, sehingga dapat ditemukan dengan cepat selama proses pemindaian. Nilai pemeriksaan integritas berdasarkan hash kriptografis digunakan untuk mengonfirmasi validitas data sebelum diproses.

Secara default, alat penyediaan memilih lokasi RAM tempat data penyediaan akan dimasukkan berdasarkan platform perangkat target. Pilihan ini dapat diganti melalui argumen ke alat. Secara umum, firmware perangkat tidak diwajibkan untuk mencadangkan lokasi RAM secara khusus untuk menerima data penyediaan. Biasanya, data penyediaan ditulis ke lokasi RAM yang dialokasikan untuk tujuan lain, tetapi umumnya tidak digunakan di awal proses booting perangkat. Pilihan umum adalah bagian atas stack sistem awal, atau ujung jauh arena heap.

Alat Penyediaan Pabrik mengandalkan serangkaian alat pengembangan eksternal untuk berinteraksi dengan perangkat target. Alat tertentu yang digunakan bergantung pada jenis perangkat target. Saat ini ada dua antarmuka perangkat yang didukung:

  • probe debug SEGGER J-Link yang terhubung ke port JTAG atau SWD perangkat
  • port serial USB yang terhubung ke Espressif ESP32

Antarmuka J-Link mengandalkan alat SEGGER J-Link Commander (JLinkExe), yang harus diinstal secara terpisah di mesin host.

Antarmuka ESP32 mengandalkan perintah esptool.py Espressif, yang disediakan sebagai bagian dari ESP-IDF SDK Espressif.

Jenis informasi yang dapat disediakan

Alat Penyediaan Pabrik OpenWeave mampu menyediakan jenis informasi berikut:

  • Nomor seri perangkat
  • ID perangkat Weave yang ditetapkan produsen
  • Kunci pribadi dan sertifikat Weave yang ditetapkan produsen
  • Kode penyambungan Weave
  • Nomor revisi produk
  • Tanggal produksi

Meskipun umumnya perangkat memerlukan semua informasi di atas agar dapat beroperasi dengan benar, perangkat tidak perlu menyediakan semua informasi secara bersamaan. Dengan demikian, penyediaan berbagai jenis informasi dapat terjadi pada titik yang berbeda dalam proses manufaktur. Selain itu, Anda dapat mengganti nilai yang disediakan sebelumnya dengan nilai baru dalam langkah penyediaan berikutnya.

Sumber informasi penyediaan

Informasi penyediaan perangkat dapat diberikan ke Alat Penyediaan Pabrik dengan cara berikut:

  • Argumen command line
  • Menggunakan file CSV penyediaan
  • Dengan mengambil nilai dari server penyediaan Nest

Command line

Dalam bentuk yang paling sederhana, informasi penyediaan perangkat ditentukan langsung pada baris perintah ke OpenWeave Factory Provisioning Tool. Contoh:

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

Nilai data biner, seperti sertifikat Weave dan kunci pribadi, dapat ditentukan sebagai string base-64 atau sebagai nama file yang berisi data yang diinginkan dalam bentuk mentah (biner).

Lihat di bawah untuk mengetahui daftar lengkap argumen command line yang tersedia.

File CSV penyediaan

Untuk mengakomodasi penyediaan perangkat secara massal, Alat Penyediaan Pabrik juga dapat membaca data penyediaan dari file data penyediaan berformat CSV. Kolom file ini diharapkan sesuai dengan jenis data penyediaan tertentu - yaitu, Serial_Num, Certificate, Private_Key, dll. Baris dalam file memberikan nilai individual untuk perangkat tertentu, yang diindeks oleh ID perangkat Weave (Device_Id). ID perangkat tertentu yang akan disediakan harus ditentukan pada command line. Contoh:

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

Kolom CSV berikut didukung:

Nama Format Deskripsi
Device_Id 16 digit heksadesimal ID perangkat Weave. Harus ada.
Serial_Num string Nomor seri perangkat.
Certificate string base-64 Sertifikat perangkat Weave yang ditetapkan produsen.
Private_Key string base-64 Kunci pribadi Weave yang ditetapkan produsen.
Pairing_Code string Kode penyambungan Weave.
Product_Rev bilangan bulat Nomor revisi produk.
Mfg_Date YYYY/MM/DD Tanggal produksi perangkat.

Kolom dapat muncul dalam file CSV dalam urutan apa pun. Semua kolom bersifat opsional, kecuali Device_Id. Nilai apa pun yang tidak ada dalam file CSV tidak akan disediakan di perangkat.

Pengguna dapat menentukan nilai penyediaan individual pada command line selain file CSV. Jika demikian, nilai command line lebih diprioritaskan daripada nilai dalam file.

Dukungan format file CSV oleh Alat Penyediaan Pabrik kompatibel dengan output perintah gen-provisioning-data alat weave.

Server penyediaan Nest

Alat Penyediaan Pabrik mendukung pengambilan informasi penyediaan tertentu dari server penyediaan Nest menggunakan protokol berbasis HTTPS. Protokol server penyediaan dapat digunakan untuk mengambil sertifikat perangkat Weave yang ditetapkan Produsen, kunci pribadi yang sesuai, dan kode penyambungan Weave dari server penyediaan.

Lokasi jaringan server penyediaan ditentukan dengan memberikan URL dasar di command line alat penyediaan. Informasi penyediaan yang diinginkan dipilih dengan menentukan ID perangkat Weave pada command line. Contoh:

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

Selain URL server penyediaan, pengguna dapat menentukan nilai penyediaan satu per satu di command line. Dalam hal ini, nilai yang diberikan di command line lebih diutamakan daripada nilai yang ditampilkan oleh server.

Mengaktifkan / menonaktifkan dukungan penyediaan pabrik

Dukungan untuk penyediaan pabrik OpenWeave di firmware perangkat dikontrol oleh opsi konfigurasi waktu compile WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING. Opsi ini diaktifkan secara default. Fitur ini dapat dinonaktifkan dengan mengganti opsi dalam file WeaveProjectConfig.h aplikasi. Contoh:

#define WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING 0

Secara umum, aman untuk mengaktifkan penyediaan pabrik di firmware perangkat produksi asalkan antarmuka debug perangkat dinonaktifkan dengan benar di perangkat produksi. Hal ini dapat dicapai melalui cara hardware (misalnya, dengan meledakkan sekring di SoC), atau dalam software (misalnya, melalui loader booting aman yang memblokir akses debug sebagai bagian dari proses booting).

Menjalankan Alat Penyediaan Pabrik

Alat Penyediaan Pabrik OpenWeave mendukung opsi command line berikut:

Opsi Deskripsi
--target <string> Jenis perangkat target. Pilihannya adalah: nrf52840, esp32
--load-addr <hex-digits> Alamat di memori perangkat tempat data penyediaan akan ditulis.
--verbose, -v Menyesuaikan tingkat panjang output. Gunakan beberapa argumen untuk meningkatkan panjang teks.
--serial-num <string> Tetapkan nomor seri perangkat.
--device-id <hex-digits> Tetapkan ID perangkat yang ditetapkan produsen.
--device-cert <base-64> | <nama-file> Tetapkan sertifikat perangkat Weave yang ditetapkan produsen.
--device-key <base-64> | <file-name> Setel kunci pribadi perangkat Weave yang ditetapkan produsen.
--pairing-code <string> Tetapkan kode penyambungan perangkat.
--product-rev <integer> Menetapkan revisi produk untuk perangkat.
--mfg-date <YYYY/MM/DD> | today | now Menetapkan tanggal pembuatan perangkat.
--jlink-cmd <path-name> Jalur ke perintah JLink. Defaultnya adalah 'JLinkExe'.
--jlink-if SWD | JTAG Jenis antarmuka J-Link. Default-nya adalah SWD.
--jlink-speed <integer> | adaptive | auto Kecepatan antarmuka J-Link.
--jlink-sn <string> Nomor seri probe J-Link.
--esptool-cmd <nama-jalur> Jalur ke perintah esptool. Defaultnya adalah 'esptool.py'.
--port <nama-jalur> Nama perangkat port COM untuk ESP32. Default-nya adalah /tty/USB0.
--speed <bilangan bulat> Kecepatan baud untuk port COM. Setelan defaultnya adalah 115200.
--prov-csv-file <file-name> Membaca data penyediaan perangkat dari file CSV penyediaan.
--prov-server <url> Membaca data penyediaan perangkat dari server penyediaan.
--disable-server-validation Saat menggunakan HTTPS, nonaktifkan validasi sertifikat yang ditampilkan oleh server penyediaan.

Contoh

Perintah berikut menetapkan ID perangkat, nomor seri, revisi produk, dan kode penyambungan ke nilai tertentu. Tanggal produksi ditetapkan ke tanggal saat ini. Selain itu, sertifikat perangkat dan kunci pribadi ditetapkan untuk menguji nilai yang diberikan dalam file CSV yang disertakan dengan repositori sumber openweave-core.

./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