IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ランディス・ギア・テクノロジー・インコーポレイテッドの特許一覧

特許7731885パッケージベースリモートファームウェアアップデート
<>
  • 特許-パッケージベースリモートファームウェアアップデート 図1
  • 特許-パッケージベースリモートファームウェアアップデート 図2
  • 特許-パッケージベースリモートファームウェアアップデート 図3
  • 特許-パッケージベースリモートファームウェアアップデート 図4
  • 特許-パッケージベースリモートファームウェアアップデート 図5
  • 特許-パッケージベースリモートファームウェアアップデート 図6
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2025-08-22
(45)【発行日】2025-09-01
(54)【発明の名称】パッケージベースリモートファームウェアアップデート
(51)【国際特許分類】
   G06F 8/65 20180101AFI20250825BHJP
   G06F 21/57 20130101ALI20250825BHJP
【FI】
G06F8/65
G06F21/57
【請求項の数】 14
(21)【出願番号】P 2022535248
(86)(22)【出願日】2020-12-11
(65)【公表番号】
(43)【公表日】2023-02-13
(86)【国際出願番号】 US2020064516
(87)【国際公開番号】W WO2021119430
(87)【国際公開日】2021-06-17
【審査請求日】2023-11-13
(31)【優先権主張番号】16/712,310
(32)【優先日】2019-12-12
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】523325484
【氏名又は名称】ランディス・ギア・テクノロジー・インコーポレイテッド
【氏名又は名称原語表記】LANDIS+GYR TECHNOLOGY, INC.
(74)【代理人】
【識別番号】100145403
【弁理士】
【氏名又は名称】山尾 憲人
(74)【代理人】
【識別番号】100135703
【弁理士】
【氏名又は名称】岡部 英隆
(74)【代理人】
【識別番号】100189544
【弁理士】
【氏名又は名称】柏原 啓伸
(72)【発明者】
【氏名】シャック,オーガスト ダブリュー
【審査官】西間木 祐紀
(56)【参考文献】
【文献】米国特許出願公開第2013/0185548(US,A1)
【文献】特開2017-097809(JP,A)
【文献】特開2009-139997(JP,A)
【文献】特開2017-021434(JP,A)
【文献】特表2016-507806(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/65
G06F 21/57
(57)【特許請求の範囲】
【請求項1】
ファームウェアをアップデートする方法であって、
デバイスにて、該デバイスにファームウェアをインストールするために該デバイスに格納されたインストールパッケージのセットに属する、インストールパッケージのアップデートされたバージョンを含む、アップデートされたインストールパッケージを受信するステップと
前記デバイスに格納されたインストールパッケージのセットにて、前記インストールパッケージを前記アップデートされたインストールパッケージと置換することにより、前記インストールパッケージのセットをアップデートするステップと、
前記アップデートされたインストールパッケージを含む前記アップデートされたインストールパッケージのセットに基づいて、アップデートされたファームウェアを前記デバイスの揮発性メモリにインストールするステップと、
前記デバイスにて、該デバイスにインストールされた前記アップデートされたファームウェアの真正バージョンの署名付きバリデーションハッシュを受信するステップと、
前記デバイスにインストールされた前記アップデートされたファームウェアのハッシュを生成するステップと、
前記ハッシュが前記アップデートされたファームウェアの真正バージョンの前記署名付きバリデーションハッシュと一致することを確認するステップと、
前記アップデートされたファームウェアのイメージを前記デバイスの不揮発性ストレージに格納するステップと、並びに、
前記デバイスのブートの間には、
前記揮発性メモリから前記アップデートされたファームウェアを実行できるように、前記アップデートされたファームウェアの前記イメージを前記デバイスの前記不揮発性ストレージから前記デバイスの前記揮発性メモリにロードするステップと、
前記アップデートされたファームウェアをハッシュ化し、現在のハッシュを生成するステップと、及び、
前記アップデートされたファームウェアの前記現在のハッシュが、前記アップデートされたファームウェアの真正バージョンの前記署名付きバリデーションハッシュと一致するか否かを確認することにより、前記アップデートされたファームウェアの真正性を検証することを試みるステップと
を、含む、方法。
【請求項2】
インストールパッケージの前記セットが、複数のインストールパッケージを含み、
インストールパッケージの前記セットをアップデートするステップは、
インストールパッケージの前記セットの適切なサブセットを、アップデートされたバージョンで置換するステップを、含む、
請求項1記載の方法。
【請求項3】
前記アップデートされたファームウェアが、ファイルシステムである、
請求項1又は請求項2に記載の方法。
【請求項4】
前記デバイスが、ユーティリティメータであり、
前記アップデートされたインストールパッケージが、無線ネットワークを介して受信される、
請求項1又は請求項2に記載の方法。
【請求項5】
サーバを含むシステムであって、
コンピュータ可読命令を実行するように構成されたサーバプロセッサと、
前記サーバプロセッサによって実行されると、
アップデートされたインストールパッケージを特定するステップと、
前記アップデートされたインストールパッケージをインストールパッケージのセットに挿入して、前記アップデートされたインストールパッケージの既存のバージョンを置換することにより、インストールパッケージの前記セットを、インストールパッケージのアップデートされた前記セットにアップデートするステップと、
前記アップデートされたインストールパッケージを含む、インストールパッケージのアップデートされた前記セットをインストールして、リファレンスファームウェアを生成するステップと、
インストールされた前記リファレンスファームウェアに基づいて署名付きバリデーションハッシュを生成するステップと、
前記アップデートされたインストールパッケージと前記署名付きバリデーションハッシュを前記サーバからリモートで一つ以上のノードに提供して、前記一つ以上のノードが前記アップデートされたインストールパッケージを利用して前記一つ以上のノードをアップデートするステップと、を含む動作を、
前記サーバプロセッサに実行させるコンピュータ可読命令を、格納するように構成されたサーバメモリと
を、前記サーバが含
さらに、
前記ノードは、該ノードの動作を実行するためにコンピュータ可読命令を実行するように構成されたノードプロセッサを含み、
前記ノードの動作は、
アップデートされたファームウェアのイメージを前記ノードの不揮発性ストレージに格納するステップと、並びに、
前記ノードのブートの間に、
前記ファームウェアの前記イメージを前記ノードの前記不揮発性ストレージから前記ノードの揮発性メモリにロードして、前記揮発性メモリから前記ファームウェアを実行できるようにするステップと、
アップデートされた前記ファームウェアをハッシュ化し、現在のハッシュを生成するステップと、及び、
アップデートされた前記ファームウェアの前記現在のハッシュが、アップデートされた前記ファームウェアの真正バージョンの前記署名付きバリデーションハッシュと一致するか否かを確認することにより、前記ファームウェアの真正性を再検証することを試みるステップと、
を含む、システム。
【請求項6】
さらに
記ノードの動作は、
前記アップデートされたインストールパッケージと前記署名付きバリデーションハッシュを受信するステップと、
前記ノードに格納されたインストールパッケージのローカルセットにて、前記アップデートされたインストールパッケージの既存のバージョンを前記アップデートされたインストールパッケージと置換することによって、インストールパッケージの前記ローカルセットをアップデートするステップと、
前記アップデートされたインストールパッケージを含むインストールパッケージの前記ローカルセットに基づいて、前記ノードの前記揮発性メモリに前記ファームウェアをインストールして、前記揮発性メモリから前記ファームウェアを実行できるようにするステップと、
前記ファームウェアのハッシュを、前記署名付きバリデーションハッシュと比較することによって、前記ファームウェアの真正性を検証するステップと
を含む、
請求項に記載のシステム。
【請求項7】
前記ファームウェアの前記真正性を再検証することを試みるステップは、
前記ファームウェアの前記現在のハッシュが前記署名付きバリデーションハッシュと等しくないことを検出するステップを含み、
さらに、
前記ノードの動作は、
前記ファームウェアの前記現在のハッシュが前記署名付きバリデーションハッシュと等しくないことに基づいて、インストールパッケージの前記ローカルセット内の一つ以上のインストールパッケージの置換を前記サーバから要求するステップを、含む、
請求項に記載のシステム。
【請求項8】
インストールパッケージの前記ローカルセットは、複数のインストールパッケージを含み、
インストールパッケージの前記ローカルセットをアップデートするステップは、
インストールパッケージの前記ローカルセットの適切なサブセットを、アップデートされたバージョンで置換するステップを含む、
請求項6又は請求項7に記載のシステム。
【請求項9】
前記ノードが、ユーティリティメータである、
請求項5又は請求項6に記載のシステム。
【請求項10】
前記ファームウェアは、前記ユーティリティメータのためのファイルシステムである、請求項に記載のシステム。
【請求項11】
ファイルシステムをアップデートする方法であって、
デバイスにて、該デバイスのファイルシステムのインストールのために該デバイスに格納されたインストールパッケージのセットに属する、インストールパッケージのアップデートされたバージョンを含む、アップデートされたインストールパッケージを受信するステップと、
記デバイスに格納されたインストールパッケージのセットにおいて、前記インストールパッケージを前記アップデートされたインストールパッケージと置換することによって、インストールパッケージの前記セットをアップデートするステップと、
前記アップデートされたインストールパッケージを含む、前記アップデートされたインストールパッケージのセットに基づいて、前記デバイスの揮発性メモリ内に、アップデートされたファイルシステムをインストールするステップと、
前記デバイスにて、前記デバイスにインストールされた前記アップデートされたファイルシステムの真正バージョンの署名付きバリデーションハッシュを受信するステップと、
前記デバイスにインストールされた前記アップデートされたファイルシステムのハッシュを生成するステップと、
前記アップデートされたファイルシステムのハッシュを、前記署名付きバリデーションハッシュと比較することによって、前記アップデートされたファイルシステムをバリデーションするステップと、
前記アップデートされたファイルシステムのイメージを前記デバイスの不揮発性ストレージ内に格納するステップと、並びに、
前記デバイスのブートの間に、
前記揮発性メモリから前記アップデートされたファイルシステムを実行できるように、前記アップデートされたファイルシステムの前記イメージを前記デバイスの前記不揮発性ストレージから前記デバイスの前記揮発性メモリにロードするステップと、
前記アップデートされたファイルシステムをハッシュ化し、アップデートされたハッシュを生成するステップと、及び、
前記アップデートされたファイルシステムのアップデートされたハッシュを前記アップデートされたファイルシステムの真正バージョンの前記署名付きバリデーションハッシュと比較することによって、前記アップデートされたファイルシステムの再バリデーションを試みるステップと
を含む、方法。
【請求項12】
前記アップデートされたファイルシステムの再バリデーションを試みるステップは、
前記デバイスの前記不揮発性ストレージから前記デバイスの前記揮発性メモリに、前記アップデートされたファイルシステムの前記イメージをロードした後に、前記揮発性メモリに格納された前記アップデートされたファイルシステムをハッシュ化することによって、前記アップデートされたハッシュを生成するステップを、含む、
請求項11に記載の方法。
【請求項13】
前記アップデートされたファイルシステムの再バリデーションを試みるステップは、
前記アップデートされたファイルシステムの前記イメージを、前記デバイスの前記不揮発性ストレージから前記デバイスの前記揮発性メモリにロードする前に、前記アップデートされたファイルシステムの前記イメージをハッシュ化することによって、前記アップデートされたハッシュを生成するステップを、含む、
請求項11に記載の方法。
【請求項14】
前記アップデートされたインストールパッケージを受信するステップは、無線メッシュネットワークを介して前記アップデートされたインストールパッケージをダウンロードするステップを含む、
請求項11から請求項13のいずれか1項に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
技術分野
本明細書で説明する様々な実装は、ファームウェアアップデートに関し、より詳細には、ファームウェアのインストールが多数の組み合わせ可能なインストールパッケージに分割され、さらに、ファームウェアの真正性が任意に検証可能であるようなパッケージベースであるファームウェアアップデートに関連する。
【背景技術】
【0002】
背景
ファームウェアは、ハードウェアデバイスの低レベル制御を提供するソフトウェアの一種である。典型的には、ハードウェアデバイスと相互作用するために、ソフトウェアアプリケーションは、ファームウェアと通信し、ファームウェアは、ソフトウェアアプリケーションがハードウェアデバイスを利用できるようにするために必要に応じてハードウェアデバイスと相互作用することになる。デバイスのファームウェアは、新機能のインストールやバグの修正など、様々な理由でアップデートする必要がある場合がある。デバイスのファームウェアのアップデートは、様々な方法で実行することができる。例えば、ユニバーサルシリアルバス(USB)ケーブルやイーサネットケーブルなどのケーブルを介して、アップデートされたファームウェアを受信することができる。別の例として、リモートファームウェアアップデートの場合、ファームウェアは、ワイヤレスフィデリティ(WiFi)などを介してワイヤレスに受信することができる。
【発明の概要】
【0003】
一実施態様では、ファームウェアをアップデートする方法は、デバイスにおいて、アップデートされたインストールパッケージを受信することを含む。アップデートされたインストールパッケージは、デバイスにファームウェアをインストールするためにデバイス上に格納されたインストールパッケージのセットに属する、インストールパッケージのアップデートされたバージョンを含む。本方法はさらに、デバイスに格納されたインストールパッケージのセットにおいて、インストールパッケージをアップデートされたインストールパッケージと置換することによって、インストールパッケージのセットをアップデートすることを含む。本方法はさらに、アップデートされたインストールパッケージを含むアップデートされたインストールパッケージのセットに基づいて、デバイスの揮発性メモリにアップデートされたファームウェアをインストールすることを含む。本方法はさらに、アップデートされたファームウェアのイメージをデバイスの不揮発性ストレージに格納することを含む。さらに、本方法は、ブートプロセスの間に、アップデートされたファームウェアのイメージをデバイスの不揮発性メモリからデバイスの揮発性メモリにロードして、揮発性メモリからアップデートされたファームウェアを実行できるようにし、アップデートされたファームウェアの真正性を検証しようと試みることを含む。
【0004】
別の実施態様では、システムは、プロセッサとメモリとを含むサーバを含む。プロセッサは、コンピュータ可読命令を実行するように構成され、メモリは、プロセッサによって実行されたとき、プロセッサに動作を実行させるコンピュータ可読命令を格納するように構成される。かかる動作は、アップデートされたインストールパッケージを識別することと、アップデートされたインストールパッケージをインストールパッケージのセットに挿入して、アップデートされたインストールパッケージの既存のバージョンと置換することとを含む。動作はさらに、アップデートされたインストールパッケージを含むインストールパッケージのセットをインストールして、リファレンスファームウェアを生成することを含む。動作はさらに、リファレンスファームウェアに基づいて署名付きバリデーションハッシュを生成し、アップデートされたインストールパッケージと署名付きバリデーションハッシュをサーバからリモートで一つ以上のノードに提供することを含む。一つ以上のノードは、アップデートされたインストールパッケージを利用して、一つ以上のノードをアップデートする。
【0005】
さらに別の実施態様では、ファイルシステムをアップデートする方法は、デバイスにおいて、アップデートされたインストールパッケージを受信することを含む。アップデートされたインストールパッケージは、インストールパッケージのアップデートされたバージョンを含み、インストールパッケージは、デバイス上のファイルシステムのインストール用にデバイス上に格納されたインストールパッケージのセットに属する。本方法はさらに、ファイルシステムに関連付けられる署名付きバリデーションハッシュを受信することを含む。本方法はさらに、デバイス上に格納されたインストールパッケージのセットにおいて、インストールパッケージをアップデートされたインストールパッケージと置換することによって、インストールパッケージのセットをアップデートすることを含む。本方法はさらに、アップデートされたインストールパッケージを含む、アップデートされたインストールパッケージのセットに基づいて、デバイスの揮発性メモリ内にアップデートされたファイルシステムをインストールすることと、アップデートされたファイルシステムのハッシュを署名付きバリデーションハッシュと比較することによって、アップデートされたファイルシステムをバリデーションすることとを含む。本方法はさらに、アップデートされたファイルシステムのイメージをデバイスの不揮発性ストレージ内に格納することを含む。さらに、本方法は、デバイスのブートの間に、デバイスの不揮発性メモリからデバイスの揮発性メモリ上にアップデートされたファイルシステムのイメージをロードして、揮発性メモリからのアップデートされたファイルシステムの実行を可能にし、アップデートされたファイルシステムのアップデートされたハッシュを署名付きバリデーションハッシュと比較することによって、アップデートされたファイルシステムの再バリデーションを試みることを、含む。
【0006】
これらの例示的な態様および特徴は、現在説明されている主題を制限または定義するためではなく、本願で説明される概念の理解を助けるために例を提供するために言及されている。現在説明されている主題の他の態様、利点、および特徴は、本出願全体を検討した後に明らかになるであろう。
【図面の簡単な説明】
【0007】
本開示のこれらおよび他の特徴、態様、および利点は、以下の詳細な説明を添付図面を参照しながら読むと、よりよく理解される。
【0008】
図1図1は、本明細書に記載されるいくつかの実装に係る、一つ以上のノードにインストールされたファームウェアをアップデートするためのアップデートシステムの図である。
図2図2は、本明細書に記載されるいくつかの実装に係る、一つ以上のノードのためのファームウェアアップデートパッケージを生成する方法を示す図である。
図3図3は、本明細書に記載されるいくつかの実装に係る、ファームウェアアップデートパッケージを生成する際のプロバイダサーバの通信フローを示す図である。
図4図4は、本明細書に記載されるいくつかの実施態様に係る、ノードでのファームウェアをアップデートする方法を示す図である。
図5図5は、本明細書に記載されるいくつかの実装に係る、ファームウェアアップデートパッケージ内のアップデートされたインストールパッケージに基づいてファームウェアをインストールするときの、ノードの通信フローを描写している。
図6図6は、本明細書に記載されるいくつかの実装に係る、ノード、具体的にユーティリティメータの図を示す。
【発明を実施するための形態】
【0009】
詳細説明
ファームウェアは、通常、ハードウェアへの低レベルのアクセスを有するので、ファームウェアは、デバイスを悪用しようとする攻撃者のターゲットとなりやすい。ファームウェアとして実装可能なファイルシステムは、データがストレージデバイスに保存され、ストレージデバイスから取得される方法を制御する。ファイルシステムが本物で、破損していなければ、デバイス全体の改ざんを防ぐことができる。悪意のある攻撃から守るために、ファイルシステムはしばしば検証のための署名がなされる。通常、ファイルシステムイメージ(すなわち、ファイルシステムのイメージ)は、リモートで生成および署名され、署名付きのファイルシステムのイメージ全体は、ファームウェアアップデートのためにデバイスにワイヤレスでダウンロードされる。署名に基づき、デバイスは、ファイルシステムが真正であり、欠陥のないことを確認でき、したがって、ファイルシステムをそのまま利用することができる。
【0010】
しかし、ファイルシステムの署名付きイメージは、大きなデータ量になる可能性があり、したがって、署名付きファイルシステムイメージをリモートサーバからアップデートを必要とするデバイスに送信することは、時間およびネットワーク使用率の点で高価になる可能性がある。ファイルシステムイメージや他のファームウェアが伝送されるネットワークがロッシーまたは低速である場合、伝送が遅くなったり、エラーが発生しやすくなったりする可能性がある。さらに、帯域幅が制限されたネットワークでは、伝送が帯域幅を利用しすぎて、ネットワークでの他の伝送が遅くなったり、失敗したりする可能性がある。このように、ファイルシステムまたは他のファームウェアをアップデートするために必要なデータ量を減少させ、そのようなアップデートをより効率的に提供し、そのようなアップデートによって利用される帯域幅を減少させることが望まれる。
【0011】
この問題に対処するための選択肢は、ファイルシステム用のインストールファイルをインストールパッケージの集合に分割することである。その場合、アップデートが必要なとき、リモートサーバは、ファイルシステムまたは他のファームウェアのアップデートバージョンのインストールを可能にするためにアップデートを必要とするインストールパッケージのみをデバイスに送信する。デバイスは、そのようなインストールパッケージを、すでにデバイスに保存されているインストールパッケージに追加し、結果として得られるインストールパッケージの組み合わせを使用して、ファイルシステムまたは他のファームウェアのアップデートされたバージョンをインストールすることができる。しかしながら、この手法では、アップデートされたファイルシステムイメージの署名付きバージョンがアップデートごとに提供されないため、ファイルシステム全体としての真正性を検証する能力が失われるという欠点がある。
【0012】
別の選択肢は、各インストールパッケージが検証可能であるように各インストールパッケージに署名し、結果として有効であると推定される(すなわち、本物であり、したがって欠陥のない)ファイルシステムをもたらすことである。しかし、この技術は、揮発性メモリからファイルシステムを実行するデバイスにとって重大な欠点となる。例えば、ファイルシステムは、ランダムアクセスメモリ(RAM)ベースである場合がある。メモリベースのファイルシステム(例えば、RAMベース)は、様々な理由で使用されるかもしれない。場合によっては、例えば、メモリベースのファイルシステムは、不揮発性メモリに基づくファイルシステムよりも、読み取りおよび書き込み性能に関して数倍高速であることがある。揮発性メモリは、電源喪失時にデータを保持しないため、このようなデバイスの場合、デバイスを再起動するたびにファイルシステムが消去される結果となる。そのため、再起動毎にインストールパッケージの再検証を行い、ファイルシステムを再インストールする必要がある。インストールは、典型的には、インストールファイルの解凍と、揮発性メモリの所定位置へのデータのコピーとを必要とし、それらの操作は、インストール自体の前または中に各インストールパッケージを検証する行為に加えて実行される。
【0013】
場合によっては、インストールパッケージの検証及びファイルシステムの再インストールは、かなりの期間(例えば、数分間)かかることがあり、その間、デバイスは利用できない。たとえば、デバイスが、課金目的のためにリソースを測定するように構成されたユーティリティメータであるとする。サービス提供後やその他の理由でユーティリティメータの再起動が必要な場合、ブートプロセスの間にファイルシステムを再インストールする必要があり、その間、数分間はリソースの測定ができず、サービスプロバイダはその間の使用量を正確に請求できない可能性がある。別の例として、ブートプロセスの間、ユーティリティメータの通信中継装置は、数分のスパンの間、データの送受信ができなくなり、送信されるデータの損失が発生する可能性がある。したがって、ブートプロセスの間にファイルシステムをインストールすることを避けることによって、装置(例えば、ユーティリティメータ)のブート時間を短縮することが望ましいであろう。
【0014】
本開示で説明するいくつかの実装によれば、一つ以上のノードにおけるファームウェアをアップデートすることを任務とするプロバイダサーバは、ノードにおけるファイルシステムなど、ファームウェアの現行バージョンに対応するインストールパッケージのセットを維持する。ファームウェアのアップデートを提供するために、プロバイダサーバは、アップデートされたインストールパッケージを特定する。アップデートされたインストールパッケージは、インストールパッケージのセットに現在含まれている、古い(例えば、時代遅れのまたは優先された)インストールパッケージのアップデートされたバージョンであり、本明細書では、現在のインストールパッケージとも呼ばれる。プロバイダサーバは、古いインストールパッケージをアップデートされたインストールパッケージと置換することによって、インストールパッケージのセットをアップデートし、インストールパッケージのアップデートされたセットがファームウェアのアップデートされたバージョンに対応するようにする。プロバイダサーバは、リファレンスファームウェアを生成する。リファレンスファームウェアは、ファームウェアのアップデートされたバージョンのイメージである場合がある。プロバイダサーバは、リファレンスファームウェアに基づいて署名付きバリデーションハッシュを生成し、アップデートされたインストールパッケージと署名付きバリデーションハッシュを、アップデートされる各ノードに送信する。ノードは、アップデートされたインストールパッケージと署名付きのバリデーションハッシュを受信する。ノードのコピーであるインストールパッケージのローカルセットにおいて、ノードは、古いインストールパッケージをアップデートされたインストールパッケージと置換し、アップデートされたインストールパッケージのセットに基づいてファームウェアのアップデートされたバージョンをインストールする。ノードは、アップデートされたバージョンをハッシュ化し、得られたハッシュを署名付きのバリデーションハッシュと比較することにより、ファームウェアを検証(すなわち、真正性を検証)する。ノードは、アップデートされたファームウェアのイメージを不揮発性ストレージに保存し、そのイメージは、ノードのブートまたはリブートの場合などのパワーダウンに耐えられるようにする。さらに、ブート(例えば、再起動)時に、アップデートされたファームウェアを再インストールするのではなく、デバイスは、ファームウェアのイメージを、ファームウェアがインストールされていた揮発性メモリにコピーする。再び、ノードは、アップデートされたファームウェアをハッシュ化し、その結果を署名付きバリデーションハッシュと比較することにより、アップデートされたファームウェアをバリデーションする。
【0015】
本明細書に記載された実装は、ファームウェアをアップデートする既存の技術、特に揮発性メモリから実行するように構成されたファイルシステムをアップデートする場合において、優位性を有する。例えば、本明細書に記載された実装は、ファイルシステムイメージ全体を送信するのではなく、アップデートされたインストールパッケージを送信した結果として、ファームウェアをアップデートすることを可能にする。したがって、アップデートされたインストールパッケージがファイルシステムイメージよりもはるかに小さいと思われることから、リモートファームウェアアップデートは、帯域幅を低減する必要がある。さらに、本明細書に記載された実装は、遠隔地に格納されたリファレンスファームウェアなど、真正であり、欠陥のないことが知られているリファレンスイメージに基づいて、ファームウェアを検証することを可能にする。その結果、ファームウェアが揮発性メモリから実行される場合でも、署名付きのバリデーションハッシュや他の形式の検証データがリファレンスファームウェアに基づいて提供されるため、ノードのブート時にファームウェアを再インストールする必要はない。そのため、デバイスは、ファームウェアを一度だけ作成することができ、ノードをブートする際に、再確認は必要だが再インストールは不要であり、ファームウェアの検証は、通常、再インストールよりもはるかに高速に行うことができる。このように、いくつかの実装は、ブート時間を比較的低く保ちつつ、ネットワーク利用を削減する効率的なインストールを可能にする。
【0016】
図1は、本明細書に記載されるいくつかの実装による、一つ以上のノード105にインストールされたファームウェアをアップデートするためのアップデートシステム100の図である。図1に示すように、アップデートシステム100は、プロバイダサーバ110に統合され、プロバイダサーバ110から遠隔地にある一つ以上のノード105にさらに統合されている。いくつかの実装では、プロバイダサーバ110は、ワイヤレスフィデリティ(WiFi)またはBluetooth(登録商標)などの無線通信を介して、有線接続を介して、または有線ネットワーク、無線ネットワーク、またはその両方を含み得るネットワークの組み合わせを介してなど、直接的または間接的にノード105と通信している。例えば、無線通信は、無線メッシュネットワークを介した無線であってもよく、この場合、プロバイダサーバ110及びノード105の一方又は両方は、それぞれの無線を含む。一実装では、ノード105上のファームウェアをアップデートするために、プロバイダサーバ110は、ファームウェアアップデートパッケージ120をファームウェアアップデートサーバ130に提供し、ファームウェアアップデートサーバ130は、ノード105が一部である無線メッシュネットワークに接続されている、無線を含んでいる。したがって、ノード105は、例えば無線通信を使用して、無線メッシュネットワークを介してファームウェアアップデートサーバ130からファームウェアアップデートパッケージ120をダウンロードする。しかしながら、別の実装では、ノード105は、WiFi、Bluetooth(登録商標)、または有線接続など、何らかの他の通信技術を使用して、ファームウェアアップデートサーバ130からファームウェアアップデートパッケージ120をダウンロードする。ファームウェアアップデートサーバ130は、ノード105に接続されてもよく、したがって、有線、無線、またはその両方の組み合わせであってもよい、様々なネットワークの1つまたは複数を介してノード105と通信してもよいことが理解されるであろう。
【0017】
プロバイダサーバ110、ノード105、及びファームウェアアップデートサーバ130の各々は、ハードウェア、ソフトウェア、又はハードウェアとソフトウェアの組み合わせとして実装されてもよい。一実装では、例えば、各ノード105は、ユーティリティメータなどのコンピューティングデバイスであり、プロバイダサーバ110は、ノード105からリモートである一つ以上のコンピューティングデバイスとして実装されるか、ノード105からリモートであるコンピューティングデバイスで実行されているサーバアプリケーションである。同様に、ファームウェアアップデートサーバ130は、一つ以上のコンピューティングデバイス、または一つ以上のコンピューティングデバイスで動作するサーバアプリケーションであってもよい。いくつかの実装では、プロバイダサーバ110およびファームウェアアップデートサーバ130は、共通のコンピューティングデバイスまたはコンピューティングデバイスのセットで実行され、したがって、別個のデバイスである必要はない。しかし代替的に、プロバイダサーバ110およびファームウェアアップデートサーバ130は、別個の構成要素として実装されてもよい。例えば、ファームウェアアップデートサーバ130は、一つ以上のプロバイダサーバ110からファームウェアアップデートパッケージ120を受信し、一つ以上のノード105にファームウェアアップデートパッケージ120を送信するというクラウドサービスを提供してもよい。
【0018】
いくつかの実装において、プロバイダサーバ110は、様々なバージョンおよびタイプのファームウェアに対応するファームウェアアップデートパッケージ120を生成するか、さもなければ提供するように構成されてもよい。したがって、ファームウェアアップデートパッケージ120を提供するために本明細書に記載された技術は、プロバイダサーバ110によって様々な異なるファームウェア140に対して実行できることが理解されよう。しかしながら、一実装では、プロバイダサーバ110は、特定のタイプのノード105(例えば、ユーティリティメータ)に対して、特定のタイプのファームウェア140(例えば、特定のユーティリティメータによって使用するためのファイルシステム)に対して、または特定のメーカーのファームウェア140に対してファームウェアアップデートパッケージ120を提供する。たとえば、プロバイダサーバ110は、製造業者またはサービスプロバイダによって所有または管理されてもよく、したがって、プロバイダサーバ110によって生成されたファームウェアアップデートパッケージ120は、その製造業者またはサービスプロバイダからのファームウェアアップデートを提供するよう構成されてもよい。さらに、いくつかの実装では、ファームウェアアップデートサーバ130は、様々なプロバイダサーバ110から、したがって、例えば、様々な製造業者またはサービスプロバイダから受信したファームウェアアップデートパッケージ120を維持する。したがって、プロバイダサーバ110は、特定のファームウェア140のためのファームウェアアップデートパッケージ120を生成してもよく、一方、ファームウェアアップデートサーバ130は、様々なプロバイダサーバ110から受信したそのようなファームウェアアップデートパッケージ120を配信してもよい。
【0019】
図1の例では、単一のノード105のみが示されている。しかし、単一のノード105は例示の目的でのみ提供され、複数のノード105は、アップデートシステム100を通じてそれぞれのファームウェア140をアップデートするように構成されてもよいことが理解されよう。例えば、複数のノード105はそれぞれ、ファームウェアアップデートサーバ130から、またはプロバイダサーバ110から直接、ファームウェアアップデートパッケージ120をダウンロードするよう構成されてもよい。さらに、ノード105によって実行されるものとして本明細書に記載された動作は、いくつかの実装に従って、そのようなノード105のそれぞれによって実行されてもよいことが理解されよう。
【0020】
図1に示すように、プロバイダサーバ110のいくつかの実装は、ノード105にインストールされた、またはノード105にインストールされることが望まれるファームウェア140の現在のバージョンに関連する様々なデータを維持する。例えば、プロバイダサーバ110は、ファームウェア140をインストールするために一緒に使用可能なインストールパッケージ155のセットであるパッケージセット150、ファームウェア140のイメージであるリファレンスファームウェア145、および検証データ160のうちの1つまたは複数を保持することができる。具体的には、プロバイダサーバ110の一例は、パッケージセット150、リファレンスファームウェア145、および、検証データ160を保持する。一般に、いくつかの実装では、インストールパッケージ155は、ファームウェア140をインストールするために組み合わせ可能であり、リファレンスファームウェア145は、ファームウェア140のイメージであり、検証データ160は、ファームウェア140またはリファレンスファームウェア145などのファームウェア140のイメージの真正性を検証するために使用可能である。
【0021】
いくつかの実装では、パッケージセット150は、ファームウェア140をインストールするために組み合わせることができる2つ以上のインストールパッケージ155を含む。たとえば、パッケージセット150は、ファームウェア140をインストールするために実行可能な(たとえば、拡張可能な)単一の統合インストールパッケージを形成するように組み合わせ可能であってもよい。いくつかの実装では、プロバイダサーバ110は、パッケージセット150を生成することによって(たとえば、個々のインストールパッケージ155の一つ以上を生成することによって)、最初にパッケージセット150へのアクセスを獲得した。しかし、追加的にまたは代替的に、プロバイダサーバ110は、管理者など、信頼できるソースからパッケージセット150を受け取った。さらに追加的または代替的に、プロバイダサーバ110は、統合インストールパッケージを受け取り、その統合インストールパッケージをパッケージセット150に分割した。統合インストールパッケージをパッケージセット150に分割するための技術は当技術分野で存在し、そのような技術の一つ以上がアップデートシステム100のいくつかの実装で使用されてもよい。
【0022】
いくつかの実装では、リファレンスファームウェア145は、プロバイダサーバ110によってリファレンスとして維持されるファームウェア140のイメージである。例えば、プロバイダサーバ110は、パッケージセット150を利用して、プロバイダサーバ110にファームウェア140をインストールし、それによって、リファレンスファームウェア145を生成することができる。このように、リファレンスファームウェア145は、ファームウェア140の正規のバージョンであると推定される。
【0023】
検証データ160は、潜在的にファームウェアイメージを含むファームウェア140を検証するため、あるいはパッケージセット150を検証するため、またはその両方に使用可能なデータであってもよい。いくつかの実装では、検証データ160は、セット全体が署名されているハッシュのセットなど、または個別に署名されているハッシュのセットなど、署名付きのハッシュを含む。そのようなハッシュのそれぞれは、リファレンスファームウェア145の真正バージョンまたはインストールパッケージ155のハッシュの結果であってよい。たとえば、検証データ160は、リファレンスファームウェア145の署名付きハッシュであってもよい署名付きバリデーションハッシュ165と、各インストールパッケージ155に対応するそれぞれの署名付きパッケージハッシュとを含んでよく、このような署名付きパッケージハッシュはそれぞれ、対応するインストールパッケージ155の署名付きハッシュとなる。
【0024】
いくつかの実装において、プロバイダサーバ110は、検証データ160を生成するために、リファレンスファームウェア145を利用する。たとえば、署名付きパッケージハッシュを生成するために、プロバイダサーバ110は、対応するインストールパッケージ155にハッシュ関数を適用し、次に、得られたハッシュを署名してよい。さらに、たとえば、署名付きバリデーションハッシュを生成するために、プロバイダサーバ110は、リファレンスファームウェア145にハッシュ関数を適用するなどしてリファレンスファームウェア145をハッシュ化してもよく、得られたハッシュを署名して署名付きバリデーションハッシュを生成してもよい。
【0025】
ノード105は、ファームウェア140に関連する、具体的には、ノード105にインストールされたファームウェア140のバージョンに関連する様々なデータの独自のローカルコピーを保持してもよい。例えば、ノード105は、ファームウェア140に対応するパッケージセット150、ノード105にインストールされたファームウェア140のコピーであるファームウェアイメージ170、ファームウェア140もしくはパッケージセット150、またはその両方を検証するために使用可能な検証データ160のうちの一つ以上(例えば、それぞれ)を保持してもよい。例えば、ノード105は、パッケージセット150、ファームウェアイメージ170、および検証データ160のそれぞれをその不揮発性ストレージ180に保持し、ノード105が電源を失ったときにこれらの要素が不揮発性ストレージ180に保持されるようにしてもよい。不揮発性ストレージ180は、本明細書では不揮発性メモリとも呼ばれ、ハードディスクドライブ、ソリッドステートドライブ、NANDフラッシュメモリ、読み取り専用メモリ(ROM)、または電源断時にも保存データを保持する他のストレージデバイスであってよい。一般に、ノード105に格納されたパッケージセット150は、ノード105が現在使用しているファームウェア140のバージョンに対応し、パッケージセット150がファームウェア140のそのバージョンをインストールするために使用された、または使用された可能性があるようなものである。一例として、製造業者またはサービス業者がファームウェア140の初期バージョンをノード105にインストールした場合、その製造業者またはサービス業者は、パッケージセット150、ファームウェアイメージ170、および検証データ160の一つ以上をノード105に、具体的にはノード105の不揮発性ストレージ180に保存した可能性もある。本明細書で説明するように、ファームウェア140がアップデートされるたびに、ノード105は、パッケージセット150、ファームウェアイメージ170、および検証データ160などのこの格納されたデータをアップデートし、アップデートされたファームウェア140に対応させてもよい。
【0026】
いくつかの実装では、ノード105は、ファームウェア140をノード105の揮発性メモリ190にインストールする。揮発性メモリ190は、例えば、ファームウェア140がRAMベースであるようなランダムアクセスメモリ(RAM)であることができる。その場合、パッケージセット150の実行は、ファームウェア140のためのディレクトリ、環境変数、及び実行可能ファイルのうちの一つ以上が揮発性メモリ190に維持され、そこからアクセスされるように、揮発性メモリ190にファームウェア140を配備するようにさせる。いくつかの実装では、ファームウェア140は、SquashFSなどの読み取り専用ファイルシステムであるが、代替的に、ファームウェア140は、読み取り専用ファイルシステムである必要はなく、さらに、ファイルシステムである必要は全くない。ノード105がリブートされるとき、またはノード105がそうでなければ電源を失うとき、揮発性メモリ190が電源を失ったときにデータを保持できないことに起因して、ファームウェア140は揮発性メモリ190から消去されてもよい。しかしながら、追加的または代替的に、ファームウェア140は、不揮発性ストレージ180にインストールされてもよい。
【0027】
図1に示されるように、プロバイダサーバ110は、ファームウェア140へのアップデートを提供するアップデートされたインストールパッケージ155を特定する。例えば、一実施例では、統合インストールパッケージは、ファームウェア140のアップデートされたバージョンをインストールするために実行可能である。その統合インストールパッケージは、アップデートされたパッケージセット150に分割されており、アップデートされたパッケージセット150は、アップデートされたインストールパッケージ155を含む一つまたは複数の個別のインストールパッケージ155が変更されていることを除いて、パッケージセット150(すなわち、アップデート前)と同じである。図1に示す例では、アップデートされたインストールパッケージは、現在、パッケージセット150に含まれている古いインストールパッケージ155のアップデートされたバージョンである。したがって、古いインストールパッケージ155をアップデートされたインストールパッケージ155に置換することによって、パッケージセット150はアップデートされ、ファームウェア140のアップデートされたバージョンをインストールするために実行可能な状態になった。
【0028】
このように、プロバイダサーバ110は、アップデートされたパッケージセット150をインストールして、ファームウェア140のアップデートされたイメージであるアップデートされたリファレンスファームウェア145を生成することができる。アップデートされたリファレンスファームウェア145が与えられると、プロバイダサーバ110は、署名付きバリデーションハッシュ165など、検証データ160のアップデートされたバージョンを生成してもよい。プロバイダサーバ110は、1つ以上のノード105に配信するために、ファームウェアアップデートパッケージ120をファームウェアアップデートサーバ130に送信してもよく、ファームウェアアップデートパッケージ120は、アップデートされたインストールパッケージ155及び検証データ160を含む。いくつかの実装では、ファームウェアアップデートパッケージ120に含まれる検証データ160は、ファームウェア140を検証するための署名付きバリデーションハッシュ165と、提供されるアップデートされたインストールパッケージ155に対応する署名付きパッケージハッシュを含む。複数のインストールパッケージ155がアップデートされ、したがってファームウェアアップデートパッケージ120に提供される場合、検証データ160は、そのようなアップデートされたインストールパッケージ155ごとに、それぞれの署名付きパッケージハッシュを含んでもよい。
【0029】
いくつかの実装では、ノード105は、上述のようにアップデートされたインストールパッケージ155および検証データ160を含む可能性のあるファームウェアアップデートパッケージ120をダウンロードする。ノード105は、ファームウェアアップデートサーバ130から、または、明確なファームウェアアップデートサーバ130が使用されていない実装などでは、プロバイダサーバ110から直接、ファームウェアアップデートパッケージ120をダウンロードしてもよい。ノード105は、検証データ160を使用することによって、アップデートされたインストールパッケージ155を検証してもよい。さらに、ノード105は、アップデートされたパッケージセット150を実行して、ファームウェア140のアップデートされたバージョンをインストールしてもよく、例えば、ノード105の揮発性メモリ190にファームウェア140のアップデートされたバージョンをインストールしてもよい。ノード105は、検証データ160を使用して、ファームウェア140を検証してもよく、具体的には、いくつかの実装において、ファームウェア140を実行する前にこの検証を実行してもよい。ローカルに格納されたそのパッケージセット150をアップデートするために、ノード105は、不揮発性ストレージ180にローカルに格納されたそのパッケージセット150において、古いインストールパッケージ155をアップデートされたインストールパッケージ155と置換してもよい。さらに、複数のアップデートされたインストールパッケージ155の場合、ファームウェアアップデートパッケージ120内の各アップデートされたインストールパッケージ155について、ノードは、パッケージセット150内のそれぞれの古いインストールパッケージ155をアップデートされたインストールパッケージ155と置換してもよい。
【0030】
いくつかの実装では、ファームウェア140は、揮発性メモリ190にインストールされる。その場合、ノード105は不揮発性ストレージ180にファームウェアイメージ170を保持するが、そのファームウェアイメージ170は、例えば、ファームウェアイメージ170内のリファレンスが揮発性メモリ190内のインストールされた場所に無いために、必ずしもそのリファレンスが指すと期待されるリソースを指さないことがあるように、いくつかの実装では実行不可能である。ノードがリブートするとき、ファームウェア140は、揮発性メモリ190にあるために消去される。したがって、リブート後、ノード105は、ファームウェアイメージ170を揮発性メモリ190に、具体的には、例えば、ファームウェア140がインストールされた揮発性メモリ190内の記憶場所にコピーしてもよい。そのため、ファームウェア140は、再びそのインストール場所から実行可能であってもよい。しかしながら、ノード105は、リブートまたは他の電力損失後にファームウェア140を実行する前に、検証データ160を使用して、ファームウェア140を検証してもよい。
【0031】
本開示は、リブートの例でノード105によって実行されるオペレーションに繰り返し言及しているが、そのようなオペレーションは、リブートではないブートの場合に追加的または代替的に実行されてもよいことが理解されるであろう。言い換えれば、ノード105がパワーオフされた後にパワーオンされる場合、例えば、ファームウェアイメージ170を不揮発性ストレージ180から揮発性メモリ190にコピーすること、及びファームウェア140を検証することを含む、本明細書に記載されるそのような動作が実行されてもよい。
【0032】
図2は、本明細書で説明するいくつかの実装に従ってファームウェアアップデートパッケージ120を生成する方法200を示す。具体的には、ファームウェアアップデートパッケージ120は、アップデートされたインストールパッケージ155と検証データ160とを含んでもよい。ファームウェアアップデートパッケージ120は、複数のアップデートされたインストールパッケージ155を含んでもよく、その各々は、本明細書に記載されるようにファームウェアアップデートパッケージ120に組み込まれてもよいことが理解されるであろう。いくつかの実装において、この方法200または類似の方法は、ノード105がファームウェア140のそれぞれのバージョンをアップデートすることを可能にするために、ファームウェアアップデートパッケージ120を1つまたは複数のノード105に提供するために、プロバイダサーバ110によって実行される。図2に示され、本明細書で説明される動作の順序は、例示目的のためだけであり、さらに、図2のブロックは順序を変更してもよく、一つ以上のブロックを削除してもよく、追加のブロックを追加してもよいことが理解されるであろう。
【0033】
図2に示すように、ブロック205で、プロバイダサーバ110は、ファームウェア140をアップデートするためのアップデートされたインストールパッケージ155を特定する。一例では、プロバイダサーバ110は、アップデートされたインストールパッケージ155がセットのメンバーであるように、ファームウェア140のアップデートされたバージョンに対する統合インストールパッケージをパッケージセット150(すなわち、インストールパッケージ155のセット)に分割することによって、アップデートされたインストールパッケージ155を生成する。その場合、統合インストールパッケージ155は、プロバイダサーバ110によって生成されたか、または管理者によるアップロードを介してなど、プロバイダサーバ110に提供されたものであってもよい。別の例では、プロバイダサーバ110は、管理者によるアップロードなどによって、アップデートされたインストールパッケージ155を単に受信するだけでよい。アップデートされたインストールパッケージ155をプロバイダサーバ110に提供するために様々な技術が利用可能であることが理解されよう。
【0034】
ブロック210で、プロバイダサーバ110は、アップデートされたインストールパッケージがアップデートされたバージョンである古いインストールパッケージ155をパッケージセット150内のアップデートされたインストールパッケージ155と置換することにより、プロバイダサーバ110に格納されたパッケージセット150をアップデートする。このように、パッケージセット150は、ファームウェア140のアップデートされたバージョンのインストールを可能にするためにアップデートされている。いくつかの実装では、アップデートされたインストールパッケージ155が一つであるか複数であるかにかかわらず、アップデートされたインストールパッケージ155は、パッケージセット150のサブセット(たとえば、適切なサブセット)を構成してよく、あらゆるインストールパッケージ155が、ファームウェアアップデートが生じるために、必ずしもアップデートされる必要はないように、することができる。
【0035】
ブロック215において、プロバイダサーバ110は、インストールパッケージ155を実行してパッケージセット150をファームウェア140のアップデートされたバージョンに展開することなどにより、パッケージセット150をインストールする。インストールの結果は、アップデートされたファームウェア140のイメージであってよいリファレンスファームウェア145である。
【0036】
ブロック220において、プロバイダサーバ110は、少なくともリファレンスファームウェア145に基づいて検証データ160を生成する。いくつかの実装では、検証データ160は、プロバイダサーバ110によって署名されたハッシュの集合を含む。たとえば、ハッシュのセットは、連結されるか、または他の方法で結合されてもよく、結合された結果が署名されてもよく、または各ハッシュが個別に署名されてもよい。具体的には、検証データ160は、署名付きバリデーションハッシュ165を形成するために署名された、リファレンスファームウェア145のハッシュを含んでもよい。この場合、署名付きバリデーションハッシュ165を生成するために、プロバイダサーバ110は、リファレンスファームウェア145をハッシュ関数に入力し、ハッシュ関数の出力に署名を付してもよい。一実装では、例えば、署名は、Landys+Gyr Signed Authority(LGSA)によって発行されるデジタル署名で楕円曲線デジタル署名アルゴリズム(ECDSA)を使用して行われるが、他の署名技術または権威が使用されてもよいことが理解されよう。
【0037】
さらに、検証データ160は、アップデートされたインストールパッケージ155に対応する署名付きパッケージハッシュを含んでもよいし、アップデートされたパッケージセット150内の各インストールパッケージ155に対応するそれぞれの署名付きパッケージハッシュを含んでもよい。いくつかの実装では、アップデートされていないインストールパッケージ155の署名付きパッケージハッシュは、以前に生成され、プロバイダサーバ110に格納されているか、またはプロバイダサーバ110によって他の方法でアクセス可能である。アップデートされたインストールパッケージ155などのインストールパッケージに対する署名付きパッケージハッシュを生成するために、プロバイダサーバ110は、当該インストールパッケージ155をハッシュ化してもよく、得られたハッシュを署名して、それによってインストールパッケージ155に対応する署名付きパッケージハッシュを形成することができる。したがって、検証データ160は、ファームウェア140およびアップデートされたパッケージセット150の各インストールパッケージ155の真正性を検証するために使用されてもよい。
【0038】
ブロック225において、プロバイダサーバ110は、ファームウェアアップデートパッケージ120をファームウェアアップデートサーバ130に送信する。しかし、追加的または代替的に、プロバイダサーバ110は、ファームウェアアップデートサーバ130を仲介として使用せずに、ファームウェアアップデートパッケージ120を1つまたは複数のノード105に送信してもよい。いずれの場合も、そのような送信は、一つ以上のユニキャスト送信を含んでもよいが、そうである必要はない。いくつかの実装では、たとえば、プロバイダサーバ110は、ファームウェアアップデートパッケージ120をファームウェアアップデートサーバ130または1つ以上のノード105に特に指示してもよいし、追加的または代替的に、プロバイダサーバ110はファームウェアアップデートパッケージ120を放送またはマルチキャストし、それによってファームウェアアップデートサーバ130または1つ以上のノード105がファームウェアアップデートパッケージ120をダウンロードできるようにしてもよい。
【0039】
プロバイダサーバ110によって送信されたファームウェアアップデートパッケージ120は、アップデートされたインストールパッケージ155と検証データ160を含んでもよい。いくつかの実装では、ファームウェアアップデートパッケージ120内の検証データ160は、署名付きバリデーションハッシュ165を含み、アップデートされたインストールパッケージ155に対応する署名付きパッケージハッシュを含んでもよいが、検証データ160は、提供されているアップデートされたインストールパッケージ155以外のインストールパッケージ155を検証するのに必要なデータを含む必要はない。例えば、インストールパッケージ155が変更されない場合、各ノード105は、当該既存のインストールパッケージ155に対応する検証データ160(例えば、署名付きパッケージハッシュ)を既に保持していてもよい。したがって、ファームウェアアップデートパッケージ120の検証データ160は、アップデートされたインストールパッケージ155やファームウェア140自体など、アップデートされる項目のみを検証するための情報を含んでいてもよい。
【0040】
図3は、本明細書で説明するいくつかの実装による、ファームウェアアップデートパッケージ120を生成する際のプロバイダサーバ110の通信フローを示す図である。以下の説明は、この通信フローを左から右へ辿る。図3の例では、2つのインストールパッケージ155a、155bがアップデートされていること、およびアップデートされているファームウェア140がファイルシステムであることが示されているが、これらの詳細は、例示のみを目的として提供されていることは理解されよう。ファームウェア140はファイルシステムである必要はなく、ファームウェア140をアップデートするために構成されたファームウェアアップデートパッケージ120において、一つまたは複数のインストールパッケージ155がアップデートされてもよいことが理解されよう。
【0041】
プロバイダサーバ110は、現在のパッケージセット150aおよびリファレンスファイルシステム310を含むサーバレコード305を維持してもよく、リファレンスファイルシステム310は、現在のパッケージセット150aに対応するファイルシステムのイメージであってもよい。したがって、この例では、アップデートを組み込む前に、サーバレコード305は、図3に示すように、アップデートの処理中である、現在のパッケージセット150aおよびリファレンスファイルシステム310の現在のバージョンを含む。
【0042】
アップデートされたインストールパッケージ155c、155dが導入されると、プロバイダサーバ110は、アップデートされたインストールパッケージ155c、155dを現在のパッケージセット150aに挿入し、アップデートされたインストールパッケージ155c、155dのそれぞれの現在のバージョンである現在のインストールパッケージ155a、155bを置換する。その結果、アップデートされたパッケージセット150bとなる。図3にも示すように、いくつかの実装では、プロバイダサーバ110は、アップデートされたパッケージセット150bを、アップデートされたようにインストールし、ファイルシステムのイメージであってもよいリファレンスファイルシステム310を生成する。リファレンスファイルシステム310に基づいて、プロバイダサーバ110は、検証データ160に含めるために、署名付きバリデーションハッシュ165、またはファイルシステムを検証するための他の情報を生成してもよい。プロバイダサーバ110はまた、アップデートされたインストールパッケージ155c、155dの検証を可能にするために、検証データ160に含めるための署名付きパッケージハッシュ(図示せず)を生成してもよい。プロバイダサーバ110は、アップデートされたインストールパッケージ155c、155dおよび署名付きのバリデーションハッシュ165を含むファームウェアアップデートパッケージ120をファームウェアアップデートサーバ130に送信してよい。
【0043】
図3に示すように、プロバイダサーバ110は、アップデートされたインストールパッケージ155c、155dおよびアップデートされた検証データ160に基づいて、そのサーバレコード305をアップデートしてもよい。すなわち、アップデートされたインストールパッケージ155c、155dは、旧インストールパッケージ155a、155bに代えて、サーバレコード305、具体的には、アップデートされたパッケージセット150bに保持されてもよい。さらに、サーバレコード305内の検証データ160は、署名付きのバリデーションハッシュ165を含めるとともに、それぞれの現在のインストールパッケージ155a、155bに対する署名付きのパッケージハッシュの代わりに、それぞれのアップデートされたインストールパッケージ155c、155dに対するそれぞれの署名付きのパッケージハッシュを含めることにより、アップデートされ得る。
【0044】
図4は、本明細書に記載されるいくつかの実装による、ノード105上のファームウェア140をアップデートする方法400を示す。いくつかの実装では、この方法400または同様のものがノード105によって実行され、ノード105上で実行されているファームウェア140をアップデートする。図4に示され、本明細書で説明される動作の順序は、例示目的のためだけであり、さらに、図4のブロックは順序を変更してもよく、1つまたは複数のブロックが削除されてもよく、追加のブロックが追加されてもよいことが理解されるであろう。
【0045】
図4に示すように、ブロック405で、ノード105は、ファームウェアアップデートパッケージ120を受信する。例えば、ノード105は、ファームウェアアップデートパッケージ120をプロバイダサーバ110から直接ダウンロードすることによってファームウェアアップデートパッケージ120を受信してもよいし、ノード105は、ファームウェアアップデートパッケージ120をファームウェアアップデートサーバ130からダウンロードすることによってファームウェアアップデートパッケージ120をプロバイダサーバ110から間接的に受け取ってもよい。ファームウェアアップデートパッケージ120は、アップデートされたインストールパッケージ155(例えば、潜在的に複数のアップデートされたインストールパッケージ155)及び検証データ160を含んでもよい。アップデートされたインストールパッケージ155は、ノード105上で現在維持されているパッケージセット150に含まれる古いインストールパッケージ155のアップデートされたバージョンであってもよい。検証データ160は、例えば、ファームウェア140の検証を可能にするための署名付きバリデーションハッシュ165と、アップデートされたインストールパッケージ155の検証のための署名付きパッケージハッシュとを含んでもよい。
【0046】
一例では、アップデートされるファームウェア140は、コードとアプリケーションを含むファイルシステムである。ファイルシステム自体のイメージは、かなり大きくなる可能性があり、したがって、本明細書に記載の実施形態は、ファイルシステムイメージ全体の伝送を回避することによって、ネットワーク・トラフィックを低減することができる。むしろ、ノード105の実施形態は、本明細書に記載されるように、そのファームウェア140をアップデートするために、インストールに必要なデータの一部のみである検証データ160および一つ以上のアップデートされたインストールパッケージ155をダウンロードする必要があるだけである。
【0047】
方法400のブロック410で、ノード105は、古いインストールパッケージ155をアップデートされたインストールパッケージ155と置換することによって、ノード105に格納されたパッケージセット150をアップデートする。いくつかの実装では、古いインストールパッケージ155は廃棄されてもよい(例えば、削除)。しかしながら、代替的に、ノード105がそのファームウェア140を以前のバージョンに復元する必要がある場合、または別の理由で、古いインストールパッケージ155は保存されてもよい。いくつかの実装では、アップデートされたインストールパッケージ155が1つであるか複数であるかにかかわらず、アップデートされたインストールパッケージ155は、パッケージセット150のサブセット(たとえば、適切なサブセット)を構成してよく、すべてのインストールパッケージ155をファームウェアアップデートパッケージ120に基づいてアップデートする必要がないようにされる。
【0048】
ブロック415において、ノード105は、アップデートされたパッケージセット150に基づいてファームウェア140をインストールする。例えば、ノード105は、パッケージセット150を実行(例えば、展開または解凍)して、実行可能なファームウェア140を生成する。ノード105は、ファームウェア140をノード105の揮発性メモリ190にインストールし、ファームウェア140が揮発性メモリ190から実行されるようにしてもよい。
【0049】
ブロック420において、ノード105は、検証データ160の使用を通じて、ファームウェア140をバリデーションする。例えば、ノードは、ノード105にインストールされたファームウェア140をハッシュ化し、得られたハッシュを検証データ160の署名付きバリデーションハッシュ165と比較する。インストールされたままのファームウェア140のハッシュが、署名されているために有効と推定される署名付きバリデーションハッシュ165と一致する場合、ノード105はファームウェアが有効であると見なす。
【0050】
いくつかの実装では、ノード105は、ファームウェア140を検証するために、デバイスマッパーベリティ(dm-verity)、または、他の検証ツールを利用する。検証ツールは、ノード105が検証されたファームウェア140でブートされることを保証するために、ブートプロセスの一部として透過的な検証を提供する。この透過的な検証は、ファームウェア140をハッシュ化し、得られたハッシュを検証データ160内の署名付きのバリデーションハッシュ165と比較することを含んでもよい。dm-verityまたは同様の検証ツールが使用される場合、ノード105は、ファームウェア140のインストールに応答してリブートしてもよく、ファームウェア140の検証は、ブートアッププロセスの一部として発生してもよい。しかしながら、様々な検証技法が使用されてもよく、リブートは、検証が起こるための要件である必要はないことが理解されよう。
【0051】
ブロック425において、ノード105は、ファームウェア140のそのローカルレコードをアップデートする。より具体的には、ノード105は、検証データ160(例えば、署名付きのバリデーションハッシュだけでなく、アップデートされたインストールパッケージ155のための署名付きのパッケージハッシュ)をノード105の不揮発性ストレージ180に格納してもよく、ノード105は、新たにアップデートされたファームウェア140のファームウェアイメージ170も同様に不揮発性ストレージ180に格納してもよい。したがって、ノード105がリブートするか、さもなければ電源を失うと、インストールパッケージのセット、ファームウェア140を検証するための情報およびオプションとしてパッケージセット150を検証するための情報を含む検証データ160、およびファームウェアイメージ170の最新版が保持される。
【0052】
いくつかの実装では、ファームウェア140の検証がブートプロセスの間に実行される場合、ノード105をリブートする前に、ファームウェアイメージ170が不揮発性ストレージ180に格納されてもよい。言い換えれば、方法400のブロック425は、ブロック420の前に発生してもよい。その場合、ファームウェアイメージ170は、ファームウェア140の検証を可能にするために、ブートプロセスの一部として揮発性メモリ190にコピーバックされてもよい。
【0053】
上記のようなファームウェア140のアップデート後のある時点で、ノード105は電力を喪失することがある。例えば、ノード105は、トラブルシューティングの目的のために、またはノード105のサービスを可能にするためにリブートされることがある。方法400のブロック430で、ノード105のそのようなリブートが起こる。ブロック435において、リブートに応答して、ノード105は、揮発性メモリ190からファームウェア140を実行できるように、不揮発性ストレージ180から揮発性メモリ190にファームウェアイメージ170をロードする。言い換えれば、ノード105は、不揮発性ストレージ180から揮発性メモリ190のファームウェア140のインストールロケーションにファームウェアイメージ170をコピーすることができる。上述したように、ファームウェア140が揮発性メモリ190から実行される場合、この例のように、ノード105が電源を失うとファームウェア140は消去されたので、ファームウェアイメージ170を揮発性メモリ190にコピーし直すと、ファームウェア140がその設置場所から実行できるようになる。ブロック440において、また、リブートに応答して、ノード105は、ファームウェア140の再バリデーションを試みる。たとえば、上述したように、ノード105は、ファームウェア140をハッシュ化し、得られたハッシュを検証データ160と、具体的には、検証データ160の中の署名付きバリデーションハッシュ165と比較することができる。
【0054】
ブロック435およびブロック440は、上述の順序で実行することができ、ブロック440はブロック435の前に実行することができ、またはブロック435およびブロック440は並行して実行することができることが理解されるであろう。例えば、ブロック435が、検証前にファームウェア140が揮発性メモリ190にコピーされたようなブロック440の前に実行されるとき、ノード105は、揮発性メモリ190にインストールされたファームウェア140に基づいてファームウェア140を検証しようとすることができる。例えば、ノード105は、dm-verityまたは同様のツールを利用して、ファームウェア140をロードし、ブートプロセスの間の検証データ160によるファームウェア140の検証に基づいてノード105を安全にブートしてもよい。しかしながら、ブロック440がブロック435の前に実行され、検証の前にファームウェア140が揮発性メモリ190にコピーされていないような場合、ノード105は、不揮発性ストレージ180に格納されたファームウェアイメージ170に基づいてファームウェア140を検証しようとすることができる。たとえば、ファームウェアイメージ170は、ハッシュ化され、得られたハッシュは、検証データ、具体的には、たとえば、検証データ内の署名付きバリデーションハッシュ165と比較されてもよい。
【0055】
いくつかの実装では、ファームウェア140の現在のバージョンに対応するパッケージセット150がノード105に格納されているが、ノード105は、リブートプロセスの間に、より具体的には、ファームウェア140をリロードしてファームウェア140を検証するために、インストールパッケージ155を利用することはない。むしろ、パッケージセット150に基づくファームウェア140の各バージョンのインストールは、1回だけ行われる必要がある。電源喪失後(例えば、リブートの間)、ファームウェア140は、不揮発性ストレージ180にファームウェアイメージ170を保存したことにより、パッケージセット150から再インストールする必要がなく、したがって、ノード105に対して、ファームウェア140が動作する揮発性メモリ190にそのファームウェアイメージ170をコピーバックすることを可能にする。典型的には、ファームウェアイメージ170のコピーとファームウェア140の検証は、パッケージセット150からファームウェア140をインストールするのにかかる時間よりも短い時間で済む。したがって、本明細書で説明する実装は、ノード105のブートアップ時間を減少させる。
【0056】
図4に示すように、方法400の決定ブロック445で、ノード105は、ファームウェア140のバリデーションが成功したかどうかを決定する。バリデーションが成功した場合(すなわち、ファームウェアが本物であると検証された場合)、ブロック450において、ノード105はそのブートプロセスを継続し、ファームウェア140は揮発性メモリ190から実行される。
【0057】
しかしながら、バリデーションが失敗した場合、方法400はブロック455に進む。その場合、ファームウェア140は認証されていないと判断され、潜在的な破損またはマルウェアを意味し得るので、ノード105は、いくつかの実装において、ファームウェア140を実行しない。ブートプロセスが不完全でファームウェア140が実行されていないかもしれないが、いくつかの実装では、ノード105は、重要または安全とみなされる一連のサービスにアクセスすることができる。例えば、ノード105は、パッケージセット150からファームウェア140を再インストールすること、または少なくとも1つの通信デバイス(例えば、無線機)を使用してファームウェアアップデートサーバ130に連絡することが可能であってもよい。したがって、ブロック455において、ノード105は、不揮発性ストレージ180に格納されたパッケージセット150に基づいて、ファームウェア140を再インストールする。決定ブロック460で、ノード105は次に、新たにインストールされたようなファームウェア140が有効であるかどうかを決定する。ノード105がファームウェア140を検証可能である場合、方法400はブロック450に進み、ノード105はブートプロセスを完了し、ファームウェア140を実行する。しかし、検証が再び失敗する場合、ブロック465で、ノード105は、さらなるトラブルシューティング活動を行う。
【0058】
例えば、ノードは、パッケージセット150内の様々なインストールパッケージ155を検証して、問題がインストールパッケージ155にあるかどうかを判断しようとすることができる。検証が成功した場合(すなわち、すべてのインストールパッケージが本物であるとみなされた場合)、ノード105は、エラー通知を送信する。その場合、インストールパッケージ155は本物のように見えるが、ファームウェア140は何らかの方法で無効であり、ノード105は、すでに試みられた新しいインストールによってファームウェア140の問題を修正することはできないようである。しかしながら、インストールパッケージ155の検証が失敗した場合、ノード105は、問題がインストールパッケージ155にあるという判断に基づいて、一つまたは複数の置換用のインストールパッケージ155を求めることができる。例えば、ノード105は、ファームウェアアップデートサーバ130またはプロバイダサーバ110から、検証が失敗した各インストールパッケージ155の代替品を要求してもよく、ファームウェアアップデートサーバ130またはプロバイダサーバ110は、要求に応答してそのような代替品を送信してもよい。ファームウェアアップデートサーバ130からの交換後であってもインストールパッケージ155の検証が失敗した場合、ノードはエラーの通知を送信してもよい。
【0059】
図5は、本明細書に記載されるいくつかの実装に従って、アップデートされたインストールパッケージ155に基づいてファームウェア140をインストールするときのノード105の通信フローを示す。以下の説明は、この通信フローを左から右へ辿る。図5の例では、2つのインストールパッケージ155c、155dがアップデートされ、アップデートされるファームウェア140がファイルシステム510であることが示されているが、これらの詳細は、例示の目的でのみ提供されていることが理解されよう。ファームウェア140はファイルシステム510である必要はなく、ファームウェア140をアップデートするために構成されたファームウェアアップデートパッケージ120において、1つまたは複数のインストールパッケージ155がアップデートされてもよいことが理解されよう。
【0060】
図5に示すように、いくつかの実装では、ノード105は、その不揮発性ストレージ180に、ノード105の揮発性メモリ190から実行されているファイルシステム510の現在のバージョンに対応する現在のパッケージセット150aを含むノードレコード505を保持する。この例では、ノード105は、ファームウェアアップデートサーバ130から、アップデートされたインストールパッケージ155c、155dと、各アップデートされたインストールパッケージ155c、155dを検証するための署名付きバリデーションハッシュ165及びそれぞれの署名付きパッケージハッシュ等の検証データ160とを含むファームウェアアップデートパッケージ120をダウンロードする。ノード105は、アップデートされたインストールパッケージ155c、155dのそれぞれの現在の(すなわち、アップデートされている)バージョンであるそれぞれの現在のインストールパッケージ155a、155bの代わりに、アップデートされたインストールパッケージ155c、155dを現在のパッケージセット150aに挿入することによってノードレコード505に格納されている現在のパッケージセット150aをアップデートする。ノード105は、アップデートされたインストールパッケージ155c、155dを含むアップデートされたパッケージセット150bに基づいてアップデートされたファイルシステム510をインストールし、検証データ160でアップデートされたファイルシステム510を検証する。
【0061】
この例では、ノード105は、最初に、不揮発性ストレージ180内のそのノードレコード505に、アップデート前にインストールされたファイルシステム510からコピーされたファイルシステムイメージ515の現在のバージョン(すなわち、アップデートされたもの)、アップデート前にインストールされたファイルシステム510に対応する現在のパッケージセット150a、したがって、アップデート前にインストールしたようにファイルシステム510をインストールできるよう構成され、アップデート前のファイルシステム510の現在のバージョンを検証する検証データ160を保持する。ファイルシステム510がアップデートされたことを考慮して、ノード105は、それに応じて、このレコード505をアップデートしてもよい。したがって、レコード505をアップデートするために、ノード105は、レコード内の既存の署名付きバリデーションハッシュ165をファームウェアアップデートパッケージ120で受け取った署名付きバリデーションハッシュ165で置換してもよく、レコード505内の既存のファイルシステムイメージ515を、新たにインストールされしたがって新たにアップデートされたファイルシステム510からコピーされたアップデートされたファイルシステムイメージ515と置換することができる。上述したように、いくつかの実装では、署名付きバリデーションハッシュ165およびファイルシステムイメージ515は、ノード105が電源を失った後に揮発性メモリ190内のファイルシステム510を再確立する際に用いるために維持され、アップデートされたパッケージセット150bは、ファイルシステム510に対する将来のアップデートの間に用いるため、またはトラブルシューティングもしくは他の目的のためにファイルシステム510を再インストールするために、維持される。
【0062】
図6は、本明細書に記載されるいくつかの実装による、ノード105、具体的にはユーティリティメータ600の図を示す。例えば、ユーティリティメータ600は、水道メータ、ガスメータ、またはリソース610の消費を測定する他のタイプのメータであってよい。示されるようなユーティリティメータ600は、本明細書に記載されるようにファームウェア140をインストールし利用するように構成されたノード105として機能し得る。より具体的には、例えば、ファームウェア140は、ユーティリティメータ600のファイルシステム510であってもよい。本開示は、本明細書に記載される実装がユーティリティメータ600に具現化されることに言及するが、実装がユーティリティメータ600に限定されないことは、当業者によって理解されるであろう。むしろ、例えば、ノード105は、ユーティリティメータ600以外のコレクタ、ゲートウェイ、または他のコンピューティングデバイスであってもよい。
【0063】
図6に示すように、例示的なユーティリティメータ600は、建物構内620で発生するリソース610の消費を測定する。この目的のために、ユーティリティメータ600は、リソース610の使用を示す信号を検出し、その信号に基づいて、建物構内620におけるリソース610の使用を決定する、計測エンジン605を含んでもよい。ユーティリティメータ600は、処理ユニット630と、揮発性メモリ190と、不揮発性ストレージ180と、無線機660などの通信装置とを更に含んでもよい。例えば、ユーティリティメータ600は、無線機660を使用して、ファームウェアアップデートサーバ130から、または本明細書に記載されるようにプロバイダサーバ110から、ファームウェアアップデートパッケージ120をダウンロードしてもよい。処理ユニット630、揮発性メモリ190、不揮発性ストレージ180、および無線機660は、システムバス670によって互いに、および計測エンジン605と通信していてもよい。処理ユニット630、揮発性メモリ190、及び不揮発性ストレージ180は、別個の構成要素であるとして本明細書に示され説明されているが、この区別は例示のためだけのものであり、本開示の範囲を限定するものではないことが理解されるであろう。例えば、処理ユニット630、揮発性メモリ190、および不揮発性ストレージ180は、マイクロコントローラユニットなどの単一チップに一緒に統合されてもよい。
【0064】
いくつかの実装では、ファームウェア140のインストール、ファームウェア140の検証、およびファームウェア140の実行など、本明細書で説明するノード105の動作は、ユーティリティメータ600の不揮発性ストレージ180または揮発性メモリ190などのコンピュータ可読媒体に格納されるプログラム命令として具現化される。いくつかの実装では、コンピュータ可読媒体は、非一時的コンピュータ可読媒体である。処理ユニット630は、本明細書に記載されるような動作を実施するために、プログラム命令を実行してもよい。
【0065】
請求される主題の完全な理解を提供するために、多数の具体的な詳細が本明細書に記載されている。しかしながら、当業者は、請求される主題がこれらの具体的な詳細なしに実施され得ることを理解するであろう。他の例では、当業者によって知られているであろう方法、装置、又はシステムは、クレームされた主題を不明瞭にしないように、詳細には記載されていない。
【0066】
本明細書で議論される特徴は、任意の特定のハードウェアアーキテクチャまたは構成に限定されない。コンピューティングデバイスは、1つ以上の入力を条件とする結果を提供するコンポーネントの任意の好適な配置を含むことができる。好適なコンピューティング装置は、コンピューティングシステムを汎用コンピューティング装置から本主題の1つ以上の態様を実装する特殊コンピューティング装置へとプログラムまたは構成する格納ソフトウェア(すなわち、コンピュータシステムのメモリ上に格納されたコンピュータ可読命令)にアクセスする多目的マイクロプロセッサベースのコンピュータシステムを含んでいる。任意の適切なプログラミング、スクリプト、または他のタイプの言語または言語の組み合わせは、コンピューティング装置をプログラミングまたは構成する際に使用されるソフトウェアにおいて本明細書に含まれる教示を実装するために使用され得る。
【0067】
本明細書に開示された方法の態様は、そのようなコンピューティングデバイスの動作において実行されてもよい。上記の例で提示されたブロックの順序は、変化させることができる;例えば、ブロックは、再順序付けされ、結合され、および/またはサブブロックに分割されることができる。特定のブロックまたはプロセスは、並行して実行することができる。
【0068】
本明細書における「に適合された」または「に構成された」の使用は、追加のタスクまたはステップを実行するように適合または構成されたデバイスを妨げない、開放的かつ包括的な言語として意図されるものである。さらに、「に基づく」の使用は、プロセス、ステップ、計算、または他の動作が、1つまたは複数の言及された条件または値に「基づく」場合、実際には、言及されたものを超える追加の条件または値に基づくことができるという意味で、開放的で包括的であることを意図している。本明細書に含まれる見出し、リスト、および番号付けは、説明を容易にするためだけのものであり、限定することを意図していない。
【0069】
本主題は、その態様の側面に関して詳細に説明されてきたが、当業者は、前述の理解を得た時点で、そのような態様に対する変更、変形、および等価物を容易に作り出すことができることが理解されよう。したがって、本開示は、限定ではなく例示の目的で提示されており、当業者に容易に明らかになるような本主題に対する変更、変形、および/または追加を含めることを排除するものではないことを理解されたい。
図1
図2
図3
図4
図5
図6