(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-10-31
(54)【発明の名称】コンピューティングシステムで制御フローを妥当性確認するための制御フロー整合性測定
(51)【国際特許分類】
G06F 21/54 20130101AFI20241024BHJP
【FI】
G06F21/54
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2024529608
(86)(22)【出願日】2022-03-25
(85)【翻訳文提出日】2024-06-05
(86)【国際出願番号】 US2022071360
(87)【国際公開番号】W WO2023091803
(87)【国際公開日】2023-05-25
(32)【優先日】2021-11-19
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】ヤング・デ・ラ・ソタ,ミゲル・クリスティアン
(72)【発明者】
【氏名】オソリオ・ロザーノ,ミゲル・アンヘル
(57)【要約】
本明細書は、コンピューティングシステムで制御フローを妥当性確認するための制御フロー整合性測定を実施することを対象とした技術及び装置を説明する。スコープ内では、ローカル変数は初期化され、かつローカル制御フローの測定値を記憶するように構成される。スコープ内の動作中に、少なくとも1つの式が計算され、戻り値が出力される。指紋アルゴリズムでは、戻り値を取得し、戻り値及び測定値を結合し、その結合をハッシュしてダイジェスト値を生成する。次いで、ローカル変数はダイジェスト値として再定義される。次に、戻り値は、分岐命令で予想される区別された成功戻り値と比較される。最終的な戻り値を返す前に、測定値は静的変数に記憶された期待値と比較される。比較が失敗した場合、プログラムは制御フローに対する攻撃を検出できる。
【特許請求の範囲】
【請求項1】
コンピュータで実行される方法であって、
デジタル署名を検証するように構成された署名チェック関数の制御フローの測定値を生成することと、
前記署名チェック関数のスコープ中に、デジタル署名検証が成功したことを示す式の戻り値を生成することと、
前記スコープ中に前記式の戻り値を生成することに応答して、計算値に従って前記測定値を更新することとを含み、前記計算値は前記測定値及び前記式の戻り値に基づき、前記方法はさらに、
前記測定値を所定の値と比較することによって、前記署名チェック関数の前記制御フローを妥当性確認することを含む、コンピュータで実行される方法。
【請求項2】
前記式の戻り値は第2の式の戻り値であり、前記コンピュータで実行される方法は、前記第2の式の戻り値を生成するより前に、デジタル署名の獲得が成功したことを示す第1の式の戻り値を生成することをさらに含む、請求項1に記載のコンピュータで実行される方法。
【請求項3】
前記測定値を更新すると、前記第1の式の戻り値及び前記第2の式の戻り値のそれぞれについて前記測定値が更新される、請求項2に記載のコンピュータで実行される方法。
【請求項4】
前記測定値を更新することは、前記測定値を前記計算値に等しく設定することを含む、いずれかの先行請求項に記載のコンピュータで実行される方法。
【請求項5】
前記署名チェック関数の前記制御フローを妥当性確認することに応答して、スコープ戻り値を返すことをさらに含む、いずれかの先行請求項に記載のコンピュータで実行される方法。
【請求項6】
前記スコープ戻り値は少なくとも1つのエラーコードを含み、前記少なくとも1つのエラーコードは、前記署名チェック関数の前記制御フローの妥当性確認が成功したこと、または前記署名チェック関数の前記制御フローの妥当性確認が失敗したことを示す、請求項5に記載のコンピュータで実行される方法。
【請求項7】
前記式の戻り値は前記少なくとも1つのエラーコードを含み、前記少なくとも1つのエラーコードは、デジタル署名検証が成功したこと、またはデジタル署名検証が失敗したことを示す、請求項5または6に記載のコンピュータで実行される方法。
【請求項8】
1つまたは複数の条件分岐命令に基づいて、前記式の戻り値が前記デジタル署名検証の失敗を示すと判断することと、
前記式の戻り値が前記デジタル署名検証の失敗を示すと判断することに応答して、前記署名チェック関数の前記スコープのさらに他の実行を停止することと、
前記署名チェック関数の前記制御フローの前記妥当性確認が失敗したことを示す前記スコープ戻り値を返すことと、をさらに含む、請求項7に記載のコンピュータで実行される方法。
【請求項9】
ハッシュ関数を使用して前記計算値を生成することをさらに含む、いずれかの先行請求項に記載のコンピュータで実行される方法。
【請求項10】
前記ハッシュ関数は非暗号化の合成指紋アルゴリズムを含み、
前記計算値を生成することは、
連結を含む非可換関数、またはシリアル化を含む注入関数の少なくとも1つを使用して2つの入力を共に組み合わせることと、
前記組み合わせられた入力を固定サイズのダイジェスト値にマッピングすることと、を含む、請求項9に記載のコンピュータで実行される方法。
【請求項11】
前記計算値に従って前記測定値を更新することは、1つまたは複数の数学演算またはビット演算を通して前記測定値を操作することを含む、いずれかの先行請求項に記載のコンピュータで実行される方法。
【請求項12】
前記所定の値は、前記測定値を維持するより前に算出され、前記スコープ内のいくつかの単項エラーリターン決定に基づいている、いずれかの先行請求項に記載のコンピュータで実行される方法。
【請求項13】
前記所定の値はセキュリティ強化されたメモリに記憶される、請求項12に記載のコンピュータで実行される方法。
【請求項14】
集積回路を備え、前記集積回路は、
少なくとも1つのプロセッサと、
前記少なくとも1つのプロセッサに結合され、かつ命令を含む少なくとも1つのコンピュータ可読記憶媒体とを備え、前記命令は、前記少なくとも1つのプロセッサによって実行されると、前記プロセッサにいずれかの先行請求項に記載の方法を実行させる、システム。
【発明の詳細な説明】
【背景技術】
【0001】
社会のコンピュータ化が進んだことで、世界はさまざまな損害の大きいサイバー攻撃にさらされる可能性が高まっている。これらのサイバー攻撃の深刻度はさまざまであり得、ユーザの情報セキュリティ(例えば、デジタル通貨取引)に影響を及ぼす可能性があるだけでなく、ユーザの身体的安全(例えば、自動運転)を脅かす可能性もある。このようなサイバー攻撃を阻止するために、デバイスのデータ及び通信への不正アクセス及び操作を防止するための多数のセキュリティ対策がコンピューティングデバイスに実装されている。これらのセキュリティ対策は徹底的なサイバー攻撃に耐えられることが既に証明されているが、これらのコンピューティングデバイスは、ハードウェアまたはソフトウェアの脆弱性を特定することを目的として、潜在的なサイバー攻撃をシミュレートする最先端の技術に対して継続的にテストされている。このようなセキュリティシステムの弱点を見つけて突破することに特化した研究分野は、暗号解析と称される。
【0002】
最近の暗号解析評価では、フォールト注入を含む潜在的にセキュリティを脅かす技術が特定されている。フォールト注入攻撃では、ソフトウェア注入とは対照的に、攻撃者がコンピューティングシステムに物理的にフォールトを注入することで、電子部品の挙動を意図的に変更することを伴う場合がある。その結果、フォールト注入攻撃は多くのシステムセキュリティ特徴をくぐり抜け、コンピューティングシステムの挙動を変更して悪意のある目的を達成し、及び/または機密情報を抽出する可能性がある。物理的なフォールト注入攻撃には、電圧グリッチ、クロックグリッチ、レーザー注入、及び電磁注入などが含まれ得る。場合によっては、これらのサイバー攻撃により、明確に定義された場所にわずか4つのフォールト注入が導入されて、システムセキュリティが破壊される可能性がある。
【発明の概要】
【0003】
本明細書では、コンピューティングシステムで制御フローを妥当性確認するための制御フロー整合性測定を実施することを対象とした技術及び装置について説明する。態様では、スコープ中に制御フローの測定値を維持することを含む方法が開示される。方法は、スコープ中に、式の計算に対する式の戻り値を生成することをさらに含み、式の戻り値は、式の計算が成功したこと、または式の計算が失敗したことを示す。方法は、スコープ中に式の戻り値を生成することに応答して、計算値に従って測定値を変更することも含み、計算値は測定値及び式の戻り値に基づく。方法は、スコープ中に制御フローを妥当性確認するために測定値を所定の値と比較することをさらに含む。
【0004】
態様では、少なくとも1つのプロセッサと、当該少なくとも1つのプロセッサに結合された少なくとも1つのコンピュータ可読記憶媒体とを有する集積回路を含むシステムも開示される。コンピュータ可読記憶媒体は、少なくとも1つのプロセッサによって実行されると、プロセッサに上述される方法を実行させる命令を含む。
【0005】
この概要は、コンピューティングシステムで制御フローを妥当性確認するための制御フロー整合性測定を実施するための簡略化された概念を紹介するために提供され、この概念については、詳細な説明でさらに後述されかつ図面に示されている。この概要は、特許請求された主題の本質的な特徴を特定することを意図するものではなく、特許請求された主題の範囲を判断する際に使用することも意図するものではない。
【0006】
本明細書では、コンピューティングシステムで制御フローを妥当性確認するための制御フロー整合性測定の1つまたは複数の態様の詳細について、以下の図面を参照して説明されており、種々の事例で同じ番号が使用されている場合は、同様の特徴または構成要素を示す場合がある。
【図面の簡単な説明】
【0007】
【
図1】制御フロー整合性測定を実施することができる例示のコンピューティングデバイスを含む例示の動作環境を示す図である。
【
図2】セキュリティ指向の集積回路として実装された集積回路部品を示す図である。
【
図3】コンピューティングシステムで制御フローを妥当性確認するための制御フロー整合性測定を実施するように構成されたソースコードの例示的な実施態様を示す図である。
【
図4】スコープ中に制御フローを測定するための測定値を作成するように構成されたフォールト検出マネージャを示す図である。
【
図5】式の戻り値を生成しかつ測定値を変更するように構成されたフォールト検出マネージャを示す図である。
【
図6】スコープ内の命令の実行中に制御フローを妥当性確認するために測定値を所定の値と比較するように構成されたフォールト検出マネージャを示す図である。
【
図7】コンピューティングシステムで制御フローを妥当性確認するために制御フロー整合性測定を維持するように構成されたフォールト検出マネージャの例示的な実施態様を示す図である。
【
図8】コンピューティングシステムで制御フローを妥当性確認するために制御フロー整合性測定を実施する方法の例を示す図である。
【発明を実施するための形態】
【0008】
概要
コンピューティングシステムは、欠陥、攻撃、及びその他の危険にさらされる可能性があるイベントに対する保護対策を提供するセキュリティ回路及びソフトウェアを備えた集積回路を含むことが多い。セキュリティ回路及びソフトウェアは、多数のセキュリティパラダイムを実装し得る。例えば、ファームウェアの更新中に、公開鍵暗号化標準(PKCS)に準拠したセキュリティ回路及びソフトウェアは、デジタル署名(例えば、暗号署名)を使用してコンピューティングデバイスが受信しかつ実行するデータの信頼性及び整合性を検証する場合がある。デジタル署名方式は、デジタルメッセージまたは文書を妥当性確認するために用いられる数学的方式である。有効なデジタル署名により、受信者は、メッセージが既知の送信者によって生成されたこと(「信頼性」)、及び送信中のどこかで改ざんされていないこと(「整合性」)を確信できる。そうすることで、セキュリティ回路及びソフトウェアは、情報が不注意に公開される、または一部の機能が有害あるいは不正な方法で使用される機会を減らす。
【0009】
今日のコンピューティング環境では、悪意のある攻撃者が多数の攻撃ベクトルを使用して、無数のレベルでコンピューティングデバイスを攻撃する可能性がある。例として、フォールト注入攻撃は、これらのセキュリティパラダイムの多くがもたらす保護を低下させる。例えば、フォールト注入攻撃は、多くのシステムセキュリティ特徴を回避し、システム挙動を変更して悪意のある目的を達成し、及び/または機密情報を暴露する可能性がある。フォールト注入攻撃を使用すると、攻撃者はグリッチ(例えば、システムにおける突然の一時的な注入されたフォールト)を使用して、電子部品(例えば、中央処理装置)のプログラムされた動作を間接的または直接的に変更できる。このような攻撃は、コンピューティングデバイスを「操作不可能にする」ときがあり得るが、他の事例では、正確で標的型の攻撃によってセキュリティ上の脅威にさらされる可能性がある。例えば、標的型のフォールト注入攻撃によって、中央処理装置がデジタル署名認証を飛ばしてしまう可能性がある。その結果、コンピューティングデバイスは検証されていないデータまたはコードを受信しかつ実行し得る。
【0010】
分岐命令を使用してセキュリティレベルのチェックをスキップすることができるため、フォールト注入攻撃を使用する悪意のある攻撃者は分岐命令を頻繁に標的にする。単項エラー処理プログラミング構造内で用いられる分岐命令はとりわけ脆弱である。例えば、分岐命令を有する関数を実行するプロセッサは、囲まれた関数がエラーを返すと、関数の外部に制御を返す場合がある。この分岐命令は、実行が成功したことを示す戻り値とエラーチェックとの間の唯一の制御依存関係であるため(例えば、両者の間にはデータ依存関係は存在しない)、これによって攻撃者は早期リターンをスキップすることによって関数信号を成功させることができる。
【0011】
このような危険にさらされるイベントからコンピューティングシステムを守るために、本明細書では、コンピューティングシステムで制御フローを妥当性確認するための制御フロー整合性測定を対象とした技術及び装置について説明する。以下の考察では、動作環境、動作環境で用いられ得る技術、方法例、及び動作環境の構成要素が組み込まれ得るシステムオンチップ(SoC)について説明する。
【0012】
動作環境
以下の考察では、動作環境、動作環境で用いられ得る技術、及び動作環境の構成要素が組み込まれ得るさまざまなデバイスまたはシステムについて説明する。本開示の文脈では、動作環境は例としてのみ参照される。
【0013】
図1は、制御フロー整合性測定を実施することができる例示のコンピューティングデバイス102を含む例示の動作環境100を示す。コンピューティングデバイス102の例には、スマートフォン102-1、タブレットコンピュータ102-2、ラップトップコンピュータ102-3、スマートグラス102-4、コンピュータ化された時計102-5、及び自動車102-6が含まれる。示されていないが、コンピューティングデバイス102は、モバイルステーション(例えば、固定またはモバイルSTA)、モバイル通信デバイス、クライアントデバイス、ホームオートメーション及び制御システム、エンターテイメントシステム、ゲームコンソール、パーソナルメディアデバイス、健康モニタリングデバイス、ドローン、カメラ、無線インターネットアクセス及びブラウジングが可能なインターネット家電、IoTデバイス、セキュリティシステム、ならびにサーバまたはデータセンタデバイスなどのいずれかとして実装されてもよい。コンピューティングデバイス102が、ウェアラブル、非ウェアラブルだがモバイル、または比較的固定的なもの(例えば、デスクトップ、アプライアンス)であり得ることに留意されたい。また、コンピューティングデバイス102は、自動車内またはラップトップコンピュータへの付属品としてなど、多くのコンピューティングデバイス102または周辺機器と共に使用、またはこれらの内部に組み込みできることに留意されたい。コンピューティングデバイス102は、コンピューティングシステムで制御フローを妥当性確認するために制御フロー整合性測定を維持するように構成された1つまたは複数のマクロを実装し得る。コンピューティングデバイス102は、他の機能を提供し得る、または明確さまたは視覚的な簡潔さのために
図1から省略された構成要素またはインターフェースを含み得る。
【0014】
コンピューティングデバイス102は、コンピューティングデバイスの構成要素及び相互接続が組み込まれるプリント回路基板アセンブリ104(PCBA104)を含む。代替的または追加的に、コンピューティングデバイス102の構成要素は、フレキシブル回路材料または他の絶縁材料などの他の基板上に組み込まれることが可能である。図示されていないが、コンピューティングデバイス102は、ハウジング、さまざまなヒューマン入力デバイス、ディスプレイ、バッテリパック、及びアンテナなども含む場合がある。一般的に、コンピューティングデバイス102の電気部品及び電気機械部品は、プリント回路基板(PCB)上に組み立てられてPCBA104を形成する。PCBA104のさまざまな構成要素(例えば、プロセッサ及びメモリ)は次いで、プログラムされ、かつテストされて、PCBA104の精確な機能を検証する。PCBA104は、コンピューティングデバイス102の他の部分と接続される、またはハウジング内に組み立てられる。
【0015】
示されるように、PCBA104は、1つまたは複数のプロセッサ106とコンピュータ可読媒体108とを含む。プロセッサ(複数可)106は、任意の適したシングルコアまたはマルチコアプロセッサ(例えば、アプリケーションプロセッサ(AP)、デジタル信号プロセッサ(DSP)、中央処理装置(CPU)、グラフィックス処理ユニット(GPU))であり得る。プロセッサ(複数可)106は、コンピュータ可読媒体108内に記憶された命令またはコマンドを実行して、コンピュータ可読記憶媒体内に記憶されているオペレーティングシステム110及びフォールト検出マネージャ112を実装するように構成され得る。コンピュータ可読記憶媒体は、ランダムアクセスメモリ(RAM、ダイナミックRAM(DRAM)、不揮発性RAM(NVRAM)、またはスタティックRAM(SRAM))、読み取り専用メモリ(ROM)、またはフラッシュメモリ)、ハードドライブ、SSD、または電子命令を記憶するのに適した任意のタイプの媒体など、それぞれがコンピュータシステムバスに結合された1つまたは複数の非一時的ストレージデバイスを含み得る。「結合」という用語は、直接接触している(物理的、電気的、磁気的、光学的など)2つ以上の要素、または互いに直接接触していないが、互いに協働、通信、及び/または相互作用している2つ以上の要素を指す場合がある。
【0016】
PCBA104はまた、I/Oポート114及び1つまたは複数の通信システム116を含み得る。I/Oポート114によって、コンピューティングデバイス102は他のデバイスまたはユーザとインタラクトできるようになる。I/Oポート114は、USBポート、オーディオポート、シリアルATA(SATA)ポート、PCI-expressベースのポートもしくはカードスロット、セキュアデジタル入出力(SDIO)スロット、及び/またはその他のレガシーポートなどの内部ポートまたは外部ポートの任意の組み合わせを含み得る。ヒューマン入力デバイス(HID)、外部コンピュータ可読記憶媒体、またはその他の周辺機器など、さまざまな周辺機器がI/Oポート114と動作可能に結合され得る。
【0017】
通信システム116は、受信データ、送信データ、または本明細書に説明されるその他の情報などのデバイスデータの通信を可能にし、かつ1つまたは複数のネットワーク及びこれに接続されるその他のデバイスへの接続を提供し得る。通信システムの例には、NFCトランシーバ、さまざまなIEEE802.15(Bluetooth(登録商標))規格に準拠したWPAN無線、さまざまなIEEE802.11(WiFi(登録商標)規格のいずれかに準拠したWLAN無線、携帯電話用のWWAN(3GPP(登録商標)準拠)無線、さまざまなIEEE802.16(WiMAX(登録商標))規格に準拠した無線メトロポリタンエリアネットワーク(WMAN)無線、赤外線通信協会(IrDA)プロトコルに準拠した赤外線(IR)トランシーバ、及び有線ローカルエリアネットワーク(LAN)イーサネット(登録商標)トランシーバが含まれる。通信システム116を介して通信されるデバイスデータは、コンピューティングデバイス102が通信している通信プロトコルまたは規格に応じてパケット化またはフレーム化される場合がある。通信システム116は、ローカルネットワーク、イントラネット、またはインターネットを介した通信用のイーサネット(登録商標)インターフェースまたは光ファイバインターフェースなどの有線インターフェースを含み得る。代替的に、または追加的に、通信システム116は、無線LAN、セルラーネットワーク、またはWPANなどの無線ネットワークを介した通信を容易にする無線インターフェースを含み得る。
【0018】
示されていないが、コンピューティングデバイス102は、デバイス内のさまざまな構成要素を結合するシステムバス、相互接続、クロスバー、またはデータ転送システムも含むことができる。システムバスまたは相互接続は、メモリバスもしくはメモリコントローラ、周辺バス、ユニバーサルシリアルバス、及び/またはさまざまなバスアーキテクチャのいずれかを利用するプロセッサバスもしくはローカルバスなど、種々のバス構造のいずれか1つまたは組み合わせを含むことができる。
【0019】
さらに、集積回路部品118は、PCBA104に動作可能に結合され得る。実施態様において、集積回路部品118は、汎用プロセッサ、システムオンチップ(SoC)、または強化されたファームウェアを有するセキュリティ指向の集積回路(例えば、シリコンルートオブトラスト(RoT)チップ)として実装可能である。実施態様において、集積回路部品118は、コンピュータ可読媒体108の少なくとも一部分を含む、またはコンピュータ可読記憶媒体に結合される場合がある。例えば、集積回路部品118は、フォールト検出マネージャ112を含み得る。
【0020】
コンピューティングデバイス102はまた、1つまたは複数の電源として実装できる電源システムと、コンピューティングデバイス102の集積回路部品118及び回路に電力を提供するように構成される配電網とを含み得る。
【0021】
ここで、セキュリティ指向の集積回路202として実装された集積回路部品(例えば、集積回路部品118)を示す
図2を検討する。しかしながら、これはほんの一例であり、集積回路部品は、マイクロプロセッサ、マイクロコントローラ、及びSoCなどとして実装される場合がある。実施態様において、セキュリティ指向の集積回路202は、暗号化ソフトウェア(例えば、ハッシュベースの暗号化関数)及びハードウェアモジュール(例えば、強化されたメモリ保護ユニット)を含み得る。制御フローの測定値を維持することを含む、本明細書に説明される技術は、セキュリティ指向の集積回路202などの1つまたは複数のセキュリティ指向の構成要素を含む、さまざまなコンピューティングシステムのいずれか内に統合され得る。
【0022】
図2に示されるように、セキュリティ指向の集積回路202は、算術論理ユニット206(ALU206)を有するプロセッサ204、レジスタファイル208、制御ユニット210、及び入力/出力(I/O)ユニット212を含む。ALU206は、受信データに対して算術演算及び論理演算を実行するように構成され得る。レジスタファイル208は、プログラムまたは関数の処理中に迅速にデータにアクセスできるように構成された高速の半一時的メモリとして機能するプロセッサレジスタ(例えば、制御レジスタ)の配列であり得る。レジスタファイル208はALU206に密に結合され得る。データへのアクセスをさらに容易にするために、レジスタファイル208は、複数の読み取りポートまたは複数の書き込みポートを含んで、ALU206及び/または実行ユニットが1サイクルで複数のオペランドを同時に引き出すことができるようになり得る。レジスタファイル208は、データのビットの読み取り及び書き込みを加速させるためにフリップフロップから形成され得る。制御ユニット210は、システム(複数可)全体を通したデータの流れを制御するように構成され得る。I/Oユニット212は、デバイスまたはセキュリティ指向の集積回路202の他の構成要素と動作可能にインターフェース接続されたポートを含み得る。
【0023】
図2にさらに示されるように、セキュリティ指向の集積回路202は、セキュリティ強化されたROM214を含み得る。セキュリティ強化されたROM214は、フォールト検出マネージャ112を含むコンピュータ可読媒体108の少なくとも一部分を含み得る。一例では、フォールト検出マネージャ112は実行可能コードとして実装できる。実行可能コードは、ソースコード(例えば、高級言語スクリプト)のマクロ(例えば、特定の計算命令を挿入するためのソースコードディレクティブ)を実行可能コード(例えば、低レベルの機械語)に変換するコンパイラによって生じさせ得る。ソースコードにおいてマクロのセットとして実装される(例えば、1つまたは複数のヘッダファイルとして含まれる)フォールト検出マネージャ112は、関数のようなマクロ、チェーンマクロ、及び/またはオブジェクトのようなマクロを含む場合がある。ソースコードは、他のプログラム、関数、及びスクリプトなどをさらに含む場合がある。
【0024】
実施態様において、セキュリティ強化されたROM214はプロセッサ204に動作可能に結合され得る。このような構成では、プロセッサ204は、セキュリティ強化されたROM214に記憶された実行可能コード(例えば、読み取り専用命令)を実行できる。その結果、プロセッサ204は、フォールト検出マネージャ112の命令を実行し得る。
【0025】
態様において、フォールト検出マネージャ112のソースコードは、変数、配列、オブジェクト、サブルーチン、ループ、及び関数などを含み得る。例えば、関数はタスクを実行してリターン値を出力する命令のセットである。本明細書に説明されるリターン値(「戻り値」)は、関数、サブルーチン、プログラムなどがタスク(例えば、計算、文字列操作)の実行中または実行後に出力する文字列、ブール値、及び整数などの任意のデータ型の値を指す。一例では、戻り値は数値(例えば、16進数)または英数字コードを含むエラーコードであり得る。本明細書にさらに説明されるように、スコープとは、関数、サブルーチン、及びプログラムなどを含み、リターン値で終了するコードブロックを指す。
【0026】
いくつかの例では、スコープの実行中に、フォールト検出マネージャ112は、スコープの実行中に発生したエラーにより、プロセッサ204に、さらに他の実行(例えば、スコープ内、スコープ外)を停止するように命令し得る。さらに、フォールト検出マネージャ112は、タスクの完了に失敗したことを示すエラーコード(「障害エラーコード」)を含む戻り値を出力するようにプロセッサ204に命令し得る。他の例では、スコープの実行中に、フォールト検出マネージャ112は、スコープの実行中にエラーが発生しなかった場合、タスクの完了に成功したことを示すエラーコード(「成功エラーコード」)を含む戻り値を出力するようにプロセッサ204に命令し得る。
【0027】
一例では、セキュリティ強化されたROM214を有するセキュリティ指向の集積回路202は、署名チェック関数の実行可能命令を含み得る。署名チェック関数は、デジタル署名取得サブ関数の実行及びデジタル署名確認サブ関数の実行を含むタスクをプロセッサに実行させ得る。署名チェック関数は、成功を示すエラーコード、ひいては妥当性確認済みのデジタル署名を有する戻り値(「最終戻り値」)を出力するように設計され得る。
【0028】
プロセッサ204が署名チェック関数を実行している間、デジタル署名確認サブ関数の実行中にエラーが発生する場合がある。例えば、デジタル署名から取得されたメッセージダイジェストと、デジタル署名に対して妥当性確認されている対応するメッセージのダイジェストとを比較している間に、エラーが生じる場合がある。その結果、デジタル署名確認サブ関数は障害エラーコードを有する値を返す場合がある。例として、署名チェック関数は、単項エラー処理構造で設計され得る。このような実施態様では、障害エラーコードを有する戻り値は、分岐命令における成功エラーコードを有する期待される戻り値と比較される。比較が失敗した場合、署名チェック関数は早期にリターンする。その他の場合、比較が成功した場合、プログラムは動作を続行する。このように、署名チェック関数のさらに他の動作及び実行が停止され得、署名チェック関数が早期に終了する(「早期リターン」)場合がある。署名チェック関数の出力は、デジタル署名確認サブ関数の障害エラーコードを有する戻り値である。
【0029】
攻撃者は、フォールト注入攻撃を使用して、分岐命令を標的にして、コンピューティングシステムの意図された制御フロー(例えば、命令型プログラムの個々のステートメント、命令、または関数呼び出しが実行または評価される順序)を変更しようとする場合がある。場合によっては、分岐命令を標的としたフォールト注入攻撃によって、デジタル署名確認サブ関数が早期リターンをスキップすることによって成功を知らせることで、署名チェック関数が動作及び実行を続行し得る。
【0030】
フォールト注入攻撃(「改ざん」)が発生したときに、スコープ(例えば、署名チェック関数)が成功エラーコードを有する最終戻り値を出力するのを防ぐために、セキュリティ強化されたROM214は、フォールト検出マネージャ112の命令を実行し得る。
【0031】
例示的な技術
図3は、コンピューティングシステムで制御フローを妥当性確認するための制御フロー整合性測定を実施するように構成されたソースコード300の例示的な実施態様を示す。ある態様では、ソースコード300は、マクロ302のセットとして実装されたフォールト検出マネージャ(例えば、フォールト検出マネージャ112)を含む。
図3に示される1つの例では、ソースコード300は、関数(例えば、メイン関数304)の外部で定義されたマクロ302を含む。他の例では、フォールト検出マネージャの技術は、関数(例えば、メイン関数304)内に適用され(例えば、呼び出され、定義され)ることが可能である。
【0032】
示されるように、マクロ302は、1つまたは複数のヘッダファイルとしてソースコード300に含まれ得る。ソースコード300は、(例えば、マクロ302内に)1つまたは複数の期待値(例えば、ハードコードされた値)を含み得る。期待値は、指紋関数及び/またはビット演算を含むさまざまな数学演算のいずれかを使用して事前に計算され得る。いくつかの例では、数学演算は暗号化されていない。例えば、数学演算は、非暗号化指紋関数を含み得る。少なくともいくつかの例では、数学演算によって暗号化メッセージダイジェストが生じる場合がある。例えば、数学演算は、暗号化指紋関数を含み得る。
【0033】
ソースコード300は、メイン関数304(例えば、署名チェック関数)をさらに含み得る。態様において、プロセッサ(例えば、プロセッサ204)は、実行可能コード(例えば、コンパイルされたソースコード300)を実行して、メイン関数304の演算を実施することができる。メイン関数304は、他の関数への呼び出しを含み得る。例えば、メイン関数304は、定義されたマクロ302を呼び出されたサブ関数の戻り値に適用することによってフォールト検出を実施し得る。そうすることで、プロセッサがメイン関数304を実行し、かつ呼び出されたサブ関数の戻り値にマクロ302を適用した結果、プロセッサはフォールト検出マネージャを実装し得る。このように、フォールト検出マネージャは、メイン関数304の実行中に制御フローを測定できる。例えば、メイン関数304は、マクロ302で定義された関数CFI_BEGIN306への呼び出しを含み得る。
【0034】
図4を参照すると、フォールト検出マネージャは、スコープ中に制御フローを測定するための測定値を作成する。1つの例では、測定値400を作成すると、プロセッサは、変数の名称、変数のデータ型、及び/または変数の値を記憶するためにメモリ(例えば、RAM)において空間を割り当て得る。測定値400の作成は、ソースコード300において、例えば、変数の初期化、変数の代入、及び/または変数の宣言を通して実現され得る。測定値は、数値、英数字、またはアルファベットの値を含み得る。さらに、測定値はローカル変数またはグローバル変数として実現され得る。一実施態様では、ソースコード300内の測定値は、longのデータ型を持つものとして宣言され、初期値(例えば、秘密値)が代入され、メモリ(例えば、レジスタファイル208)に記憶され得る。測定値を宣言することは、402では、スコープ制御フロー測定を開始するのに有効である。例えば、スコープの制御フローの測定を維持するために測定値が作成され得る。
【0035】
一時的に
図3に戻ると、メイン関数304内でCFI_BEGIN306の呼び出しの後に、ソースコード300には、マクロ302で定義された関数CFI_RETURN_IF_ERROR308の呼び出しが含まれる。
図5を参照すると、フォールト検出マネージャは式の戻り値を生成し、かつ測定値を変更する。
【0036】
関数CFI_RETURN_IF_ERROR308は、500において、1つまたは複数の式(例えば、関数呼び出し)を受け入れる。例えば、関数CFI_RETURN_IF_ERROR308は、デジタル署名を取得するための関数呼び出しを受け入れることができる。関数CFI_RETURN_IF_ERROR308はさらに、502において式を計算することができる。例えば、引数を計算するには、ALU206がレジスタファイル208にアクセスすること、またはPCBA104に動作可能に結合されたコンピューティングデバイス102における別のメモリストレージデバイスにアクセスすることを伴う場合がある。式の計算の結果として、式の戻り値が生成される。式の戻り値は、障害エラーコードまたは成功エラーコードを含み得る。
【0037】
関数CFI_RETURN_IF_ERROR308は、504で、プロセッサに式の戻り値をメモリ(例えば、レジスタファイル208)に記憶するように指示する。関数CFI_RETURN_IF_ERROR308は、506において、測定値を得る。例えば、測定値を得るには、ALU206がレジスタファイル208にアクセスすることを伴う場合がある。関数CFI_RETURN_IF_ERROR308は、508において、戻り値及び測定値に対して1つまたは複数の数学演算を実行して計算値を生成する。態様において、数学演算を実行することは、非暗号化の合成指紋アルゴリズム、非暗号化指紋アルゴリズム(例えば、Fowler-Noll-Voハッシュ関数)、または本明細書では単に指紋アルゴリズムと称される暗号化指紋アルゴリズムのいずれかを利用することを含み得る。
【0038】
例示的な実施態様では、非暗号化の合成指紋アルゴリズムは、式の戻り値と測定値とを組み合わせた後、組み合わせられた入力をハッシュする。次いで、連結を含む非通信関数を使用して、式の戻り値と測定値とが組み合わせられる。他の実施態様では、式の戻り値及び測定値は、シリアル化を含む注入関数を使用して組み合わせられる。別の実施態様では、非暗号化の合成指紋アルゴリズムは、組み合わせられた入力を固定サイズのダイジェスト値(例えば、ハッシュ、ダイジェスト出力、指紋)にマッピングして、計算値を生成する。
【0039】
他の実施態様では、またはそれに加えて、数学演算の実行には、式の戻り値と測定値とに対する乗算、シフト、加算、及び/またはビット演算を伴う場合がある。さらに別の実施態様では、前述の数学演算の1つまたは複数を実行した後、数学演算によってもたらされた結果の値のハミング重みが判断され得る。このような技術を通して数学演算を実行すると、小さな変化を大きな変化(例えば、雪崩効果)に増幅することができる。
【0040】
関数CFI_RETURN_IF_ERROR308は、510において、測定値を変更する。例えば、フォールト検出マネージャは、式の戻り値の生成に応答して計算値に基づいて、測定値を変更する。1つの例では、関数CFI_RETURN_IF_ERROR308は、測定値(例えば、以前の測定値))を維持する変数を計算値に再定義する。そうすることで、フォールト検出マネージャは、スコープの実行中に測定値を維持(例えば、更新、変更)することができる。
【0041】
関数CFI_RETURN_IF_ERROR308は、512において、分岐命令における式の戻り値を比較する。例えば、期待される成功エラーコードを有する分岐命令は、さまざまな条件文のいずれかを使用して式の戻り値と比較され得る。比較が失敗した(例えば、式の戻り値が期待される成功エラーコードを示していない)場合、関数CFI_RETURN_IF_ERROR308は、メイン関数におけるさらに他の命令を飛ばして、早期にリターンし得る(「早期リターン」)。比較が成功した(例えば、式の戻り値が期待される成功エラーコードを示す)場合、プロセッサはメイン関数におけるさらに他の命令の実行を継続し得る。
【0042】
一時的に
図3に戻ると、メイン関数内でCFI_RETURN_IF_ERROR308の呼び出しの後に、ソースコード300には、関数CFI_CHECK_ALL_OK310の呼び出しが含まれる。
図6を参照すると、フォールト検出マネージャは、スコープ内の命令の実行中に制御フローを妥当性確認するために測定値を所定の値と比較する。
【0043】
関数CFI_CHECK_ALL_OK310は、600において、仮引数として数を受け入れる。数は静的に既知であり得る(例えば、コンパイル時に既知であり、メイン関数304においてハードコード可能である)。いくつかの例では、CFI_CHECK_ALL_OK310は、数に関連する任意のデータ型または変数を受け入れることができる。さらに他の例では、その数は(例えば、フォールト検出マネージャに対して)事前に決定され、メイン関数(例えば、スコープ)内の関数CFI_RETURN_IF_ERROR308への所定の呼び出し回数に対応し得る。少なくともいくつかの例では、関数CFI_RETURN_IF_ERROR308への呼び出し回数は、CFI_CHECK_ALL_OK310が数を受け入れるより前に、1つまたは複数の条件文(例えば、if-else文)または反復文(例えば、forループ、do whileループ)を実行することに基づいて事前に決定され得る。
【0044】
602では、関数CFI_CHECK_ALL_OK310は測定値を所定の値と比較する。例えば、数600を受け入れることに応答して、関数CFI_CHECK_ALL_OK310は、関数CFI_RETURN_IF_ERROR308への所定の呼び出し回数に対応する受け入れられた数に基づく所定の値を取得する(例えば、算出する、メモリにアクセスする)。関数CFI_CHECK_ALL_OK310は、602において、1つまたは複数の条件文を使用して測定値を所定の値と比較する。そうすることで、フォールト検出マネージャは、関数CFI_RETURN_IF_ERROR308の1回または複数回の実行中に、1つまたは複数の分岐命令からの早期リターンがスキップされなかったことを検証する。
【0045】
一例では、関数CFI_RETURN_IF_ERROR308がメイン関数内で3回呼び出されて実行されるように事前に決定されている場合、受け入れられる数は値3に対応するように事前に決定できる。値3に基づいて関数CFI_CHECK_ALL_OK310によって取得された所定の値が測定値に対応しない(例えば、等しくない、示さない)場合、そのようなインスタンスは、メイン関数(例えば、スコープ)における命令の実行中に1つまたは複数の早期リターンがスキップされたことを示し得る。所定の値と測定値との比較が失敗した場合、フォールト検出マネージャは、割り込みを生成する、アラートハンドラに制御を渡す、ある特定のデータへのアクセスを防止する、または集積回路の少なくとも一部をシャットダウンするなど、改ざんに対応できる。
【0046】
図3に戻ると、所定の値と測定値との比較が成功した場合、メイン関数はスコープ戻り値312を出力し得る。さらに他の例では、所定の値と測定値との比較が失敗した場合、フォールト検出マネージャは、直ちにシャットダウンするのではなく、改ざんによる障害を示すスコープ戻り値を返すように構成され得る。次いで、フォールト検出マネージャは、改ざんによる障害を示すスコープ戻り値を使用して、攻撃に対応できるようにし得る。さらに、このような実施態様は分岐がない場合があり、攻撃者が克服することが困難になる。例えば、フォールト検出マネージャは、セキュリティが強化された集積回路をシャットダウンするのではなく、保護機能を実装することによって改ざんに対応し得る。
【0047】
本明細書に説明される技術により、制御フローの測定値は、全ての式の戻り値を測定値に取り入れる(例えば、ハッシュする、組み合わせる)ことによって、早期リターン決定(例えば、早期リターン714)とスコープ戻り値との間に明示的なデータ依存関係を作り出す。さらに、フォールト検出マネージャは、コンパイラの最適化なしでコンピューティングシステム内に実装できる。少なくともいくつかの例では、本明細書に説明される技術を使用するコンピューティングシステムは、最適化されたコード(例えば、ソースコード)を実装できるが、それらの最適化は、例えば、測定値を計算するために実行される算出の特定の順序付けに干渉しない場合がある。さらに、本明細書に説明される技術を使用するコンピューティングシステムは、コンパイラを変更することなくフォールト検出マネージャを実装できる。
【0048】
例示的な実施態様
このセクションでは、コンピューティングシステムで制御フローを妥当性確認するための制御フロー整合性測定の例示的な実施態様について説明する。
図7は、コンピューティングシステムで制御フローを妥当性確認するために制御フロー整合性測定を維持するように構成されたフォールト検出マネージャの例示的な実施態様700を示す。
【0049】
ある実施態様では、
図7に示されるように、フォールト検出マネージャ(例えば、フォールト検出マネージャ112)は変数702を初期化し得る。変数を初期化することは、変数に初期測定値を代入することを含み得る。初期値は、セキュリティ強化されたメモリ(例えば、ROM214)に記憶された秘密値であり得る。変数を初期値と等しくなるように初期化することは、スコープ704の実行前またはスコープ704の実行中の任意の時点で実現され得る。
【0050】
次いで、フォールト検出マネージャは、式の戻り値を生成するのに有効な式706を計算し得る。フォールト検出マネージャは、次いで、非暗号化指紋アルゴリズム(例えば、合成指紋アルゴリズム)を使用して、式の戻り値を測定値と共にハッシュして708、計算値を生成することができる。計算値の生成に応答して、フォールト検出マネージャは変数を計算値に再定義できる。
【0051】
ハッシュ708及び/または変数の再定義710の前、間、または後に、フォールト検出マネージャは式の戻り値を比較し得る712。例えば、フォールト検出マネージャは、式の戻り値が式の計算が成功したことまたは失敗したことを示すかを判断し得る。比較712が失敗した場合、フォールト検出マネージャは早期にリターンする場合がある714。比較712が成功した場合、フォールト検出マネージャは測定値を所定の値と比較できる716。いくつかの例では、フォールト検出マネージャは、複数の式に対して、式706の計算、ハッシュ708、再定義710、及び比較712を繰り返し得る。
【0052】
比較716が失敗した場合、フォールト検出マネージャはフォールト注入攻撃を検出できる。比較716が成功した場合、フォールト検出マネージャはスコープ戻り値を返すことができる。
【0053】
例示的な方法
このセクションでは、コンピューティングシステムで制御フローを妥当性確認するための制御フロー整合性測定を実施する例示的な方法について説明する。この方法は、実行される動作を指定するブロックのセットとして示されるが、各々のブロックによって動作を実行するために示された順序または組み合わせに必ずしも限定されるわけではない。さらに、1つまたは複数の動作のいずれかを繰り返し、組み合わせ、再編成し、または連係して、幅広い追加及び/または代替の方法を提供し得る。以下の考察の一部分では、
図2~
図7に詳述されている例示の動作環境100及びエンティティが参照される場合があるが、これらへの参照は例示にすぎない。これらの技術は、1つのデバイス上で動作する1つのエンティティまたは複数のエンティティによって行われることに限定されない。
図8は、コンピューティングシステムで制御フローを妥当性確認するための制御フロー整合性測定を実施する例示的な方法800を示す。
【0054】
802では、フォールト検出マネージャ(例えば、フォールト検出マネージャ112)は、スコープ中に制御フローの測定値を維持する。例えば、フォールト検出マネージャは、代入値を有する変数をメモリに記憶することができる。別の例では、フォールト検出マネージャは変数を作成(例えば、宣言)し、かつそれに値を代入することができる。
【0055】
804では、フォールト検出マネージャは、スコープ中に、式の計算に対する式の戻り値を生成する。式の戻り値は、式の計算が成功したことまたは式の計算が失敗したことを示し得る。
【0056】
806では、フォールト検出マネージャは、スコープ中に式の戻り値を生成することに応答して、計算値に従って測定値を変更する。計算値は、測定値及び式の戻り値に基づいてよい。例えば、測定値を変更(例えば、更新)することは、測定値を計算値に等しく設定することを含むことができる。
【0057】
808では、フォールト検出マネージャは測定値を所定の値と比較して、スコープ中に制御フローを妥当性確認する。例えば、フォールト検出マネージャは、測定値が所定の値と等しくないかどうかを判断し、その結果、コンピューティングシステムでの改ざん(例えば、フォールト注入攻撃)を特定することができる。
【0058】
システムオンチップ
図9は、コンピューティングシステムで制御フローを妥当性確認するために制御フロー整合性測定のさまざまな態様を実装できるSoC900として実装された集積回路部品(例えば、集積回路部品118)を示す。SoC900は、同じ半導体基板上に製造される構成要素を含む単一のチップであり得る。代替的には、SoCは、エポキシ樹脂で接着された多数のそのようなチップであり得る。SoC900は、スマートフォン、携帯電話、ネットブック、タブレットコンピュータ、サーバ、無線ルータ、ネットワーク接続ストレージ、カメラ、スマートアプライアンス、プリンタ、セットトップボックス、またはその他の適したタイプのデバイスなど、任意の適したデバイスに実装可能である。
図9のエンティティは、SoCを参照して説明されているが、ASICまたはフィールドプログラマブルゲートアレイ(FPGA)などとして実装されてもよい。
【0059】
SoC900は、本明細書に挙げられているオペレーティングシステムで説明される構成要素を含む電子回路と統合可能である。SoC900は、SoC900のさまざまな構成要素を結合して構成要素間のデータ通信を行う統合データバス(図示せず)も含むことができる。SoC900の統合データバスまたはその他の構成要素は、JTAGポートなどの外部ポートを通して公開またはアクセスされる場合がある。例えば、SoC900の構成要素は、製造の種々の段階で外部ポートを通してテスト、構成、またはプログラム(例えば、フラッシュ)され得る。
【0060】
この例では、SoC900は、コンピュータ可読媒体1102、1つまたは複数のプロセッサ(複数可)904、ハッシュエンジン906、及びI/Oユニット908を含む。コンピュータ可読媒体は、それぞれがコンピュータシステムバスに結合された、RAM((DRAM、NVRAM、またはSRAM)、ROM、またはフラッシュメモリ)などの1つまたは複数の非一時的なストレージデバイス、ハードドライブ、SSD、または電子命令を記憶するのに適した任意のタイプの媒体を含むコンピュータ可読記憶媒体に記憶され得る。
【0061】
SoC900のコンピュータ可読媒体902は、フォールト検出マネージャ(例えば、フォールト検出マネージャ112)の実行可能コードを含み得る。コンピュータ可読媒体902を有するコンピュータ可読記憶媒体に動作可能に結合されたプロセッサ(複数可)904の1つまたは複数は、フォールト検出マネージャの命令を実行し得る。
【0062】
本主題は、構造的特徴及び/または方法上の動作に特有の言語で説明されているが、添付の特許請求の範囲で定義される主題が必ずしも、実行される順序を含めて、本明細書に説明される特定の特徴または動作に限定されないことは理解されたい。
【0063】
追加の例
以下のセクションでは、追加の例が提供される。
【0064】
例1:コンピュータで実行される方法であって、スコープ中に制御フローの測定値を維持することと、前記スコープ中に式の計算の式の戻り値を生成することを含み、前記式の戻り値は前記式の計算が成功したこと、または前記式の計算が失敗したことを示し、当該方法はさらに、前記スコープ中に前記式の戻り値を生成することに応答して、計算値に従って前記測定値を変更することを含み、前記計算値は前記測定値及び前記式の戻り値に基づき、当該方法はさらに、前記スコープ中に前記制御フローを妥当性確認するために前記測定値を所定の値と比較することを含む、コンピュータで実行される方法。
【0065】
例2:前記測定値を維持するより前に、前記測定値を記憶するように構成された変数を作成することをさらに含む、例1に記載のコンピュータで実行される方法。
【0066】
例3:前記測定値を維持するより前に、前記測定値を初期値に等しく設定するのに有効な、前記測定値を記憶するように構成された前記変数に前記初期値を代入することをさらに含む、例2に記載のコンピュータで実行される方法。
【0067】
例4:前記初期値はセキュリティ強化された読み取り専用メモリに記憶された秘密値である、例3に記載のコンピュータで実行される方法。
【0068】
例5:前記変数を作成することはローカル変数を宣言することを含む、いずれかの先行例に記載のコンピュータで実行される方法。
【0069】
例6:前記測定値を更新することは、前記測定値を前記計算値に等しく設定することを含む、いずれかの先行例に記載のコンピュータで実行される方法。
【0070】
例7:前記スコープは複数の式を含む、いずれかの先行例に記載のコンピュータで実行される方法。
【0071】
例8:前記スコープは関数を含み、前記複数の式は関数呼び出しを含む、例7に記載のコンピュータで実行される方法。
【0072】
例9:前記スコープ中に、前記複数の式のそれぞれについて前記生成すること及び前記更新することを繰り返すことをさらに含む、例7または8に記載のコンピュータで実行される方法。
【0073】
例10:前記測定値を前記所定の値と比較することに応答して、前記スコープの実行が成功したこと、または前記スコープの実行が失敗したことを示すスコープ戻り値を返すことをさらに含む、いずれかの先行例に記載のコンピュータで実行される方法。
【0074】
例11:前記スコープ戻り値及び前記式の戻り値は少なくとも1つのエラーコードを含む、例10に記載のコンピュータで実行される方法。
【0075】
例12:1つまたは複数の条件分岐命令に基づいて、前記式の戻り値が前記式の計算が失敗したことを示すと判断することをさらに含む、例10または11に記載のコンピュータで実行される方法。
【0076】
例13:前記式の戻り値が前記式の計算が失敗したことを示すと判断することに応答して、前記スコープのさらに他の実行を中止することと、前記スコープの前記実行が失敗したことを示す前記スコープ戻り値を返すこととをさらに含む、例12に記載のコンピュータで実行される方法。
【0077】
例14:ハッシュ関数を使用して前記計算値を生成することをさらに含む、いずれかの先行実施例に記載のコンピュータで実行される方法。
【0078】
例15:前記ハッシュ関数は、非暗号化の合成指紋アルゴリズムを含み、前記計算値を生成することは、連結を含む非可換関数、またはシリアル化を含む注入関数の少なくとも1つを使用して2つの入力を共に組み合わせることと、前記組み合わせられた入力を固定サイズのダイジェスト値にマッピングすることと、を含む、例14に記載のコンピュータで実行される方法。
【0079】
例16:前記計算値に従って前記測定値を更新することは、1つまたは複数の数学演算またはビット演算を通して前記測定値を操作することを含む、いずれかの先行例に記載のコンピュータで実行される方法。
【0080】
例17:前記所定の値は、前記測定値を維持するより前に算出され、前記スコープ内のいくつかの単項エラーリターン決定に基づいている、いずれかの先行例に記載のコンピュータで実行される方法。
【0081】
例18:前記所定の値はセキュリティ強化されたメモリに記憶される、例17に記載のコンピュータで実行される方法。
【0082】
例19:システムであって、集積回路を備え、当該集積回路は、少なくとも1つのプロセッサと、前記少なくとも1つのプロセッサに結合され、かつ、命令を含む少なくとも1つのコンピュータ可読記憶媒体とを含み、当該命令は、前記少なくとも1つのプロセッサによって実行されると、前記プロセッサに、いずれかの先行実施例に記載の方法を実行させる、システム。
【0083】
例20:前記集積回路は、コンパイラの最適化なしで、いずれかの先行例のいずれか1つに記載の方法を実行するように構成される、例19に記載のシステム。
【0084】
例21:コンピュータで実行される方法であって、デジタル署名を検証するように構成された署名チェック関数の制御フローの測定値を生成することと、前記署名チェック関数のスコープ中に、デジタル署名検証が成功したことを示す式の戻り値を生成することと、前記スコープ中に前記式の戻り値を生成することに応答して、計算値に従って前記測定値を更新することとを含み、前記計算値は前記測定値及び前記式の戻り値に基づき、当該方法はさらに、前記測定値を所定の値と比較することによって前記署名チェック関数の前記制御フローを妥当性確認することを含む、コンピュータで実行される方法。
【0085】
例22:前記式の戻り値は第2の式の戻り値であり、前記コンピュータで実行される方法は、前記第2の式の戻り値を生成するより前に、デジタル署名の獲得が成功したことを示す第1の式の戻り値を生成することをさらに含む、例21に記載のコンピュータで実行される方法。
【0086】
例23:前記測定値を更新すると、前記第1の式の戻り値及び前記第2の式の戻り値のそれぞれについて前記測定値が更新される、例22に記載のコンピュータで実行される方法。
【0087】
例24:前記測定値を更新することは、前記測定値を前記計算値に等しく設定することを含む、いずれかの先行例に記載のコンピュータで実行される方法。
【0088】
例25:前記署名チェック関数の前記制御フローを妥当性確認することに応答して、スコープ戻り値を返すことをさらに含む、いずれかの先行例に記載のコンピュータで実行される方法。
【0089】
例26:前記スコープ戻り値は少なくとも1つのエラーコードを含み、前記少なくとも1つのエラーコードは、前記署名チェック関数の前記制御フローの妥当性確認が成功したこと、または前記署名チェック関数の前記制御フローの妥当性確認が失敗したことを示す、例25に記載のコンピュータで実行される方法。
【0090】
例27:前記式の戻り値は少なくとも1つのエラーコードを含み、前記少なくとも1つのエラーコードはデジタル署名検証が成功したこと、またはデジタル署名検証が失敗したことを示す、例25または26に記載のコンピュータで実行される方法。
【0091】
例28:1つまたは複数の条件分岐命令に基づいて、前記式の戻り値が前記デジタル署名検証の失敗を示すと判断することと、前記式の戻り値が前記デジタル署名検証の失敗を示すと判断することに応答して、前記署名チェック関数の前記スコープのさらに他の実行を停止することと、前記署名チェック関数の前記制御フローの前記妥当性確認の失敗を示す前記スコープ戻り値を返すことと、をさらに含む、例27に記載のコンピュータで実行される方法。
【0092】
例29:ハッシュ関数を使用して前記計算値を生成することをさらに含む、いずれかの先行例に記載のコンピュータで実行される方法。
【0093】
例30:前記ハッシュ関数は、非暗号化の合成指紋アルゴリズムを含み、前記計算値を生成することは、連結を含む非可換関数、またはシリアル化を含む注入関数の少なくとも1つを使用して2つの入力を共に組み合わせることと、前記組み合わせられた入力を固定サイズのダイジェスト値にマッピングすることと、を含む、例14に記載のコンピュータで実行される方法。
【0094】
例31:前記計算値に従って前記測定値を更新することは、1つまたは複数の数学演算またはビット演算を通して前記測定値を操作することを含む、いずれかの先行例に記載のコンピュータで実行される方法。
【0095】
例32:前記所定の値は、前記測定値を維持するより前に算出され、前記スコープ内のいくつかの単項エラーリターン決定に基づいている、いずれかの先行例に記載のコンピュータで実行される方法。
【0096】
例33:前記所定の値はセキュリティ強化されたメモリに記憶される、例32に記載のコンピュータで実行される方法。
【0097】
例34:システムであって、集積回路を備え、前記集積回路は、少なくとも1つのプロセッサと、前記少なくとも1つのプロセッサに結合され、かつ命令を含む少なくとも1つのコンピュータ可読記憶媒体とを含み、当該命令は、前記少なくとも1つのプロセッサによって実行されると、前記プロセッサに、いずれかの先行例に記載の方法を実行させる、システム。
【0098】
例35:前記集積回路はコンパイラの最適化なし前記命令を実行するように構成される、例34に記載のシステム。
【0099】
例36:前記システムは、測定値の維持を妨げないように構成された最適化でコンパイルされた命令を含む、例34または35に記載のシステム。
【0100】
例37:コンピュータで実行される方法であって、当該コンピュータで実行される方法は、スコープ内で実装され、かつ、ローカル制御フローの測定値を維持するように構成されたローカル変数を初期化することと、式を計算することとを含み、前記式の計算は戻り値を生成するのに有効であり、当該方法はさらに、前記測定値及び前記戻り値を共にハッシュすることを含み、前記ハッシュすることはダイジェスト値を出力するのに有効であり、当該方法は、前記ハッシュすることに続いて、前記ローカル変数の前記測定値を前記ダイジェスト値に再定義することと、前記ローカル変数の前記測定値を静的変数に記憶された期待値と比較することとを含み、前記比較することは制御フロー整合性を妥当性確認するのに有効である、前記コンピュータで実行される方法。
【0101】
例38:前記ローカル変数の前記測定値を前記静的変数に記憶されている前記期待値と比較するより前に、スコープ内の式のそれぞれの計算について前記ハッシュすること及び前記再定義することを繰り返すことをさらに含む、例37に記載のコンピュータで実行される方法。
【0102】
例39:前記ハッシュすることは非暗号化の合成指紋アルゴリズムによって計算され、前記非暗号化の合成指紋アルゴリズムは、2つの入力を共に組み合わせることであって、前記組み合わせることは連結を含む非可換関数、またはシリアル化を含む注入関数を使用して実施される、前記組み合わせること、及び前記組み合わせられた入力を固定サイズのダイジェスト値にマッピングすることに有効である、例37または例38に記載のコンピュータで実行される方法。
【0103】
例40:前記静的変数の前記期待値は、前記スコープ内のいくつかの単項エラーリターン決定に対して事前に計算される、先行例のいずれか1つに記載のコンピュータで実行される方法。
【0104】
例41:前記戻り値はエラーコードであり、前記エラーコードは実行の成功または実行の失敗を示すことができる、先行例のいずれか1つに記載のコンピュータで実行される方法。
【0105】
例42:前記スコープは少なくとも1つのチェック構造を有する関数であり、前記少なくとも1つのチェック構造は、エラーが発生した場合に早期リターンを実施するように構成される、先行例のいずれか1つに記載のコンピュータで実行される方法。
【0106】
例43:前記ローカル変数を前記初期化することは、前記測定値を初期の秘密値に初期化する、先行例のいずれか1つに記載のコンピュータで実行される方法。
【0107】
例44:前記計算値に従って前記測定値を更新することは、前記測定値を維持する変数を前記計算された変数に再定義することを含む、いずれかの先行例に記載のコンピュータで実行される方法。
【0108】
結論
コンピューティングシステムで制御フローを妥当性確認するための制御フロー整合性測定の技術及びそれを可能にする装置の実施態様について、特徴及び/または方法に固有の言語で説明されているが、添付の特許請求の範囲の主題は、説明された特定の特徴または方法に必ずしも限定されないことを理解されたい。むしろ、特定の特徴及び方法は、コンピューティングシステムで制御フローを妥当性確認するための制御フロー整合性測定を可能にする例示的な実施態様として開示されている。
【手続補正書】
【提出日】2024-07-09
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
コンピュータで実行される方法であって、
デジタル署名を検証するように構成された署名チェック関数の制御フローの測定値を生成することと、
前記署名チェック関数のスコープ中に、デジタル署名検証が成功したことを示す式の戻り値を生成することと、
前記スコープ中に前記式の戻り値を生成することに応答して、計算値に従って前記測定値を更新することとを含み、前記計算値は前記測定値及び前記式の戻り値に基づき、前記方法はさらに、
前記測定値を所定の値と比較することによって、前記署名チェック関数の前記制御フローを妥当性確認することを含む、コンピュータで実行される方法。
【請求項2】
前記式の戻り値は第2の式の戻り値であり、前記コンピュータで実行される方法は、前記第2の式の戻り値を生成するより前に、デジタル署名の獲得が成功したことを示す第1の式の戻り値を生成することをさらに含む、請求項1に記載のコンピュータで実行される方法。
【請求項3】
前記測定値を更新すると、前記第1の式の戻り値及び前記第2の式の戻り値のそれぞれについて前記測定値が更新される、請求項2に記載のコンピュータで実行される方法。
【請求項4】
前記測定値を更新することは、前記測定値を前記計算値に等しく設定することを含む
、請求項
1~3のいずれかに記載のコンピュータで実行される方法。
【請求項5】
前記署名チェック関数の前記制御フローを妥当性確認することに応答して、スコープ戻り値を返すことをさらに含む
、請求項
1~4のいずれかに記載のコンピュータで実行される方法。
【請求項6】
前記スコープ戻り値は少なくとも1つのエラーコードを含み、前記少なくとも1つのエラーコードは、前記署名チェック関数の前記制御フローの妥当性確認が成功したこと、または前記署名チェック関数の前記制御フローの妥当性確認が失敗したことを示す、請求項5に記載のコンピュータで実行される方法。
【請求項7】
前記式の戻り値は前記少なくとも1つのエラーコードを含み、前記少なくとも1つのエラーコードは、デジタル署名検証が成功したこと、またはデジタル署名検証が失敗したことを示す、請求項5または6に記載のコンピュータで実行される方法。
【請求項8】
1つまたは複数の条件分岐命令に基づいて、前記式の戻り値が前記デジタル署名検証の失敗を示すと判断することと、
前記式の戻り値が前記デジタル署名検証の失敗を示すと判断することに応答して、前記署名チェック関数の前記スコープのさらに他の実行を停止することと、
前記署名チェック関数の前記制御フローの前記妥当性確認が失敗したことを示す前記スコープ戻り値を返すことと、をさらに含む、請求項7に記載のコンピュータで実行される方法。
【請求項9】
ハッシュ関数を使用して前記計算値を生成することをさらに含む
、請求項
1~8のいずれかに記載のコンピュータで実行される方法。
【請求項10】
前記ハッシュ関数は非暗号化の合成指紋アルゴリズムを含み、
前記計算値を生成することは、
連結を含む非可換関数、またはシリアル化を含む注入関数の少なくとも1つを使用して2つの入力を共に組み合わせることと、
前記組み合わせられた入力を固定サイズのダイジェスト値にマッピングすることと、を含む、請求項9に記載のコンピュータで実行される方法。
【請求項11】
前記計算値に従って前記測定値を更新することは、1つまたは複数の数学演算またはビット演算を通して前記測定値を操作することを含む
、請求項
1~10のいずれかに記載のコンピュータで実行される方法。
【請求項12】
前記所定の値は、前記測定値を維持するより前に算出され、前記スコープ内のいくつかの単項エラーリターン決定に基づいている
、請求項
1~11のいずれかに記載のコンピュータで実行される方法。
【請求項13】
前記所定の値はセキュリティ強化されたメモリに記憶される、請求項12に記載のコンピュータで実行される方法。
【請求項14】
集積回路を備え、前記集積回路は、
少なくとも1つのプロセッサと、
前記少なくとも1つのプロセッサに結合され、かつ命令を含む少なくとも1つのコンピュータ可読記憶媒体とを備え、前記命令は、前記少なくとも1つのプロセッサによって実行されると、前記
少なくとも1つのプロセッサ
に請求項
1~13のいずれかに記載の方法を実行させる、システム。
【請求項15】
請求項1~13のいずれかに記載の方法をコンピュータに実行させる、コンピュータプログラム。
【国際調査報告】