(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-07-30
(54)【発明の名称】暗号的に検証された命令に基づくソフトウェアのセキュアな実行
(51)【国際特許分類】
H04L 9/32 20060101AFI20240723BHJP
G06F 21/12 20130101ALI20240723BHJP
G06F 21/64 20130101ALI20240723BHJP
【FI】
H04L9/32 200A
G06F21/12 310
G06F21/64
H04L9/32 200E
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2024500534
(86)(22)【出願日】2022-07-12
(85)【翻訳文提出日】2024-01-09
(86)【国際出願番号】 EP2022069378
(87)【国際公開番号】W WO2023001624
(87)【国際公開日】2023-01-26
(32)【優先日】2021-07-17
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【氏名又は名称】太佐 種一
(74)【代理人】
【識別番号】100120710
【氏名又は名称】片岡 忠彦
(72)【発明者】
【氏名】オズガ、ヴォイチェフ
(72)【発明者】
【氏名】ドラゴーネ、シルヴィオ
(57)【要約】
コンピュータ化デバイスのソフトウェアにアクセスすることであって、ソフトウェアは、複数の命令およびそれぞれの参照メッセージ認証コード(MAC)を含む、アクセスすることと、鍵導出関数に少なくとも部分的に基づいて暗号鍵を生成することであって、鍵導出関数の引数は、コンピュータ化デバイスの一意識別子、およびコンピュータ化デバイスのプラットフォーム構成レジスタの拡張メカニズムのソフトウェアのコンテンツの測定から拡張された値に少なくとも部分的に基づく、生成することと、暗号鍵、およびそれぞれの参照MACのうちの参照MACに少なくとも部分的に基づいて、ソフトウェアの複数の命令のうちの命令を検証することと、ソフトウェアの複数の命令のうちの命令を検証したことに応答して、命令を実行することとによる、コンピュータ化デバイス上でのソフトウェアの命令のセキュアな実行。
【特許請求の範囲】
【請求項1】
コンピュータ化デバイス上でソフトウェアの命令をセキュアに実行するためのコンピュータ実施方法であって、
コンピュータ化デバイスのソフトウェアにアクセスすることであって、前記ソフトウェアは、複数の命令およびそれぞれの参照メッセージ認証コード(MAC)を含む、前記アクセスすることと、
鍵導出関数に少なくとも部分的に基づいて暗号鍵を生成することであって、前記鍵導出関数の引数は、前記コンピュータ化デバイスの一意識別子、および前記コンピュータ化デバイスのプラットフォーム構成レジスタの拡張メカニズムの前記ソフトウェアのコンテンツの測定から拡張された値に少なくとも部分的に基づく、前記生成することと、
前記暗号鍵、および前記それぞれの参照MACのうちの参照MACに少なくとも部分的に基づいて、前記ソフトウェアの前記複数の命令のうちの命令を検証することと、
前記ソフトウェアの前記複数の命令のうちの前記命令を検証したことに応答して、前記命令を実行することと
を含む、方法。
【請求項2】
前記ソフトウェアの前記複数の命令のうちの前記命令を検証することは、
前記暗号鍵に少なくとも部分的に基づいて、前記命令に対応する検証MACを計算することと、
前記検証MACを前記参照MACと比較することと
をさらに含む、請求項1に記載の方法。
【請求項3】
前記命令を実行することは、
前記ソフトウェアの前記複数の命令のうちの前記命令を検証することの失敗に応答して、前記ソフトウェアの前記命令の実行を中断すること
をさらに含む、請求項1ないし2のいずれかに記載の方法。
【請求項4】
前記それぞれの参照MACは、相互依存性スキームに基づいて計算されたMACであり、前記ソフトウェアは、前記相互依存性スキームを反映する相互依存性データをさらに含み、前記命令を検証することは、前記相互依存性スキームに基づく、請求項3に記載の方法。
【請求項5】
前記鍵導出関数を用いて、暗号化アルゴリズムに少なくとも部分的に基づいて前記ソフトウェアの前記複数の命令をエンコードすることと、
復号アルゴリズムに少なくとも部分的に基づいて前記ソフトウェアの前記複数の命令をデコードすることであって、前記復号アルゴリズムは、前記生成された暗号鍵および前記参照MACを用いる、前記デコードすることと
をさらに含む、請求項1ないし4のいずれかに記載の方法。
【請求項6】
前記暗号化アルゴリズムおよび前記復号アルゴリズムは、関連データ付き認証付暗号化アルゴリズムに準拠し、前記ソフトウェアは、前記複数の命令を暗号化するために用いられる追加データをさらに含み、前記復号アルゴリズムは、前記追加データを用いて、前記ソフトウェアの前記複数の命令を復号および検証する、請求項5に記載の方法。
【請求項7】
前記鍵導出関数の前記引数は、前記コンテンツの前記測定から拡張された前記値、および前記一意識別子の中間関数の出力を含む、請求項1ないし6のいずれかに記載の方法。
【請求項8】
前記鍵導出関数の前記引数は、単調カウンタの現在の値を含み、前記単調カウンタは、前記ソフトウェアの更新と共に単調増加する、請求項1ないし7のいずれかに記載の方法。
【請求項9】
前記引数は、前記コンテンツの前記測定から拡張された前記値、前記一意識別子の中間関数の出力、および前記単調カウンタの前記現在の値を含む、請求項8に記載の方法。
【請求項10】
前記拡張された値、前記単調カウンタ値、およびノンスに基づいて、前記ソフトウェアの現在のバージョンを検証すること
をさらに含む、請求項8に記載の方法。
【請求項11】
前記一意識別子は、前記コンピュータ化デバイスの物理複製困難関数から得られる識別子である、請求項1ないし10のいずれかに記載の方法。
【請求項12】
前記コンピュータ化デバイスの処理手段の専用回路から前記一意識別子を得ることであって、前記一意識別子は、前記コンピュータ化デバイスの前記処理手段の一意識別子である、前記得ることをさらに含む、請求項11に記載の方法。
【請求項13】
前記コンピュータ化デバイスをブートしたことに応答して、前記ソフトウェアの前記コンテンツを測定することと、
前記拡張された値を得るために前記拡張メカニズムに基づいて前記値を拡張することであって、前記コンピュータ化デバイスの処理手段は、前記プラットフォーム構成レジスタを実装する専用の固定サイズのメモリを含む、前記拡張することと
をさらに含む、請求項1ないし12のいずれかに記載の方法。
【請求項14】
前記コンピュータ化デバイスの処理手段のモジュールが、前記命令の前記検証を行う、請求項1ないし13のいずれかに記載の方法。
【請求項15】
前記鍵導出関数を用いて導出される初期暗号鍵に基づいて、前記参照MACを計算することと、
前記参照MACを前記複数の命令と共に前記ソフトウェアに記憶することと、
前記ソフトウェアを前記コンピュータ化デバイスに記憶することと
をさらに含む、請求項1ないし14のいずれかに記載の方法。
【請求項16】
前記アクセスされたソフトウェアに含まれる前記複数の命令は、前記コンピュータ化デバイスの処理手段により直接解釈可能な機械コード命令である、請求項1ないし15のいずれかに記載の方法。
【請求項17】
コンピュータ化デバイスのソフトウェアの現在のバージョンを検証するためのコンピュータ実施方法であって、
前記コンピュータ化デバイスのソフトウェアの現在のバージョンを検証するための要求をコンピュータ化デバイスに送ることであって、前記要求は、ノンスを含む、前記送ることと、
前記要求に対応する署名済みクォートを前記コンピュータ化デバイスから受け取ることであって、前記署名済みクォートは、暗号鍵に少なくとも部分的に基づき、前記ノンスを含み、前記暗号鍵は、鍵導出関数に少なくとも部分的に基づき、前記鍵導出関数の引数は、前記コンピュータ化デバイスの一意識別子、単調カウンタの現在の値、および前記コンピュータ化デバイスのプラットフォーム構成レジスタの拡張メカニズムの前記ソフトウェアのコンテンツの測定から拡張された値に少なくとも部分的に基づき、前記単調カウンタは、前記拡張された値、前記単調カウンタ値、および前記ノンスに少なくとも部分的に基づいて前記ソフトウェアの更新と共に単調増加する、前記受け取ることと、
前記暗号鍵を用いて前記署名済みクォートの署名を検証することと、
前記検証されたクォートから抽出された前記ノンスを期待値と比較することと
をさらに含む、方法。
【請求項18】
コンピュータ化デバイス上でソフトウェアの命令をセキュアに実行するためのコンピューティング・システムであって、
1つまたは複数のコンピュータ・プロセッサと、
1つまたは複数のコンピュータ可読記憶デバイスと、
前記1つまたは複数のコンピュータ・プロセッサによる実行のための、前記1つまたは複数のコンピュータ可読記憶デバイスにおける記憶されたプログラム命令と
を備え、前記記憶されたプログラム命令は、
コンピュータ化デバイスのソフトウェアにアクセスするためのプログラム命令であって、前記ソフトウェアは、複数の命令およびそれぞれの参照メッセージ認証コード(MAC)を含む、前記アクセスするためのプログラム命令と、
鍵導出関数に少なくとも部分的に基づいて暗号鍵を生成するためのプログラム命令であって、前記鍵導出関数の引数は、前記コンピュータ化デバイスの一意識別子、および前記コンピュータ化デバイスのプラットフォーム構成レジスタの拡張メカニズムの前記ソフトウェアのコンテンツの測定から拡張された値に少なくとも部分的に基づく、前記生成するためのプログラム命令と、
前記暗号鍵、および前記それぞれの参照MACのうちの参照MACに少なくとも部分的に基づいて、前記ソフトウェアの前記複数の命令のうちの命令を検証するためのプログラム命令と、
前記ソフトウェアの前記複数の命令のうちの前記命令を検証したことに応答して、前記命令を実行するためのプログラム命令と
を含む、
コンピューティング・システム。
【請求項19】
前記ソフトウェアの前記複数の命令のうちの前記命令を検証することは、
前記暗号鍵に少なくとも部分的に基づいて、前記命令に対応する検証MACを計算するためのプログラム命令と、
前記検証MACを前記参照MACと比較するためのプログラム命令と
をさらに含む、請求項18に記載のコンピュータ・システム。
【請求項20】
前記命令を実行することは、
前記ソフトウェアの前記複数の命令のうちの前記命令を検証することの失敗に応答して、前記ソフトウェアの前記命令の実行を中断するためのプログラム命令
をさらに含む、請求項18ないし19のいずれかに記載のコンピュータ・システム。
【請求項21】
前記それぞれの参照MACは、相互依存性スキームに基づいて計算されたMACであり、前記ソフトウェアは、前記相互依存性スキームを反映する相互依存性データをさらに含み、前記命令を検証することは、前記相互依存性スキームに基づく、請求項20に記載のコンピュータ・システム。
【請求項22】
前記記憶されたプログラム命令は、
前記鍵導出関数を用いて、暗号化アルゴリズムに少なくとも部分的に基づいて前記ソフトウェアの前記命令をエンコードするためのプログラム命令と、
復号アルゴリズムに少なくとも部分的に基づいて前記ソフトウェアの前記命令をデコードするためのプログラム命令であって、前記復号アルゴリズムは、前記生成された暗号鍵および前記参照MACを用いる、前記デコードするためのプログラム命令と
をさらに含む、請求項18ないし21のいずれかに記載のコンピュータ・システム。
【請求項23】
コンピュータ化デバイスのソフトウェアの現在のバージョンを検証するためのコンピューティング・システムであって、
1つまたは複数のコンピュータ・プロセッサと、
1つまたは複数のコンピュータ可読記憶デバイスと、
前記1つまたは複数のコンピュータ・プロセッサによる実行のための、前記1つまたは複数のコンピュータ可読記憶デバイスにおける記憶されたプログラム命令と
を備え、前記記憶されたプログラム命令は、
前記コンピュータ化デバイスのソフトウェアの現在のバージョンを検証するための要求をコンピュータ化デバイスに送るためのプログラム命令であって、前記要求は、ノンスを含む、前記送るためのプログラム命令と、
前記要求に対応する署名済みクォートを前記コンピュータ化デバイスから受け取るためのプログラム命令であって、前記署名済みクォートは、暗号鍵に少なくとも部分的に基づき、前記ノンスを含み、前記暗号鍵は、鍵導出関数に少なくとも部分的に基づき、前記鍵導出関数の引数は、前記コンピュータ化デバイスの一意識別子、単調カウンタの現在の値、および前記コンピュータ化デバイスのプラットフォーム構成レジスタの拡張メカニズムの前記ソフトウェアのコンテンツの測定から拡張された値に少なくとも部分的に基づき、前記単調カウンタは、前記拡張された値、前記単調カウンタ値、および前記ノンスに少なくとも部分的に基づいて前記ソフトウェアの更新と共に単調増加する、前記受け取るためのプログラム命令と、
前記暗号鍵を用いて前記署名済みクォートの署名を検証するためのプログラム命令と、
前記検証されたクォートから抽出された前記ノンスを期待値と比較するためのプログラム命令と
を含む、コンピューティング・システム。
【請求項24】
コンピュータ化デバイス上でソフトウェアの命令をセキュアに実行するためのコンピュータ・プログラム製品であって、1つまたは複数のコンピュータ可読記憶デバイスと、前記1つまたは複数のコンピュータ可読記憶デバイスにおける集合的に記憶されたプログラム命令と
を備え、前記記憶されたプログラム命令は、
コンピュータ化デバイスのソフトウェアにアクセスするためのプログラム命令であって、前記ソフトウェアは、複数の命令およびそれぞれの参照メッセージ認証コード(MAC)を含む、前記アクセスするためのプログラム命令と、
鍵導出関数に少なくとも部分的に基づいて暗号鍵を生成するためのプログラム命令であって、前記鍵導出関数の引数は、前記コンピュータ化デバイスの一意識別子、および前記コンピュータ化デバイスのプラットフォーム構成レジスタの拡張メカニズムの前記ソフトウェアのコンテンツの測定から拡張された値に少なくとも部分的に基づく、前記生成するためのプログラム命令と、
前記暗号鍵、および前記それぞれの参照MACのうちの参照MACに少なくとも部分的に基づいて、前記ソフトウェアの前記複数の命令のうちの命令を検証するためのプログラム命令と、
前記ソフトウェアの前記複数の命令のうちの前記命令を検証したことに応答して、前記命令を実行するためのプログラム命令と
を含む、コンピュータ・プログラム製品。
【請求項25】
前記鍵導出関数の前記引数は、前記ソフトウェアの更新と共に単調増加するように設定される単調カウンタを含む、請求項24に記載のコンピュータ・プログラム製品。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、一般にコンピュータ・セキュリティに関する。本開示は、特にコンピュータ化デバイス上での命令のセキュアな実行に関する。
【背景技術】
【0002】
人間の活動およびそのセキュリティは、多くの場合、高信頼セキュリティ・デバイスから構築されるセキュリティおよび安全性重視システムの動作に依存する。例えば、銀行および政府は、ハードウェア・セキュリティ・モジュールに依拠して、データをデジタルに証明および暗号化するために用いられる暗号マテリアルを保護し、原子力発電所の冷却系は、センサ出力に依拠し、病院における患者の健康管理は、生体機能を制御するための自律計装を必要とする。そのようなデバイスへの物理的アクセスを有する悪意のある行為者は、セキュリティおよび安全性重視システムを脅かし、したがって人間の活動、健康、または生命を危険にさらすおそれがある。
【0003】
高信頼セキュリティ・デバイスは、連邦情報処理標準(FIPS)出版物140-2などの一定の標準に準拠する必要がある。そのような標準は、デバイスが一定のクラスの脅威に対する十分な保証を提供することを認定する。製造者は、そのような標準を満たすために、(ソフトウェアおよびハードウェアの両面において)種々の軽減技術を実装する。しかしながら、敵対者は、デバイスを制御するソフトウェアを改ざんすることにより、セキュリティ保護を回避する場合がある。具体的には、デバイスのメモリ・コンテンツを改変することにより、敵対者は、任意のソフトウェアをロードすることができる。このソフトウェアは、セキュリティ・チェックの無効化(したがって制御フロー完全性の侵害)、偽の値の提供(データ完全性の侵害)、またはデバイスにより処理されるデータの読み取り(データ機密性の侵害)あるいはその組合せを行う場合がある。
【0004】
様々な軽減メカニズムが知られており、それらは主に、システム・ブート中におけるソフトウェア完全性の実現、システムのメモリへのデータのロード時におけるデータの完全性および機密性の保護、実行前のソフトウェア命令の認証、コンパイル・レベルにおける静的解析を用いたソフトウェア制御フロー完全性の保護、および、タンパ応答性メカニズムによる、デバイス完全性を検証または証明するために必要な暗号マテリアルの保護に焦点を当てる。
【0005】
より詳細には、セキュア・ブートは、コンピュータの電源が投入された時点からメモリにロードされるソフトウェアの完全性を保証する設計である。ブートストラップ・プロセスは、中央処理ユニット(CPU)パッケージの内部で開始し、より複雑なソフトウェアをロードすることで次のハードウェア構成要素を有効化すること等により継続する。セキュア・ブート設計は、各ソフトウェアが次のソフトウェアの暗号署名をその実行前に検証することを要求する。これにより、敵対者がデジタル署名を偽造することができないため、不正なソフトウェアをロードすることが防止される。そのような設計は、ソフトウェア実装にメモリ脆弱性がないことを前提とする。しかしながら、ソフトウェアは、任意のソフトウェアをメモリにロードするために悪用され得るバグを含む場合がある。そのような脆弱性のない正式に証明済みのソフトウェアの場合であっても、敵対者は、ハードウェア・サイドチャネル攻撃を仕掛けてセキュア・ブート検証プロセスをスキップする可能性がある。例えば、敵対者は、メモリに既にロードされている正規のソフトウェアにおけるメモリ・ビットを反転することにより、制御フロー完全性を改変する場合がある。したがって、プログラム実行は、特定の命令、すなわちセキュリティ・チェックをスキップすることになり、それにより未署名のソフトウェアをロードすることが可能となる。
【0006】
メモリ暗号化は、敵対者がランダム・アクセス・メモリ(RAM)に存在するデータを直接改変する攻撃からデバイスを保護する技術である。具体的には、メモリ暗号化は、ダイレクト・メモリ・アクセス(DMA)により周辺デバイスを制御する敵対者、CPUとRAMとの間の通信をハイジャックし得る敵対者、またはメモリ・カードを盗み後に読み出し得る敵対者(コールド・ブート攻撃)に対する保護を行う。CPUパッケージの内部に存在するメモリ管理ユニット(MMU)は、暗号鍵を用いて、CPUパッケージに出入りする全てのデータを暗号化および復号する。しかしながら、メモリ暗号化は、ファームウェアを改変することにより任意のソフトウェアを直接ブートする、メモリ破壊技術を用いて正規のソフトウェアを悪用することでカスタム命令をRAMにロードする、またはソフトウェアの脆弱性および設定ミスを用いてカスタム・アプリケーションを実行する敵対者に対する保護を行わない。
【0007】
一部のCPU設計は、CPUパッケージ内におけるソフトウェア脆弱性を軽減することを提案している。そのような設計は、メタデータ処理のための専用のプログラム可能ユニットを必要とする。命令処理パイプラインと並列に実行する専用機能が、命令のメタデータ、命令オペコード、レジスタ、およびプログラム・カウンタを用いて、命令がポリシに準拠しているかを検証する。ポリシは、ブート・プロセス中にロードされる。そのようなCPU設計に従って、CPUにより実行される命令の機密性、完全性、および真正性を提供することを目的とするプロセッサ・アーキテクチャが開発されてきた。そのようなアーキテクチャは、メタデータを用いて、各命令のメッセージ認証コード(MAC)を記憶する。加えて、各命令は、CPUパッケージ・レジスタの内部に記憶される鍵で暗号化される。これらの解決策の主な欠点は、ブート中にポリシまたは暗号鍵をロードする必要があることである。ここで、デバイスを物理的に制御する敵対者が、任意のポリシまたは暗号鍵をロードするおそれがあり、それにより、敵対者が任意のソフトウェアを実行することが可能となる。また、上記の設計は、ソフトウェアを脆弱なバージョンにダウングレードすること、すなわちロールバック攻撃に対する保護を行わない。
【0008】
FIPS 140-2 レベル3は、デバイスを物理的に制御する敵対者にさらされる高信頼セキュリティ・デバイスにより用いられる標準である。この標準は、低い確率で、例えばデバイスおよびタンパ応答回路の電源が切断されているときに、敵対者がデバイス完全性を改ざんする可能性があることを想定する。その結果、敵対者は、デバイス・メモリ、すなわちリード・オンリ・メモリ(ROM)、RAM、またはCPUキャッシュへのアクセスを得た後に、ソフトウェア・レベルの保護を回避することを試みる可能性がある。FIPS 140-2 レベル4は、現在のところ、最高レベルのセキュリティを提供している。これは、あらゆる物理的攻撃の能動的検出、および攻撃検出時におけるデバイス内部に記憶された重要なセキュリティ・パラメータの除去を要求する。しかしながら、そのようなメカニズムを実装するために、デバイスは、常時の電力供給が必要な洗練されたタンパ応答性エンクロージャを必要とする。したがって、コンピュータ化デバイス上で命令をセキュアに実行するための新たな解決策が必要とされている。
【発明の概要】
【0009】
以下、本開示の1つまたは複数の実施形態の基本的な理解を提供するための概要を提示する。この概要は、主要なまたは重要な要素を特定する、あるいは特定の実施形態の何らかの範囲または特許請求の範囲の何らかの範囲を規定することを意図したものではない。その唯一の目的は、後述するより詳細な説明の前置きとして、概念を簡略な形態で提示することである。本明細書において説明する1つまたは複数の実施形態において、デバイス、システム、コンピュータ実施方法、装置またはコンピュータ・プログラム製品あるいはその組合せは、コンピュータ化デバイス上での命令のセキュアな実行を可能とする。
【0010】
本発明の態様は、コンピュータ化デバイスのソフトウェアにアクセスすることであって、ソフトウェアは、複数の命令およびそれぞれの参照メッセージ認証コード(MAC)を含む、アクセスすることと、鍵導出関数に少なくとも部分的に基づいて暗号鍵を生成することであって、鍵導出関数の引数は、コンピュータ化デバイスの一意識別子、およびコンピュータ化デバイスのプラットフォーム構成レジスタの拡張メカニズム(extension mechanism)のソフトウェアのコンテンツの測定から拡張された(extended)値に少なくとも部分的に基づく、生成することと、暗号鍵、およびそれぞれの参照MACのうちの参照MACに少なくとも部分的に基づいて、ソフトウェアの複数の命令のうちの命令を検証することと、ソフトウェアの複数の命令のうちの命令を検証したことに応答して、命令を実行することとによる、コンピュータ化デバイス上でのソフトウェアの命令のセキュアな実行に関連する方法、システムおよびコンピュータ可読媒体を開示する。結果として、開示の方法は、CPUチップおよびソフトウェアに固有の決定的な暗号鍵を導出し、デバイスへの物理的アクセスを有する敵対者に対するロールバック保護およびより強力なセキュリティ保証を提供する。
【0011】
本発明の態様は、ソフトウェアの複数の命令のうちの命令を検証することの失敗に応答して、ソフトウェアの命令の実行を中断するための方法を開示し、これにより、物理的敵対者が存在する場合であっても、コードおよびデータの真正性が実現する。
【0012】
添付の図面における本開示のいくつかの実施形態のより詳細な説明を通して、本開示の上記および他の目的、特徴および利点がより明らかとなるであろう。同じ参照符号は、一般に、本開示の実施形態における同じ構成要素を指す。
【図面の簡単な説明】
【0013】
【
図1】本発明の一実施形態に係るコンピュータ化デバイスの模式図を提供する。
【
図2】本発明の一実施形態に係る
図1のコンピュータ化デバイスにおいて行われる動作を示す図を提供する。
【
図3】本発明の一実施形態に係る、命令およびそれぞれのメッセージ認証コードを記憶するための事前ステップの動作シーケンスを示すフローチャートを提供する。
【
図4】本発明の一実施形態に係る動作シーケンスを示すフローチャートを提供する。
【
図5】本発明の一実施形態に係る、検証方法のステップの動作シーケンスを示すフローチャートを提供する。
【
図6】本発明の一実施形態に係る関連データ付き認証付暗号化スキームを示す図を提供する。
【
図7】本発明の一実施形態に係る動作パイプラインの模式図を提供する。
【発明を実施するための形態】
【0014】
本開示の実施形態が示されている添付の図面を参照して、いくつかの実施形態をより詳細に説明する。ただし、本開示は、様々な方法で実施されてよく、したがって本明細書に開示されている実施形態に限定されるものとして解釈されるべきではない。
【0015】
一実施形態において、システムの1つまたは複数の構成要素は、本質的に高度に技術的な課題(例えば、コンピュータ化デバイス上でのソフトウェアの命令のセキュアな実行、CPUパッケージ内におけるソフトウェア脆弱性の軽減、敵対者がランダム・アクセス・メモリ(RAM)に存在するデータを直接改変する攻撃からのデバイスの保護等)を解決するために、ハードウェアまたはソフトウェアあるいはその両方を使用する場合がある。これらの解決策は、抽象的なものではなく、例えばコンピュータ化デバイス上での命令のセキュアな実行を容易にするために必要な処理能力に起因して、人間による一連の精神的行為として実行することができない。さらに、行われるプロセスの一部は、鍵導出関数に少なくとも部分的に基づく暗号鍵の生成に関連する規定されたタスクを実行するための特殊コンピュータにより行われてよい。例えば、暗号化アルゴリズムおよび復号アルゴリズム等に関連するタスクを実行するために、特殊コンピュータが使用されてよい。
【0016】
本発明の実施形態の実施は種々の形態を取ってよく、例示的な実施の詳細が図面を参照して以下で論じられる。
【0017】
ここで、
図1、
図2、
図4、
図6、および
図7を参照して、コンピュータ化デバイス上でソフトウェアをセキュアに実行するコンピュータ化された方法に関する本発明の様々な実施形態を詳細に説明する。なお、本方法およびその変形例をまとめて「本方法」と称する。全ての参照符号Snは、
図3~
図6に示す方法のステップを指し、一方で参照番号は、
図1および
図2に示すコンピュータ化デバイスの物理的な部分または構成要素に関する。
【0018】
一般に、本方法は、命令を実行する前に、メッセージ認証コード(MAC)に依拠してソフトウェアの命令を暗号的に検証する。検証は、命令およびMACに基づき、実行時に導出される暗号鍵を用いて、コンピュータ化デバイスの一意識別子(UID)、およびコンピュータ化デバイスのプラットフォーム構成レジスタ(PCR)の拡張メカニズムに従ってソフトウェアのコンテンツの測定から拡張された値に従って行われる。よって、本方法は、コンピュータ化デバイスのPCR拡張メカニズムおよびUIDの両方を活用して、命令の実行時検証までの信頼チェーンを確立する。
【0019】
図1は、本発明の例示的実施形態に係るコンピュータ化デバイス(例えばデバイス10)の構成要素のブロック図を示す。
図1は、単に1つの実施例の例示を提供するものであり、種々の実施形態が実施され得る環境に関するいかなる限定も意味しないことが理解されるべきである。図示の環境に対する多数の修正がなされてよい。
【0020】
図1は、ストレージ11、メモリ12、コンピュータ処理ユニット(CPU)14、ハードウェア・モジュール20、回路21、およびメモリ回路22を含む。ストレージ11は、長期的なデータの記憶およびアクセスを可能とするコンピュータ化デバイスの構成要素を含む。例えば、ストレージ11は、ソリッド・ステート・ドライブまたはハード・ドライブなどの形態を含んでよい。メモリ12は、コンピュータ可読記憶媒体である。本実施形態において、メモリ12は、ランダム・アクセス・メモリ(RAM)を含む。一般に、メモリ12は、任意の好適な揮発性または不揮発性のコンピュータ可読記憶媒体を含んでよい。CPU14は、コンピュータ・プログラムを含む命令を実行する電子回路である。例えば、CPU14は、プログラムにおける命令により指定される基本的な演算、論理、制御、および入出力(I/O)の動作を行う。ハードウェア・モジュール20は、デジタル鍵を保護および管理し、デジタル署名のための暗号化および復号の機能、強力な認証および他の暗号機能を実行する物理的コンピューティング・デバイスである。回路21は、CPU14のプロパティを測定し、UIDを生成するための専用回路である。メモリ回路22は、専用の固定サイズのメモリである。例えば、メモリ回路22は、CPU14の一部である位置を保持するデータの小規模なセットのうちの1つ(すなわちレジスタ)である。
【0021】
図2は、
図1のデバイス10において行われる動作を模式的に示す図である。
図2は、正規エンティティ5、鍵31、および鍵32を含む。正規エンティティ5は、コンピュータ・システムまたはネットワークのリソースへのアクセスを要求し、それらのリソースを使用する認可済みデバイス(例えばソフトウェアの製造者または所有者)である。鍵31は、正規エンティティ5を利用して導出される暗号鍵である。鍵32は、デバイス10を利用して導出される暗号鍵である。
【0022】
ここで
図4を参照して、本開示の実施形態を
図1および
図2に関して説明する。ステップS110においてプログラムが開始した後、コンピュータ化デバイス上でソフトウェアをセキュアに実行する方法は、デバイス・ストレージにアクセスする。一実施形態において、方法はまず、デバイス10のストレージ11に記憶されたソフトウェアにアクセスすることを含む。ソフトウェアは、命令、およびメッセージ完全性コードとしても知られるメッセージ認証コード(MAC)を含む。MACは、命令に対応し、ソフトウェア内でこれらの命令に関連付けられる。そのようなMACは、命令を検証するために参照として用いられることを意図したものであり、したがってMACは、本説明において「参照MAC」と称される。
【0023】
ステップS120において、方法は、命令を検証し実行する目的で、アクセスされた命令およびMACをデバイス10のメモリ12にロードする。その目的で、(メイン・メモリにロードされている)命令および対応するMACは、デバイス10のCPU14のプロセッサ・レジスタにロードされる。
【0024】
ステップS170において、方法は、命令の検証(ステップS140~S160)に応じて、その後に命令を実行する。例えば、命令は、CPU14がそれらを実行する前に検証される。本例において、ハードウェア・モジュール20は、以下で説明するように、暗号検証動作を行うことにより命令を検証する。
【0025】
本開示の様々な実施形態において、検証は、命令および参照MACを要し、暗号鍵32に対して行われる。ステップS140において、方法は、鍵導出関数(KDF)を利用して、鍵を実行時に生成する。一実施形態において、方法は、ハードウェア・モジュール20を利用して、暗号鍵32を生成する。本実施形態において、KDFの引数は、デバイス10の、例えば回路21の一意識別子(UID)、またはデバイス10のプラットフォーム構成レジスタ(PCR)(例えばメモリ回路22)から得られる値あるいはその両方に基づくものであってよい。加えて、方法は、PCRの拡張メカニズムに従って、ソフトウェアのコンテンツの測定からこの値を拡張する。この拡張された値は、本説明において「PCR値」とも称される。
【0026】
本開示の様々な実施形態において、KDFは、複数の引数を用いる。ただし、そのような関数は、様々な方法で計算されてよい。特に、方法は、後述の実施形態のように、引数を組み合わせて(例えば連結して)、KDFにより入力として用いられる単一の値を形成してよい。
【0027】
本アプローチは、デバイス所有者(例えば製造者、任意の正規エンティティ等)とデバイス10に実装される検証メカニズムとの間の共有秘密鍵に依拠する。より正確には、デバイス所有者およびデバイス10は、暗号鍵を好適に導出するためのレシピ(例えば暗号化レシピ)を共有する。このレシピに関して、方法は、デバイス10が、命令の完全性、真正性をチェックするために用いられる鍵32を再導出し、そのような命令を復号することを可能とする。
【0028】
本開示の様々な実施形態において、ソフトウェアに記憶される命令は、プログラム命令、すなわちプログラム・コードである。例えば、命令は、以下で説明する実施形態のように暗号化されてよい。原則として、そのような命令は、インタプリタ層、すなわち方法の実行中に動作するプログラムに対してリアルタイムで解釈される高水準命令、すなわち高水準言語で記述されるソース・コードを形成するものであり得る。しかしながら、命令セット・アーキテクチャ(ISA)固有コードなどの、CPU14により直接解釈可能な機械コード命令は、処理リソースに関してより大きな利点を提供する場合がある。その実例として、方法は、コンパイル済みソフトウェアにおいて動作するが、これもやはりバイナリ命令に関連するMACを含む。
【0029】
本MACは、広義に理解されるべきである。例えば、MACは、鍵32を用いて命令から得られる鍵付きハッシュであってよい。加えて、MACは、ハッシュベースのメッセージ認証コード(HMAC)と同様に、鍵32と共に暗号学的ハッシュ関数を用いて得られてよい。より洗練されたアプローチにおいては、MACは、命令の順序を含め、全体としての命令の完全性を保証するように計算されてよい。その目的で、MACの値は、相互依存性であってよい。例えば、制御フロー完全性の達成は、下記で論じる実施形態のように、以前の命令のMACを用いて次の命令のMACを算出することにより実現されてよい。そのようなアプローチは、命令が実行する順序を保証するために用いられてよい。
【0030】
一実施形態において、暗号鍵32は、特に、方法が後に参照MACと比較する検証MACをデバイス10が明示的に計算するために用いられてよい。代替的実施形態において、検証MACの計算および参照MACとの比較は、単に暗黙的なものであってもよく、これは用いられる検証メカニズムに依存する。例として、下記で論じる実施形態のように、特に関連データ付き認証付暗号化(AEAD)アルゴリズムが用いられる場合、命令が暗号化されてよく、ソフトウェアは、任意選択的に追加のデータを含んでよい。AEADスキームを用いる場合、命令の復号は、命令、参照MAC、および追加のデータを利用する。その場合、命令の真正性および完全性は、AEAD復号メカニズムにより保証される。
【0031】
一実施形態において、方法は、全ての場合において、参照MACを利用して、実行時に命令の完全性および真正性をチェック(場合によってはそれらを復号)する。PCR値は、拡張メカニズムに従って、ブート後のソフトウェアの完全性を保証する。
【0032】
一実施形態において、鍵32を導出するためにPCR値と共に用いられるUIDは、デバイス10のCPU14の一意識別子であることが好ましい。本実施形態において、UIDは、CPU14の物理複製困難関数(PUF)を反映することがより好ましい。よって、UIDに依拠することにより、方法が、鍵を導出するために、(PCR値による)ソフトウェア完全性をハードウェアと関連付けることが可能となる。一実施形態において、MACを最初に取得しそれらを命令と共にソフトウェアに記憶するためにUIDへのアクセスを有するデバイス所有者は、ソフトウェアをデバイス10に記憶する前に、すなわちビルド時に、デバイス10と同じKDFを用いて第1の鍵31を導出してよい。これに対し、第2の鍵32は、デバイス10により実行時に導出される。例えば、2つの鍵31、32は、2つの異なる時点にそれぞれ2つの異なるデバイス5および10によって生成されるため、同じではない。ただし、2つの鍵は、命令が実行できるように同一の値を有する必要がある。そうでない場合、提案する方法によれば、ソフトウェア実行が中断される。
【0033】
ここで、この全てを、本開示の特定の実施形態に関して詳細に説明する。本開示の様々な実施形態において、方法は、命令を検証するために、デバイス10において検証MACを明示的に計算することにより、S140~S160の暗号検証動作を行う。
【0034】
一実施形態において、方法は、ハードウェア・モジュール20を利用して、MACを検証する。例えば、方法は、それぞれ命令に対応する検証MACをデバイス10において(実行時に)再計算し、検証MACを用いて検証を行う。本例において、方法は、暗号鍵32を利用して検証動作を行ってよい。例えば、方法は、参照MACおよび検証MACの両方をHMACとして計算する。本例において、方法は、検証MACを参照MACと比較して、検証を行う。その目的で、方法は、命令と同様に、参照MACをCPUレジスタ(例えばメモリ回路22)にロードしてよい。例えば、方法がCPUパイプラインにおいて検証を行うために、各命令および対応する参照MACは、メイン・メモリ(例えばメモリ12)に、次いでメイン・メモリからCPUレジスタにロードされてよい。
【0035】
代替例において、方法は、命令を実行する前に、命令を全て同時に、すなわちひとまとめに検証する。ただし、処理リソースに関して、命令を逐次的に検証し、その検証に応じてそれらを実行することが有利である。ステップS160において、方法は、命令を検証する。一実施形態において、方法は、ハードウェア・モジュール20を利用して、メモリ12の命令を実行するか否かを決定する。例えば、方法は、命令を連続的に(逐次)処理し、それにより、各命令はまず検証され、検証が失敗しない限り、次いで実行される。1つのシナリオにおいて、命令に対応する鍵の値がハードウェア・モジュール20の鍵の値と合致しないと方法が判定した場合、すなわち検証が失敗した場合(ステップS160:いいえ)、方法は、ソフトウェアの命令の実行を中断する、すなわちS180。なお、方法は、検証のいずれかが失敗し次第、ソフトウェア実行を中断する。命令を逐次的に検証することにより、メイン・メモリまたはメモリ・キャッシュとさらにやり取りを行う必要なく、例えば検証された命令を(CPUレジスタの外部に)記憶し実行のために呼び出す必要なく、CPUが各命令を直接検証し、次いでオン・ザ・フライで実行することが可能となる。換言すると、
図7に示すように、命令の各々をCPUパイプラインにおいて逐次的に処理することができる。
【0036】
本方法は、参照MAC、および後の検証ステップに必要な任意のデータが計算される、一連の事前ステップを含んでよい。
図3を参照すると、ステップS10において、方法は、鍵を導出する。一実施形態において、方法は、正規エンティティ5を利用して鍵31を導出する。例えば、正規エンティティ5は、後にデバイス10により用いられるものと同じKDFを用いて、初期暗号鍵を生成する。ステップS20において、方法は、MACを計算する。一実施形態において、方法は、正規エンティティ5を利用して参照MACを計算する。例えば、正規エンティティ5(例えばデバイス所有者または製造者)は、ステップS10において導出される初期暗号鍵に基づいて、参照MACを計算してよい。ステップS30において、方法は、命令をMACと共にソフトウェアに記憶する。一実施形態において、方法は、正規エンティティ5を利用して、計算された参照MACをソフトウェアの命令と共にデバイス10のストレージ11に記憶する。例えば、命令および参照MACをコンピュータ化デバイスに記憶する前に、参照MACが命令と共にソフトウェアに記憶される。本例において、各参照MACは、ソフトウェアをコンピュータ化デバイスのメモリにロードする前のソフトウェアの命令に対応する。ステップS40において、方法は、ソフトウェアをコンピュータ化デバイスにロードする。一実施形態において、方法は、計算された参照MACをソフトウェアの命令と共にデバイス10のメモリ12に記憶する。命令が、例えばAEADスキームを用いて暗号化される場合、計算された参照MACおよび命令に加えて、ソフトウェアは、命令を復号し検証動作を行うためのノンスおよび追加データを場合により含んでよい。
【0037】
本開示の様々な実施形態において、参照MACは、
図6の図において想定されるように、命令が実行する順序の完全性をさらに保証するために、相互依存性スキームを取り込んでよい。すなわち、方法は、この相互依存性スキームに従って、命令およびKDFに基づいて暗号エンコード動作を行うことにより、最初に参照MACを計算してよい。
【0038】
例えば、この相互依存性スキームは、最初のMACを除く参照MACの各々が以前の参照MAC(またはそこから導出される情報)に依存するように設計されてよい。以前の命令のMACを用いて次の命令のMACを算出することにより、方法が制御フロー完全性を保護することが可能となる。一番最初のMACの計算は、任意の好適な初期値を用いてよい。その場合、ソフトウェアは、この相互依存性スキームを反映する相互依存性データをさらに含む。実行時において、方法は、ステップS140~S160において行われる検証が相互依存性スキームを正しく適用するように、(命令および参照MACに加えて)相互依存性データをデバイス10のメモリ12にロードしてよい。
【0039】
本開示の様々な実施形態において、より洗練された相互依存性スキームが展開されてよい。例えば、方法は、最初のn個のMACを除く各MACが、n個の以前のMACに含まれるまたはそこから導出される情報に関して計算される、階層的スキームを利用してよい。暗号検証動作は、それに整合するように行われてよい。例えば、方法は、少なくともMACの明示的な計算が必要な場合、実行時に、以前に得られたMACに基づいて検証MACを計算してよい。また、検証MACを明示的に計算することは、ソフトウェアに記憶される命令が暗号化されない場合に有用であり得る。ただし、特に命令を暗号化および復号するために暗号化/復号動作をさらに要する場合、これは必ずしも必要ではない。その場合、
図6の図において想定されるように、相互依存性が、追加データADおよびノンスNによりエンコードされるルールとして好適に取り込まれてよい。なお、方法は、事前ステップS18~S19の間に、すなわち参照MACを計算するステップS20の前に、ノンスNと整合するように追加データADを計算してよい。
図3も参照。
【0040】
実施形態において、命令は、上記で定義したKDFを用いる暗号化アルゴリズムに従って暗号化される。なお、
図6において、参照符号「P」および「C」はそれぞれ、非暗号化命令および暗号化命令を示す(PおよびCはそれぞれ「平文」および「暗号文」を表す)。この暗号化アルゴリズムは、上述の暗号エンコード動作の実行を引き起こしてよい。次いで、実行時において、
図6に示すように、単に暗号化命令を復号することにより命令を検証することができる。その目的で、用いられる復号アルゴリズムは、命令を暗号化するために用いられる暗号化アルゴリズムと整合するように設計される必要がある。復号は、暗号鍵32に対して行われ、参照MACおよび命令を入力として用いる。
【0041】
暗号化後MACまたはMAC後暗号化アルゴリズムなどの様々な暗号化アルゴリズムが利用されてよい。ただし、好適な実施形態において、暗号化アルゴリズムおよび復号アルゴリズムは、ここで
図6に関して詳細に説明するように、AEADスキームに依拠する。AEADアルゴリズムは、本文脈において、暗号化後MACまたはMAC後暗号化アルゴリズムよりも高いセキュリティを提供する。
【0042】
図6に示すように、各平文命令Pについて、AEAD暗号化アルゴリズムは、S20(例えばMACを計算する)において対応する暗号化命令Cおよび対応する参照MACを最初に生成する。AEAD暗号化アルゴリズムは、追加データADおよびノンスNを利用して、命令を好適に暗号化しMACを生成する。
図6において見られるように、追加データADおよびノンスNは、暗号化側から復号側に渡される。この例示的実施形態において、方法は、データをソフトウェアに埋め込む。結果として、ソフトウェアは、暗号化命令および参照MACに加えて、追加データADおよびノンスNを含んでよい。
【0043】
より詳細には、方法は、
図6に示すように、ビルド時にステップS10において導出される鍵31を用いて、平文命令PからMACを計算(例えばステップS20)するために、ステップS18~S19により追加データADおよびノンスNを整合するように生成する。ソフトウェアを暗号化するエンティティは、通常、ノンスの選択および追加データADの生成も行うエンティティである。ノンスは、任意に選択されてよい。ただし、ノンスは、各命令および各暗号鍵について一意であるべきである。所与の鍵について、ノンスは、例えば、1から命令の数まで増加する自然数であってよい。
【0044】
一実施形態において、方法は、暗号化アルゴリズムの出力から参照MACおよび暗号化命令Cを取得する(例えば
図6のS20)。方法は、追加データAD、ノンスN、および暗号化命令Cを復号アルゴリズムに渡す。AEADスキームによれば、復号アルゴリズムは、暗号化中に用いられるものと同じノンスを用いる場合にのみ、正しく復号を行うことができる。したがって、復号プロセスにおいて、方法は、ステップS150の方法論および実行時にステップS140において導出される鍵32(
図4参照)、ならびに追加データADおよびノンスNを利用して、命令Cを復号する。AEAD復号プロセスにより、命令Cを復号しつつ、命令の完全性および真正性を検証することが可能となる。
【0045】
本開示の様々な実施形態において、命令Cは、セキュリティの改善のために、1つずつ復号されることが好ましい。その目的で、方法は、追加データADおよびノンスをメモリ12に(すなわち命令Cおよび参照MACと同様に)ロードする。次いで、方法は、例えば
図7に図示するようなCPUパイプラインの一部として、復号アルゴリズムが暗号化命令Cを好適に復号し検証するために必要な対応するノンスおよび追加データと共に、各命令をプロセッサ・レジスタにロードする。代替的実施形態において、方法は、最初に命令Cを全て同時に復号してもよい。その場合、復号された命令Pは通常、CPUキャッシュにおいて平文で記憶される必要があり、これは、CPUコアとキャッシュ・メモリとの間の追加のデータ交換に加えてより広範なベクトルの攻撃をもたらすことを意味する。実際、そのようなアプローチは、キャッシュに記憶されたデータを標的とする攻撃をより受けやすい。そのため、一実施形態において、方法は、命令を逐次復号することで、いずれの復号済み命令もキャッシュに記憶する必要なく、全ての必要な動作をCPUコアによりローカルで実行する。
【0046】
前述したように、暗号鍵31、32は、ビルド時または実行時のいずれであっても、PCR値およびUIDから導出される。それでもなお、後に明らかとなる理由から、単調カウンタ値などの追加データが鍵31、32を導出するために用いられてよい。全ての場合において、各コンピュータ化デバイス10、およびデバイス10上で動作する各ソフトウェアについて、一意の鍵が利用可能とされてよい。
【0047】
一実施形態において、方法は、制御フロー完全性を保証するために、ノンスを適切に選択する。AEADアプローチにおいて、現在の命令のノンスは、以前の命令のMAC(例えば値)を用いて得ることができる。動作中、以前の命令のMACは、CPUの内部に(またはキャッシュに)一時的に記憶される。CPUは、この値を用いて、現在の命令についてのノンスを算出する。すなわち、CPUが次に実行する命令は、まず復号され検証される必要がある。CPUは、現在の命令に関するノンスを算出すると、現在の命令を復号することを試みる。ノンスは、いくつかの方法で計算されてよい。例えば、ノンスは、命令のアドレスを用いて算出されてよく、その結果、命令ごとに一意のノンスが得られる。別の例としては、ノンスを導出し、それらを暗号化命令に隣接する関連データに記憶することがある。
【0048】
本開示の様々な実施形態において、KDFの引数は、デバイス10のUIDおよびPCR値の両方に基づくものであってよく、これは、引数を何らかの方法でUIDおよびPCR値から得る必要があることを意味する。例えば、実施形態において、そのような引数は、PCR値、およびUIDの中間関数f(.)、すなわちf(UID)の出力を含む。次に、2つの値(すなわちPCR値および出力)は、KDFにより入力として受け取られる単一の引数を形成するように連結されてよい。このシナリオにおいて、KDFは、単一の引数を有する関数とみなすことができる。例えば、暗号鍵32は、例えば以下のように得られてよい。
暗号鍵=KDF(f(UID)||PCR値)
【0049】
中間関数は、ハッシュ関数などの任意の好適な関数であってよい。これは恒等関数であってもよく、その場合、以下の通りである。
暗号鍵=KDF(UID||PCR値)
【0050】
中間関数は、単一引数の関数としてみなされる場合、KDF自体であってもよい。例えば、鍵32は、例えば以下のように得られてよい。
暗号鍵=KDF(KDF(UID)||PCR値)
【0051】
本開示のさらなる実施形態において、KDFの引数は、
図2および
図7において想定されるように、単調カウンタMCの現在の値をさらに含む。単調カウンタMCの機能は、デバイス10に記憶されたソフトウェアの現在のバージョンを取り込むことである。すなわち、単調カウンタMCは、ソフトウェアの更新と共に単調増加するように(例えばCPUまたはその専用回路により)設定される。結果として、ソフトウェアの何らかの更新がこのカウンタの増加を生じさせ、これは、ビルド時または実行時のいずれであっても、導出される鍵31、32に影響を及ぼす。結果として、後で詳細に論じるように、正規エンティティ5が、デバイス10上で実行中の現在のソフトウェア・バージョンを追跡し検証することが可能となる。
【0052】
例えば、方法がUIDおよびPCR値に加えて単調カウンタ値を用いる場合、KDFの引数は、PCR値、UIDの中間関数f(.)の出力、および単調カウンタMCの現在の値を含んでよい。本例において、鍵32は、以下のように得られてよい。
暗号鍵=KDF(f(UID)||PCR値||MC)、または
暗号鍵=KDF(f(UID||MC)||PCR値)
【0053】
別の例において、方法は、鍵32を以下のように計算する。
暗号鍵=KDF(KDF(UID||MC)||PCR値)
【0054】
図5は、正規エンティティが現在のカウンタ値MCを利用してデバイス10上で実行中のソフトウェアの現在のバージョンを検証することを示すフローチャートを示す。本開示の様々な実施形態において、そのような検証は、PCR値、単調カウンタ値MC、およびノンスに依拠する。ステップS210において、方法は、コンピュータ化デバイスへの要求をノンスと共に送る。一実施形態において、方法は、正規エンティティ5を利用して、ノンスを含む要求をデバイス10に送信する。例えば、ノンスは、正規エンティティ5によりデバイス10に送られるS210。ステップS220において、コンピュータ化デバイスは、検証デバイスの要求を受け取る。一実施形態において、方法は、正規エンティティ5が送信した要求がデバイス10において受け取られたとの確認を受け取る。ステップS230において、コンピュータ化デバイスは、ノンスを含むクォート(quote)に署名する。一実施形態において、デバイス10は、正規エンティティ5の要求のクォートに署名する。例えば、コンピュータ化デバイス(例えばデバイス10)は、例えば
図4のステップS140において導出される鍵32を用いて、ノンスを含むクォートにデジタル署名する。ステップS240において、コンピュータ化デバイスは、署名済みクォートを送信する。一実施形態において、デバイス10は、署名済みクォートを正規エンティティ5に送信する。例えば、コンピュータ化デバイス(例えばデバイス10)は、デジタル署名済みクォートを検証デバイス(例えば正規エンティティ5)に送信する。ステップS250において、方法は、署名済みクォートを受け取る。一実施形態において、正規エンティティ5は、デバイス10の署名済みクォートを受け取る。例えば、検証デバイス(例えば正規エンティティ5)は、コンピュータ化デバイス(例えばデバイス10)のデジタル署名済みクォートを受け取る。
【0055】
ステップS260において、方法は、署名を検証し、ノンスを抽出する。一実施形態において、方法は、正規エンティティ5を利用して、デバイス10の署名済みクォートを検証する。例えば、方法は、コンピュータ化デバイスにより提供されたクォートの署名を検証し、クォートのノンスを抽出する。ステップS270において、方法は、ノンスを期待値と比較する。一実施形態において、方法は、デバイス10の署名済みクォートのノンスを正規エンティティ5の値と比較する。例えば、方法は、クォートの抽出されたノンスを期待値、すなわちステップS210において最初に用いられたノンス値と比較する。正しい鍵32(すなわち正しいパラメータに基づいて導出されたもの、
図2参照)のみが、デバイス10上で動作中のソフトウェアの正しいバージョンを証明することができる。このノンスは、リプレイ攻撃を防止するために用いられ、これは、前述のAEADスキームにおいて用いられるノンス値とは区別されるべきである。
図5については、下記で詳細に説明する。本開示の様々な実施形態において、クォートは、ステップS230において(署名されるのではなく)鍵32を用いて暗号化され、その後、ステップS260において(検証されるのではなく)鍵31を用いて復号されてよい。クォートの暗号化/復号は、機密性が懸念事項である場合に用いられてよい。
【0056】
本開示の様々な実施形態において、方法は、デバイス10の物理複製困難関数(PUF)から、識別子であるUIDを取得してよい。加えて、PUFは、
図1に図示するように、デバイス10のCPU14の物理複製困難関数であってよい。この例として、方法は、暗号鍵32を生成する前に、デバイス10のCPU14の回路21からUIDを取得してよい。例えば、CPU14は、デバイス(または実際にはCPU)のプロパティを測定し、それに応じてデジタル・フィンガプリント(例えばUID)を生成するように構成された回路21を含んでよい。方法は、得られたUIDを利用して、鍵32を導出する。加えて、当業者であれば、回路21が、UIDを学習するために(すなわちデバッグ・ポートを介して)回路21への物理的アクセスを有する者を阻止するように設計されることを認識する。よって、回路21の出力は、KDF回路によってのみアクセス可能である。
【0057】
例えば、
図1に図示するように、回路21は、
図4における検証ステップS130~S180を含む全ての機密動作を実行するように設計され得るハードウェア・モジュール20の一部を形成してよい。デジタル・フィンガプリントをデバイスの物理的プロパティから導出することを可能とする回路の様々な例が、従来技術において、特にハードウェア・セキュリティ・モジュール(HSM)の分野において知られている。
【0058】
デバイス10のCPU14は、追加の特殊性をさらに有してよい。例えば、CPU14は、専用かつ固定サイズであり得るメモリ回路22を含んでよい。メモリ回路22は、
図1に図示するように、ハードウェア・モジュール20の一部を形成してよい。一例において、メモリ回路22は、固定サイズを有してよく、プラットフォーム構成レジスタを実装するために利用される。さらに、本方法は、デバイス10をブートし次第、ソフトウェアのコンテンツを測定し、前述の拡張メカニズムに従って値を拡張してPCR値を得ることをさらに含んでよい。
【0059】
ここで
図1、
図2、および
図7を参照して、デバイス10に関する本開示の様々な実施形態を詳細に説明する。デバイス10の主な特徴は、暗黙的にであれ、本方法に関して既に説明した。したがって、そのような特徴は、以下では簡潔に説明する。一般に、デバイス10は、MACに基づいてソフトウェアをセキュアに実行する。デバイス10は、
図3に関して前述したステップによりソフトウェアが記憶される、すなわちソフトウェアが所与の命令およびそれぞれの参照MACを含むストレージ11を含んでよい。デバイス10は、
図4に関して前述した動作を行うための、プラットフォーム構成レジスタを含み得る処理手段、例えばCPU14をさらに含む。加えて、デバイス10は、動作中にデバイス10のメイン・メモリとして機能することを意図したメモリ12を含む。
【0060】
一実施形態において、デバイス10は、本方法に従ってステップを実行し、すなわち、命令をその検証に応じて実行する。本実施形態において、命令および参照MACは通常、検証を行う前に、デバイス10のメモリ12にロードされる。前述したように、行われる検証は、メモリ12の命令および参照MAC、ならびに実行時に生成される暗号鍵32を要する。当該実施形態において、デバイス10は、KDFに従って鍵32を生成し、KDFの引数は、デバイス10のUIDおよびPCR値に基づく。例えば、デバイス10は、CPU14のプラットフォーム構成レジスタ(例えばメモリ回路22)により実現される拡張メカニズムに従って、ソフトウェアのコンテンツの測定からPCR値を取得する。
【0061】
一実施形態において、デバイス10は、動作中において、単調カウンタがソフトウェアの更新と共に単調増加するように、単調カウンタMCを設定する。本実施形態において、KDFの引数は、単調カウンタの現在の値を含んでよい。上記で論じたように、UIDは、デバイス10のPUF、または特にCPU14のPUFに相関する。当該実施形態において、デバイス10のCPU14は、動作中にUIDを出力する専用回路21を含んでよい。加えて、CPU14は、動作中に鍵32を導出するために利用されるPCR値を提供する、PCRを実装する専用の固定サイズのメモリ回路22を含んでよい。例えば、PCR、単調カウンタMC、およびPUFは、物理層の一部として実装されるものとみなされてよく、一方でそれぞれ導出される値(すなわちPCR値、カウンタ値、およびUID)は、この物理層の上の実行層において動作するものとみなされてよい。
【0062】
一実施形態において、
図1に図示するように、CPU14は、
図4のステップS130~S180の機密動作を行う専用ハードウェア・モジュール20を含んでよい。また、ハードウェア・モジュール20は、回路21、22を含んでよい。
【0063】
別の実施形態において、本方法は、コンピュータ・プログラム製品として具現化されてよい。コンピュータ・プログラム製品は、プログラム命令を具現化したコンピュータ可読記憶媒体を備える。そのようなプログラム命令は、特に、上述のようにデバイス10のCPU14にロードされてよい。これらのプログラム命令は、デバイス10が本方法に係るステップを実施する、例えば、所与の命令および参照MACをデバイス10のメイン・メモリ(例えばメモリ12)にロードし、所与の命令をその検証に応じて実行し、それにより前述の暗号検証動作を行うことによって命令が実行前に検証されるように、CPU14により実行可能である。このコンピュータ・プログラム製品に関するさらなる検討事項を以下に提示する。
【0064】
上記の実施形態は、添付の図面に関して簡潔に説明されており、多数の変形例を包含してよい。上記の特徴のいくつかの組合せが想定される。
【0065】
以下、CPU拡張に依拠して、高信頼セキュリティ・デバイスが認可済みソフトウェアのみを実行することを実現する例示的実施形態を説明する。そのような実施形態は、強力な脅威のモデルを想定する。例えば、デバイスへの物理的アクセスを有する敵対者が、メモリ・コンテンツを改ざんする場合がある。また、敵対者は、デバイス上で動作するソフトウェアにおけるメモリ破壊の脆弱性を利用する場合がある。これらの脅威を軽減するために、本開示の様々な実施形態は、フェッチされた命令が、所与のCPU上で動作するように認可され、ロードされたソフトウェアの一部をなし、ソフトウェアの制御フロー完全性に合致することを確実にするために、命令レベルの粒度で機能する解決策を提案する。
【0066】
本開示の一実施形態において、ソフトウェアおよびハードウェアが関連付けられる。例えば、CPUは、CPUコアを含み、CPUは、一意デバイス番号(UID)にアクセスし、鍵導出関数を実装し、検証モジュールを動作させてよい。UIDは、各CPUについて一意であり、通常はハードウェア所有者のみに知られる番号である。鍵導出関数は、UID、上記で論じたPCR値、または他のソフトウェア固有のデータあるいはその組合せから暗号鍵32を生成する暗号アルゴリズムである。
【0067】
本例において、ハードウェア・モジュール20は、CPUコアの一部であり、
図7に示すCPUパイプライン内の「フェッチ」および「実行」の段階の間で動作する。ハードウェア・モジュール20は、暗号鍵32を用いて、各命令を実行前にデコード/検証する。
【0068】
本例において、バイナリは、ハードウェア所有者により修正可能である。各ソフトウェアの命令は、ハードウェア・モジュール20が命令を検証することを可能とする追加データを含むように拡張される。
【0069】
一実施形態において、CPUは、命令の真正性および完全性をチェックするが、命令の機密性を実現しない。当該実施形態において、参照MACが、暗号鍵31を用いて各命令について最初に算出される。
図3を参照。バイナリにおいて、各命令は、元の命令に加えて、参照MACを含むためのより多くのスペースを占有する。AEAD暗号スキームを用いて各命令を最初に暗号化することにより、機密性を付加することができる。このシナリオにおいて、ソフトウェア完全性は、命令のフィンガプリントを記憶する関連データの一部に対して算出される。
【0070】
本開示の様々な実施形態は、本アプローチを妨げることなく、ソフトウェア・バージョンの更新を可能とする。結果として、ソフトウェアの更新が、ロールバック攻撃に対してセキュアとなる。一実施形態において、CPUは、単調カウンタを利用してソフトウェア・バージョンを追跡する。例えば、単調カウンタは、ハードコーディングされる。本例において、単調カウンタは、数を記憶する不揮発性レジスタとして埋め込まれる。この数は、単調性に従ってのみ増加させることができ、ソフトウェア更新がインストールされた場合、例えば単調カウンタをインクリメントする専用のCPU命令により、単調カウンタが増加する。そのような場合、CPUは、上記で説明したように、単調カウンタを考慮する鍵導出関数により生成される暗号鍵を用いる。
【0071】
一実施形態において、実現される実行順序に加えて、セキュア・ブートが実装されてよい。その目的で、ハードウェアは、プラットフォーム構成レジスタ(PCR)を埋め込んでよい。PCRは、完全性測定値を記憶する固定サイズのレジスタとみなされてよい。そのような完全性測定値は通常、ソフトウェア・コンテンツ(例えばバイナリ)に対する暗号学的ハッシュ関数の出力において得られる。PCRは、CPUがリセットされると(例えばリブート時に)、好適な初期値にリセットされる。PCRは、直接書き込むことができず、拡張することができるのみである。例えば、PCRの値は、現在のPCR値および新たな値を引数とする暗号学的ハッシュ関数の出力により置き換えられてよい。本例において、PCR値は、新たなファームウェア/ソフトウェアがメモリにロードされたときに変化する。その結果、新たな暗号鍵が鍵導出関数により生成される。また、新たにロードされたソフトウェアは、新たにロードされたソフトウェアがブート・ソフトウェアのブート順序および完全性を反映するPCR値から導出される鍵で署名/暗号化されている場合にのみ、実行可能である。
【0072】
本開示の様々な実施形態は、アテステーションを得ることを可能とする。この目的は、デバイスが最新版のソフトウェアを実行していることをハードウェア所有者(または任意の他の正規エンティティ)が検証することである。
【0073】
ここで、
図3および
図6を参照すると、例示的実施形態において、ハードウェア所有者は、
図3に示すように、PCR値、UID、および単調カウンタMCの正しい値に基づいて鍵31を導出S10する。ハードウェア所有者のデバイスは、それに応じて、対象のソフトウェアを構成する命令を考慮して、参照MACを計算S20する。本例において、
図6に図示するように、追加データ(AD)およびノンス値を最初に計算S18~S19する必要があり得る。また、ハードウェア所有者のデバイスは、必要に応じて、追加データおよびノンスと共に、命令および参照MACをソフトウェアに配置S30する。本例において、ソフトウェアは、デバイス10に記憶S40され、デバイス10は、
図4のフローで説明するように、ソフトウェアをセキュアに実行するための準備が整う。
【0074】
ここで、
図4および
図6を参照すると、本開示の様々な実施形態は、デバイス上での実行をセキュア化する。例示的実施形態において、デバイス10上でソフトウェアを実行すると、デバイス10は、(デバイス10のストレージ11に最初に記憶される)ソフトウェアにアクセスS110して、(場合によっては暗号化される)命令、参照MAC、ならびに、追加データADおよびノンス値Nなどの任意の他の所望のデータをメモリ12にロードS120する。この例示的実施形態において、デバイス10は、命令を検証および実行のために連続的に処理する。プロセスは、最後の命令が処理されると(S130:はい)終了する。デバイス10が新たな命令を選択S135するたびに、デバイス10は、前述したように、ステップS140において導出される鍵32を利用して、新たな命令を検証S150する。検証S150は、必要な場合、参照MACおよび他のデータ(AD、N)に依拠する。1つのシナリオにおいて、デバイス10が現在の命令を検証する場合(ステップS160:はい)、デバイス10は、命令を実行S170する。別のシナリオにおいて、デバイス10が現在の命令を検証しない場合(ステップS160:いいえ)、デバイス10は、ソフトウェア実行を中断S180する。
【0075】
代替的な例示的実施形態において、デバイス10がAEADスキームを利用する場合、
図6に示すように、検証S150が進行する。例えば、デバイス10は、暗号化命令C、追加データAD、およびノンス値Nを利用して、ステップS140で導出される鍵32を用いて命令を復号する。本例において、デバイス10は、復号のためのみならず、各命令の完全性および真正性を証明するためにもAEADスキームを利用する。
【0076】
ここで
図5を参照すると、本開示の様々な実施形態は、ソフトウェアの現在のバージョンを検証するための一連のステップを含むアテステーションの方法論を提供する。一実施形態において、検証エンティティは、正規エンティティ5を利用して、ノンスを含む要求をアセンブルし、要求をデバイス10に送る(ステップS210)。デバイス10は、ステップS220において要求を受け取る。次に、ステップS230において、デバイス10は、暗号鍵32を用いて、ノンスを含むクォートに署名する。鍵32は、事前に、例えば
図4のステップS140において既に導出され、(場合によってはラップされた形態で)デバイス10に記憶されていてよい。1つのシナリオにおいて、鍵が事前に導出されない場合、鍵は、前述したものと同じKDFを用いて再導出されるべきである。ステップS240において、デバイス10は、署名済みクォートを正規エンティティ5に送る。ステップS250において、正規エンティティ5は、署名済みクォートを受け取り、ステップS260において、同じKDFを用いて導出される鍵31を用いて署名済みクォートを検証する。当該実施形態において、正規エンティティ5は、命令をソフトウェアに記憶するために最初に行ったように(
図3のステップS30を参照)、ソフトウェア命令のデータを利用して鍵31を導出してよい。ステップS270において、正規エンティティ5は、署名済みクォートに含まれるノンスを抽出し、ノンスを対応する期待値と比較してよい。結果として、正規エンティティ5は、デバイス10において実行中のソフトウェアの現在のバージョンを検証することができる。
【0077】
上記のスキームは、UIDおよびPCR値に少なくとも部分的に基づいて導出される鍵31、32を利用する。本開示の様々な実施形態において、クォートは、デバイス10によりステップS230において暗号化され、次いで正規エンティティ5によりステップS260において復号されてよい。加えて、デバイス10および正規エンティティ5は、異なる暗号鍵(すなわち鍵31、32とは別個)に依拠して、クォートに対して署名/暗号化、次いで検証/復号を行ってよい。例えば、鍵は、期待される/現在の単調カウンタ値から導出されてよい。しかしながら、本方法は、鍵をUIDおよびPCR値にも関連付けることにより、セキュリティの改善を提供し、したがって鍵31、32に依拠する利点を提供することができる。別の例において、正規エンティティ5は、ノンスに加えて、PCR値、期待される単調カウンタ値、またはUIDあるいはその組合せに基づいて、最初に要求を形成する。結果として、デバイス10および正規エンティティ5により共有される任意の好適な暗号鍵を用いて、クォートに対して署名/暗号化を行い、次いでクォートを検証/復号することができる。
【0078】
ここで
図7を参照すると、一実施形態において、CPUは、MAC、追加データ、およびノンスなどの任意の他の必要なデータも含み、キャッシュ(例えば命令キャッシュ)に記憶され得る命令バスから命令を逐次的にフェッチする。キャッシュは、CPUにより近いが、メイン・メモリの一部を形成すると考えられる。当該実施形態において、CPUは、他の必要なデータと共に各命令をCPUパイプラインに連続的にロードして、前述したようにPCR値、UID、および現在の単調カウンタ値から導出される鍵を用いるAEADスキームを利用して命令を検証(例えば検証AEAD)する。また、AEAD復号が進行することに伴い、CPUは、CPUが実行(例えば実行)可能な形式に各命令をデコード(例えばデコード)する。デコードするステップは、命令を復号し命令の完全性および真正性を検証するAEAD復号および検証プロセスとは別個である。加えて、CPUは、全ての結果をパイプラインの同じ段階(例えば、メモリ・アクセス、メモリ等)において書き込む。そのような実行の結果は、データ・キャッシュ(例えばデータ・キャッシュ)に、次いでデータ・バス(例えばデータ・バス)に渡されてよい。さらに、命令が実行され、命令結果が算出されると、CPUは、コミット・ユニットを利用して、いつ結果を記憶するのが安全であるかを決定(例えばコミット)する。
【0079】
CPU設計によっては、パイプラインは、より多数または少数の段階を含んでもよく、例えばいくつかの段階が組み合わされてもよい。ただし、
図7の文脈では、命令がフェッチの後かつ実行の前に検証されることが不可欠である。
【0080】
本発明は、任意の可能な技術的詳細統合レベルにおけるシステム、方法、またはコンピュータ・プログラム製品あるいはその組合せであってよい。本発明は、命令ストリームを処理する単一または並列の任意のシステムにおいて有益に実施されてよい。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を有するコンピュータ可読記憶媒体(または複数の媒体)を含んでよい。
【0081】
本発明は、方法、デバイス、またはコンピュータ・プログラム製品あるいはその組合せであってよい。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を有するコンピュータ可読記憶媒体(または複数の媒体)を含んでよい。
【0082】
コンピュータ可読記憶媒体は、命令実行デバイスが用いるための命令を保持および記憶することが可能な有形のデバイスであり得る。コンピュータ可読記憶媒体は、例えば、電子記憶デバイス、磁気記憶デバイス、光学記憶デバイス、電磁記憶デバイス、半導体記憶デバイス、または上記の任意の好適な組合せであってよいが、それらに限定されない。コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストは、以下、すなわち、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、リード・オンリ・メモリ(ROM)、消去可能プログラム可能リード・オンリ・メモリ(EPROMまたはフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク・リード・オンリ・メモリ(CD-ROM)、デジタル・バーサタイル・ディスク(DVD)、メモリ・スティック、フロッピ(R)・ディスク、命令が記録されたパンチ・カードまたは溝内隆起構造などの機械的符号化デバイス、および上記の任意の好適な組合せを含む。本明細書で用いる場合、コンピュータ可読記憶媒体は、電波もしくは他の自由に伝搬する電磁波、導波路を伝搬する電磁波もしくは他の伝送媒体(例えば、光ファイバ・ケーブルを通過する光パルス)、または電線で伝送される電気信号などの、それ自体が一過性の信号であるものとして解釈されるべきではない。
【0083】
本明細書に記載のコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれの計算/処理デバイスに、または、ネットワーク、例えばインターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワークまたは無線ネットワークあるいはその組合せを介して外部コンピュータまたは外部記憶デバイスにダウンロードされてよい。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータまたはエッジ・サーバあるいはその組合せを含んでよい。各計算/処理デバイスにおけるネットワーク・アダプタ・カードまたはネットワーク・インターフェースが、コンピュータ可読プログラム命令をネットワークから受信し、コンピュータ可読プログラム命令をそれぞれの計算/処理デバイス内のコンピュータ可読記憶媒体への記憶のために転送する。
【0084】
本発明の動作を実現するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路用構成データ、または、Smalltalk(R)、C++等のようなオブジェクト指向プログラミング言語、および「C」プログラミング言語または類似のプログラミング言語などの手続き型プログラミング言語を含む1つまたは複数のプログラミング言語の任意の組合せで記述されるソース・コードもしくはオブジェクト・コードであってよい。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンドアロン・ソフトウェア・パッケージとして、部分的にユーザのコンピュータ上でかつ部分的にリモート・コンピュータ上で、または完全にリモート・コンピュータまたはサーバ上で実行されてよい。後者のシナリオにおいて、リモート・コンピュータが、ローカル・エリア・ネットワーク(LAN)またはワイド・エリア・ネットワーク(WAN)を含む任意のタイプのネットワークを介してユーザのコンピュータに接続されてもよく、または、(例えばインターネット・サービス・プロバイダを用いてインターネットを介して)外部コンピュータに接続がなされてもよい。いくつかの実施形態において、例えばプログラム可能な論理回路、フィールド・プログラマブル・ゲート・アレイ(FPGA)、またはプログラマブル・ロジック・アレイ(PLA)を含む電子回路が、本発明の態様を実行するために、コンピュータ可読プログラム命令の状態情報を利用して電子回路をパーソナライズすることにより、コンピュータ可読プログラム命令を実行してよい。
【0085】
本発明の態様は、本発明の実施形態に係る方法、システム、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方に関して、本明細書に記載されている。フローチャート図またはブロック図あるいはその両方の各ブロック、およびフローチャート図またはブロック図あるいはその両方におけるブロックの組合せは、コンピュータ可読プログラム命令により実施され得ることを理解されたい。
【0086】
これらのコンピュータ可読プログラム命令は、コンピュータまたは他のプログラム可能データ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックにおいて指定される機能/動作を実施するための手段を形成するように、汎用コンピュータ、専用コンピュータ、または他のプログラム可能データ処理装置のプロセッサに提供されて機械を生成するものであってよい。これらのコンピュータ可読プログラム命令は、命令を記憶したコンピュータ可読記憶媒体が、フローチャートまたは図あるいはその両方の1つまたは複数のブロックにおいて指定される機能/動作の態様を実施する命令を含む製造物品を備えるように、コンピュータ、プログラム可能データ処理装置、または他のデバイスあるいはその組合せに特定の方式で機能するように指示し得るコンピュータ可読記憶媒体に記憶されてもよい。
【0087】
コンピュータ可読プログラム命令は、コンピュータ、他のプログラム可能装置、または他のデバイス上で実行される命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックにおいて指定される機能/動作を実施するように、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスにロードされることで、一連の動作ステップをコンピュータ、他のプログラム可能装置または他のデバイス上で実行させてコンピュータ実施プロセスを生成するものであってもよい。
【0088】
図面におけるフローチャートおよびブロック図は、本発明の様々な実施形態に係るシステム、方法、およびコンピュータ・プログラム製品の可能な実施例のアーキテクチャ、機能、および動作を示す。これに関して、フローチャートまたはブロック図における各ブロックは、指定される論理機能を実施するための1つまたは複数の実行可能命令を含む、命令のモジュール、セグメント、または部分を表すものであってよい。いくつかの代替的実施例において、ブロックに記載されている機能は、図面に記載されている以外の順序で行われてもよい。例えば、連続して示されている2つのブロックは、実際には実質的に同時に実行されてもよく、あるいは、それらのブロックは、関連する機能に応じて、場合により逆の順序で実行されてもよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、およびブロック図またはフローチャート図あるいはその両方におけるブロックの組合せは、指定される機能または動作を実行するまたは専用ハードウェアおよびコンピュータ命令の組合せを実現する専用ハードウェアベースのシステムにより実施され得ることにも留意されたい。
【0089】
限定された数の実施形態、変形例、および添付の図面に関して本発明を説明したが、様々な変更がなされてよく、本発明の範囲から逸脱しない限りにおいて均等物が置換されてよいことが、当業者には理解されよう。特に、本発明の範囲から逸脱しない限りにおいて、所与の実施形態、変形例において引用される、または図面に示されている(デバイスのような、または方法のような)特徴が、別の実施形態、変形例または図面における別の特徴と組み合わされ、またはそれを置き換えてよい。したがって、添付の特許請求の範囲内に収まる、上記の実施形態または変形例のいずれかに関して説明されている特徴の様々な組合せが想定されてよい。加えて、本発明の範囲から逸脱しない限りにおいて、特定の状況または材料を本発明の教示に適応させるために、多数の軽微な修正がなされてよい。したがって、本発明が、開示されている特定の実施形態に限定されず、本発明が、添付の特許請求の範囲に収まる全ての実施形態を含むことが意図されている。加えて、上記で明示的に触れられている以外の多数の変形例が想定されてよい。例えば、他のCPUパイプラインが設計されてよく、鍵導出関数は、PCR値、UID、および単調カウンタ値に加えて、追加のデータを用いてよい。
【0090】
「1つの実施形態」、「一実施形態」、「例示的実施形態」等という本明細書の記載は、説明されている実施形態が特定の特徴、構造、または特性を含んでよいが、あらゆる実施形態が特定の特徴、構造、または特性を必ずしも含まなくてよいことを示す。さらに、そのような語句は、必ずしも同じ実施形態を指すものではない。さらに、特定の特徴、構造、または特性が一実施形態に関連して説明されている場合、明示的に説明されているか否かに関わらず、他の実施形態に関連してそのような特徴、構造、または特性に影響を及ぼすことは当業者の知識の範囲内であることが提示される。
【0091】
本明細書において用いられる用語は、特定の実施形態を説明することのみを目的としており、本発明を限定することを意図したものではない。本明細書で用いる場合、単数形の「一の」および「その」は、文脈によりそうでないことが明確に示されていない限り、複数形も含むことが意図されている。さらに、「備える」という用語は、本明細書において用いられる場合、記載されている特徴、整数、ステップ、動作、要素、または構成要素あるいはその組合せの存在を示すが、1つまたは複数の他の特徴、整数、ステップ、動作、要素、構成要素、またはそれらの群あるいはその組合せの存在または追加を排除するものではないことが理解されよう。
【0092】
「ソフトウェア」は、制御フロー・グラフの形態でまたはシンボリック実行によりコンパイル中に導出され得る既知の正しい制御フローを有する基本ブロックの集合とみなされてよい。各基本ブロックは、分岐命令で終了する、順に実行する命令のリストである。
【0093】
「ハードウェア」は、少なくともCPUおよびメモリ(リード・オンリ・メモリまたはダイナミック・メモリ)を搭載する電子デバイス10である。
【0094】
「ハードウェア所有者」は、ハードウェアを所有するまたはハードウェアに対する正規のアクセスを有するエンティティである。
【0095】
「バイナリ」は、アーキテクチャ固有(ISA固有)のフォーマットに変換された、すなわちコンパイルおよびリンク・プロセスの後のソース・コードである。これは、命令およびそれぞれのメモリ・アドレスからなる。
【手続補正書】
【提出日】2024-04-02
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
コンピュータ化デバイス上でソフトウェアの命令をセキュアに実行するためのコンピュータ実施方法であって、
コンピュータ化デバイスのソフトウェアにアクセスすることであって、前記ソフトウェアは、複数の命令およびそれぞれの参照メッセージ認証コード(MAC)を含む、前記アクセスすることと、
鍵導出関数に少なくとも部分的に基づいて暗号鍵を生成することであって、前記鍵導出関数の引数は、前記コンピュータ化デバイスの一意識別子、および前記コンピュータ化デバイスのプラットフォーム構成レジスタの拡張メカニズムの前記ソフトウェアのコンテンツの測定から拡張された値に少なくとも部分的に基づく、前記生成することと、
前記暗号鍵、および前記それぞれの参照MACのうちの参照MACに少なくとも部分的に基づいて、前記ソフトウェアの前記複数の命令のうちの命令を検証することと、
前記ソフトウェアの前記複数の命令のうちの前記命令を検証したことに応答して、前記命令を実行することと
を含む、方法。
【請求項2】
前記ソフトウェアの前記複数の命令のうちの前記命令を検証することは、
前記暗号鍵に少なくとも部分的に基づいて、前記命令に対応する検証MACを計算することと、
前記検証MACを前記参照MACと比較することと
をさらに含む、請求項1に記載の方法。
【請求項3】
前記命令を実行することは、
前記ソフトウェアの前記複数の命令のうちの前記命令を検証することの失敗に応答して、前記ソフトウェアの前記命令の実行を中断すること
をさらに含む、請求項
1に記載の方法。
【請求項4】
前記それぞれの参照MACは、相互依存性スキームに基づいて計算されたMACであり、前記ソフトウェアは、前記相互依存性スキームを反映する相互依存性データをさらに含み、前記命令を検証することは、前記相互依存性スキームに基づく、請求項3に記載の方法。
【請求項5】
前記鍵導出関数を用いて、暗号化アルゴリズムに少なくとも部分的に基づいて前記ソフトウェアの前記複数の命令をエンコードすることと、
復号アルゴリズムに少なくとも部分的に基づいて前記ソフトウェアの前記複数の命令をデコードすることであって、前記復号アルゴリズムは、前記生成された暗号鍵および前記参照MACを用いる、前記デコードすることと
をさらに含む、請求項
1に記載の方法。
【請求項6】
前記暗号化アルゴリズムおよび前記復号アルゴリズムは、関連データ付き認証付暗号化アルゴリズムに準拠し、前記ソフトウェアは、前記複数の命令を暗号化するために用いられる追加データをさらに含み、前記復号アルゴリズムは、前記追加データを用いて、前記ソフトウェアの前記複数の命令を復号および検証する、請求項5に記載の方法。
【請求項7】
前記鍵導出関数の前記引数は、前記コンテンツの前記測定から拡張された前記値、および前記一意識別子の中間関数の出力を含む、請求項
1に記載の方法。
【請求項8】
前記鍵導出関数の前記引数は、単調カウンタの現在の値を含み、前記単調カウンタは、前記ソフトウェアの更新と共に単調増加する、請求項
1に記載の方法。
【請求項9】
前記引数は、前記コンテンツの前記測定から拡張された前記値、前記一意識別子の中間関数の出力、および前記単調カウンタの前記現在の値を含む、請求項8に記載の方法。
【請求項10】
前記拡張された値、前記単調カウンタ値、およびノンスに基づいて、前記ソフトウェアの現在のバージョンを検証すること
をさらに含む、請求項8に記載の方法。
【請求項11】
前記一意識別子は、前記コンピュータ化デバイスの物理複製困難関数から得られる識別子である、請求項
1に記載の方法。
【請求項12】
前記コンピュータ化デバイスの処理手段の専用回路から前記一意識別子を得ることであって、前記一意識別子は、前記コンピュータ化デバイスの前記処理手段の一意識別子である、前記得ることをさらに含む、請求項11に記載の方法。
【請求項13】
前記コンピュータ化デバイスをブートしたことに応答して、前記ソフトウェアの前記コンテンツを測定することと、
前記拡張された値を得るために前記拡張メカニズムに基づいて前記値を拡張することであって、前記コンピュータ化デバイスの処理手段は、前記プラットフォーム構成レジスタを実装する専用の固定サイズのメモリを含む、前記拡張することと
をさらに含む、請求項
1に記載の方法。
【請求項14】
前記コンピュータ化デバイスの処理手段のモジュールが、前記命令の前記検証を行う、請求項
1に記載の方法。
【請求項15】
前記鍵導出関数を用いて導出される初期暗号鍵に基づいて、前記参照MACを計算することと、
前記参照MACを前記複数の命令と共に前記ソフトウェアに記憶することと、
前記ソフトウェアを前記コンピュータ化デバイスに記憶することと
をさらに含む、請求項
1に記載の方法。
【請求項16】
前記アクセスされたソフトウェアに含まれる前記複数の命令は、前記コンピュータ化デバイスの処理手段により直接解釈可能な機械コード命令である、請求項
1に記載の方法。
【請求項17】
コンピュータ化デバイスのソフトウェアの現在のバージョンを検証するためのコンピュータ実施方法であって、
前記コンピュータ化デバイスのソフトウェアの現在のバージョンを検証するための要求をコンピュータ化デバイスに送ることであって、前記要求は、ノンスを含む、前記送ることと、
前記要求に対応する署名済みクォートを前記コンピュータ化デバイスから受け取ることであって、前記署名済みクォートは、暗号鍵に少なくとも部分的に基づき、前記ノンスを含み、前記暗号鍵は、鍵導出関数に少なくとも部分的に基づき、前記鍵導出関数の引数は、前記コンピュータ化デバイスの一意識別子、単調カウンタの現在の値、および前記コンピュータ化デバイスのプラットフォーム構成レジスタの拡張メカニズムの前記ソフトウェアのコンテンツの測定から拡張された値に少なくとも部分的に基づき、前記単調カウンタは、前記拡張された値、前記単調カウンタ値、および前記ノンスに少なくとも部分的に基づいて前記ソフトウェアの更新と共に単調増加する、前記受け取ることと、
前記暗号鍵を用いて前記署名済みクォートの署名を検証することと、
前記検証されたクォートから抽出された前記ノンスを期待値と比較することと
をさらに含む、方法。
【請求項18】
コンピュータ化デバイス上でソフトウェアの命令をセキュアに実行するためのコンピューティング・システムであって、
1つまたは複数のコンピュータ・プロセッサと、
1つまたは複数のコンピュータ可読記憶デバイスと、
前記1つまたは複数のコンピュータ・プロセッサによる実行のための、前記1つまたは複数のコンピュータ可読記憶デバイスにおける記憶されたプログラム命令と
を備え、前記記憶されたプログラム命令は、
コンピュータ化デバイスのソフトウェアにアクセスするためのプログラム命令であって、前記ソフトウェアは、複数の命令およびそれぞれの参照メッセージ認証コード(MAC)を含む、前記アクセスするためのプログラム命令と、
鍵導出関数に少なくとも部分的に基づいて暗号鍵を生成するためのプログラム命令であって、前記鍵導出関数の引数は、前記コンピュータ化デバイスの一意識別子、および前記コンピュータ化デバイスのプラットフォーム構成レジスタの拡張メカニズムの前記ソフトウェアのコンテンツの測定から拡張された値に少なくとも部分的に基づく、前記生成するためのプログラム命令と、
前記暗号鍵、および前記それぞれの参照MACのうちの参照MACに少なくとも部分的に基づいて、前記ソフトウェアの前記複数の命令のうちの命令を検証するためのプログラム命令と、
前記ソフトウェアの前記複数の命令のうちの前記命令を検証したことに応答して、前記命令を実行するためのプログラム命令と
を含む、
コンピューティング・システム。
【請求項19】
コンピュータ化デバイスのソフトウェアの現在のバージョンを検証するためのコンピューティング・システムであって、
1つまたは複数のコンピュータ・プロセッサと、
1つまたは複数のコンピュータ可読記憶デバイスと、
前記1つまたは複数のコンピュータ・プロセッサによる実行のための、前記1つまたは複数のコンピュータ可読記憶デバイスにおける記憶されたプログラム命令と
を備え、前記記憶されたプログラム命令は、
前記コンピュータ化デバイスのソフトウェアの現在のバージョンを検証するための要求をコンピュータ化デバイスに送るためのプログラム命令であって、前記要求は、ノンスを含む、前記送るためのプログラム命令と、
前記要求に対応する署名済みクォートを前記コンピュータ化デバイスから受け取るためのプログラム命令であって、前記署名済みクォートは、暗号鍵に少なくとも部分的に基づき、前記ノンスを含み、前記暗号鍵は、鍵導出関数に少なくとも部分的に基づき、前記鍵導出関数の引数は、前記コンピュータ化デバイスの一意識別子、単調カウンタの現在の値、および前記コンピュータ化デバイスのプラットフォーム構成レジスタの拡張メカニズムの前記ソフトウェアのコンテンツの測定から拡張された値に少なくとも部分的に基づき、前記単調カウンタは、前記拡張された値、前記単調カウンタ値、および前記ノンスに少なくとも部分的に基づいて前記ソフトウェアの更新と共に単調増加する、前記受け取るためのプログラム命令と、
前記暗号鍵を用いて前記署名済みクォートの署名を検証するためのプログラム命令と、
前記検証されたクォートから抽出された前記ノンスを期待値と比較するためのプログラム命令と
を含む、コンピューティング・システム。
【国際調査報告】