Google は、黒人コミュニティのための人種的公平の促進に取り組んでいます。詳細をご覧ください。
このページは Cloud Translation API によって翻訳されました。
Switch to English

OpenWeave Factoryプロビジョニングツール

jinja-placeholder-0 .md "> GitHubでソースを表示する

OpenWeave Factory Provisioning Toolは、永続的なデバイスごとの構成情報をWeave対応デバイスにプロビジョニングする便利な手段を提供します。 Factory Provisioning Toolは、顧客に出荷する前に、個々のデバイスに一意のIDおよび資格情報をスタンプする製造ラインプロセスの一部として使用することを目的としています。また、開発者は、開発プロセス中に使用される量産前のハードウェアをパーソナライズするために使用することもできます。

動作理論

OpenWeave Factory Provisioning Toolの目的は、選択した構成情報をデバイスの永続的な構成ストアに挿入することです。この構成情報は、デバイスファームウェアによって実行時に取得および使用できます。永続的なデバイス構成は、通常、デバイスの内部フラッシュ内に格納されますが、データがどのように格納されるか、およびどのような形式で格納されるかの詳細は、プラットフォームによって異なります。 Factory Provisioning Tool自体は、最終的なストレージフォーマットから独立しており、デバイスのファームウェアのコードに依存して、正しい方法でデータを書き込みます。ツールのユーザーインターフェイスは、構成するハードウェアの種類にもほとんど依存しないため、異なるハードウェアプラットフォームに基づく製品ラインで同様の製造プロセスを使用できます。

Factory Provisioning Toolは、JTAGポートやSWDポートなど、何らかの形のデバッグまたは制御インターフェイスを介してターゲットデバイスに接続されているホストマシン上で動作するように設計されています。このツールは、特別にエンコードされた形式でプロビジョニング情報をデバイスのRAMに挿入することで機能します。次に、デバイスは再起動するように指示されます。この時点で、デバイスのファームウェアに組み込まれているコードがエンコードされたデータを見つけ、その整合性を検証し、含まれている値をプラットフォームに適した形式で永続ストレージに書き込みます。

挿入されたプロビジョニングデータを検出して処理するオンデバイスコードはOpenWeaveデバイスレイヤーに組み込まれており、サポートされている任意のプラットフォームで有効にできます。有効にすると、デバイスが起動するたびに、デバイスの初期化プロセスの早い段階でコードが自動的に実行されます。コードは、RAMのプラットフォーム固有の領域をスキャンすることによって動作します。メモリのマウントが控えめなプラットフォーム(たとえば、1M未満)では、スキャンは使用可能なすべてのRAMを網羅します。

RAMに配置すると、プロビジョニングデータは簡単に識別できるプレフィックスでエンコードされるため、スキャンプロセス中にすばやく見つけることができます。暗号化ハッシュに基づく整合性チェック値は、処理前にデータの有効性を確認するために使用されます。

デフォルトでは、プロビジョニングツールは、ターゲットデバイスのプラットフォームに基づいて、プロビジョニングデータを挿入するRAMの場所を選択します。この選択は、ツールへの引数を介してオーバーライドできます。一般に、デバイスファームウェアは、特にプロビジョニングデータを受信するためにRAMロケーションを予約する必要はありません。より一般的には、プロビジョニングデータは、他の目的に割り当てられているRAMの場所に書き込まれますが、通常はデバイスの起動プロセスの初期段階では使用されません。一般的な選択肢は、初期システムスタックの最上位、またはヒープアリーナの遠端です。

Factory Provisioning Toolは、一連の外部開発ツールに依存して、ターゲットデバイスにインターフェースします。使用される特定のツールは、ターゲットデバイスのタイプによって異なります。現在、2つのデバイスインターフェイスがサポートされています。

  • デバイスのJTAGまたはSWDポートに接続されたSEGGER J-Linkデバッグプローブ
  • Espressif ESP32に接続されたUSBシリアルポート

J-Linkインターフェースは、SEGGER J-Link Commanderツール(JLinkExe)に依存しています。これは、ホストマシンに個別にインストールする必要があります。

ESP32インターフェイスは、EspressifのESP-IDF SDKの一部として提供されるEspressif esptool.pyコマンドに依存しています。

プロビジョニングできる情報の種類

OpenWeave Factory Provisioning Toolは、次のタイプの情報をプロビジョニングできます。

  • デバイスのシリアル番号
  • 製造元が割り当てたWeaveデバイスID
  • メーカー指定の織り証明書と秘密鍵
  • 織りペアリングコード
  • 製品リビジョン番号
  • 製造日付

一般に、デバイスが正しく動作するためには上記のすべての情報が必要ですが、すべての情報を同時にプロビジョニングする必要はありません。したがって、さまざまなタイプの情報のプロビジョニングは、製造プロセスの異なる時点で発生する可能性があります。さらに、後続のプロビジョニング手順で、以前にプロビジョニングされた値を新しい値に置き換えることができます。

プロビジョニング情報のソース

デバイスプロビジョニング情報は、次の方法でFactory Provisioning Toolに提供できます。

  • コマンドライン引数
  • プロビジョニングCSVファイルの使用
  • Nestプロビジョニングサーバーから値をフェッチする

コマンドライン

最も単純な形式では、デバイスのプロビジョニング情報は、OpenWeave Factory Provisioning Toolのコマンドラインで直接指定されます。例えば:

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

織り証明書や秘密鍵などのバイナリデータ値は、base-64文字列として、または未加工の(バイナリ)形式で目的のデータを含むファイルの名前として指定できます。

使用可能なコマンドライン引数の完全なリストについては、以下を参照してください。

CSVファイルのプロビジョニング

デバイスの一括プロビジョニングに対応するために、Factory Provisioning Toolは、CSV形式のプロビジョニングデータファイルからプロビジョニングデータを読み取ることもできます。このファイルの列は、特定のプロビジョニングデータタイプ( Serial_NumCertificatePrivate_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桁の16進数織りデバイスID。 存在する必要があります。
Serial_Num ストリングデバイスのシリアル番号。
Certificate base-64文字列製造元が割り当てたWeaveデバイス証明書。
Private_Key base-64文字列製造元が割り当てた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のヒューズを飛ばすこと)またはソフトウェア(たとえば、ブートプロセスの一部としてデバッグアクセスをブロックする安全なブートローダーを介して)によって実現できます。

ファクトリプロビジョニングツールの実行

OpenWeave Factory Provisioning Toolは、次のコマンドラインオプションをサポートしています。

オプション説明
--target <文字列> ターゲットデバイスタイプ。選択肢は次のとおりです。nrf52840esp32
--load-addr <16進数> プロビジョニングデータが書き込まれるデバイスメモリ内のアドレス。
--verbose、-v 出力の詳細レベルを調整します。冗長性を高めるには、複数の引数を使用します。
--serial-num <文字列> デバイスのシリアル番号を設定します。
--device-id <16進数> 製造元が割り当てたデバイスIDを設定します。
--device-cert <ベース64> | <ファイル名> 製造元が割り当てたWeaveデバイス証明書を設定します。
--device-key <base-64> | <ファイル名> 製造元が割り当てたWeaveデバイスの秘密キーを設定します。
--pairing-code <文字列> デバイスのペアリングコードを設定します。
--product-rev <整数> デバイスの製品リビジョンを設定します。
--mfg-date <YYYY / MM / DD> | 今日 | デバイスの製造日を設定します。
--jlink-cmd <パス名> JLinkコマンドへのパス。デフォルトは「JLinkExe」です。
--jlink-if SWD | JTAG J-Linkインターフェースタイプ。デフォルトはSWDです。
--jlink-speed <整数> | 適応 | オート J-Linkインターフェース速度。
--jlink-sn <文字列> J-Linkプローブのシリアル番号。
--esptool-cmd <パス名> esptoolコマンドへのパス。デフォルトは「esptool.py」です。
--port <パス名> ESP32のCOMポートデバイス名。デフォルトは/ tty / USB0です。
--speed <整数> COMポートのボーレート。デフォルトは115200です。
--prov-csv-file <ファイル名> デバイスプロビジョニングデータをプロビジョニングCSVファイルから読み取ります。
--prov-server <url> デバイスプロビジョニングデータをプロビジョニングサーバーから読み取ります。
--disable-server-validation HTTPSを使用する場合は、プロビジョニングサーバーによって提示された証明書の検証を無効にします。

次のコマンドは、デバイス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