(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024050647
(43)【公開日】2024-04-10
(54)【発明の名称】ファームウェアのセキュアな検証
(51)【国際特許分類】
G06F 21/57 20130101AFI20240403BHJP
G06F 21/71 20130101ALI20240403BHJP
G06F 21/78 20130101ALI20240403BHJP
【FI】
G06F21/57 350
G06F21/71
G06F21/78
【審査請求】有
【請求項の数】14
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2024006881
(22)【出願日】2024-01-19
(62)【分割の表示】P 2021532127の分割
【原出願日】2019-06-10
(71)【出願人】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】スパングラー,ランドール
(57)【要約】 (修正有)
【課題】システムファームウェア及びリカバリファームウェアをセキュアに検証することで、製造者のプロプライエタリ検証プロセス、ハードウェア固有の鍵又はシステムメモリの固有の書込保護機能に依存せずにシステム完全性を保証するコンピューティングシステム及び記憶媒体を提供する。
【解決手段】集積回路製造者のマスクROM(読出専用メモリ)検証プロセスから独立してファームウェア及びリカバリファームウェアを検証するためのプロセスを定義するファームウェア管理パラメータを保持するセキュリティプロセッサに依拠するコンピューティングシステム100であって、セキュリティプロセッサは、ファームウェアまたはリカバリファームウェアが、適切に署名され、かつ、以前に実行されたバージョンと一致することを保証するか又はもし異なっていても、コンパイル時にファームウェアに埋め込まれた予想結果と一致する検証結果をもたらすことを保証する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
コンピューティングシステムであって、
アプリケーションプロセッサと、
ファームウェアおよび対応するリカバリファームウェアを含むメモリと、
セキュリティプロセッサとを備え、前記セキュリティプロセッサは、前記アプリケーションプロセッサが前記ファームウェアまたは前記リカバリファームウェアを実行する条件として、前記ファームウェアまたは前記リカバリファームウェアの検証を、
前記ファームウェアが保持する前記ファームウェアまたは前記リカバリファームウェアの予想ハッシュを決定し、
前記予想ハッシュが前記ファームウェアまたは前記リカバリファームウェアの生成されたハッシュと一致するか否かに基づいて前記ファームウェアまたは前記リカバリファームウェアを検証する
ことにより、行うように構成されている、コンピューティングシステム。
【請求項2】
前記セキュリティプロセッサはさらに、前記ファームウェアまたは前記リカバリファームウェアの前記ハッシュを生成するように構成されている、請求項1に記載のコンピューティングシステム。
【請求項3】
前記アプリケーションプロセッサは、前記ファームウェアまたは前記リカバリファームウェアの前記ハッシュを生成するように構成されている、請求項1に記載のコンピューティングシステム。
【請求項4】
前記アプリケーションプロセッサは、前記コンピューティングシステムの最初のブートに続いて前記リカバリファームウェアを検証するように構成されている、請求項1に記載のコンピューティングシステム。
【請求項5】
前記アプリケーションプロセッサで実行されるオペレーティングシステムがバックグラウンドタスクとして前記リカバリファームウェアを検証する、請求項4に記載のコンピューティングシステム。
【請求項6】
前記セキュリティプロセッサは、前記アプリケーションプロセッサが、前記リカバリファームウェアの予想ハッシュが前記リカバリファームウェアの生成されたハッシュと一致しないと判断したことに応じて、前記リカバリファームウェアを再検証するように構成されている、請求項4に記載のコンピューティングシステム。
【請求項7】
前記ファームウェアは複数のブロックを含み、前記セキュリティプロセッサは、前記複数のブロックのうちの各ブロックについて、ブロックの対応する予想ハッシュが前記ブロックの対応する生成されたハッシュと一致するか否かを判断することにより、前記ファームウェアを検証するように構成されている、請求項1に記載のコンピューティングシステム。
【請求項8】
前記ファームウェアは複数のブロックを含み、前記セキュリティプロセッサは、前記複数のブロックのうちのいくつかのブロックについて、ブロックの対応する予想ハッシュが前記ブロックの対応する生成されたハッシュと一致するか否かを判断することにより、前記ファームウェアを検証するように構成されている、請求項1に記載のコンピューティングシステム。
【請求項9】
前記セキュリティプロセッサは、前記ブロックに割り当てられた重み付けが確率的検証しきい値を満たすという判断に応じて、前記ブロックの前記対応する予想ハッシュが前記
ブロックの前記対応する生成されたハッシュと一致するか否かを判断することにより、前記ファームウェアを検証するように構成されている、請求項8に記載のコンピューティングシステム。
【請求項10】
前記セキュリティプロセッサは、前記確率的検証しきい値を乱数発生器を用いて決定するように構成されている、請求項7に記載のコンピューティングシステム。
【請求項11】
前記セキュリティプロセッサは、前記ファームウェアまたは前記リカバリファームウェアを検証する際に前記セキュリティプロセッサに指示するためのオプションを含むファームウェア管理パラメータを保持するように構成されている、請求項1に記載のコンピューティングシステム。
【請求項12】
前記セキュリティプロセッサは、前記ファームウェア管理パラメータを、前記セキュリティプロセッサの内部メモリの書込保護された部分において保持する、請求項11に記載のコンピューティングシステム。
【請求項13】
前記ファームウェア管理パラメータは、前記ファームウェアまたは前記リカバリファームウェアを検証するときに、確率的検証、フル検証、または検証なしのうちのいずれを行うかを、前記セキュリティプロセッサに指示する情報を含む、請求項11に記載のコンピューティングシステム。
【請求項14】
コンピューティングシステムのセキュリティプロセッサが、前記コンピューティングシステムのメモリに格納されたファームウェアから、前記ファームウェアの予想ハッシュを決定するステップと、
前記メモリに格納された前記ファームウェアの生成されたハッシュを決定するステップと、
前記セキュリティプロセッサが、前記予想ハッシュが前記生成されたハッシュに対応するという判断に応じて前記ファームウェアを検証するステップとを含む、方法。
【請求項15】
命令を含むコンピュータ読取可能記憶媒体であって、前記命令は、実行されると、コンピューティングシステムのセキュリティプロセッサを、
前記コンピューティングシステムのメモリに格納されたファームウェアから、前記ファームウェアの予想ハッシュを決定することと、
前記メモリに格納された前記ファームウェアの生成されたハッシュを決定することと、
前記予想ハッシュが前記生成されたハッシュに対応するという判断に応じて前記ファームウェアを検証することとを実行するように構成する、コンピュータ読取可能記憶媒体。
【発明の詳細な説明】
【背景技術】
【0001】
背景
一部のコンピューティングシステムは、電源投入後のまたはリセットに続く「ブート」プロセスの一部としてシステムファームウェアを実行する。一部のコンピューティングシステムは、システムファームウェアの代わりに「リカバリ」ファームウェアを実行することにより、安定した、リカバリされた状態に戻ることができる。セキュリティのために、コンピューティングシステムは、システムファームウェアおよびリカバリファームウェアの一部を、システムメモリに対する同時物理アクセスによってのみオーバーライドできるシステムメモリの永続的な書込保護領域に、保持することができる。一部のコンピューティングシステムは、さらに製造者の検証プロセスを実行することにより、ファームウェアおよびリカバリファームウェアの完全性(integrity)を保証し、場合によっては、ハー
ドウェア固有の検証鍵(たとえば焼かれてアプリケーションプロセッサのヒューズになったもの)を用いて、システムファームウェアが公式ソースからのものであることを保証する。
【発明の概要】
【発明が解決しようとする課題】
【0002】
そのため、セキュリティおよび完全性は、ハードウェア固有の検証鍵を管理する能力およびコンピューティングシステムがシステムメモリを書込保護する能力を含む、製造者のプロプライエタリ検証プロセス次第となる場合がある。書込保護機能は、たとえばシステムメモリへの物理アクセス権を有するユーザによって侵害される可能性がある。書込保護機能および製造中にハードウェアに割り当てられるハードウェア固有の検証鍵に頼りすぎると、コンピューティングシステムが実行するシステムファームウェアおよびリカバリファームウェアのユーザビリティ、カスタマイズ、およびこれらのファームウェアに対するユーザ制御を、不必要に制限する場合がある。
【0003】
概要
システムファームウェアおよびリカバリファームウェアをセキュアに検証することにより、製造者のプロプライエタリ検証プロセス、ハードウェア固有の鍵、またはシステムメモリの固有の書込保護機能に依存することなくシステムの完全性を保証する、コンピューティングシステムについて説明する。このコンピューティングシステムは、集積回路製造者のマスクROM(読出専用メモリ)検証プロセスから独立してファームウェアおよびリカバリファームウェアを検証するためのプロセスを定義するファームウェア管理パラメータを保持するセキュリティプロセッサに依拠する。このセキュリティプロセッサは、ファームウェアまたはリカバリファームウェアが、適切に署名されかつ過去に実行されたバージョンと一致することを保証する、または、もし異なっていても、コンパイル時にファームウェアに埋め込まれた予想結果と一致する検証結果(たとえば生成されたハッシュ値)をもたらすことを保証する。このようにして、コンピューティングシステムは、当該コンピューティングシステム内で実行されるファームウェアおよびリカバリファームウェアのユーザビリティ、カスタマイズ、およびこれらのファームウェアに対するユーザ制御を改善する。
【課題を解決するための手段】
【0004】
一例において説明するコンピューティングシステムは、アプリケーションプロセッサと、ファームウェアおよび対応するリカバリファームウェアを含むメモリと、セキュリティプロセッサとを備え、セキュリティプロセッサは、アプリケーションプロセッサがファームウェアまたはリカバリファームウェアを実行する条件として、ファームウェアまたはリ
カバリファームウェアの検証を、ファームウェアが保持するファームウェアまたはリカバリファームウェアの予想ハッシュを決定し、予想ハッシュがファームウェアまたはリカバリファームウェアの生成されたハッシュと一致するか否かに基づいてファームウェアまたはリカバリファームウェアを検証することにより、行うように構成されている。
【0005】
他の例において説明する方法は、コンピューティングシステムのセキュリティプロセッサが、コンピューティングシステムのメモリに格納されたファームウェアから、ファームウェアの予想ハッシュを決定するステップと、メモリに格納されたファームウェアの生成されたハッシュを決定するステップと、セキュリティプロセッサが、予想ハッシュが生成されたハッシュに対応するという判断に応じてファームウェアを検証するステップとを含む。
【0006】
もう1つの例におけるコンピュータ読取可能記憶媒体は命令を含み、命令は、実行されると、コンピューティングシステムのセキュリティプロセッサを、コンピューティングシステムのメモリに格納されたファームウェアから、ファームウェアの予想ハッシュを決定することと、メモリに格納されたファームウェアの生成されたハッシュを決定することと、予想ハッシュが生成されたハッシュに対応するという判断に応じてファームウェアを検証することとを実行するように構成する。
【0007】
1つ以上の実装形態の詳細を、添付の図面および以下の説明に記載する。その他の特徴および利点は、上記説明および図面ならびに請求項から明らかであろう。この概要は、詳細な説明および図面においてさらに記載する主題を導入するために設けたものである。したがって、この概要は、本質的な特徴を述べたものとみなされてはならず、クレームされている主題の範囲を限定するために使用されているとみなされてはならない。
【0008】
リカバリファームウェアのセキュアな検証の1つ以上の側面の詳細を以下で説明する。この説明および図面において異なる例に使用される同一の参照番号は、同様の要素を示す。
【図面の簡単な説明】
【0009】
【
図1】ファームウェアおよびリカバリファームウェアを検証するように構成されたコンピューティングシステムの一例を示す概念図である。
【
図2】ファームウェアを検証するように構成されたセキュリティプロセッサの動作の例を示すフローチャートである。
【
図3】リカバリファームウェアを検証するように構成されたセキュリティプロセッサの動作の例を示すフローチャートである。
【
図4】ファームウェアまたはリカバリファームウェアの確率的または部分検証を実行するように構成されたセキュリティプロセッサの動作の例を示すフローチャートである。
【
図5】ファームウェアおよびリカバリファームウェアのセキュアな検証を実行するように構成されたコンピューティングデバイスを示す概念図である。
【発明を実施するための形態】
【0010】
詳細な説明
一部のコンピューティングシステムでは、アプリケーションプロセッサが、オペレーティングシステム(OS)をロードし実行する条件として、システムファームウェアを実行する。システムメモリの書込保護された部分は、システムファームウェアの読出専用部分を格納することができ、システムメモリの読み書き可能な部分は、システムファームウェアの読み書き可能な(または保護されていない)部分を格納することができる。システムメモリの書込保護された部分はさらに、コンピューティングシステムがリカバリモードで
動作するときに実行する特化された「リカバリファームウェア」を含み得る。リカバリファームウェアは、リカバリイベント中にシステムファームウェアの代わりに実行されて、コンピューティングシステムを安定したリカバリモードで動作するように構成することを、意図している。
【0011】
検証されたブートプロセス中、コンピューティングシステムのセキュリティプロセッサは、セキュリティプロセッサの内部メモリに格納された自身のセキュリティプロセッサファームウェア(たとえば「Cr50」)をセキュリティプロセッサが検証できるまで、アプリケーションプロセッサがシステムファームウェアを実行しないようにしてもよい。セキュリティプロセッサのファームウェアの検証および実行後に、セキュリティプロセッサは、アプリケーションプロセッサが、検証されたブートプロセスを続行することを可能にする。
【0012】
可能にされると、アプリケーションプロセッサは、「マスクROM」(たとえばアプリケーションプロセッサの内部にあり製造中に予めプログラミングされた一種の読出専用メモリ)に埋め込まれた命令を、システムメモリの書込保護された部分におけるシステムファームウェアの読出専用部分の位置を特定しこの読出専用部分を取り出すために、実行する。マスクROMは、システムファームウェアの読出専用部分を実行する前にプロプライエタリ検証プロセスを実行するようにアプリケーションプロセッサを構成してもよい。たとえば、プロプライエタリ検証プロセスは、システムファームウェアの読出専用部分がアプリケーションプロセッサ内のハードコーディングされた(焼かれてアプリケーションプロセッサのヒューズにされた)独特のハードウェア固有鍵を用いて署名されたことを、アプリケーションプロセッサに検証させてもよい。マスクROMが、この独特のハードウェア固有鍵を用いてシステムファームウェアの読出専用部分を検証できる場合、アプリケーションプロセッサは、読出専用システムファームウェアを実行する。マスクROMに依拠してシステムファームウェアを検証することにより、独特のハードウェア固有鍵を用いて署名されておらずしたがって検証できないであろう「非公式の」第三者またはユーザによってカスタマイズされたファームウェアをユーザがインストールすることを、防止することができる。
【0013】
システムファームウェアの読み書き可能部分を実行する条件として、読出専用部分は、読み書き可能部分がコンパイル中に「公式」ルート鍵で署名されたことを検証する。コンピューティングシステムは、システムメモリの書込保護された部分にルート鍵を格納することができる。システムメモリの書込保護された部分は破損することがないと仮定して、アプリケーションプロセッサは、システムファームウェアの読み書き可能部分がルート鍵で署名されたという判断に応じて、システムファームウェアの読み書き可能部分をロードし実行する。
【0014】
同様に、コンピューティングシステムがリカバリモードで実行されている場合、システムファームウェアの読出専用部分は、リカバリファームウェアを実行する前に、リカバリファームウェアがルート鍵で署名されたことを検証することにより、システムの完全性を保つ。システムメモリの書込保護された部分は破損していないという仮定を継続し、アプリケーションプロセッサは、リカバリファームウェアがルート鍵で署名されたという判断に応じて、リカバリファームウェアをロードし実行する。リカバリファームウェアがリカバリ鍵を生成できない場合、コンピューティングシステムは、リカバリ鍵を生成できるリカバリファームウェアの公式バージョンがインストールされて実行されるまで、リカバリファームウェアの実行を控える。
【0015】
一部のコンピューティングシステムは、このようにして、検証できないシステムファームウェアおよびリカバリファームウェアの実行を防止することができるが、この検証され
たブートプロセスは、ユーザビリティ、カスタマイズ、およびユーザ制御を禁止する。ハードウェア固有の「公式」ルート鍵は、認証された開発者だけが発見できる場合がある。さらに、コンピューティングシステムのセキュリティおよび完全性は、ハードウェア固有の鍵と、システムメモリの書込保護された部分が「公式」ルート鍵を保護できるという暗黙の信頼とに、依存する。しかしながら、公式ルート鍵は、システムメモリへの物理アクセス権を有する、そうでなければシステムメモリの書込保護された部分を侵害する方法を発見する高度なユーザによって侵害される可能性がある。そのため、この種の検証されたブートのセキュア度が低くなり得るだけでなく、認証された開発者ではないが第三者またはカスタムファームウェアを実行することを所望する正規ユーザがそうすることを妨げることで、コンピューティングシステムのユーザビリティ、カスタマイズ、およびユーザ制御を不必要に制限する場合がある。
【0016】
セキュリティおよび完全性を犠牲にすることなくファームウェアのカスタマイズおよびユーザ制御を促進するコンピューティングシステムについて説明する。このコンピューティングシステムは、製造者のプロプライエタリ検証プロセス、ハードウェア固有の鍵、またはシステムメモリの固有の書込保護機能に頼ることなく、システムファームウェアおよびリカバリファームウェアを検証するように構成されたセキュリティプロセッサおよびアプリケーションプロセッサに依拠する。代わりに、セキュリティプロセッサは、たとえばハードウェア固有の鍵を含む集積回路製造者のマスクROM(読出専用メモリ)検証プロセスから独立して、ファームウェアおよびリカバリファームウェアを検証するための完璧度(degree of thoroughness)を含むプロセスを定義するファームウェア管理パラメータに一部基づいて、ファームウェアを検証する。一例として、ファームウェア管理パラメータは、部分もしくは確率的検証の実行、完全もしくはフル検証の実行、または、検証なしを、指定してもよい。
【0017】
システムファームウェアのヘッダ署名および/またはボディ署名の検証後、セキュリティプロセッサは、システムメモリに格納されたシステムファームウェアのそれぞれのブロックに対応付けられるハッシュ(たとえばSHA-256)値を生成する。セキュリティプロセッサは、生成したハッシュ値を、ファームウェアボディの読出専用部分からセキュリティプロセッサが導出した予想ハッシュ値と比較する。
【0018】
リカバリファームウェアは、典型的に、システムファームウェアがサポートしない低レベルドライバおよびユーザインターフェイスをサポートするので、一般的にはシステムファームウェアよりもサイズが大きい。そのため、セキュリティプロセッサは、より高性能のアプリケーションプロセッサに依拠してリカバリファームウェアを検証してもよい。リカバリファームウェアのヘッダおよび/またはボディの署名の検証後、アプリケーションプロセッサは、システムメモリに格納されたリカバリファームウェアのそれぞれのブロックに対応付けられるハッシュ値を生成する。アプリケーションプロセッサは、たとえばシステムファームウェアの最初のブートアップおよび実行の成功に続いて、(たとえばオペレーティングシステムが実行するバックグラウンドタスクとして)リカバリファームウェアについてのハッシュ値を自動的に生成し格納してもよい。
【0019】
アプリケーションプロセッサは、生成したハッシュ値を、ファームウェアボディの読出専用部分からアプリケーションプロセッサが導出した予想ハッシュ値と比較する。予想ハッシュ値と生成したハッシュ値とが不一致である場合、アプリケーションプロセッサは、リカバリファームウェアが検証に失敗したことをセキュリティプロセッサに通知し、リカバリファームウェアの実行を控える。リカバリファームウェアの予想ハッシュ値と生成したハッシュ値とが一致する場合、アプリケーションプロセッサはリカバリファームウェアを実行する。
【0020】
リカバリファームウェアがアプリケーションプロセッサによる照合に失敗したことに応じて、セキュリティプロセッサは、ファームウェア管理パラメータに基づいてリカバリファームウェアを検証しようと試みてもよい。セキュリティプロセッサは、生成したハッシュ値のうちの一部のみを予想ハッシュ値と照合することによってリカバリファームウェアを部分的に検証してもよい。これに代えて、セキュリティプロセッサは、フル検証を実行し生成したハッシュ値を予想ハッシュ値と照合してもよい、またはブロック照合全体を省略することによって検証を全く行わないことにしてもよい。
【0021】
このようにして、コンピューティングシステムは、集積回路製造者のマスクROM検証プロセスから独立して、かつハードウェア固有の鍵に頼ることなく、ファームウェアおよびリカバリファームウェアを検証することができる。代わりに、コンピューティングシステムは、セキュリティプロセッサに依拠して、システムファームウェアが、適切に署名されかつ過去に実行されたバージョンと一致することを保証する、または、もし異なっていても、コンパイル時にファームウェアに埋め込まれた予想結果と一致する検証結果(たとえば生成されたハッシュ値)をもたらすことを保証する。このようにして、コンピューティングシステムは、当該コンピューティングシステム内で実行されるファームウェアおよびリカバリファームウェアのユーザビリティ、カスタマイズ、およびこれらのファームウェアに対するユーザ制御を改善することができる。一例としてのコンピューティングシステムは、公式ファームウェアバージョンまたは予め定められたハードウェア鍵の恩恵を受けずに、システムの完全性を犠牲にすることなくカスタムまたは第三者ファームウェアをセキュアに実行することができる。
【0022】
ファームウェアの検証を、プロセッサ固有のハードウェア鍵の知識から切り離すことにより、本開示の技術は、コンピューティングシステムがより多様なファームウェアおよびリカバリファームウェアプログラムを実行できるようにすることができる。ファームウェア開発者はもはや、ファームウェア開発者と進んで連携する場合もそうでない場合もあるハードウェア製造者が制御し得るハードウェア固有の検証鍵の製品知識を暗示しこの検証鍵に頼る必要はない。
【0023】
加えて、本開示の技術は、コンピューティングシステムが、今までコンピューティングシステムが晒されていたであろう攻撃よりも広いまたはそれとは異なる範囲の攻撃から防御できるようにすることができる。たとえば、以前のシステムは、システムメモリの書込保護に依拠しており、攻撃者がシステムメモリをオーバーライドできる唯一の方法は、メモリチップまたはマザーボードを含むコンピューティングシステムへの物理アクセスを経由することであった。これは、「悪意あるメイド」攻撃と呼ばれ、何者かがデバイスを長期間管理せずに放置するというシナリオを指している(たとえばこのデバイスにアクセスするためにホテルのメイドを装った攻撃者が存在するときに)。しかしながら、一部のコンピューティングシステムは、たとえば自身がデバイスへの長期アクセス権を有する認証済ユーザである可能性があるユーザによる、その他の種類の攻撃から防御しなければならない。たとえば、一部の学校は、コンピューティングデバイスを、学生に、学生の使用に関する厳しいポリシーを付けて支給する。学校は、場合によっては立法基準によるエンタープライズポリシーを用いて、学生が自身のデバイスに対して実施できることを制限する。一部の学生は、これらの制限を好まず、そのため、エンタープライズポリシーを回避しようと試みる場合がある。学生は長期間デバイスにアクセスできるので、書込保護に依拠してポリシー制限を強化するのは現実的ではないであろう。その他の政府機関または民間企業の場合、自身の物理的セキュリティに隙間がある場合があり、それが、攻撃者が悪意のあるメイド攻撃を伝搬させるのに十分に長い時間デバイスを物理的に制御することを可能にする。
【0024】
どちらのケースでも、デバイスの所有者は、攻撃を検出し攻撃時にデバイス機能を制限
することを望むであろう。この制限は、ディスク上のユーザデータの解読を拒否すること、過去に保存されたクレデンシャルをウェブサイトまたは無線アクセスポイントに提供することを拒否すること、またはブートを完全に拒否すること等の、ある範囲の形態を取り得る。また、所有者の、ブート速度に対する追加保護の影響に対する許容範囲が、変化する場合もある。通常のユーザは、ある程度のセキュリティ低下と引き換えにブートの高速化を好むであろう。これは、一部のユーザが短く簡単に推測されるパスワードをどのように使用し得るかということと、非常によく似ている。企業ユーザは、たとえセキュリティがブート時間を数秒長くするとしても、よりセキュアなブートを好むであろう。
【0025】
別のシナリオにおいて、攻撃者が、デバイスを、ファームウェアを変更した(たとえば悪意あるコードをデバイスに埋込んだ)後に、店舗に返却する場合がある。店舗は、このデバイスを新規顧客に再販する前に、デバイス上のファームウェアが変更されていないことを保証しなければならない。同様に、デバイスが学校、政府機関、および企業に返却されることがある。いわゆる「店内返却」のためにファームウェアを検証する既存のプロセスは、遅く手作業であり第2のデバイスを必要とすることがある。
【0026】
上記シナリオのうちの各シナリオについて、本開示の技術は、店舗、学校、企業などが、これらのより広いまたは異なる範囲の攻撃からの防御を、コンピューティングシステムに依拠してファームウェアまたはリカバリファームウェアの実行前にファームウェアおよびリカバリファームウェアを自動的に検証することにより、実施できるようにすることができる。このようにして、認証されたユーザではなく、デバイスの実際の所有者が、当該所有者が制御するコンピューティングシステムの完全性を、システムの完全性を手作業で検証しなくても、保証することができる。
【0027】
図1は、リカバリファームウェアのセキュアな検証を実行するように構成された一例としてのコンピューティングシステム100を示す概念図である。コンピューティングシステム100は、任意の種類のモバイルまたは非モバイルコンピューティングシステムの一部を形成していてもよい。モバイルコンピューティングシステムにおいて、コンピューティングシステム100は、携帯電話、ラップトップコンピュータ、ウェアラブルデバイス(たとえば腕時計、眼鏡、ヘッドフォン、衣類)、タブレット、自動車/車両デバイス、携帯ゲーム装置、電子リーダーデバイス、および遠隔制御装置の、1つ以上の構成要素を表していてもよい。モバイルコンピューティングシステムにおいて、コンピューティングシステム100は、サーバ、ネットワークデバイス(たとえばルータ、スイッチ、ファイアウォール)、デスクトップコンピュータ、テレビデバイス、エンターテイメントセットトップデバイス、サーモスタットデバイス、ガレージドアオープナーデバイス、他の家庭用装置または家電、テーブルトップアシスタントデバイス、スピーカデバイス、非携帯ゲーム装置、およびビジネス会議機器の、1つ以上の構成要素を表していてもよい。
【0028】
コンピューティングシステム100は、システムオンチップ(SoC)の一部であってもよい。たとえば、コンピューティングシステム100は、従来の中央処理装置(CPU)または中央コントローラ処理アーキテクチャに代わる携帯電話の処理構成要素であってもよい。コンピューティングシステム100の分散型処理アーキテクチャは、携帯電話がCPUの性能ボトルネックの影響を受けるようにするのではなく、携帯電話が、そうでなければ単一のCPUが実行しなければならない作業をオフロードすることを可能にしてもよい。
【0029】
図1のコンピューティングシステム100は、アプリケーションプロセッサ102と、ストレージ104と、メモリ106と、セキュリティプロセッサ108とを含む。コンピューティングシステム100の上記およびその他の構成要素は、バス110、112、および114ならびに制御リンク116Aおよび116Bを介してさまざまな方法で通信可
能に結合される。コンピューティングシステム100は、
図1に示されるものよりも多いまたは少ない構成要素、バス、またはリンクを含み得る。
【0030】
コンピューティングシステム100は、バス110、112、および114を含む。アプリケーションプロセッサ102は、ストレージ104のコントローラと、ストレージバス110を介してデータをやり取りすることによって通信し、そうすることで、アプリケーションプロセッサ102はストレージ104から読み出すまたはストレージ104に書き込むことができる。同様に、アプリケーションプロセッサ102およびセキュリティプロセッサ104の各々は、メモリ106のコントローラと、メモリバス112を介してデータをやり取りすることによって通信し、そうすることで、セキュリティプロセッサ108およびアプリケーションプロセッサ102の各々は、メモリ106から読み出すまたはメモリ106に書き込むことができる。さらに、セキュリティプロセッサ108およびアプリケーションプロセッサ102は、ホストバス114を介してデータをやり取りすることにより、直接通信することができる。アプリケーションプロセッサ102は、ファームウェア、カーネルプログラム、オペレーティングシステムソフトウェア、オペレーティングシステム内で実行するアプリケーション等を含むソフトウェアを実行するように構成される。
【0031】
セキュリティプロセッサ108は、アプリケーションプロセッサ102およびメモリ106に対する制御を容易にするための制御リンク116Aおよび116Bを含む。セキュリティプロセッサ108は、メモリ106の書込保護機能を、制御リンク116Aを介して制御信号を出力することによって制御することができる。場合によっては、セキュリティプロセッサ108は、たとえば攻撃者が制御リンク116Aを破壊しようとする場合に、書込保護機能を監視することができる。セキュリティプロセッサ108は、制御リンク116Bを介して制御信号を出力することにより、アプリケーションプロセッサ102をリセットする、またはアプリケーションプロセッサ102のリセットを解除することができる。たとえば、セキュリティプロセッサ108は、ファームウェアまたはリカバリファームウェアを検証できるまで、アプリケーションプロセッサをリセット状態に保ってもよく、検証できた時点で、セキュリティプロセッサは、アプリケーションプロセッサ102のリセット状態を解除し、その後、検証されたファームウェアまたはリカバリファームウェアを実行する。
【0032】
図1に示されるバス110、112、および114ならびに制御リンク116Aおよび116Bは、コンピューティングシステム100が、アプリケーションプロセッサ102、ストレージ104、メモリ106、およびセキュリティプロセッサ108の間に含み得る、相互接続のいくつかの例にすぎない。コンピューティングシステム100のその他の例において、コンピューティングシステム100の構成要素の間で、より多くのまたは少ないインターフェイス、リンク、および接続が使用されてもよい。バス110、112、および114ならびに制御リンク116Aおよび116Bの各々は、多様なバスアーキテクチャのうちのいずれかである、構成要素間の通信を容易にする、メモリバス構造、周辺バス構造、ユニバーサルシリアルバス構造、プロセッサまたはローカルバス構造等の、さまざまなバス構造のうちの任意の1つまたはその組み合わせを含み得る。
【0033】
ストレージ104は、実行可能命令(たとえばファームウェア、リカバリファームウェア、ソフトウェア、アプリケーション、モジュール、プログラム、機能)および実行可能命令の実行をサポートするデータ(たとえばユーザデータ、オペレーショナルデータ)の永続的ストレージをコンピューティングシステム100に提供するように構成される。たとえば、ストレージ104のコントローラは、アプリケーションプロセッサ102からのコマンドで、ストレージバス110上で通信することにより、ストレージ104からデータを読み出すまたはストレージ104にデータを書き込む。
図1の例におけるストレージ
104は、オペレーティングシステムカーネルおよびオペレーティングシステムファイルシステムの2つの異なるコピー(AおよびB)、ならびにオペレーティングシステムカーネルおよびオペレーティングシステムファイルシステムのインストールおよび実行をサポートするのに必要なその他のデータを含む。
【0034】
ストレージ104の例は、揮発性メモリおよび不揮発性メモリ、固定およびリムーバブルメディアデバイス、ならびに実行可能命令およびサポートデータを保持する任意の適切なメモリデバイスまたは電子データストレージを含む。ストレージ104は、ランダムアクセスメモリ(RAM)、読出専用メモリ(ROM)、フラッシュメモリ、およびさまざまなメモリデバイス構成のその他の種類のストレージメモリの、各種実装形態を含み得る。ストレージ104は伝搬信号を除外する。ストレージ104は、ソリッドステートドライブ(SSD)またはハードディスクドライブ(HDD)であってもよい。
【0035】
メモリ106は、セキュアなブートおよびファームウェア/リカバリファームウェア検証技術を実行するために必要なデータを格納するように構成されたシステムメモリ(たとえば不揮発性)である、ストレージ104とは別のセキュアなメモリデバイスを表す。このメモリは、メモリバス112上でセキュリティプロセッサ108およびアプリケーションプロセッサ102と通信するように構成されたフラッシュメモリチップであってもよく、メモリバス112はシリアル周辺インターフェイス(SPI)バスであってもよく、その場合、メモリ106はSPIフラッシュチップであってもよい。コンピューティングシステム100のその他の例において、他の種類の不揮発性メモリをメモリ106に使用してもよい。
【0036】
メモリ106は、書込保護領域および保護されていないまたは「書込保護なし」領域を含む。書込保護領域において、メモリ106は、ブート記述子、システムファームウェアの読出専用部分、リカバリファームウェア、およびルート鍵(ならびに、場合によってはリカバリファームウェアに署名するためのリカバリ鍵等の他の情報)を含む。保護されていない領域において、メモリ106は、ファームウェアの読み書き可能部分の2つの異なるコピー、および他のデータを含む。
【0037】
ファームウェアおよびリカバリファームウェアの保持は、メモリ106の大きな領域を占有する場合がある。メモリ106を「ブロック」に分割してもよい。メモリ106の大きな領域を複数のブロックに分割することが望ましい場合がある。ファームウェアイメージは複数のブロックにまたがる可能性がある。セキュリティプロセッサ108はファームウェアおよびリカバリファームウェアをメモリ106に保持することができ、これは、ファームウェアおよびリカバリファームウェアのボディに、ファームウェアおよびリカバリファームウェアの各ブロックについての予想ハッシュを埋め込むことを含み、セキュリティプロセッサ108は、この予想ハッシュを、そのブロックについて生成されたハッシュと突き合わせて検証することができる。場合によっては、フル検証を実行するか否かに応じて、ファームウェアまたはリカバリファームウェアが複数のブロックを含む場合に、セキュリティプロセッサ108および/またはアプリケーションプロセッサ102は、複数のブロックのうちの各ブロックについてまたはサブセットのみについてハッシュ値を生成してもよい。
【0038】
メモリ106のコントローラは、メモリ106の保護されていない領域に格納されたデータを変更または削除することができる。しかしながら、コントローラは、メモリ106に対する書込保護が有効にされている間、メモリの保護領域に格納されたデータを変更または削除することができない。メモリ106は、物理ボタン、物理ピン、または物理スイッチ等の、書込保護を無効にするための物理的特徴を含み得る。メモリ106は、特別なプログラミングインターフェイスその他等の、書込保護を無効にするための電子インター
フェイスを含み得る。セキュリティプロセッサ108は、セキュリティプロセッサ108とメモリ106との間の制御リンク116Aを使用して、たとえばコンピューティングシステム100がファームウェアの読出専用部分の新たなバージョンをインストールすることを可能にするために、メモリ106の書込保護を無効にする信号を送信することができる。
【0039】
メモリ106に格納されたシステムファームウェアの読出専用部分は、ボディセクションとヘッダセクションとを含み得る。ヘッダセクションは以下のような情報を含むことができる。
●セキュリティプロセッサ108で実行されるファームウェアがメモリ106の他のブロックの中からヘッダを識別しヘッダおよびファームウェアをいくつかの異なる可能なアドレスのうちの1つに格納できるようにする、識別バイトシーケンス(たとえば「マジックナンバー」)。
●ファームウェアを特定のデバイスモデルに関連付け、システムファームウェアを、他のデバイスモデル上で実行することを意図した他のバージョンと区別するための、バージョン番号。
●(たとえばセキュリティプロセッサのファームウェアに格納された)検証鍵のうちの公開の半分を使用してヘッダセクションに適用するヘッダ署名。秘密の半分は、ハードウェア製造者、オペレーティングシステム開発者、またはコンピューティングシステム100が検証可能なファームウェアのみを実行することを保証するために機能する他のエンティティ等の、遠隔エンティティにおいて制御されてもよい。秘密の半分はセキュリティプロセッサのファームウェアに格納されてもよい。
●セキュリティプロセッサ108がシステムファームウェアのボディセクションを検証するために使用する検証サブ鍵。秘密の半分は、ハードウェア製造者、オペレーティングシステム開発者、またはコンピューティングシステム100が検証可能なファームウェアのみを実行することを保証するために機能する他のエンティティ等の、遠隔エンティティにおいて制御されてもよい。秘密の半分はセキュリティプロセッサのファームウェアに格納されてもよい。
【0040】
ファームウェアイメージのボディセクションは以下を含み得る。
●システムファームウェアを他のバージョンと区別するためにインクリメントされるボディバージョン番号。
●(たとえばシステムファームウェアのヘッダセクションに格納された)検証サブ鍵を使用してボディセクションに適用されたボディ署名。秘密の半分は、ハードウェア製造者、オペレーティングシステム開発者、またはコンピューティングシステム100が検証可能なファームウェアのみを実行することを保証するために機能する他のエンティティ等の、遠隔エンティティにおいて制御されてもよい。
●メモリ106の書込保護が有効にされたときに書込保護されるメモリ106の部分を制御するメモリ106の制御レジスタの予想値。
●ファームウェアまたはリカバリファームウェアの一部が格納されるメモリ106の異なるブロックに各エントリが対応する、予想ハッシュ値のテーブル。
●テーブル内のエントリの数。
【0041】
ファームウェアのボディセクションに含まれる予想ハッシュ値のテーブル内の各エントリは、以下を指定することができる。
●ブロックの、メモリ106内のアドレス(またはオフセット)。
●ブロックのサイズ(たとえば単位はバイト)。
●検証に使用される、ブロックに割り当てられる重み付け。重み付けは、固定点の値、対数値、またはその他の種類のパラメータとして表すことができる。最大の重み付けは、常に確率的検証スキームでブロックを検証させることができる。最小の重み付けは、確率的
検証スキームでブロックが検証されないようにすることができる。最大の重み付けと最小の重み付けとの間の重み付けは、重み付けが、最大の重み付けにより近い値に割り当てられるか最小の重み付けにより近い値に割り当てるかに応じて、ブロックを検証する頻度をより高くまたは低くする。
●ブロックに格納されているファームウェアまたはリカバリファームウェアの部分の予想ハッシュ(たとえばSHA-256)。
【0042】
アプリケーションプロセッサ102はコンピューティングシステム100の主要な処理コンプレックスであり、セキュリティプロセッサ108はコンピューティングシステム100の専用処理ユニットである。アプリケーションプロセッサ102は、主として、コンピューティングシステム100に各種動作を実行させるための命令(たとえばファームウェア、リカバリファームウェア、カーネルソフトウェア、オペレーティングシステムソフトウェア)を実行するように構成され、一方、セキュリティプロセッサ108は、セキュリティおよび検証動作を実行するように構成されたサポートプロセッサである。たとえば、コンピューティングシステム100がモバイルコンピュータ(たとえば携帯電話)内のSoCである場合、アプリケーションプロセッサ102は、オペレーティングシステムに関連する命令と、オペレーティングシステムが提供する動作環境で実行するアプリケーションとを実行することができる。セキュリティプロセッサ108は、オペレーティングシステムのセキュアなブートを管理するためにアプリケーションプロセッサ102とやり取りしてもよく、アプリケーションプロセッサ102がファームウェアを実行する前にファームウェアの検証を実行してもよく、または、コンピューティングシステム100がリカバリモードに入った場合、アプリケーションプロセッサ102がリカバリファームウェアを実行する前にリカバリファームウェアを検証してもよい。
【0043】
アプリケーションプロセッサ102およびセキュリティプロセッサ108の各々は、1つ以上のコントローラ、マイクロコントローラ、プロセッサ、マイクロプロセッサ、ハードウェアプロセッサ、ハードウェア処理ユニット、デジタル信号プロセッサ、グラフィックプロセッサ、グラフィック処理ユニットなどの任意の組み合わせを含み得る。アプリケーションプロセッサ102およびセキュリティプロセッサ108の各々は、コンピューティングシステム100の動作を制御するためにコンピュータ実行可能命令を処理する統合プロセッサおよびメモリサブシステム(たとえばSoCとして実装される)であってもよい。いくつかの例において、コンピューティングシステム100は、一般的にアプリケーションプロセッサ102およびセキュリティプロセッサ108として識別される、処理および制御回路に関連して実現されるハードウェアまたは固定論理回路のいずれか1つまたはそれらの組み合わせを用いて、実現されてもよい。
【0044】
セキュリティプロセッサ108は、セキュリティプロセッサ108の内部の不揮発性メモリの領域において、ファームウェア管理パラメータ(FWMP:firmware management parameter)、セキュリティプロセッサファームウェア(SPFW:security processor firmware)、生成されたハッシュ値、およびその他のデータを保持する。セキュリティプロセッサ108は、セキュリティプロセッサファームウェアを実行する前に、内部検証プロセスを使用してセキュリティプロセッサファームウェア(たとえば一部のシステムでは「Cr50」と呼ばれる)を検証する。
【0045】
ファームウェア管理パラメータは、アプリケーションプロセッサ102が設定する構成パラメータを表す。いくつかの例において、コンピューティングシステム100は、アプリケーションプロセッサ102がファームウェア管理パラメータを変更するためのパスワードを要求してもよい。いくつかの例において、パスワードは、コンピューティングシステム100の初期設定後にコンピューティングシステム100によって削除または「忘れられ」てもよく、そうすることでファームウェア管理パラメータをスタティックにする、
または一度に書き込む。
【0046】
ファームウェア管理パラメータは、オペレーティングシステム開発者モードが可能にされるか否か、セキュリティチップファームウェアデバッグモードが可能にされるか否か等を含む、各種のセキュリティ関連設定を含み得る。ファームウェアおよびリカバリファームウェア検証を可能にするために、ファームウェア管理パラメータは、「確率的検証」または「部分検証」または「検証なし」(たとえば検証を完全に無効にするというオプション)ではなく、コンピューティングシステム100の各ブートで「フル検証」を強制するというオプションを含む、1つ以上の他のオプションまたはセキュリティ関連設定を、含み得る。フル検証および確率的検証を含む各種検証モードの詳細については他の図面を参照しながら説明する。
【0047】
いくつかの例において、セキュリティプロセッサ108は、ファームウェア管理パラメータを通じてより多くのオプションまたは設定の処理をサポートすることができる。たとえば、ファームウェア管理パラメータは、エンタープライズおよび開発者の柔軟性により、検証プロセスにおける複雑さおよびユーザビリティと引き換えにセキュリティをトレードオフすることを可能にするための、追加のオプションを含み得る。たとえば、フル検証、確率的検証、または検証なしを選択するオプションだけを含むのではなく、ファームウェア管理パラメータは、ユーザまたはセキュリティ管理者が確率的検証中に特定のブロックをチェックするための重み付け、したがってオッズを調整するためのオプションを含み得る。
【0048】
いくつかの例において、ファームウェア管理パラメータは、セキュリティプロセッサ108のさらに他の構成(たとえばエンタープライズおよび開発者をより柔軟にしてセキュリティとユーザビリティをトレードオフすることを可能にする設定)を提供してもよい。たとえば、1つの追加設定は、部分または確率的検証の間にブロックがチェックされる可能性を調整するためにファームウェアまたはリカバリファームウェアの特定のブロックに添付される、割り当てられた重み付けに対する変更子であってもよい。その他のファームウェア管理パラメータは、セキュリティプロセッサ108に、モデル固有の検証データ(たとえばファームウェアのヘッダセクションにある)をチェックさせ、任意で、存在する場合はモデル固有の検証データをチェックさせ、存在しない場合はチェックを無視するかまたはモデル固有の検証チェックを完全に無視すること(たとえば開発者にとって有用となり得る)を要求する、設定であってもよい。
【0049】
セキュリティプロセッサ108は、セキュリティプロセッサ108および/またはアプリケーションプロセッサ102がファームウェアまたはリカバリファームウェアの検証を実行するためにアクセスすることができる、セキュリティプロセッサ108の内部不揮発性メモリ内に、検証ステータス情報を保持してもよい。たとえば、セキュリティプロセッサ108は、(電力を取り除くことなく)新たな状態への更新のために増大可能であるが減少させることはできない1つ以上のプラットフォーム構成レジスタを有し得る。一例として、セキュリティプロセッサは、以下を含む検証ステータス情報を保持することができる。
●(たとえばアプリケーションプロセッサ102またはセキュリティプロセッサ108により)ファームウェアまたはリカバリファームウェアの1つ以上のブロックに適用されたセキュアなハッシュ関数から出力された値を表す「生成されたハッシュ」。
●生成されたハッシュを使用してファームウェアまたはリカバリファームウェアが検証可能であったか否かについてのステータスインジケータ。
【0050】
先に述べたように、セキュリティプロセッサ108は、セキュリティプロセッサのファームウェアの中において、システムファームウェアのヘッダセクションに適用されたヘッ
ダ署名を検証するための検証鍵を、保持し得る。たとえば、セキュリティプロセッサ108は、セキュリティプロセッサのファームウェアのヘッダセクションから、コンパイル中にシステムファームウェアに適用されたヘッダ署名を検証するための検証鍵(またはストレージ削減のためにそのハッシュ)を決定することができる(たとえば、システムファームウェア検証鍵の秘密の半分はコンパイラに知られておりコンパイル中にシステムファームウェアに適用される)。セキュリティプロセッサ108は、システムファームウェアボディの検証を続ける前に、先ず、システムファームウェアに適用されたヘッダ署名を、セキュリティプロセッサファームウェアに格納された(たとえばCr50のヘッダセクションに埋め込まれた)検証鍵と照合してもよい。セキュリティプロセッサ108は、その後、システムファームウェアの検証を続ける前に、システムファームウェアに適用されたボディ署名を、システムファームウェアのボディセクションに格納された検証サブ鍵と照合してもよい。
【0051】
アプリケーションプロセッサ102、セキュリティプロセッサ108、およびメモリ106は、ホストバス114およびメモリバス112上でデータをやり取りすることにより、メモリ106にロードされたファームウェアおよびリカバリファームウェアを検証する。アプリケーションプロセッサ102は、セキュリティプロセッサ108が保持するファームウェア管理パラメータを初期化することができ、セキュリティプロセッサ108は、ファームウェア管理パラメータに従ってファームウェアを検証することができ、この検証は、ファームウェアのハッシュを生成し、生成したハッシュを、セキュリティプロセッサ108がメモリ106に格納されたファームウェアのボディセクションから抽出した予想ハッシュと比較することを含む。セキュリティプロセッサ108はリカバリファームウェアを検証することができ、この検証は、リカバリファームウェアのハッシュを生成し(またはアプリケーションプロセッサ102に依拠してリカバリファームウェアのハッシュを生成し)、生成したハッシュを、セキュリティプロセッサ108がメモリ106に格納されたリカバリファームウェアのボディセクションから抽出した予想ハッシュと比較することを含む。
【0052】
動作時に、セキュリティプロセッサ108は、先ず、セキュリティプロセッサ108が保持するシステムファームウェア検証鍵(またはそのハッシュ)を使用してファームウェアのヘッダ署名を検証してもよい。セキュリティプロセッサ108は、ヘッダの署名は正しくないと判断した場合、コンピューティングシステム100が互換性のないまたは破損したシステムファームウェアをロードし実行することを防ぐために、コンピューティングシステム100をシャットダウンしてもよい。セキュリティプロセッサ108は、ヘッダシステムファームウェアの署名が検証鍵を使用して検証可能であると仮定して、システムファームウェアのボディセクションに適用されたボディ署名が検証サブ鍵を使用して生成されたものであるか否かを判断してもよい。セキュリティプロセッサ108は、ボディセクションの署名が正しくないと判断した場合、コンピューティングシステム100が互換性のないまたは破損したシステムファームウェアをロードし実行することを防ぐために、コンピューティングシステム100をシャットダウンしてもよい。
【0053】
セキュリティプロセッサ108は、ボディセクションの署名が検証サブ鍵を用いて検証可能であると仮定して、ファームウェア管理パラメータに従い、メモリ106にロードされたシステムファームウェアまたはリカバリファームウェアのブロックの予想ハッシュ値を決定する。たとえば、セキュリティプロセッサ108は、システムファームウェアのフルチェック中に、システムファームウェアのヘッダまたはボディから、メモリ106に格納されているシステムファームウェアの各ブロックについての予想ハッシュ値を特定してもよい。予想ハッシュ値は、システムファームウェアの固定属性のままであってもよく、事前に、たとえばコンパイル時の前に決定してもよい。セキュリティプロセッサ108は、システムファームウェアおよびリカバリファームウェアを実行する条件として、メモリ
106に現在格納されているシステムファームウェアおよびリカバリファームウェアのブロックの生成したハッシュ値と、システムファームウェアおよびリカバリファームウェアに埋め込まれた予め定められた予想ハッシュ値とを比較する。
【0054】
セキュリティプロセッサ108は、メモリ106にロードされたシステムファームウェアのブロックにハッシュ関数を直接適用してもよく、または、セキュリティプロセッサ108は、アプリケーションプロセッサ102に依拠して、バックグラウンドまたはオペレーティングシステムタスクとしてハッシュ関数を適用してもよい。いずれの場合においても、これらの生成されたハッシュ値は、予想ハッシュ値と比較される。セキュリティプロセッサ108は、ハッシュ間の不一致を識別した場合、アプリケーションプロセッサ102が、破損しているまたは悪意ある可能性があるファームウェアまたはリカバリファームウェアを実行するのを防ぐために、検証の失敗をアプリケーションプロセッサ102に通知してもよい。
【0055】
次のブートプロセス中、セキュリティプロセッサ108は、システムファームウェアの生成されたハッシュをリフレッシュし、システムファームウェアの第1の生成されたハッシュをシステムファームウェアの第2の生成されたハッシュに置き換えることにより、上述の検証プロセスを繰り返してもよい。たとえば、システムファームウェアが過去に検証に失敗した場合、セキュリティプロセッサは、システムファームウェアに関連付けられたハッシュを再度生成することで、次の検証の試みを可能にしてもよい。セキュリティプロセッサ108は、システムファームウェアの予想ハッシュが第2のハッシュと一致しないという判断に応じて、アプリケーションプロセッサ102にリカバリモードになるように指示するか、さもなければシステムファームウェアの実行を控えてもよい。
【0056】
いくつかの例において、セキュリティプロセッサ108は、ファームウェアまたはリカバリファームウェアがいつ検証に失敗したかを示すために、コンピューティングシステム100の発光ダイオード(LED)またはスピーカ等の出力コンポーネントを制御してもよい。セキュリティプロセッサ108は、これを、他の機会に、たとえば2要素認証が要求されたことを示すために、使用することもできる。出力コンポーネントは、セキュリティプロセッサ108が使用する専用の出力コンポーネントであってもよい。他の場合において、出力コンポーネントは、二重機能(たとえば、電力もしくは充電識別子、またはキーボードもしくはディスプレイバックライト等)を有していてもよい。セキュリティプロセッサ108は、検証失敗、検証成功、またはその他の状態を示すために出力コンポーネントを制御してもよい。このような出力コンポーネントは、二重目的(たとえば、電力もしくは充電LED、またはキーボードもしくはディスプレイバックライト等)を有していてもよく、または、ファームウェアおよびリカバリファームウェアの検証の状態を提供するためにコンピューティングシステム100に意図的に統合されてもよい。出力コンポーネントに対する典型的な制御方式は、アプリケーションプロセッサ102からセキュリティプロセッサ108にメッセージを送信して出力コンポーネントを制御することを含み得る。他の例において、セキュリティプロセッサ108は、アプリケーションプロセッサ102の出力を測定するために、あるピン上にパルス幅変調(PWM)捕捉ユニットを有していてもよく、セキュリティプロセッサ108は、出力コンポーネントに対する出力を複製するためにそれ自身のPWMユニットを有していてもよい。他の例において、セキュリティプロセッサ108は、出力コンポーネントを制御するために、アプリケーションプロセッサ102によって制御可能な内部スイッチを有していてもよい。
【0057】
コンピューティングシステム100に対する物理アクセスが可能な攻撃者は、出力コンポーネントを除去する、または出力コンポーネントからの光を遮断することができる。セキュリティプロセッサ108は、検証プロセス中に出力コンポーネントを制御することにより、自動車の始動中にエンジン警告灯を直ちに数秒間表示する方法と同様に、ブート中
またはログインプロセス中に出力コンポーネントを非常に早期に有効することで、そのような攻撃をより困難にする。攻撃者は、コンピューティングシステム100内の別のプロセッサに出力コンポーネントを配線してその挙動を複製しようとする可能性があるが、これは、永続的な、場合によっては明らかなハードウェア変更を伴う。
【0058】
場合によっては、セキュリティプロセッサ108は、書込保護信号に接続される単一のオープンドレインピンを含み得る。これは、製造中にデバッガがその信号をオーバーライドできるようにするために、抵抗器を介して接続されている。この抵抗器を除去することは、攻撃者が、セキュリティプロセッサ108が書込保護信号を駆動できないようにすることおよび書込保護信号の現在の状態を検出できないようにすることの両方を実現するための、適度に実現可能な方法である。セキュリティプロセッサ108は、第1の書込保護ピンと全く同じネットに接続された第2のピンを含んでいてもよい。この追加のピンは、この信号をより妨害し難くするために、マザーボードの内側の層の下に隠してもよい。セキュリティプロセッサ108は、その信号を監視して、第1の書込保護ピンの真の状態を測定してもよい。
【0059】
攻撃者は、セキュリティプロセッサ108が書込保護ピンの状態変更を検出しないようにするためにはコンピューティングシステム100の電源を切る必要がある。しかしながら、ブート時に、セキュリティプロセッサ108は、システムメモリ106を再スキャンし変更を識別することができる。攻撃者は、システムメモリ106を、SPIバスのより多くの制御を可能にするより高度な回路で置き換え、その回路の上に新たなメモリ106を積み重ねることができる。しかしながら、これは一層困難な攻撃であり、物理的証拠を残すことになる。
【0060】
アプリケーションプロセッサ上で実行可能なファームウェアの検証について主として説明しているが、リカバリファームウェアをセキュアに検証するための技術は他のプロセッサにも同様に適用される。たとえば、コンピューティングシステム100は、アプリケーションプロセッサ102およびセキュリティプロセッサ108に加えて、埋め込みコントローラ(EC)指紋センサ(FPMCU)、その他のハードウェアユニット、ハードウェアアクセラレータユニットなどのようなファームウェアを有するその他のプロセッサを含み得る。セキュリティプロセッサ108が別のプロセッサのファームウェアにアクセスできる場合、セキュリティプロセッサ108は、セキュリティプロセッサ108がアプリケーションプロセッサ102のファームウェアを検証するやり方で、ファームウェアおよびリカバリファームウェアを検証することもできる。このように、その他のプロセッサは、セキュアな検証が提供する柔軟性およびセキュリティの恩恵を受けることができる。
【0061】
図2は、ファームウェアを検証するように構成されたセキュリティプロセッサの動作の例を示すフローチャートである。
図2Bは、リカバリファームウェアを検証するように構成されたセキュリティプロセッサの動作の例を示すフローチャートである。動作200はステップ202~214を含む。動作200は、
図2に示される動作と異なる順序で実行されてもよく、または、示される動作よりも多いもしくは少ない動作を含んでいてもよい。セキュリティプロセッサ108は、動作200を実行することにより、メモリ106に保持されているシステムファームウェアを検証することができる。
【0062】
図2において、セキュリティプロセッサ108は、コンピューティングシステム100の各電源投入またはリセット中に動作200を実行してもよい。セキュリティプロセッサ108は、スリープモードからの移行に応じて動作200を実行してもよい。セキュリティプロセッサ108は、セキュリティプロセッサ108のリセットに応じて動作200を実行してもよい(たとえば、セキュリティプロセッサ108のリセットをトリガする特定のキー入力の組み合わせをユーザが提供した場合)。
【0063】
202において、セキュリティプロセッサ108が電源投入、起動、またはリセットされると、このセキュリティプロセッサ(SP)は、自身のセキュリティプロセッサファームウェア(SPFW)を検証、ロード、および実行する。204において、セキュリティプロセッサ108は、ファームウェアを検証するためのオプションを含むファームウェア管理パラメータを保持する。言い換えると、セキュリティプロセッサ108は、ファームウェア管理パラメータから推測される情報に基づいて、たとえば、コンピューティングシステム100のブートごとにリカバリファームウェアの「フル検証」を実行する、リカバリファームウェアの「確率的検証」を実行する、またはリカバリファームウェアを検証しないことにより、システムファームウェアまたはリカバリファームウェアを検証するように構成されてもよい。セキュリティプロセッサ108は、検証のレベル(たとえばフル検証、部分もしくは確率的検証、または検証なし)を決定するため、ならびに、アプリケーションプロセッサ102および/またはセキュリティプロセッサ108によって実行された以前の検証プロセスの結果を判断するために、セキュリティプロセッサ108が使用するファームウェア管理パラメータとして、ステータス情報およびフラグを保存することができる。
【0064】
ファームウェア管理パラメータは、コンピューティングシステム100の最初のブート時にアプリケーションプロセッサ102によって初期化されてもよい。セキュリティプロセッサ108は、リカバリファームウェアのフル検証を実行するとき、ファームウェアの各ブロックごとに生成されたハッシュをファームウェアのボディセクションに記録された対応する予想ハッシュと照合することを含む、リカバリファームウェア全体の照合を行う。セキュリティプロセッサ108は、リカバリファームウェアの検証を実行しない場合、ファームウェアに対するハッシュ(たとえばデバッグに有用)を生成することを控える。
【0065】
ファームウェアのいくつかのブロックがコンピューティングシステム100の機能に影響を与えない場合がある。ブート時またはリカバリ中に特定のブロックをスキップすることにより、コンピューティングシステム100のセキュリティを大幅に低下させることなく、コンピューティングシステム100をより広い範囲のシナリオで動作させることができる。したがって、ファームウェア内の重みのテーブルが、各ファームウェアブロックに関連付けられブロックをスキップできるか否かを判断するために使用される重み付け係数を指定してもよい。
【0066】
いくつかの例において、ブロックの中には、ディープスリープからリカバリするときまたはアプリケーションプロセッサおよび/またはセキュリティプロセッサがシャットダウンし得る低電力サスペンドモードに入るときに、使用される機会が少なくなり得るブロックがある。ファームウェアのルート鍵またはその他の部分のような、ディープスリープからのレジュームまたは低電力サスペンドモードに入ることに影響を与えない、通常のブートによって使用されるいくつかのブロックがある。これらのブロックをレジューム時にスキップすることにより、セキュリティを大幅に低下させることなくレジューム時間を改善することができる。
【0067】
206において、セキュリティプロセッサは、コンピューティングシステム100がリカバリモードにあるか否か、または通常の非リカバリモードをとるか否かを判断する。たとえば、セキュリティプロセッサ108は、コンピューティングシステム100のキーボードまたは他の入力コンポーネントで特定の入力が検出されたことに応じて、コンピューティングシステム100のユーザがリカバリモードを手動で選択しているか否かを確認することができる。その他の場合において、セキュリティプロセッサ108は、リカバリファームウェアを検証することを求める要求をアプリケーションプロセッサ102から受けたことに応じて、リカバリモードに入りリカバリファームウェアの検証を開始してもよい
。アプリケーションプロセッサ102は、実行前にリカバリファームウェアをチェックしてもよい。アプリケーションプロセッサ102は、リカバリファームウェアの生成されたハッシュと予想ハッシュとの不一致を検出したことに応じて、リカバリモードに入ることを求めるコマンドをセキュリティプロセッサ108に(たとえばホストバス114を介して)伝えてもよい。
【0068】
リカバリモードに入るという決定に応じて、セキュリティプロセッサ108は、
図3に示される動作300を実行する。または、非リカバリモードに入るという決定に応じて、セキュリティプロセッサは、セキュリティプロセッサ108が保持するファームウェア管理パラメータに基づいてシステムファームウェアを自動検証するステップ208を実行することによって続行する。
【0069】
208Aにおいて、セキュリティプロセッサ108は、システムファームウェアに適用された署名を、システムファームウェア検証鍵およびサブ鍵と照合する。たとえば、セキュリティプロセッサ108は、ファームウェアのヘッダ署名を検証するために、セキュリティプロセッサファームウェアのヘッダセクションに保持された(またはセキュリティプロセッサ108内の他の場所に保持された)検証鍵を使用することができる。システム検証鍵の秘密の半分は、オペレーティングシステム開発者またはコンピューティングシステム100の製造者によって保持され、アプリケーションプロセッサ102上で実行することが意図されたシステムファームウェアをコンパイルし署名するために使用される公式コンパイラに提供されてもよい。
【0070】
ヘッダ署名を検証したことに応じて、セキュリティプロセッサ108は、システムファームウェアのヘッダセクションからの検証サブ鍵を使用して、システムファームウェアに適用されたボディ署名を検証することができる。システム検証サブ鍵の秘密の半分は、オペレーティングシステム開発者またはコンピューティングシステム100の製造者によって保持され、アプリケーションプロセッサ102上で実行することが意図されたシステムファームウェアのボディをコンパイルし署名するために使用される公式コンパイラに提供されてもよい。
【0071】
セキュリティプロセッサ108は、適切な検証鍵および検証サブ鍵を使用してシステムファームウェアが署名されなかったと判断した場合、システムファームウェア検証チェックに失敗しステップ210に進む。または、セキュリティプロセッサ108は、システムファームウェアに適用された署名の検証に応じて、続けてステップ208B~208Dにおいてファームウェアを検証する。
【0072】
ファームウェア検証プロセスの一部として署名をチェックすることは、ステップ208C~208Dにおいてハッシュを単にチェックすることよりも、セキュリティプロセッサ108のリソースに対する負担が大きい可能性がある。セキュリティプロセッサ108は、ステップ208で生成された中間値(たとえば署名ハッシュ)を保存して、セキュリティプロセッサ108が次回動作200を実行するときにより迅速な署名チェックを実行できるようにしてもよい。
【0073】
セキュリティプロセッサ108は「ロールバック保護」を提供してもよい。セキュリティプロセッサ108がチェックした検証済みのリカバリファームウェアの最高バージョン番号を保存することで、セキュリティプロセッサ108は、この最高バージョン番号よりも低いバージョン番号を有する古いバージョンがチェックされているときに、コンピューティングシステム100に警告するための通知を出力することができる。たとえば、セキュリティプロセッサ108がチェックした以前のバージョンはバージョンBであったがファームウェアのヘッダセクションがバージョンAを示す場合、セキュリティプロセッサは
、その内部レジスタにフラグを設定してもよく、そうでなければ、ファームウェアが以前のバージョンに「ロールバック」されたという(たとえばユーザインターフェイスを介して出力される)警告を、アプリケーションプロセッサ102に信号で伝達してもよい。
【0074】
ファームウェア管理パラメータに基づいて、セキュリティプロセッサ108は、ステップ208B~208Dを、フル検証を行う場合はシステムファームウェアの各ブロックごとに実行し、部分検証または確率的検証を行う場合はシステムファームウェアのブロックの一部のみについて実行し、ファームウェア管理パラメータが検証をスキップできることを示す場合はシステムファームウェアのブロックのいずれについても実行しない。
【0075】
208Bにおいて、セキュリティプロセッサ108は、ファームウェア管理パラメータに基づいてシステムファームウェアをハッシュして、システムファームウェアの生成されたハッシュを決定する。たとえば、セキュリティプロセッサ108は、システムファームウェアの個々のブロックのうちの1つ以上をメモリ106からロードし、ハッシュ関数をブロックに適用してもよい。セキュリティプロセッサは、ハッシュ関数の結果を、後に予想ハッシュ値と比較するために、レジスタまたは内部メモリに保持してもよい。
【0076】
208Cにおいて、セキュリティプロセッサ108は、システムファームウェアの予想ハッシュを決定する。たとえば、コンピューティングシステム100は、メモリ106に保持されているシステムファームウェアのブロックの予想ハッシュ値を記録するための専用の発見可能な領域(たとえばボディセクションの一部)をシステムファームウェアが含むことを要求する場合がある。ファームウェアおよびリカバリファームウェアは、典型的に、ファームウェアイメージの一部としてファームウェアおよびリカバリファームウェアを一緒にコンパイルすることを含む包括的な構築プロセス中に構築されるので、システムファームウェアに埋め込まれた予想ハッシュ値は、典型的に、リカバリファームウェアを検証するのに十分である。セキュリティプロセッサ108は、ファームウェアのボディセクションの予め定められた領域から特定の値を抽出することにより、予想ハッシュを決定することができる。
【0077】
208Dにおいて、セキュリティプロセッサ108は、予想ハッシュと生成されたハッシュとが一致するか否かを判断する。これらのハッシュが一致する場合、セキュリティプロセッサ108は、ファームウェアを検証し、ファームウェアが検証されたことを反映するように、セキュリティプロセッサ108が保持するステータスレジスタを更新する。同様に、これらのハッシュが一致しない場合、セキュリティプロセッサは、ファームウェアが検証不能であったことを示すようにステータスレジスタを更新する。
【0078】
210において、セキュリティプロセッサは、ファームウェアの検証に成功したか否かを判断する。212において、ファームウェアがステップ208における検証チェックに失敗し検証されない場合、セキュリティプロセッサ108は、コンピューティングシステム100に、ブートを終了し電源を落とすよう指示する。214において、ファームウェアがステップ208の検証チェックに合格し検証されると、セキュリティプロセッサ108は、アプリケーションプロセッサ102をリセットから解放しアプリケーションプロセッサ102がファームウェアを実行できるようにすることで、コンピューティングシステム100にブートプロセスを続行するよう指示する。
【0079】
図3は、リカバリファームウェアを検証するように構成されたセキュリティプロセッサの動作の例を示すフローチャートである。動作300はステップ302~308を含む。動作300は、
図3に示される動作と異なる順序で実行されてもよく、または、示される動作よりも多いもしくは少ない動作を含んでいてもよい。セキュリティプロセッサ108は、動作300を実行することにより、メモリ106に保持されているリカバリファーム
ウェアを検証することができる。
【0080】
図3において、セキュリティプロセッサ108は、動作200のステップ206においてコンピューティングシステム100がリカバリモードに入っているとセキュリティプロセッサが判断したことに応じて、動作300を実行してもよい。
【0081】
コンピューティングシステム100は、さまざまな方法でリカバリモードに入ることができる。たとえば、アプリケーションプロセッサ102が、(たとえば、コンピューティングシステム100のキーボード上の特定のキーの押下を検出することにより/コンピューティングシステム100の入力コンポーネントから異なる信号を検出することにより)リカバリモードに入ることをユーザが手動で要求していると判断したことに応じて、コンピューティングシステム100はリカバリモードに入ることができる。システムファームウェアの読出専用部分の実行中に、アプリケーションプロセッサ102が、システムファームウェアの読み書き可能部分に適用された署名が正しくないと判断した場合、コンピューティングシステム100はリカバリモードに入ることができる。システムファームウェアの読出専用部分は、メモリ106の書込保護された部分に格納されたルート鍵を使用して署名をチェックすることができる。
【0082】
リカバリモードに入る前に、コンピューティングシステム100のオペレーティングシステムが、たとえばバックグラウンドタスクとしてリカバリファームウェアを検証してメモリ106にリカバリファームウェアの予想ハッシュを格納していてもよい。通常のブート時、コンピューティングシステム100は、リカバリファームウェアが最初のブートパス中に実行されることはないので、リカバリファームウェアを検証する必要はない。アプリケーションプロセッサ102は、リカバリモードに入ることをユーザから指示されない限り、リカバリファームウェアを検証することなく、オペレーティングシステムまで完全にブートすることができる。
【0083】
オペレーティングシステムは、通常のブートパスが失敗するまでコンピューティングシステム100が気付かない可能性があるリカバリファームウェアの無効化を攻撃者が行うことを防ぐために、通常動作中にバックグラウンドでリカバリファームウェアを検証してもよい。攻撃者がコンピューティングシステム100に未検証コードを実行させることは必ずしも防止されないかもしれないが、少なくとも、バックグラウンドでリカバリファームウェアの完全性をオペレーティングシステムにチェックさせることにより、コンピューティングシステム100がリブートに先立って潜在的な攻撃者を事前に検出できるようにすることができる。場合によっては、開発者が、新規のファームウェアバージョンをテストしておりコンピューティングシステム100が不良または未検証のファームウェアを実行している可能性があることを事前に通知または警告されることを望むことがある。これにより、コンピューティングシステム100が信頼できないリカバリファームウェアを実行する前に、リカバリファームウェアを実行しないまたはファームウェアを修復しないという選択肢をユーザに与えることができる。
【0084】
アプリケーションプロセッサ102において実行されるオペレーティングシステムまたは他のサービスもしくはスレッドは、さまざまな理由で、リカバリファームウェアを再検証するためにリカバリモードに入るようにセキュリティプロセッサ108に要求することができる。オペレーティングシステムまたは他のサービスもしくはスレッドは、ホストバス112を介してセキュリティプロセッサ108と通信することにより、再検証要求を伝達する。
【0085】
アプリケーションプロセッサ102は、典型的に、セキュリティプロセッサ108よりも強力かつ高速である。そのため、処理速度がより速く、帯域幅がより大きく、パワーが
より大きいほど、コンピューティングシステム100は、アプリケーションプロセッサ102を、セキュリティプロセッサ108よりも高速でリカバリファームウェアを最初に検証するように強化することができる。
【0086】
実行中、システムファームウェアは、以前のブートで最初に決定された、システムメモリ内のリカバリファームウェアの予想ハッシュを保持してもよい。リカバリファームウェアおよびシステムファームウェア(読出専用部分を含む)は一緒に同時に構築されるので、ハッシュは、リカバリファームウェアの完全性(たとえばリカバリファームウェアが最後に使用されてから変更されたか否か)を判断するのに十分なリファレンスポイントを提供することができる。コンピューティングシステム100がリカバリモードに入っていると判断すると、システムファームウェアは、リカバリファームウェアの予想ハッシュを、メモリ106にロードされた、アプリケーションプロセッサが生成するリカバリファームウェアのハッシュと比較するように、アプリケーションプロセッサ102に指示する。
【0087】
アプリケーションプロセッサ102は、予想ハッシュと生成されたハッシュとが一致すると判断したことに応じて、リカバリファームウェアを実行する。リカバリファームウェアがチェックに失敗したという判断、および、リカバリファームウェアの署名が不良であるもしくは予想ハッシュと生成されたハッシュとが不一致であるという判断に応じて、アプリケーションプロセッサ102は、セキュリティプロセッサ108が、リカバリファームウェアを検証することにより、コンピューティングシステム100がリカバリファームウェアを実行しリカバリモードで動作することを可能にすることを、要求する。
【0088】
302において、206でコンピューティングシステム100がリカバリモードに入っていると判断したことに応じて、セキュリティプロセッサ108は、任意で、システムファームウェアの検証中に使用されるファームウェア管理パラメータに従い、リカバリファームウェアを自動検証する。たとえば、セキュリティプロセッサ108は、デフォルトで、メモリ106にロードされたリカバリファームウェアの各ブロックをチェックするリカバリファームウェアのフル検証を実行してもよい。他の場合において、リカバリファームウェアのいくつかのブロックが、破損しても問題を引き起こす可能性が低いのであれば、セキュリティプロセッサ108は、破局的な故障を引き起こす可能性が最も低いブロックをスキップしてリカバリファームウェアの確率的または部分検証を実行してもよい。セキュリティプロセッサ108は、ファームウェア管理パラメータ内の情報に基づいて、リカバリファームウェアのフルチェックを行うか部分チェックを行うかを判断してもよい。
【0089】
確率的検証の場合、各ブロックに重み付けを割り当ててもよく、この重み付けは、その後、検証プロセス中に(たとえば動作300または200中に)動的に生成されたしきい値と比較される。動的に生成されるしきい値は、乱数発生器からの出力に対応していてもよい。割り当てられた重み付けがブロックの動的しきい値を上回る場合、セキュリティプロセッサ108は、ステップ208A~208Dに関して先に概要を述べたものと同様のプロセスに従い、ステップ302A~302Dを実行してそのブロックを自動検証する。割り当てられた重み付けが動的しきい値を上回らない場合、セキュリティプロセッサ108は、そのブロックをスキップし、そのブロックの予想ハッシュが生成されたハッシュと一致するか否かを考慮しなくてもよい。
【0090】
302Aにおいて、セキュリティプロセッサ108は、システムファームウェアに適用された署名を、システムファームウェア検証鍵およびサブ鍵と照合する。ヘッダ署名の検証に応じて、セキュリティプロセッサ108は、システムファームウェアのヘッダセクションからの検証サブ鍵を使用して、システムファームウェアに適用されたボディ署名を検証することができる。セキュリティプロセッサ108は、適切な検証鍵および検証サブ鍵を使用してシステムファームウェアが署名されなかったと判断した場合、システムファー
ムウェア検証チェックは失敗し、ステップ304に進む。または、セキュリティプロセッサ108は、システムファームウェアに適用された署名の検証に応じて、続いてステップ302B~ステップ302Dにおいてリカバリファームウェアを検証する。
【0091】
典型的に、セキュリティプロセッサ108は、リカバリファームウェアの破損ブロックの検出を最大にするためにはフル検証が必要であるので、リカバリファームウェアの各ブロックごとにステップ302B~302Dを実行する。しかしながら、ファームウェア管理パラメータが検証なしまたは部分検証のみを示している場合、セキュリティプロセッサ108は、リカバリファームウェアの部分検証を実行するまたは検証を実行しないように構成されてもよい。そのような場合、セキュリティプロセッサ108は、乱数に適用されると乱数がしきい値を満たすようにする重み付けが予め割り当てられたリカバリファームウェアのブロックに対し、ステップ302B~302Dを選択的に実行する。
【0092】
302Bにおいて、セキュリティプロセッサ108は、リカバリファームウェアの個々のブロックをハッシュし、予想ハッシュ値と後に比較するために、ハッシュ関数の結果を、レジスタまたは内部メモリに保持してもよい。302Cにおいて、セキュリティプロセッサ108は、リカバリファームウェアの最初のチェック中にアプリケーションプロセッサが最初に決定したように、リカバリファームウェアの個々のブロックについての対応する予想ハッシュを決定する。302Dにおいて、セキュリティプロセッサ108は、予想ハッシュと生成されたハッシュとが一致するか否かを判断する。これらのハッシュが一致する場合、セキュリティプロセッサ108は、リカバリファームウェアを検証し、ファームウェアが検証されたことを反映するように、セキュリティプロセッサ108が保持するステータスレジスタを更新する。同様に、これらのハッシュが一致しない場合、セキュリティプロセッサは、リカバリファームウェアが検証不能であったことを示すようにステータスレジスタを更新する。
【0093】
304において、セキュリティプロセッサは、リカバリファームウェアの検証に成功したか否かを判断する。306において、リカバリファームウェアがステップ304における検証チェックに失敗し検証されない場合、セキュリティプロセッサ108は、コンピューティングシステム100に、ブートを終了し電源を落とすよう指示する。308において、リカバリファームウェアがステップ304の検証チェックに合格し検証された場合、セキュリティプロセッサ108は、アプリケーションプロセッサ102をリセットから解放しアプリケーションプロセッサ102がリカバリファームウェアを実行することを可能にすることにより、コンピューティングシステム100にリカバリプロセスを継続するよう指示する。
【0094】
先に述べたように、セキュリティプロセッサ108は、メモリ106に対する書込保護を、制御リンク116Aを介して制御することができる。コンピューティングシステム100の攻撃者は、たとえば、メモリ106上の物理的な書込保護機能に対して電圧を印加すること、ワイヤを切断すること、または書込保護信号とセキュリティプロセッサ108との間のリンクを切断することにより、セキュリティプロセッサ108が制御する書込保護信号をオーバーライドしようと試みる可能性がある。セキュリティプロセッサ108は、メモリ106に対する書込保護が変更されたか否かを監視し、変更された場合には、フラグを設定することができる、または、そうでなければメモリ106の書込保護が変更されメモリ106に格納された情報が変化している可能性があることを示すことができる。たとえば、セキュリティプロセッサ108は、アプリケーションプロセッサ102において実行されるオペレーティングシステムのコンポーネントによって監視されている内部レジスタまたは内部メモリ内の値を変更してもよい。したがって、セキュリティプロセッサ108は、セキュリティプロセッサ108がリカバリ状態を経験するときに動作300を実行することを含む、リカバリプロセスを開始することができる。
【0095】
セキュリティプロセッサ108は、たとえば、ファームウェア管理パラメータがブロックチェックが無効にされたことを示す場合に、サブステップ302A~302Dを含むステップ302の全体をスキップしてもよい。そのため、動作300を実行する前提条件は、ブロックチェックが無効にされるのか、フルブロックチェックが有効にされるのか、または確率的ブロックチェックが有効にされるかを判断することを含み得る。したがって、セキュリティプロセッサ108は、サブステップ302A~302Dを含むステップ302を実行することで、ファームウェア管理パラメータにおいて定義されたチェック方式に準拠してもよい。
【0096】
セキュリティプロセッサ108は、ブロックチェックは無効にされないと仮定し、リカバリファームウェアをロードしチェックしてもよい。セキュリティプロセッサは、たとえば、各ブロックを予想ハッシュと比較することによりリカバリファームウェアの各ブロックについて動作204~210を実行する、フルチェックを実行してもよい。セキュリティプロセッサ108は、たとえば、ブロックの一部のみについて動作204~210を実行する、確率的チェックを実行してもよい。セキュリティプロセッサ108は、ブロックをチェックまたはスキップするためのしきい値を満たすリカバリファームウェアのブロックのみをハッシュし比較することによって確率的チェックを実行してもよい。
【0097】
場合によっては、セキュリティプロセッサ108は、ファームウェアおよびファームウェア検証を、たとえそれを求める要求を受けない場合であっても実行してもよい。たとえば、セキュリティプロセッサ108は、アプリケーションプロセッサ102からの信号を待つことなく、動作200または300を自動的に実行することにより、ファームウェアまたはリカバリファームウェアを(たとえば定期的に、スケジュールに従って、またはその他の条件もしくは規則に従って)検証するようにプログラミングされてもよい。
【0098】
図4は、ファームウェアまたはリカバリファームウェアの確率的または部分検証を実行するように構成されたセキュリティプロセッサの動作の例を示すフローチャートである。動作400は動作402~416を含む。動作400は、
図4に示される動作と異なる順序で実行されてもよく、または、示される動作よりも多いまたは少ない動作を含んでいてもよい。セキュリティプロセッサ108は、動作400を実行することにより、メモリ106に保持されているファームウェアまたはリカバリファームウェアを確率的に検証することができる。
【0099】
ファームウェアまたはリカバリファームウェアの検証の速度および効率をセキュリティを犠牲にすることなく高めるために、セキュリティプロセッサ108は、ファームウェアまたはリカバリファームウェアを確率的に検証または部分的にのみ検証してもよい。セキュリティプロセッサ108は、フル検証を実行してファームウェアまたはリカバリファームウェアのすべてのブロックをチェックすることができるが、確率的検証の場合、セキュリティプロセッサ108は、典型的にはファームウェアまたはリカバリファームウェアの一部のみをチェックする。
【0100】
たとえば、セキュリティプロセッサ108は、ファームウェアまたはリカバリファームウェアの各ブロックに(たとえばファームウェアヘッダ内に)予め割り当てられた対応する重み付けに依拠してもよい。セキュリティプロセッサ108は、各ブロックごとにしきい値を動的に生成し、このしきい値を、ブロックを検証するための条件として、そのブロックについて予め割り当てられた重み付けと比較してもよい。たとえば、セキュリティプロセッサ108は、ファームウェアまたはリカバリファームウェアの各ブロックごとに、0と1との間の値を出力する乱数発生器を実行してもよい。乱数発生器から出力された動的しきい値が予め割り当てられた重み付け(たとえばこの例ではこれも0と1との間の値
)を上回ると判断したことに応じて、セキュリティプロセッサ108は、このブロックをスキップし、続けて後続のブロックをチェックする。動的しきい値が予め割り当てられた重み付けを上回らないと判断したことに応じて、セキュリティプロセッサ108は、このブロックを(たとえばこのブロックの予想ハッシュをこのブロックの生成されたハッシュと比較することにより)チェックする。
【0101】
402において、セキュリティプロセッサ108は、ブロックの確率的検証しきい値を決定する。このしきい値は、リカバリファームウェアのブロックに割り当てられる、最大重み付けと最小重み付けとの間の値を表す。このしきい値は、たとえばコンピューティングシステム100のコンテキストまたは他の条件に基づいて、固定でも動的でもよい。セキュリティプロセッサ108は、ファームウェアを分析してファームウェアのボディセクション内のテーブル内のすべてのエントリの中から最大および最小の重み付けを導出することにより、しきい値を決定してもよい。セキュリティプロセッサ108は、乱数発生器を使用して、動的しきい値を、最大重み付け以上かつ最小重み付け以下の任意の値として決定してもよい。
【0102】
404において、セキュリティプロセッサは、このブロックについての重み付けを決定する。たとえば、上述のように、ファームウェアのボディセクションが、ファームウェアまたはリカバリファームウェアの各ブロックまたは他の論理セクションに割り当てられた重みのテーブルを指定してもよい。各重みは、他のブロックとの比較における、検証のための相対的重要度を示していてもよい。重み付けは、固定点の値、対数値、または最大値および最小値を有するその他の種類のパラメータとすることができる。
【0103】
確率的検証中に、より高い重み付けは、より低い重み付けを有するブロックよりも頻繁にブロックを検証させる可能性がある。各ブロックは、ファームウェアが生成されるときに重み付けを割り当てられてもよく、または、たとえば、開発者がアプリケーションプロセッサ102への入力を介して重み付けにアクセスできるデバッグモードにおいて、調整されてもよい。いくつかの例において(たとえば特別なプログラミングチャネルを通して)、ファームウェアのボディセクションの重み付けを変更することによって異なる検証方式を実行できるように、重みを調整することができる。
【0104】
406において、セキュリティプロセッサ108は、ブロックに割り当てられた重み付けが確率的検証しきい値を上回るか否かを判断する。408において、しきい値を上回らない重み付けを有するブロックはスキップされ、410において、セキュリティプロセッサ108は、これがチェックされている最後のブロックであるか否かを確認する。最後のブロックでない場合、セキュリティプロセッサはステップ402に戻り、ブロックが最後のブロックである場合、セキュリティプロセッサはCにおいてで確率的チェックを終了する。
【0105】
406において、ブロックに割り当てられた重み付けがこのブロックについての確率的検証しきい値を上回るとセキュリティプロセッサが判断した場合、412において、セキュリティプロセッサ108は、ブロックについて生成されたハッシュがこのブロックについての予想ハッシュと一致するか否かを判断する。セキュリティプロセッサは、414において、ブロックについて生成されたハッシュ値と記録されたハッシュ値とが一致しないと判断したことに応じて、動作400を終了し、ファームウェアまたはリカバリファームウェアが検証可能でないことを示すように、ステータスレジスタを設定するか、そうでなければアプリケーションプロセッサ102に信号を送る。416において、ブロックについて生成されたハッシュが予想ハッシュと一致すると判断したことに応じて、セキュリティプロセッサ108は、ファームウェアまたはリカバリファームウェアが検証可能であることを示すようにステータスレジスタを設定する。410において、セキュリティプロセ
ッサ108が、ファームウェアまたはリカバリファームウェアが検証可能であることを示すようにステータスレジスタを設定した後に、このブロックがチェックされるべき最後のブロックであると判断した場合、セキュリティプロセッサ108は、ファームウェアまたはリカバリファームウェアが検証可能であることを示す信号をアプリケーションプロセッサ102に送る。
【0106】
場合によっては、セキュリティプロセッサ108は、セキュリティプロセッサ108がファームウェアを検証しているか、リカバリファームウェアを検証しているか、ディープスリープからブートしているか、リセットからブートしているかに応じて、確率的検証しきい値を変更、または、ファームウェアもしくはリカバリファームウェアのブロックに割り当てられた異なる重み付けを使用してもよい。たとえば、場合によっては、セキュリティプロセッサ108は、リカバリブート中にはリカバリファームウェアのすべてのブロックをチェックしてもよく、そのブロックをチェックする見込みを指定する、各ブロックに割り当てられた重み付けは、他のすべてのブートまたはレジューム動作について同一であってもよい。
【0107】
ルート鍵を含むファームウェアまたはリカバリファームウェアのブロック等の、リカバリ動作に影響を与えないであろう通常ブートによって使用されるいくつかのブロックがある。リカバリブート時にこれらのブロックをスキップすることにより、リカバリ動作のセキュリティを低下させることなく、より広範なシナリオからのリカバリが可能になるであろう。ファームウェアに保持されている検証データテーブルは、リカバリブート時にブロックをチェックする見込みを、またはブロックがリカバリによって使用されないことを示すフラグを、追加で指定することができる。
【0108】
アプリケーションプロセッサ102は、リカバリファームウェアを実行すると、セキュリティプロセッサ108がスキップした任意のブロックをなおもチェックし、任意でユーザに対して警告を表示することができる。これは、リカバリブートをブロックすることなく通常モードブートの問題を診断するのに役立ち得る。
【0109】
ルート鍵、または、ファームウェアの読み書き可能部分を検証する読出専用ファームウェアの部分等の、ディープスリープからのレジュームに影響を与えない、通常ブートによって使用されるいくつかのブロックがある。レジューム時にこれらのブロックをスキップすることで、セキュリティを低下させることなくレジューム時間を改善することができる。
【0110】
図5は、ファームウェアおよびリカバリファームウェアのセキュアな検証を実行するように構成されたコンピューティングデバイスを示す概念図である。
図5は、任意の種類のコンピューティングデバイス、クライアントデバイス、携帯電話、タブレット、ウェアラブル、車両、通信、エンターテイメント、ゲーム、メディア再生、および/またはその他の種類のデバイスであってもよい、一例としてのコンピューティングデバイス500を示す。
【0111】
コンピューティングデバイス500は、WLAN内のデバイス間で伝達されるデータ、受信中のデータ、ブロードキャストが予定されているデータ、データのデータパケット、デバイス間で同期されたデータなどのようなデバイスデータ506の有線および/または無線通信を可能にする通信デバイス510を含む。デバイスデータは、任意の種類の通信データ、ならびにデバイス上で実行されるアプリケーションによって生成されたオーディオ、ビデオ、および/または画像データを含み得る。通信デバイス510はまた、セルラー電話通信および/またはネットワークデータ通信のためのトランシーバを含み得る。
【0112】
コンピューティングデバイス500はまた、デバイス、データネットワーク(たとえばメッシュネットワーク、外部ネットワークその他)、およびその他のデバイスの間の接続および/または通信リンクを提供するデータネットワークインターフェイス等の、入出力(I/O)インターフェイス512を含む。I/Oインターフェイスを使用して、デバイスを、任意の種類のコンポーネント、周辺機器、および/またはアクセサリデバイスに結合することができる。I/Oインターフェイスはまた、デバイスへのユーザ入力、任意の種類の通信データ、ならびに任意のコンテンツおよび/またはデータソースから受信したオーディオ、ビデオ、および/または画像データ等の、任意の種類のデータ、メディアコンテンツ、および/または入力を受信するときに経由することができるデータ入力ポートを含む。
【0113】
コンピューティングデバイス500はまた、オーディオデバイス520のためのオーディオデータを生成、および/またはディスプレイデバイス522のためのディスプレイデータを生成する、オーディオおよび/またはビデオシステム518を含む。オーディオデバイス520および/またはディスプレイデバイス522は、デジタル写真の画像コンテンツ等の、オーディオ、ビデオ、ディスプレイ、および/または画像データを処理、表示、および/またはそうでなければレンダリングする、任意のデバイスを含む。実装形態において、オーディオデバイスおよび/またはディスプレイデバイスは、一例としてのコンピューティングデバイス500に一体化された構成要素である。これに代わるものとして、オーディオデバイスおよび/またはディスプレイデバイスは、一例としてのデバイスの外部の周辺構成要素である。
【0114】
コンピューティングデバイス500は、プロセッサ102の一例としてのアプリケーションプロセッサ502と、セキュリティプロセッサ108の一例としてのセキュリティプロセッサ508とを含む処理システム514を含む。処理システム514の構成要素は、少なくとも部分的にハードウェアで実現されてもよく、たとえば、実行可能な命令を処理する任意の種類のマイクロプロセッサ、コントローラなどを用いて実現されてもよい。処理システムは、集積回路、プログラマブルロジックデバイス、1つ以上の半導体を使用して形成されたロジックデバイスの構成要素を含んでいてもよく、シリコンおよび/またはハードウェアにおけるその他の実装形態、たとえばシステムオンチップ(SoC)として実現されるプロセッサおよびメモリシステムを含んでいてもよい。デバイスは、ソフトウェア、ハードウェア、ファームウェア、または処理および制御回路で実装し得る固定論理回路のうちのいずれか1つまたは組み合わせで実現されてもよい。コンピューティングデバイス500はさらに、デバイス内のさまざまな構成要素を結合する任意の種類のシステムバスまたはその他のデータおよびコマンド転送システムを含み得る。システムバスは、さまざまなバス構造およびアーキテクチャ、ならびに制御およびデータラインのうちのいずれか1つまたは組み合わせを含み得る。
【0115】
コンピューティングデバイス500はまた、コンピューティングデバイスによるアクセスが可能でありかつデータおよび実行可能命令(たとえばソフトウェアアプリケーション、モジュール、プログラム、機能など)の持続的記憶を提供するデータ記憶装置等の、コンピュータ読取可能ストレージメモリ516を含む。本明細書に記載のコンピュータ読取可能ストレージメモリは、伝搬信号を除外する。コンピュータ読取可能ストレージメモリの例は、揮発性メモリおよび不揮発性メモリ、固定およびリムーバブルメディアデバイス、ならびにコンピューティングデバイスアクセスのためにデータを保持する任意の適切なメモリデバイスまたは電子データストレージを含む。コンピュータ読取可能ストレージメモリは、RAM、ROM、フラッシュメモリ、およびさまざまなメモリデバイス構成の他の種類のストレージメモリの、さまざまな実装形態を含み得る。
【0116】
コンピュータ読取可能ストレージメモリ516は、ストレージ104の一例としてのス
トレージコンポーネント504と、メモリ106の一例としてのメモリコンポーネント506とを含む。ストレージコンポーネント504は、カーネル、ルートファイルシステム、または他のオペレーティングシステム関連ソフトウェアを格納し得る。メモリ506は、カーネル、ルートファイルシステム、および他のオペレーティングシステム関連ソフトウェアをロードし実行する前提条件としてコンピューティングデバイス500をブートするためのファームウェアおよびリカバリファームウェアを格納し得る。
【0117】
コンピューティングデバイス500は、メモリ506に格納されたファームウェアおよびリカバリファームウェアのセキュアな検証を実行するように構成される。セキュリティプロセッサ508は、ファームウェアおよびリカバリファームウェアと関連付けられた、生成されたハッシュ値を、(たとえばメモリ506に格納された)予想ハッシュ値と比較する。生成されたハッシュ値と予想ハッシュ値とが一致する場合、アプリケーションプロセッサ502は、検証されたファームウェアまたはリカバリファームウェアを実行するようにアプリケーションプロセッサに指示してもよい。しかしながら、生成されたハッシュ値と予想ハッシュ値とが一致しない場合、アプリケーションプロセッサ502はファームウェアまたはリカバリファームウェアの実行を控えてもよく、コンピューティングデバイス500はシャットダウンしてもよく、または、先に述べたように、アプリケーションプロセッサ502はファームウェアまたはリカバリファームウェアを再検証するようにセキュリティプロセッサ508に命令してもよい。
【0118】
説明し易くするために以下のシナリオではラップトップであるコンピューティングデバイス500のいくつかのユースケースについて検討する。通常のユーザは、コンピューティングデバイス500を購入し最初にコンピューティングデバイス500にログインする場合がある。ユーザが、第2のデバイス(たとえば携帯電話)を介して遠隔(たとえば2要素)認証サービスに加入する場合、第2のデバイスは、コンピューティングデバイス500がファームウェアまたはリカバリファームウェア検証を実行するよう遠隔から要求したことに応じて、ユーザが完全に検証されたラップトップにログインしようとしているか否かを確認できる。ユーザは、サービスが検証を必要とするか否かを、たとえば、「ファームウェアを完全に検証したデバイスにだけログインさせて欲しい」というオプションに登録することで、制御することができる。このように、開発者モードを可能にする攻撃者がファームウェアの破損バージョンをインストールできるとしても、または、コンピューティングデバイス500上のユーザのセキュリティクレデンシャルをリセットできるとしても、攻撃後にユーザがコンピューティングデバイス500にログインすると、サービスは、コンピューティングデバイス500を新たなデバイスと認識し2要素認証処理を受ける。
【0119】
エンタープライズ登録プロセスにおいて、コンピューティングデバイス500は、説明した検証技術を使用してデバイスの完全性を保証するために以下のステップを実行することができる。エンタープライズ登録プロセスを担当する登録サーバは、セキュリティプロセッサ508にクエリして、マザーボード識別子(たとえばBoardID)およびセキュリティプロセッサ508によって取得された検証結果(たとえば生成されたハッシュ値、検証結果)を得ることができる。
【0120】
生成されたハッシュ値または検証結果が、ファームウェアまたはリカバリファームウェアのすべてのブロックよりも少ないブロックが検証されたことを示す場合、登録サーバは、フルファームウェア検証を実行することにより、リセットおよびリブートするようにアプリケーションプロセッサ502に指示してもよい。こうして、フル検証されたファームウェアのみが登録プロセスへの参加が許可されることを保証する。
【0121】
マザーボード識別子が認証された製造番号ではない場合、または生成されたハッシュ値
が登録サーバに格納された予想ハッシュ値ではない場合、登録サーバは、エンタープライズネットワーク上へのコンピューティングデバイス500の登録を拒否してもよい(たとえば、これは、製造前デバイスがどうにかして消費者に出荷された場合に起こり得る)。
【0122】
ファームウェアの検証に応じて、登録サーバは、ユーザのログインクレデンシャルを取得し、2要素認証または何らかの他の認証プロセスを実行してログインを終了する。このようにして、ユーザおよび登録サーバは、コンピューティングデバイス500が危険に晒された場合に、スヌープされ攻撃者と共有される可能性があるログインクレデンシャルの提供前に、コンピューティングデバイス500が完全に検証されたデバイスであることを確認することができる。
【0123】
いくつかの例において、登録サーバは、将来のシステムブートがエンタープライズポリスに従って検証される(またはされない)ことを保証するためにコンピューティングデバイス500のファームウェア管理パラメータを自動的に構成してもよい。場合によっては、セキュリティプロセッサ508がファームウェア管理パラメータを正確に証明できない限り、登録サーバは登録を終了してもよい。加えて、登録サーバは、単にファームウェア管理パラメータを消去することで、コンピューティングデバイス500を登録解除することができる。本開示のさまざまな好ましい実施形態が上記説明に記載され図面に示されているが、本開示はこれに限定されず以下の請求項の範囲内で実行されるように多様に実施され得ることを明確に理解されたい。上記説明から、以下の請求項の範囲が定める本開示の精神および範囲から逸脱することなくさまざまな変更を行い得ることが明らかであろう。
【0124】
開発者に対しては、コンピューティングデバイス500を、オペレーティングシステムおよび/またはファームウェアを開発者が自在に変更できるように、構成することができる。コンピューティングデバイス500は、オペレーティングシステムタスクを介してオペレーティングシステム開発者モードに自動的に入ることができる。オペレーティングシステム開発者モードは、オペレーティングシステムの変更は許可するがファームウェアまたはリカバリファームウェアの変更は許可しないようにしてもよい。ファームウェア開発者モードにおいて、コンピューティングデバイス500は、書込保護された部分を含めてメモリ506の内容を消去および変更することができる。オペレーティングシステム開発者モードのいずれかにおいて、セキュリティプロセッサ508は、ストレージ504に格納されたデータの復号鍵を含む、セキュリティプロセッサ508の不揮発性メモリに格納された秘密を消去してもよい。場合によっては、セキュリティプロセッサ508のファームウェア管理パラメータが、セキュリティプロセッサ508が制御するファームウェアまたは秘密の変更を防止してもよい。しかしながら、他の場合において、コンピューティングデバイス500は、オペレーティングシステムまたはファームウェア開発者モードが有効にされると、カスタムファームウェア管理パラメータを受けカスタムファームウェア管理パラメータをセキュリティプロセッサ508に書き込むように構成されてもよい。ファームウェア管理パラメータの変更に伴って、コンピューティングデバイス500を、ファームウェアまたはリカバリファームウェアの検証の実行を(たとえばフルまたは確率的検証チェックを回避することによって)控えるように構成することができるが、セキュリティプロセッサ508は、ファームウェアまたはリカバリファームウェアがチェックされなかったことを報告してもよく、そうして、コンピューティングデバイス500にログインする新たなユーザがなおも(たとえば2要素認証によって)未検証のデバイスに警告されてもよい。
【0125】
コンピューティングデバイス500のどの所有者ユーザも、少なくとも最初のログイン中に、コンピューティングデバイス500のためのファームウェア管理パラメータを構成する能力を有し得る。このようにして、通常のユーザは、オペレーティングシステムまた
はファームウェア開発者モードを無効化し、任意で異なるブート検証レベルから選択することができる(たとえばより高いまたはより低いレベルのブート検証を指定する)。
【0126】
いくつかの例において、コンピューティングデバイス500は、ユーザがファームウェア管理パラメータを変更するために必要なパスワードを指定することができるインターフェイスを提供する。他の場合において、コンピューティングデバイス500は、ユーザがファームウェア管理パラメータを変更することを望むのであれば望んだときにパスワードを検索できるように、(たとえばクラウドコンピューティング環境において)ユーザのためのパスワードを生成しユーザのアカウントにパスワードをアップロードしてもよい。
【0127】
コンピューティングデバイス500が製造されるとき、製造者は、モデル固有のBoardIDをセキュリティプロセッサ108の不揮発性メモリに格納するように、コンピューティングデバイス500を構成してもよい。BoardIDは、セキュリティプロセッサファームウェアの特定のデバイスモデルへのリリースのロック、遠隔アクセスサーバのロック解除などのために使用されてもよい。予想されるBoardIDは、ファームウェアの読出専用部分のヘッダに含まれていてもよい。コンピューティングデバイス500は、予想されるBoardIDが、セキュリティプロセッサ508内に予めプログラムされたBoardIDと一致することを検証するように構成されてもよい。
【0128】
メモリ506に格納された他のデータは、デバイスごとに異なっている可能性があり、ファームウェアまたはリカバリファームウェアが検証される方法と同様の方法で検証されてもよい。セキュリティプロセッサ508は、たとえば、セキュリティプロセッサ508のボード間での交換を防ぐために、またはあるデバイスが間違った構成に見えるようにこのデータを修正するのを防ぐために、このデータも保護するように構成されてもよい。
【0129】
上記他のデータは、異なる識別バイトシーケンスを有しサブ鍵を有しないヘッダセクションと、モデル固有のデータを含むボディセクションとを含み得る。セキュリティプロセッサ508は、ハードウェア識別子、サービスタグ、ワイヤレスアクセスノード較正またはシリアルデータなどを検証してもよい。セキュリティプロセッサ508は、上記他のデータの生成されたハッシュを予想ハッシュと比較し、2つの値が一致する場合に上記他のデータを検証してもよい。
【0130】
製造中、このデバイス固有の検証データを、工場ファイナライズステップにおいて書込保護が有効にされる直前に、メモリ506の書込保護可能領域に格納することができる。上記他のデータは、デバイスごとに異なり、コンピューティングデバイス500の製造以来データは変更されていないことを確認するためにのみチェックされる必要があるので、ヘッダまたはボディに対する署名は存在しない可能性がある。このデータのハッシュは、データがメモリ506に書き込まれた後の、工場ファイナライズステップの間に、セキュリティプロセッサ508に格納することができる。
【0131】
本開示のさまざまな好ましい実施形態が上記説明に記載され図面に示されているが、本開示はこれに限定されず以下の請求項の範囲内で実行されるように多様に実施され得ることを明確に理解されたい。上記説明から、以下の請求項の範囲が定める本開示の精神および範囲から逸脱することなくさまざまな変更を行い得ることが明らかであろう。
【手続補正書】
【提出日】2024-02-14
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
コンピューティングシステムであって、
アプリケーションプロセッサと、
前記コンピューティングシステムのファームウェアを含むメモリとを備え、前記ファームウェアは、前記ファームウェアの複数のブロックを含み、前記コンピューティングシステムはさらに、
セキュリティプロセッサを備え、前記セキュリティプロセッサは、前記アプリケーションプロセッサが前記ファームウェアを実行する条件として、前記ファームウェアの検証を、
前記ファームウェアの前記複数のブロックについてのそれぞれの確率的検証しきい値を決定し、
前記ファームウェアの前記複数のブロックについてのそれぞれの重み付け値を決定し、
前記ファームウェアの前記複数のブロックのうちの第1のブロックの、対応する第1の重み付け値が、対応する第1の確率的しきい値を上回らないことに応じて、前記ファームウェアの前記第1のブロックを検証しないと判断し、
前記ファームウェアの前記複数のブロックのうちの第2のブロックの、対応する第2の重み付け値が、対応する第2の確率的しきい値を上回ることに応じて、前記ファームウェアの前記第2のブロックを、前記ファームウェアの前記第2のブロックについて決定された予想ハッシュ値が前記ファームウェアの前記第2のブロックについて生成されたハッシュ値と一致するか否かに基づいて、検証する
ことにより、行うように構成されている、コンピューティングシステム。
【請求項2】
前記セキュリティプロセッサはさらに、前記ファームウェアの検証を、
前記ファームウェアの前記第2のブロックについて決定された前記予想ハッシュ値が前記ファームウェアの前記第2のブロックについての前記生成されたハッシュ値と一致することに応じて、前記ファームウェアのステータスを検証可能なステータスとして設定することにより、または、
前記ファームウェアの前記第2のブロックについて決定された前記予想ハッシュ値が前記ファームウェアの前記第2のブロックについての前記生成されたハッシュ値と一致しないことに応じて、前記ファームウェアのステータスを検証不能なステータスとして設定する
ことにより、行うように構成されている、請求項1に記載のコンピューティングシステム。
【請求項3】
前記ファームウェアの前記第2のブロックについて決定された前記予想ハッシュ値は前記ファームウェアの前記第2のブロックについての前記生成されたハッシュ値と一致し、前記セキュリティプロセッサはさらに、前記ファームウェアの検証を、
前記ファームウェアの前記第2のブロックが前記ファームウェアの前記複数のブロックのうちの最後のブロックであるか否か判断し、
前記ファームウェアの前記ステータスが検証可能なステータスとして設定されかつ前記ファームウェアの前記第2のブロックが前記ファームウェアの前記複数のブロックのうちの前記最後のブロックであることに応じて、前記ファームウェアが検証されることを、前記アプリケーションプロセッサに対して示す
ことにより、行うように構成されている、請求項2に記載のコンピューティングシステム。
【請求項4】
前記セキュリティプロセッサはさらに、前記それぞれの重み付け値を、前記ファームウェアのボディセクションにアクセスして前記ファームウェアの前記複数のブロックに割り当てられた前記それぞれの重み付け値を得ることにより、決定するように構成されている、請求項1~3のいずれか1項に記載のコンピューティングシステム。
【請求項5】
前記セキュリティプロセッサはさらに、前記ファームウェアの前記第2のブロックについての前記予想ハッシュ値を、前記ファームウェアのボディセクションにアクセスして前記予想ハッシュ値を得ることにより、決定するように構成されている、請求項1~4のいずれか1項に記載のコンピューティングシステム。
【請求項6】
前記セキュリティプロセッサはさらに、前記ファームウェアの前記第2のブロックについての前記予想ハッシュ値を、前記ファームウェアの前記ボディセクション内のテーブルにアクセスすることによって取得するように構成され、前記テーブルは、前記ファームウェアの前記複数のブロックのうちの各ブロックについて、対応するエントリを含み、前記エントリは、
前記ファームウェアの前記ブロックについての対応するアドレスまたは対応するオフセット、
前記ファームウェアの前記ブロックの対応するサイズ、
前記ファームウェアの前記ブロックについての対応する予想ハッシュ値、または
前記ファームウェアの前記ブロックに割り当てられた対応する前記重み付け値
を含む、請求項5に記載のコンピューティングシステム。
【請求項7】
前記セキュリティプロセッサはさらに、前記ファームウェアの前記複数のブロックのうちの各ブロックについての対応する前記確率的検証しきい値を、乱数発生器を用いて決定するように構成されている、請求項1~6のいずれか1項に記載のコンピューティングシステム。
【請求項8】
前記セキュリティプロセッサはさらに、前記ファームウェアの前記第2のブロックを、前記ファームウェアの前記第2のブロックについての前記生成されたハッシュ値を生成することにより、検証するように構成されている、請求項1~7のいずれか1項に記載のコンピューティングシステム。
【請求項9】
前記セキュリティプロセッサはさらに、前記ファームウェアの前記複数のブロックについての前記それぞれの確率的検証しきい値を、前記ファームウェアの前記複数のブロックについての前記それぞれの重み付け値のうちの最大重み付け値と最小重み付け値とに基づいて、決定するように構成されている、請求項1~8のいずれか1項に記載のコンピューティングシステム。
【請求項10】
前記セキュリティプロセッサによって検証される前記ファームウェアは前記コンピューティングシステムのシステムファームウェアを含み、前記メモリはリカバリファームウェアをさらに含むか、または、
前記セキュリティプロセッサによって検証される前記ファームウェアは前記コンピューティングシステムのリカバリファームウェアを含み、前記メモリはシステムファームウェアをさらに含む、請求項1~9のいずれか1項に記載のコンピューティングシステム。
【請求項11】
前記セキュリティプロセッサは、前記ファームウェアまたは前記リカバリファームウェアを検証する際に前記セキュリティプロセッサに指示するためのオプションを含むファームウェア管理パラメータを保持するように構成されている、請求項10に記載のコンピューティングシステム。
【請求項12】
前記セキュリティプロセッサは、前記ファームウェア管理パラメータを、前記セキュリティプロセッサの内部メモリの書込保護された部分において保持する、請求項11に記載のコンピューティングシステム。
【請求項13】
コンピューティングシステムのファームウェアを検証する方法であって、前記ファームウェアは複数のブロックを含み、前記方法は、
前記ファームウェアの前記複数のブロックについてのそれぞれの確率的検証しきい値を決定するステップと、
前記ファームウェアの前記複数のブロックについてのそれぞれの重み付け値を決定するステップと、
前記ファームウェアの前記複数のブロックのうちの第1のブロックの、対応する第1の重み付け値が、対応する第1の確率的しきい値を上回らないことに応じて、前記ファームウェアの前記第1のブロックを検証しないと判断するステップと、
前記ファームウェアの前記複数のブロックのうちの第2のブロックの、対応する第2の重み付け値が、対応する第2の確率的しきい値を上回ることに応じて、前記ファームウェアの前記第2のブロックを、前記ファームウェアの前記第2のブロックについて決定された予想ハッシュ値が前記ファームウェアの前記第2のブロックについて生成されたハッシュ値と一致するか否かに基づいて、検証するステップとを含む、方法。
【請求項14】
命令を含むコンピュータプログラムであって、前記命令は、実行されると、コンピューティングシステムのセキュリティプロセッサに、請求項13に記載の方法を実行させる、コンピュータプログラム。
【手続補正2】
【補正対象書類名】明細書
【補正対象項目名】0030
【補正方法】変更
【補正の内容】
【0030】
コンピューティングシステム100は、バス110、112、および114を含む。アプリケーションプロセッサ102は、ストレージ104のコントローラと、ストレージバス110を介してデータをやり取りすることによって通信し、そうすることで、アプリケーションプロセッサ102はストレージ104から読み出すまたはストレージ104に書き込むことができる。同様に、アプリケーションプロセッサ102およびセキュリティプロセッサ108の各々は、メモリ106のコントローラと、メモリバス112を介してデータをやり取りすることによって通信し、そうすることで、セキュリティプロセッサ108およびアプリケーションプロセッサ102の各々は、メモリ106から読み出すまたはメモリ106に書き込むことができる。さらに、セキュリティプロセッサ108およびアプリケーションプロセッサ102は、ホストバス114を介してデータをやり取りすることにより、直接通信することができる。アプリケーションプロセッサ102は、ファームウェア、カーネルプログラム、オペレーティングシステムソフトウェア、オペレーティングシステム内で実行するアプリケーション等を含むソフトウェアを実行するように構成される。
【手続補正3】
【補正対象書類名】明細書
【補正対象項目名】0123
【補正方法】変更
【補正の内容】
【0123】
いくつかの例において、登録サーバは、将来のシステムブートがエンタープライズポリシーに従って検証される(またはされない)ことを保証するためにコンピューティングデバイス500のファームウェア管理パラメータを自動的に構成してもよい。場合によっては、セキュリティプロセッサ508がファームウェア管理パラメータを正確に証明できない限り、登録サーバは登録を終了してもよい。加えて、登録サーバは、単にファームウェア管理パラメータを消去することで、コンピューティングデバイス500を登録解除することができる。本開示のさまざまな好ましい実施形態が上記説明に記載され図面に示されているが、本開示はこれに限定されず以下の請求項の範囲内で実行されるように多様に実施され得ることを明確に理解されたい。上記説明から、以下の請求項の範囲が定める本開示の精神および範囲から逸脱することなくさまざまな変更を行い得ることが明らかであろう。
【手続補正4】
【補正対象書類名】図面
【補正方法】変更
【補正の内容】
【外国語明細書】