Alat Penyediaan Pabrik OpenWeave

Lihat sumber di GitHub

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

Teori operasi

Tujuan dari Alat Penyediaan Pabrik OpenWeave adalah memasukkan informasi konfigurasi tertentu ke dalam penyimpanan konfigurasi persisten perangkat, tempat informasi tersebut dapat diambil dan digunakan pada saat runtime oleh firmware perangkat. Konfigurasi perangkat persisten biasanya disimpan dalam flash internal perangkat, meskipun detail tentang cara persis data tersebut disimpan dan dalam format apa, bervariasi dari platform ke platform. 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, artinya proses manufaktur serupa dapat digunakan di seluruh lini produk yang didasarkan pada platform hardware yang berbeda.

Alat Penyediaan Pabrik didesain agar berfungsi pada mesin host yang terhubung ke perangkat target melalui antarmuka antarmuka kontrol atau debug tertentu - misalnya, port JTAG atau SWD. Alat ini berfungsi dengan memasukkan informasi penyediaan ke dalam RAM perangkat dalam bentuk yang dienkode secara khusus. Perangkat kemudian diinstruksikan untuk memulai ulang, dan kode bawaan untuk firmware perangkat akan mencari data yang dienkode, memvalidasi integritasnya, dan menulis nilai yang dimuat ke dalam 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 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 khusus platform RAM. Pada platform dengan pemasangan memori sederhana (misalnya, <1M), pemindaian mencakup semua RAM yang tersedia.

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

Secara default, fitur penyediaan memilih lokasi RAM untuk memasukkan data penyediaan berdasarkan platform perangkat target. Pilihan ini dapat diganti melalui argumen ke alat. Secara umum, firmware perangkat tidak diperlukan untuk mencadangkan lokasi RAM terutama untuk menerima data penyediaan. Biasanya, penyediaan data ditulis ke lokasi RAM yang dialokasikan untuk tujuan lain, tetapi umumnya tidak digunakan lebih awal dalam proses booting perangkat. Pilihan umum adalah bagian atas stack sistem awal, atau ujung arena arena yang paling jauh.

Fitur Penyediaan Pabrik bergantung pada serangkaian alat pengembangan eksternal untuk berinteraksi dengan perangkat target. Alat tertentu yang digunakan bergantung pada jenis perangkat target. Dua antarmuka perangkat saat ini didukung:

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

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

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

Jenis informasi yang dapat disediakan

Alat Penyediaan Pabrik OpenWeave mampu menyediakan jenis informasi berikut:

  • Nomor seri perangkat
  • ID perangkat Weave yang ditetapkan produsen
  • Sertifikat Weave dan kunci pribadi yang ditetapkan produsen
  • Kode penyambungan tenun
  • Nomor revisi produk
  • Tanggal produksi

Meskipun secara umum perangkat akan memerlukan semua informasi di atas agar dapat beroperasi dengan benar, tetapi tidak diperlukan untuk memberikan 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 di 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 secara langsung pada baris perintah ke OpenWeave Factory Provisioning Tool. Misalnya:

./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 daftar lengkap argumen command line yang tersedia.

File CSV penyediaan

Untuk mengakomodasi penyediaan massal perangkat, 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 masing-masing untuk perangkat tertentu, diindeks oleh ID perangkat Weave (Device_Id). ID perangkat tertentu yang akan disediakan harus ditentukan pada command line. Misalnya:

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

Kolom CSV berikut ini didukung:

Name Format Deskripsi
Device_Id 16 digit heksadesimal ID perangkat tenun. 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 Menenun kode penyambungan.
Product_Rev bilangan bulat Nomor revisi produk.
Mfg_Date HH/BB/HH Tanggal pembuatan perangkat.

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

Pengguna dapat menentukan nilai penyediaan individual pada command line selain file CSV, dalam hal ini nilai command line lebih diutamakan daripada nilai yang ada 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 menyediakan URL dasar di command line alat penyediaan. Informasi penyediaan yang diinginkan dipilih dengan menentukan ID perangkat Weave pada command line. Misalnya:

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

Pengguna dapat menentukan nilai penyediaan individual pada command line selain URL server penyediaan. Dalam hal ini, nilai yang diberikan pada command line lebih diutamakan daripada nilai yang ditampilkan oleh server.

Mengaktifkan / menonaktifkan dukungan penyediaan pabrik

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

#define WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING 0

Secara umum, aman untuk mengaktifkan penyediaan factory di firmware perangkat produksi selama antarmuka debug perangkat dinonaktifkan dengan benar di perangkat produksi. Hal ini dapat dilakukan melalui cara hardware (misalnya, dengan meniup sekring di SoC), atau di software (misalnya, melalui loader boot 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 dalam memori perangkat tempat data penyediaan akan ditulis.
--verbose, -v Menyesuaikan tingkat verbositas output. Menggunakan beberapa argumen untuk meningkatkan panjang.
--serial-num <string> Setel nomor seri perangkat.
--device-id <hex-digits> Menyetel ID perangkat yang ditetapkan oleh produsen.
--device-cert <base-64> | <file-name> Menyetel sertifikat perangkat Weave yang ditetapkan produsen.
--key-key <base-64> | <file-name> Menyetel kunci pribadi perangkat Weave yang ditetapkan oleh produsen.
--kode-pasangan <string> Menyetel kode penyambungan perangkat.
--product-rev <integer> Tetapkan revisi produk untuk perangkat.
--mfg-tanggal <YYYY/MM/DD> | hari ini | sekarang Setel tanggal pembuatan perangkat.
--jlink-cmd <nama-jalur> Jalur ke perintah JLink. Default-nya adalah 'JLinkExe'.
--jlink-if SWD | JTAG Jenis antarmuka J-Link. Default-nya adalah SWD.
--jlink-kecepatan <integer> | adaptif | otomatis Kecepatan antarmuka J-Link.
--jlink-sn <string> Nomor seri probe J-Link.
--esptool-cmd <path-name> Jalur ke perintah esptool. Default-nya adalah 'esptool.py'.
--port <path-name> Nama perangkat port COM untuk ESP32. Setelan defaultnya adalah /tty/USB0.
--speed <integer> Baud rate untuk port COM. Default-nya 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-validasi Saat menggunakan HTTPS, nonaktifkan validasi sertifikat yang diberikan oleh server penyediaan.

Contoh

Perintah berikut menetapkan ID perangkat, nomor seri, revisi produk, dan kode penghubung ke nilai tertentu. Tanggal manufaktur ditetapkan ke tanggal saat ini. Selain itu, sertifikat perangkat dan kunci pribadi disetel untuk menguji nilai yang diberikan dalam file CSV yang disediakan bersama 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