(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2023-12-27
(54)【発明の名称】コンピューティング・システムにおけるソフトウェア・ポインタ認証のためのハードウェア・サポート
(51)【国際特許分類】
G06F 21/52 20130101AFI20231220BHJP
G06F 21/64 20130101ALI20231220BHJP
【FI】
G06F21/52
G06F21/64
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023534096
(86)(22)【出願日】2021-10-20
(85)【翻訳文提出日】2023-06-05
(86)【国際出願番号】 CN2021124918
(87)【国際公開番号】W WO2022127347
(87)【国際公開日】2022-06-23
(32)【優先日】2020-12-16
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
(71)【出願人】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【氏名又は名称】太佐 種一
(74)【代理人】
【識別番号】100120710
【氏名又は名称】片岡 忠彦
(74)【復代理人】
【識別番号】110000420
【氏名又は名称】弁理士法人MIP
(72)【発明者】
【氏名】モレイラ、ホセ イー
(72)【発明者】
【氏名】フローレス、アーノルド
(72)【発明者】
【氏名】チャッタージー、デバプリヤ
(72)【発明者】
【氏名】エカナダム、カタムリ
(57)【要約】
アプリケーションの実行中に関数エントリ命令が発生することに応答して、3つのハッシュ入力パラメータのハッシュを使用してエントリ・ハッシュ値を計算することであって、入力パラメータのうちの1つが専用レジスタに格納された秘密鍵である、計算することと、関数終了命令が発生することに応答して、エントリ・ハッシュ値を計算するときに使用されたのと同じ3つの入力パラメータおよび同じハッシュを使用して終了ハッシュ値を計算することと、エントリ・ハッシュ値が終了ハッシュ値と同じであるかどうかを判定することとを実行する、情報を処理するためのプロセッサおよび方法が開示される。
【特許請求の範囲】
【請求項1】
プロセッサにおいてデータを処理する方法であって、
関数呼び出し命令が発生することに応答して、3つのハッシュ入力パラメータのハッシュを使用してエントリ・ハッシュ値を計算することであって、前記入力パラメータのうちの1つが、専用レジスタに格納された秘密鍵である、前記計算することと、
前記エントリ・ハッシュ値を第1のメモリ位置に格納することと
を含む方法。
【請求項2】
前記第1のメモリ位置は、第1の汎用レジスタ内のスタック・ポインタからの第1のオフセットにある、請求項1に記載の方法。
【請求項3】
リンク・レジスタによって提供された値を第2の汎用レジスタ・エントリにコピーすることと、
前記第2の汎用レジスタ・エントリからの前記値を第2のメモリ位置に格納することと
をさらに含む、請求項1に記載の方法。
【請求項4】
前記第2のメモリ位置は、前記第1の汎用レジスタ・エントリ内のスタック・ポインタからの第2のオフセットにある、請求項3に記載の方法。
【請求項5】
前記エントリ・ハッシュを計算するための前記3つのハッシュ入力パラメータは、前記第1の汎用レジスタ・エントリ内の前記値である第1のハッシュ入力パラメータと、前記第2の汎用レジスタ・エントリ内の前記値である第2のハッシュ入力パラメータと、前記秘密鍵である第3のハッシュ入力パラメータとを含む、請求項4に記載の方法。
【請求項6】
前記秘密鍵を格納している前記専用レジスタは、前記エントリ・ハッシュ値を計算する前記特権レベルより高い特権レベルでのみアクセス可能である、請求項5に記載の方法。
【請求項7】
関数終了命令が発生することに応答して、前記エントリ・ハッシュ値を計算するときに使用されたのと同じ3つの入力パラメータおよび同じハッシュを使用して終了ハッシュ値を計算することと、前記エントリ・ハッシュ値が前記終了ハッシュ値と同じであるかどうかを判定することとをさらに含む、請求項1に記載の方法。
【請求項8】
前記エントリ・ハッシュ値が前記終了ハッシュ値に等しいということに応答して、前記関数を前記プロセッサにより終了する関数復帰を実行することと、
前記エントリ・ハッシュ値が前記終了ハッシュ値に等しくないということに応答して、トラップ割り込みを実行することと
をさらに含む、請求項7に記載の方法。
【請求項9】
前記トラップ割り込みは、制御をオペレーティング・システムに移行させる、請求項8に記載の方法。
【請求項10】
関数終了命令が発生することに応答して、
前記エントリ・ハッシュ値を前記第2のメモリ位置から第3の汎用レジスタに読み込むことと、
前記値を前記第1のメモリ位置から前記第2の汎用レジスタに読み込むことと、
前記値を前記第2の汎用レジスタから前記リンク・レジスタに移動することと
をさらに含む、請求項3に記載の方法。
【請求項11】
前記終了ハッシュを計算するための前記3つのハッシュ・パラメータ入力は、前記第1の汎用レジスタ・エントリ内の前記値である第1のハッシュ入力パラメータと、前記第2の汎用レジスタ・エントリ内の前記値である第2のハッシュ入力パラメータと、前記秘密鍵である第3のハッシュ入力パラメータとを含む、請求項10に記載の方法。
【請求項12】
ソフトウェア・アプリケーションにおいて命令を実行するためのシステムであって、前記システムは、
前記命令を実行するための回路およびロジックを含んでいるプロセッサ
を備え、前記プロセッサは、
前記命令をデコードするための回路およびロジックを備えているデコード・ユニットと、
前記デコードされた命令を受信し、デコードされた命令を発行するための回路およびロジックを備えている発行ユニットと、
前記発行ユニットによって発行されたデコードされた命令を実行するための回路およびロジックを備えている実行ユニットであって、専用レジスタに関連付けられる前記実行ユニットと
を備え、前記システムはさらに、
プログラム命令が具現化されている非一過性コンピュータ可読媒体
を備え、前記プログラム命令は、
関数エントリ命令が発生することに応答して、3つのハッシュ入力パラメータのハッシュを使用してエントリ・ハッシュ値を計算することであって、前記入力パラメータのうちの1つが、前記専用レジスタに格納された秘密鍵である、前記計算することと、
関数終了命令が発生することに応答して、前記エントリ・ハッシュ値を計算するときに使用されたのと同じ3つの入力パラメータおよび同じハッシュを使用して終了ハッシュ値を計算することと、
前記エントリ・ハッシュ値が前記終了ハッシュ値と同じであるかどうかを判定することと
を前記プロセッサに実行させるように、前記プロセッサによって実行可能である、システム。
【請求項13】
前記エントリ・ハッシュ値を第1のメモリ位置に格納することをさらに含む、請求項12に記載のシステム。
【請求項14】
リンク・レジスタによって提供された値を第2の汎用レジスタ・エントリにコピーすることと、
前記第2の汎用レジスタ・エントリからの前記値を第2のメモリ位置に格納することと
を前記プロセッサに実行させるように、前記プロセッサによって実行可能であるプログラミング命令をさらに備える、請求項13に記載のシステム。
【請求項15】
前記エントリ・ハッシュを計算するための前記3つのハッシュ・パラメータ入力は、前記第1の汎用レジスタ・エントリ内の前記値である第1のハッシュ入力パラメータと、前記第2の汎用レジスタ・エントリ内の前記値である第2のハッシュ入力パラメータと、前記秘密鍵である第3のハッシュ入力パラメータとを含む、請求項14に記載のシステム。
【請求項16】
前記秘密鍵を格納している前記専用レジスタは、前記エントリ・ハッシュ値を計算する前記特権レベルより高い特権レベルでのみアクセス可能である、請求項15に記載のシステム。
【請求項17】
前記エントリ・ハッシュ値が前記終了ハッシュ値に等しいということに応答して、前記プロセッサが前記関数を終了する関数復帰を実行することと、
前記エントリ・ハッシュ値が前記終了ハッシュ値に等しくないということに応答して、トラップ割り込みを実行することと
を前記プロセッサに実行させるように、前記プロセッサによって実行可能であるプログラミング命令をさらに備える、請求項12に記載のシステム。
【請求項18】
前記トラップ割り込みを実行することは、制御をオペレーティング・システムに移行させる、請求項17に記載のシステム。
【請求項19】
関数終了命令が発生することに応答して、
前記エントリ・ハッシュ値を前記第2のメモリ位置から第3の汎用レジスタに読み込むことと、
前記値を前記第1のメモリ位置から前記第2の汎用レジスタに読み込むことと、
前記値を前記第2の汎用レジスタから前記リンク・レジスタに移動することと
を前記プロセッサに実行させるように、前記プロセッサによって実行可能であるプログラミング命令をさらに含む、請求項14に記載の方法。
【請求項20】
プロセッサにおいてデータを処理する方法であって、
関数呼び出し命令が発生することに応答して、1つまたは複数のハッシュ入力パラメータのハッシュを使用してエントリ・ハッシュ値を計算することであって、前記入力パラメータのうちの1つが、専用レジスタに格納された秘密鍵である、前記計算することと、
関数復帰命令が発生することに応答して、前記エントリ・ハッシュ値を計算するときに使用されたのと同じ1つまたは複数の入力パラメータおよび同じハッシュを使用して終了ハッシュ値を計算することと、
前記エントリ・ハッシュ値が前記終了ハッシュ値と同じであるかどうかを判定することと、
前記エントリ・ハッシュ値が前記終了ハッシュ値に等しくないということに応答して、制御をオペレーティング・システムに移行させ、前記関数復帰命令を実行しないことと
を含む方法。
【請求項21】
命令を備えているコンピュータ・プログラム製品であって、前記命令が、前記プロセッサに請求項1ないし11のいずれかに記載の方法を実行させるように、プロセッサによって実行可能である、コンピュータ・プログラム製品。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、一般に、情報処理システムおよびデータ処理システム、プロセッサ、ならびにメモリ・システムに関し、より詳細には、例えば、ソフトウェア・アプリケーションを実行しながら、情報処理システム、プロセッサ、およびメモリ・サブシステムに向上したセキュリティを提供することに関する。
【背景技術】
【0002】
情報技術の最近の進歩および情報を格納して処理するためのインターネットの幅広い使用に伴って、コンピューティング・システムによる情報の取得、処理、格納、および配布に対する要求が、ますます高まっている。コンピューティング・システムは、ビジネス、個人的利用、および娯楽のためのますます複雑化するアプリケーションをコンピュータが実行できる速度を向上させるように、開発されている。コンピュータ・システムの全体的な性能は、プロセッサ、任意のメモリ・キャッシュ、入出力(I/O)サブシステムの性能/構造、メモリ制御機能の効率、メモリ・デバイスおよびメモリ・システムの性能、および関連するメモリ・インターフェイス要素、ならびにメモリ相互接続インターフェイスの種類および構造を含む、コンピュータ構造の主要な要素の各々による影響を受ける。
【0003】
最近のコンピュータ・システムは、通常、コンピュータ・システムにおいて情報を処理するために使用され得るプロセッサを含む、複数の集積回路(IC:integrated circuits)を含んでいる。プロセッサによって処理される情報は、プロセッサによって実行されるコンピュータ命令に加えて、コンピュータ命令を使用してプロセッサによって操作されるデータを含むことができる。コンピュータ命令およびデータは、通常、コンピュータ・システム内のメイン・メモリに格納される。
【0004】
許可されていないユーザもしくは不正なソフトウェアまたはその両方が情報処理システムおよびデータ処理システムにアクセスするのを防ぐことが、ますます重要になっており、実現することが困難になっている。ある状況では、ユーザまたはソフトウェア・アプリケーションは、情報処理システム、プロセッサ、レジスタ・ファイル、もしくはメモリ・サブシステム、またはそれらの組み合わせに対するアクセス権限を持つことを許可されることがあるが、完全なシステム、すべてのレジスタ・ファイル、またはメモリ・サブシステムのすべてに対する完全なアクセス権限を持つことを許可されないことがある。したがって、ユーザまたはソフトウェア・アプリケーションは、システムの一部にアクセスすることを許可されることがあるが、ユーザもしくはソフトウェア・アプリケーションまたはその両方は、システム全体、すべてのレジスタ・ファイル、もしくはメモリ・サブシステムのすべて、またはそれらの組み合わせにアクセスすることを許可されない。他の状況では、ユーザもしくはソフトウェア・アプリケーションまたはその両方は、コンピューティング・システムのいずれかの部分、レジスタ・ファイル、もしくはメモリ・サブシステムのいずれかの部分、またはそれらの組み合わせにアクセスすることが許可されない。許可されていないユーザもしくはソフトウェア・アプリケーションまたはその両方によってアクセスされることからシステム、レジスタ・ファイル、もしくはメモリ・サブシステム、またはそれらの組み合わせを保護することは、困難である可能性がある。
【0005】
アプリケーション・ソフトウェアは、関数を呼び出すときに、関数の復帰アドレスなどのコード・ポインタまたはローカル変数値もしくはポインタ変数などのデータをスタックに格納する。悪意のあるユーザは、関数からの復帰時に、ソフトウェア・アプリケーションによって意図されていないコード・ポインタまたはデータ値が使用されるように、バッファ・オーバーフロー、境界チェックのない配列のアクセス、解放後の使用、およびスタックの内容を攻撃して上書きするための他の技術などの、コードの脆弱性を悪用することができる。これによって、復帰アドレスが意図された復帰ターゲットでなくなっているため、プログラムの制御フローを乗っ取ることができる。この攻撃は、リターン指向プログラミング(ROP:Return Oriented Programming)攻撃と呼ばれることがある。これらの技術は、ソフトウェアを操作して、ソフトウェア・プログラムがアクセスするよう意図されていないデータ値にアクセスし、制御フローに影響を与えずに秘密情報を公開するためにも使用され得る。この種の攻撃は、データ志向プログラミング(DOP:Data Oriented Programming)攻撃と呼ばれることがある。よりセキュアな情報処理システム、プロセッサ、メモリ・サブシステム、ならびにそのようなシステム、デバイス、およびサブシステム上で実行されるソフトウェア・アプリケーションを提供するために、そのような攻撃およびそれらの技術が克服され得る場合、有益である。
【発明の概要】
【0006】
コンピュータ・システム、コンピュータ・アーキテクチャ構造、プロセッサ、それらの動作方法、およびソフトウェア・アプリケーションの実行の理解を、そのようなシステム、プロセッサ、およびそのようなシステム上もしくはデバイス上またはその両方で実行されるソフトウェア・アプリケーションの動作のよりセキュアな方法を提供する技術を含めて、助けるために、本開示または本発明を限定するよう意図せずに、本開示の概要が提供される。本開示は、当業者を対象にする。本開示のさまざまな態様および特徴が、一部の例では個別に、または他の例では本開示の他の態様および特徴と組み合わせて、有利に使用されてよいということが、理解されるべきである。したがって、異なる効果を実現するために、コンピュータ・システム、アーキテクチャ構造、プロセッサ、レジスタ・ファイル、それらの動作方法、およびソフトウェア・アプリケーションを実行する方法に対する変形および変更が行われてよい。
【0007】
1つまたは複数の実施形態では、本開示の態様は、ソフトウェア・プログラムの実行中に関数呼び出し命令が発生することに応答して、3つのハッシュ入力パラメータのハッシュを使用してエントリ・ハッシュ値を計算することであって、入力パラメータのうちの1つが、専用レジスタに格納された秘密鍵である、計算することと、エントリ・ハッシュ値を第1のメモリ位置に格納することとを含む、プロセッサにおいてデータを処理するシステム、方法、もしくはコンピュータ・プログラム製品、またはそれらの組み合わせを提供する。一態様では、第1のメモリ位置は、第1の汎用レジスタ内のスタック・ポインタからの第1のオフセットにある。実施形態では、システム、方法、もしくはコンピュータ・プログラム製品、またはそれらの組み合わせが、リンク・レジスタによって提供された値を第2の汎用レジスタ・エントリにコピーすることと、第2の汎用レジスタ・エントリからの値を第2のメモリ位置に格納することとをさらに含む。第2のメモリ位置は、第1の汎用レジスタ・エントリ内のスタック・ポインタからの第2のオフセットにあるのが好ましい。エントリ・ハッシュを計算するための3つのハッシュ・パラメータ入力は、任意選択的に、第1の汎用レジスタ・エントリ内の値である第1のハッシュ入力パラメータと、第2の汎用レジスタ・エントリ内の値である第2のハッシュ入力パラメータと、秘密鍵である第3のハッシュ入力パラメータとを含む。一態様では、秘密鍵を格納している専用レジスタは、エントリ・ハッシュ値を計算する特権レベルより高い特権レベルでのみアクセス可能である。
【0008】
一態様では、方法、システム、もしくはコンピュータ・プログラム製品、またはそれらの組み合わせは、ソフトウェア・アプリケーションの実行中に関数終了命令が発生することに応答して、エントリ・ハッシュ値を計算するときに使用されたのと同じ3つの入力パラメータおよび同じハッシュを使用して終了ハッシュ値を計算することと、エントリ・ハッシュ値が終了ハッシュ値と同じであるかどうかを判定することとをさらに含む。1つまたは複数の実施形態では、方法、システム、もしくはコンピュータ・プログラム製品、またはそれらの組み合わせは、エントリ・ハッシュ値が終了ハッシュ値に等しいということに応答して、関数をプロセッサにより終了する関数復帰を実行することと、エントリ・ハッシュ値が終了ハッシュ値に等しくないということに応答して、トラップ割り込みを実行することとをさらに含む。トラップ割り込みは、制御をオペレーティング・システムに移行させるのが好ましい。さらなる態様では、関数終了命令が発生することに応答して、エントリ・ハッシュ値を第2のメモリ位置から第3の汎用レジスタに読み込み、この値を第1のメモリ位置から第2の汎用レジスタに読み込み、この値を第2の汎用レジスタからリンク・レジスタに移動する。
【0009】
ソフトウェア・アプリケーションにおいて命令を実行するためのシステムが開示され、このシステムは、命令を実行するための回路およびロジックを含んでいるプロセッサを含み、プロセッサが、命令をデコードするための回路およびロジックを備えているデコード・ユニットと、デコードされた命令を受信し、デコードされた命令を発行するための回路およびロジックを備えている発行ユニットと、発行ユニットによって発行されたデコードされた命令を実行するための回路およびロジックを備えている実行ユニットであって、専用レジスタに関連付けられる実行ユニットとを備え、システムがさらに、プログラム命令が具現化されている非一過性コンピュータ可読媒体を含み、プログラム命令が、プロセッサによって実行可能であり、プロセッサに、関数エントリ命令が発生することに応答して、3つのハッシュ入力パラメータのハッシュを使用してエントリ・ハッシュ値を計算することであって、入力パラメータのうちの1つが、専用レジスタに格納された秘密鍵である、計算することと、関数終了命令が発生することに応答して、エントリ・ハッシュ値を計算するときに使用されたのと同じ3つの入力パラメータおよび同じハッシュを使用して終了ハッシュ値を計算することと、エントリ・ハッシュ値が終了ハッシュ値と同じであるかどうかを判定することとを実行させる。
【0010】
プロセッサにおいてデータを処理するための方法もしくはシステムまたはその両方が開示され、この方法もしくはシステムまたはその両方は、関数呼び出し命令が発生することに応答して、1つまたは複数のハッシュ入力パラメータのハッシュを使用してエントリ・ハッシュ値を計算することであって、入力パラメータのうちの1つが専用レジスタに格納された秘密鍵である、計算することと、関数復帰命令が発生することに応答して、エントリ・ハッシュ値を計算するときに使用されたのと同じ1つまたは複数の入力パラメータおよび同じハッシュを使用して終了ハッシュ値を計算することと、エントリ・ハッシュ値が終了ハッシュ値と同じであるかどうかを判定することと、エントリ・ハッシュ値が終了ハッシュ値に等しくないということに応答して、制御をオペレーティング・システムに移行させ、関数復帰命令を実行しないこととを含む。
【0011】
本発明の前述の、または他の目的、特徴、および優位性は、添付の図面に示されているように、本発明の実施形態例の以下のより詳細な説明から明らかになり、類似する参照番号は、通常、本発明の実施形態例の類似する部分を表す。
【0012】
情報処理システム、コンピュータ・システム、コンピュータ・アーキテクチャ構造、プロセッサ、レジスタ・ファイル、それらの動作方法、およびソフトウェア・アプリケーションを実行する方法のさまざまな態様、特徴、および実施形態は、提供された図と併せて読まれた場合に、よく理解されるであろう。各図では、コンピュータ・システム、コンピュータ・アーキテクチャ構造、プロセッサ、レジスタ・ファイル、およびソフトウェア・アプリケーションを実行する方法を含む、それらの動作方法のさまざまな態様、特徴、もしくはさまざまな実施形態、またはそれらの組み合わせを示す目的で、実施形態が提供されているが、特許請求の範囲は、示された正確な配置、構造、アセンブリ、サブアセンブリ、機能ユニット、メカニズム、特徴、態様、実施形態、デバイス、方法、プロセス、または技術に限定されるべきではなく、示された配置、構造、アセンブリ、サブアセンブリ、機能ユニット、メカニズム、特徴、態様、実施形態、デバイス、方法、プロセス、および技術は、単独で使用されるか、または他の配置、構造、アセンブリ、サブアセンブリ、機能ユニット、メカニズム、特徴、態様、実施形態、デバイス、方法、プロセス、もしくは技術、またはそれらの組み合わせと組み合わせて使用されてよい。
【図面の簡単な説明】
【0013】
【
図1】本開示の実施形態に従って、一般的なコンピューティング・システムまたはデータ処理システムを示す図である。
【
図2】本開示の実施形態に従って、プロセッサおよびメモリ・サブシステムを示す図である。
【
図3】本開示の実施形態に従って、プロセッサのブロック図を示す図である。
【
図4】実施形態に従って、プロセッサでのソフトウェア・プログラム/アプリケーションの実行中に関数エントリ時にハッシュを計算する方法のフローチャートを示す図である。
【
図5】実施形態に従って、プロセッサでのソフトウェア・プログラム/アプリケーションの実行中に関数終了が発生したときにハッシュをチェックする方法のフローチャートを示し、本開示の実施形態に従って、関数終了で、または関数終了の前に、ハッシュをチェックするためにソフトウェア・プログラムに挿入するためのコードの概略図を示す図である。
【
図6】本開示の実施形態に従って、関数エントリでハッシュを計算するためにソフトウェア・プログラムに挿入するためのコードの概略図を示す図である。
【
図7】本開示の実施形態に従って、関数終了で、または関数終了の前に、ハッシュをチェックするためにソフトウェア・プログラムに挿入するためのコードの概略図を示す図である。
【発明を実施するための形態】
【0014】
以下の説明は、本発明の一般的原理を説明するために行われるのであり、本明細書において請求される本発明の概念を制限するように意図されていない。以下の詳細な説明では、情報処理システム、コンピュータ・システム、コンピュータ・アーキテクチャ構造、プロセッサ、メモリ、機能ユニット、レジスタ・ファイル、メモリ・サブシステム、およびソフトウェア・アプリケーションを実行する方法を含む、それらの動作方法を理解できるようにするために、多くの詳細が示されているが、コンピュータ・システム、コンピュータ・アーキテクチャ構造、プロセッサ、機能ユニット、レジスタ・ファイル、メモリ・サブシステム、およびソフトウェア・アプリケーションを実行する方法を含む、それらの動作方法のさまざまな多くの実施形態が、それらの特定の詳細なしで実践されてよいということ、および特許請求の範囲および本発明が、本明細書において具体的に説明され、示された実施形態、アセンブリ、サブアセンブリ、構造、配置、メカニズム、機能ユニット、特徴、態様、プロセス、方法、技術、または詳細に限定されるべきでないということが、当業者によって理解されるであろう。さらに、本明細書に記載された特定の特徴、機能ユニット、メカニズム、構造、配置、実施形態、態様、および技術は、さまざまな可能な組み合わせおよび並べ替えの各々において、他の説明された特徴、機能ユニット、メカニズム、構造、配置、実施形態、態様、および技術と組み合わせて使用され得る。
【0015】
本明細書では、特に具体的に定義されない限り、すべての用語には、本明細書から暗示される意味、および当業者によって理解される意味、もしくは辞書、論文などにおいて定義された意味、またはその両方を含む、最も広い可能な解釈が与えられる。本明細書および添付の特許請求の範囲で使用されるとき、特に指定されない限り、単数形「a」、「an」、および「the」は、複数の指示対象を含み、「備える」もしくは「備えている」またはその両方の用語は、使用されるときに、記載された特徴、整数、ステップ、動作、要素、もしくはコンポーネント、またはその組み合わせの存在を示すが、1つもしくは複数の他の特徴、整数、ステップ、動作、要素、コンポーネント、もしくはこれらのグループ、またはそれらの組み合わせの存在または追加を除外しないということにも注意しなければならない。
【0016】
以下の説明では、当業者にとって明らかである、プロセッサ(例えば、マイクロプロセッサ)、メモリ・サブシステム、およびシステム・アーキテクチャを含む情報処理システム、ならびにソフトウェア・アプリケーションを実行する方法を含むそれらの動作方法の従来の特徴は、省略されるかまたは簡単に説明されるのみである。当業者は、コンピュータ・システムの一般的なアーキテクチャ、メモリ・サブシステム、プロセッサ、レジスタ・ファイル、およびソフトウェア・アプリケーションの実行方法を含むそれらの動作方法に精通していることが想定される。付番された要素は、その要素が導入された図に従って付番され、必須ではないが通常は、後続の図を通じて、その番号によって参照されることに留意されたい。
【0017】
本開示における使用に適しているコンピューティング・システムまたはデータ処理システム100は、さまざまな形態をとってよく、そのうちの1つが
図1に示されており、
図1では、コンピューティング・システムまたはデータ処理(情報処理)システム100が、プログラム・コード(例えば、ソフトウェア・アプリケーション)を格納するか、もしくは実行するか、またはその両方を行うために構成される。一実施形態では、情報処理システム100は、少なくとも1つのプロセッサ102を含んでよく、プロセッサ102は、
図1に示されているように、システム・バス106を介してメモリ・デバイスおよび入出力デバイスに直接的または間接的に結合されたコントローラとするか、またはコントローラの一部とすることができる。
図1のコンピューティング・システム100は、プロセッサ102(中央処理装置(CPU)またはマイクロプロセッサとも呼ばれる)、ランダム・アクセス・メモリ(RAM)103、不揮発性メモリ104、デバイス固有の回路101、およびI/Oインターフェイス105と共に示されている。代替的または追加的に、RAM103もしくは不揮発性メモリ104またはその両方は、プロセッサ102に含まれてよく、デバイス固有の回路101およびI/Oインターフェイス105も、プロセッサ102に含まれ得る。プロセッサ102は、例えば、既製のマイクロプロセッサ、カスタム・プロセッサ、フィールド・プログラマブル・ゲート・アレイ(FPGA)、特定用途向け集積回路(ASIC)、個別のロジックなど、または一般に、デジタル命令を実行するための任意のデバイスを備えてよい。RAM103は、通常、可変データ、スタック・データ、実行可能命令などを保持するために使用される。
【0018】
さまざまな手法によれば、不揮発性メモリ104は、以下に限定されないが、電気的消去可能プログラマブル・リード・オンリ・メモリ(EEPROM)、フラッシュ・プログラマブル・リード・オンリ・メモリ(PROM)、バッテリー・バックアップRAM、ハード・ディスク・ドライブなどの任意の種類の不揮発性メモリを含んでよい。不揮発性メモリ104は、通常、プロセッサ102に特定の機能を実行させるために実行され得るプログラミング命令およびアプリケーションなどの、実行可能なファームウェアおよび任意の不揮発性データを保持するために使用される。
【0019】
一部の実施形態では、I/Oインターフェイス105は、プロセッサ102がコントローラの外部のデバイスと通信できるようにする通信インターフェイスを含んでよい。通信インターフェイスの例は、RS-232、USB(ユニバーサル・シリアル・バス)、小型コンピュータ・システム・インターフェイス(SCSI)、RS-422などのシリアル・インターフェイス、またはWi-Fi、Bluetooth、近距離無線通信(NFC)、もしくは他のワイヤレス・インターフェイスなどのワイヤレス通信インターフェイスを含んでよいが、これらに限定されない。コンピューティング・システム100は、例えばオートメーション・デバイス・インターフェイス(ADI)などの任意の通信プロトコルで、通信インターフェイス105を介して外部デバイスと通信してよい。
【0020】
図2は、より大きなコンピュータ・システムの構造またはネットワークの一部でありうる、本開示の実践され得る例示的な処理システム180を示している。処理システム180は、制御プロセッサ・システムまたはプロセッサ102を含んでおり、制御プロセッサ・システムまたはプロセッサ102は、メモリ制御ユニット(MCU)140とインターフェイスをとるように構成されることがある少なくとも1つのプロセッサ・ユニット(CPU)125を含んでいる処理サブシステムである。マイクロプロセッサとも呼ばれるCPU125は、システム・コントローラ(図示されていない)からの読み取り要求、書き込み要求、および構成要求を処理するモジュールであってよい。CPU125は、マルチコア・プロセッサであってよい。MCU140は、メモリ・サブシステム103内の1つまたは複数のメモリ・デバイス(例えば、DRAM)(
図2に示されていない)との通信を制御する同期メモリ・コントローラ(MCS)142(メモリ・コントローラとも呼ばれる)を含んでよい。MCU140およびMCS142が、1つもしくは複数の処理回路を含んでいてもよいし、または処理が、プロセッサ125によって、もしくはプロセッサ125と連動して実行されてもよい。制御プロセッサ・システム102は、通信バス106を介してメモリ・サブシステム103と通信する。
【0021】
図3は、本開示の実践され得る実施形態に従って、プロセッサ102のブロック図を示している。プロセッサ102は、命令またはスレッドの1つまたは複数のストリームを実行するように構成されたパイプライン型プロセッサであってよい。スレッド(命令ストリームとも呼ばれる)は、特定のタスクを一緒に実行する命令のシーケンスまたは集合を含む。スレッドは、プロセッサ上で実行されている同じプログラムの異なる部分からの命令ストリームであるか、もしくはプロセッサ上で実行されている異なるプログラムからの命令ストリームであるか、またはこれらの組み合わせであってよい。一実施形態では、プロセッサは、マルチスレッド・プロセッサであってよく、複数のスレッドを同時に処理してよい。
【0022】
一実施形態によれば、プロセッサ102は、メモリ202、命令キャッシュ204、命令フェッチ・ユニット206、分岐予測器208、処理パイプライン210、および行き先リソース220を含んでよい。プロセッサ102は、コンピュータ・プロセッサ内に含まれるか、または他の方法でコンピュータ・システム内に分散されていてよい。命令およびデータは、メモリ202に格納されることが可能であり、命令キャッシュ204は、メモリ202内の命令にアクセスし、フェッチされる命令(例えば、さまざまなスレッドの命令)をキャッシュ・メモリ204に格納してよい。メモリ202は、例えば、キャッシュ・メモリなどの、任意の種類の揮発性または不揮発性メモリを含んでよい。メモリ202および命令キャッシュ204は、複数のキャッシュ・レベルを含むことができる。データ・キャッシュ(図示されていない)は、プロセッサ102に含まれてもよい。プロセッサ102は、複数のスレッドがプロセッサ102の機能ユニット(例えば、命令フェッチおよびデコード・ユニット、キャッシュ、分岐予測ユニット、および実行ユニット)を、好ましくは同時の方法で、共有することを許可するのが好ましい。
【0023】
図3では、命令フェッチ・ユニット206および処理パイプライン210の簡略化された例が示されている。さまざまな実施形態では、プロセッサ102は、1つまたは複数の処理パイプライン210および命令フェッチ・ユニット206を含んでよい。実施形態では、処理パイプライン210は、デコード・ユニット20、発行ユニット22、実行ユニット24、書き戻しロジック26、ロジック・レジスタ・マッパー28、履歴バッファ(例えば、保存および復元バッファ(SRB)30)、および物理レジスタ・ファイル32を含んでいる。命令フェッチ・ユニット206もしくは分岐予測器208またはその両方は、処理パイプライン210の一部であってもよい。処理パイプライン210は、エラー・チェックおよび処理ロジック、処理パイプライン210を通る1つまたは複数の並列経路、および現在または今後、従来技術において知られる他の特徴などの、他の特徴を含んでもよい。パイプラインは、分解されて、異なって示されてもよい。
図3では、プロセッサ102を通る前向き経路が示されているが、プロセッサ102の要素間に、他のフィードバック経路および信号伝達経路が含まれてよい。プロセッサ102は、他の回路、機能ユニット、およびコンポーネントを含んでよい。
【0024】
命令フェッチ・ユニット206は、デコード・ユニット20によってさらに処理するために、命令キャッシュ204から命令をフェッチする。デコード・ユニット20は、命令をデコードし、デコードされた命令、命令の一部、または他のデコードされたデータを、発行ユニット22に渡す。デコード・ユニット20は、分岐予測器208によって予測されなかった分岐命令を検出してもよい。発行ユニット22は、命令または他のデータを分析し、この分析に基づいて、デコードされた命令、命令の一部、または他のデータを、パイプライン210内の実行ユニット24に送信する。実行ユニット24は、実行ユニット24に発行された命令によって指定された動作を実行する。実行ユニット24は、例えば、固定小数点実行ユニット、浮動小数点実行ユニット、読み込み/格納実行ユニット、ベクトル・スカラー実行ユニット、もしくは他の実行ユニット、またはそれらの組み合わせなどの、複数の実行ユニットを含むことができる。物理レジスタ・ファイル32は、実行ユニット24のデータを保持する。ロジック・レジスタ・マッパー28は、ロジック・レジスタ・エントリ(LReg)と物理レジスタ・ファイル32内のエントリの間のマッピングを提供するエントリを含む。命令がロジック・レジスタ・エントリ(LReg)を読み取る必要がある場合、ロジック・レジスタ・マッパー28が、物理レジスタ・ファイル32内のどこでデータが特定され得るかの情報を発行ユニット22に提供し、発行ユニット22が、この情報を実行ユニット24に提供する。
【0025】
誤って予測された分岐命令または他の例外が検出された場合、誤って予測された分岐または例外の後の命令およびデータが破棄される(例えば、プロセッサ110のさまざまなユニットからフラッシュされる)。履歴バッファ(例えば、保存および復元バッファ(SRB)30)は、投機的レジスタおよび設計されたレジスタの両方の状態を含み、新しい命令がディスパッチされるときに、ロジック・レジスタ・ファイル・データをバックアップする。これに関して、新しい命令がフラッシュされ、古いデータが回復される必要がある場合に備えて、履歴バッファ30は、新しい命令がロジック・レジスタ・マッパー28からデータを削除するときに、ロジック・レジスタ・マッパー28からの情報を格納する。履歴バッファ(SRB)30は、新しい命令が完了するまで、格納された情報を維持する。履歴バッファ(SRB)30は、命令が正しいデータをどこで取得するべきかを知るように、ロジック・レジスタ・マッパー28内のポインタを更新して、ロジック・レジスタ・エントリの内容を履歴バッファ(SRB)30からロジック・レジスタ・マッパー28に復元するために、ロジック・レジスタ・マッパー28とインターフェイスをとり、例えば、プロセッサが、割り込み可能命令の前(例えば、分岐命令が誤って予測される前)に存在していた状態に戻される。
【0026】
書き戻しロジック26は、実行された命令の結果を行き先リソースまたはターゲット220に書き戻す。行き先リソース220は、実行される命令またはデータのための、レジスタ、キャッシュ・メモリ、他のメモリ、他のデバイスと通信するためのI/O回路、他の処理回路、または任意の他の種類の行き先を含む、任意の種類のリソースであってよい。プロセッサ・パイプライン・ユニットのうちの1つまたは複数は、条件付き分岐命令の実行に関する情報を分岐予測器208に提供してもよい。
【0027】
命令は、一連の論理的なパイプライン化された段階で、プロセッサ102内で処理されてよい。しかし、本明細書の特許請求の範囲において制限が明確に示されない限り、段階のこの特定の分割が制限と見なされないように、これらの段階の機能が一緒にマージされてよいということが、理解されるべきである。実際に
図3では、理解を簡単にするために、段階の一部が単一の論理ユニットとして示されており、関連するさらなる詳細が下で提供される。
【0028】
特定の態様では、プロセッサ102は、複数の実行/処理スライスを含んでよく、各スライスは、
図3に示されたユニットのうちの1つまたは複数を含む。例えば、各処理スライスは、機能/実行ユニット24を含む、それ自身の処理パイプライン210を含んでよい。複数の処理スライスを含んでいるプロセッサ102は、複数の命令を同時に(例えば、各処理スライス内の1つの命令を1処理サイクルで同時に)実行することができてよい。複数の処理スライスを含んでいるそのようなプロセッサは、マルチスライス・プロセッサまたは並列スライス・プロセッサと呼ばれることがある。複数のスライスでの同時処理は、処理速度を大幅に速くし得る。シングルスレッド(ST:single-thread)モードでは、単一のスレッドが処理され、SMTモードでは、複数のスレッドが処理され、例えば、1つまたは複数の実施形態では、2つのスレッド(SMT2)または4つのスレッド(SMT4)が同時に処理される。
【0029】
情報処理システムおよびデータ処理システム、コンピュータ・システム、プロセッサ、もしくはデジタル・ロジック・システム、またはそれらの組み合わせは、例えば、プログラムのフローに対する制御を乗っ取ることができるリターン指向プログラミング(ROP)攻撃による攻撃に対して脆弱である。そのような攻撃に対するより良いセキュリティを実現するためのシステムおよび技術を提供することは、有利かつ有益である。1つまたは複数の実施形態では、よりセキュアな情報処理システム、プロセッサ、および技術は、関数呼び出し時に暗号署名を計算して格納することと、関数復帰(関数終了)時に暗号署名を検証することと、一実施形態では、関数を終了して、プログラム・フローまたはデータ・アクセスに対する制御のためにスタック・ポインタを参照する前に、暗号署名を検証することとを含む。1つまたは複数の実施形態では、暗号署名は、3つのパラメータのハッシュH(x,y,z)であり、パラメータのうちの1つが秘密鍵であるのが好ましい。実施形態では、別の場所で提供された秘密鍵を使用して計算されたスタック・ポインタの暗号署名が利用される。実施形態では、秘密鍵は、スーパーバイザ・モードのみでアクセス可能であり、一態様では、ハッシュが計算された特権レベルの上の特権レベルで専用レジスタ(SPR)に格納される。実施形態では、署名を計算するために使用されるハッシュ関数の暗号強度によって、およびハッシュを計算するためのパラメータのうちの1つとして使用される秘密鍵によって、強化されたセキュリティ(例えば、よりセキュアな署名)が提供される。
【0030】
1つまたは複数の実施形態では、3つのパラメータの暗号ハッシュを計算するために、新しいプロセッサ命令が導入され、第1のレジスタ(好ましくは、汎用レジスタ(GPR:general purpose register))によって第1のパラメータ(値)が提供され、第2のレジスタ(好ましくは、汎用レジスタ(GPR))によって第2のパラメータ(値)が提供され、第3のレジスタ(好ましくは、専用レジスタ(SPR))によって第3のパラメータが提供される。1つまたは複数の実施形態では、第3のパラメータは、専用レジスタ(SPR)内で設定される秘密鍵であるのが好ましい。ハッシュは、RT<=H(RA,RB,<秘密鍵>)によって表されてよい。1つまたは複数の実施形態では、秘密鍵を格納する専用レジスタ(SPR)は、ハッシュを計算する特権レベル(例えば、ハッシュ計算を実行する特権レベル)で直接アクセス可能ではなく、ハッシュ計算命令を実行する特権レベルの上の特権レベルでアクセス可能である。
【0031】
実施形態では、スーパーバイザ・モードのみでアクセス可能であるスレッドごとに現在の秘密鍵を格納するために、新しい特権的アクセス専用レジスタ(SPR)が使用される。一態様では、正確な関数および秘密鍵は実装に固有であり、秘密鍵はプロセスのコンテキストの一部とすることができる。実施形態では、プロセスがハードウェア・スレッドにスケジュールされる前に、専用レジスタ(SPR)内のそのプロセスに関連付けられた秘密鍵が設定される。1つまたは複数の実施形態では、プロセッサでの実行の状態とも呼ばれるスーパーバイザ・レベルの動作で、秘密が設定される。これに関して、電子メール・クライアント、ブラウザなどのアプリケーションは、ユーザ・モードまたは問題状態として知られている特権状態で実行される。オペレーティング・システムは、通常、スーパーバイザ特権状態として知られているより高い特権状態で、プロセッサ上で実行される。プロセッサ内には、スーパーバイザ特権状態のみで直接アクセスされる(例えば、読み取られるか、または書き込まれる)ことが可能であり、ユーザ・モード/問題状態でレジスタに直接アクセス(読み取り/書き込み)しようとする試みが行われた場合にアクセス例外を引き起こす、レジスタが存在する。1つまたは複数の実施形態では、そのようなレジスタ内で鍵が保持され、したがって、ユーザ・モード/問題状態で実行されているアプリケーションにとって、このレジスタは秘密であるか、または隠蔽されていると見なされる。
【0032】
秘密鍵を格納するための専用レジスタ(SPR)は、実施形態では、ハードウェア・スレッドごとのレジスタであり、一態様では、秘密鍵を保持している専用レジスタ(SPR)35は、
図3に示されているプロセッサ102の実行ユニット24に関連付けられた物理レジスタ・ファイル32内にあるが、秘密鍵を保持している専用レジスタ(SPR)35は、プロセッサ内の他の場所にあり得るということが企図される。例えば、専用レジスタ(SPR)35を含む物理レジスタ・ファイル32は、実行ユニット24内に存在することができるか、または別の専用レジスタ(SPR)35は、
図3に破線で示されているように、実行ユニット24内にあるものとすることができる。
【0033】
1つまたは複数の実施形態では、ハッシュを計算するための新しい命令は、「hashgen」と呼ばれるが、新しい命令には他の用語が企図される。実施形態では、新しい「hashgen」命令は、実施形態において秘密鍵の値をパラメータのうちの1つとして使用することを含む、3つのパラメータの暗号ハッシュを計算する。実施形態では、秘密鍵は、アクセスが制限された専用レジスタ(SPR)に格納され、1つの態様では、新しいハッシュ計算命令(「hashgen」)を実行する特権レベルの上の特権レベルのみでアクセス可能である専用レジスタ(SPR)に格納される。実施形態では、暗号ハッシュ命令「hashgen」は、ダブル・ワード幅(64ビット)の汎用レジスタ(GPR)によって提供されたスタック・ポインタ、ダブル・ワード幅(64ビット)の別の汎用レジスタ(GPR)によるタグ/コンテキストID、および秘密鍵の暗号ハッシュを計算する。実施形態では、秘密鍵は、暗号ハッシュ計算命令(「hashgen」)を実行している特権レベルで直接アクセスできないダブル・ワード(64ビット)フィールドである。
【0034】
プロセッサには、ハッシュ計算関数(すなわち、新しい(「hashgen」)命令)をサポートするための支援(例えば、回路、ロジック、ファームウェアなど)が提供され、コンパイラは、この命令を適切な場所に挿入し、このようにしてアプリケーション・コードを攻撃から保護する。「hashgen」命令を使用するハッシュ(署名)の計算は、例えば、プロセッサが複数の命令を実行することになっているソフトウェア・アプリケーション内で関数に入るときに、通常は関数呼び出しで実行される。そのため関数呼び出し時に(例えば、関数エントリで)hashgen命令がコードに挿入され、ハッシュ(署名)が計算されてメモリに格納される。通常、必要とされる入力、出力、および鍵幅を含む任意のハッシュ関数の選択が使用され得る。
【0035】
ハッシュ(署名)が一致しない場合、アプリケーション/プロセッサが攻撃を受けている恐れがあるため、関数から戻る(例えば、関数を終了する)前、または関数から戻るときにハッシュ(署名)をチェックし、それらが一致するかどうかを判定するべきである。したがって、関数復帰で、例えば、関数を終了するときに、ハッシュ(署名2)が再計算され、関数エントリで前に計算されてメモリに保存されたハッシュ(署名1)に対してチェックされる必要がある。言い換えると、ソフトウェア・ポインタが正確であり、意図されたターゲットを指していることが検証されるように、署名(ハッシュ値)が認証される必要がある。1つまたは複数の実施形態では、ハッシュを生成するために使用された命令と同じ命令(例えば、関数のエントリ時に使用された「hashgen」命令)を使用することによって、関数終了前または関数終了時にハッシュ(署名2)が再計算され得る。例えば、関数を終了するとき、または終了する直前に、関数に入るときにハッシュ(署名1)を計算するために使用された新しい「hashgen」命令を使用してハッシュ(署名2)が再計算されることが可能であり、再計算されたハッシュ(署名2)が、関数に入るときにメモリに格納されたハッシュ値(署名1)に対してチェックされ得る。前に計算されてメモリに格納されたハッシュ(署名1)は、呼び出されて読み込まれることが可能であり、新しい、または再計算されたハッシュ(署名2)は、関数エントリ時にハッシュを生成するための命令と同じ命令(例えば、「hashgen」)命令を使用して生成されることが可能であり、再計算されたハッシュ(署名2)は、メモリに格納されているハッシュ値(署名1)に対して比較され得る。2つのハッシュ値が一致する(すなわち、署名1=署名2である)場合、悪意のある攻撃がなかった可能性が高いため、コードは関数を終了し(復帰し)、動作を続行することができる。
【0036】
2つのハッシュ値が一致しない(署名1が署名2に等しくない)場合、対処されるべきであるエラーもしくは悪意のある攻撃の可能性またはその両方が存在した。一態様では、再計算されたハッシュ値(署名2)と格納されたハッシュ値(署名1)とが一致しない場合、トラップ関数が組み込まれ得る。トラップ関数またはトラップ割り込みは、ハッシュ(署名)が一致しない場合に、障害を待機するか、または関数復帰命令が実行されるのを許可するのとは対照的に、制御をオペレーティング・システムに向けることができる。これに関して、再計算されたハッシュ(署名2)とメモリからのハッシュ値(署名1)とを比較してハッシュ値(署名)が一致しない場合にトラップ関数(トラップ割り込み)を実行する関数を実行するために、「trapne」または「tdne」と呼ばれる新しい命令が使用されるが、上記トラップ関数(トラップ割り込み)では、制御がオペレーティング・システムに移行されるか、または攻撃を防ぐためのもしくは不一致(一致しない署名)をさらにチェックするための何らかの他のトラップが設けられ得る。
【0037】
実施形態では、新しい「hashgen」命令を使用して、ダブル・ワード(64ビット)のポインタからダブル・ワード・サイズのハッシュ(64ビット)が計算され、一態様では、計算されたハッシュが、ポインタが格納されている位置とは別の位置に格納されて、プロセッサおよびプロセッサ上で実行されるソフトウェア・アプリケーションにさらなるセキュリティを与える。ハッシュ計算は、署名として機能し、プロセッサを攻撃してプロセッサの制御を乗っ取るのをさらに困難にするが、それは単一のメモリ位置の変更が、署名を改ざんして攻撃を実行するのに十分でなくなるためである。すなわち、1つまたは複数の実施形態では、スタック・ポインタの復帰アドレスが1つのメモリ位置に保存され、計算されたハッシュ(例えば、署名)が、メモリ内の別の位置に格納される。したがって、ソフトウェア・プログラムを操作しているプロセッサの攻撃に成功するためには、スタック・ポインタの復帰アドレスのみ変更は、プロセッサもしくは実行中のプログラムまたはその両方の制御を乗っ取るのに十分ではない。
【0038】
加えて、より幅広の署名を利用する能力に起因して、よりセキュアなハッシュ関数が実装され得る。例えば、より幅広のフィールドがハッシュを計算するためのパラメータ(ベース値)として使用されるため、ダブル・ワード(64ビット)サイズのハッシュが実装され得る。実施形態では、例えば、署名をレジスタ・フィールドの幅の一部に詰め込む(例えば、署名を実効アドレス(EA)自体の一部(15ビット)に合わせる)など、より小さいフィールドを使用する代わりに、64ビット値が署名として使用される。1つまたは複数の実施形態では、計算されたハッシュと再計算されたハッシュとの間に不一致が存在する場合、制御をアプリケーションからシステム・ソフトウェアに移行させるためにハッシュをチェックするときに、トラップ例外またはトラップ割り込みが生成される。トラップ例外またはトラップ割り込みは、ユーザ・モードの命令がエラー状態(この場合、再計算されたハッシュに対する格納されたハッシュの不一致)になった場合にプロセッサにおいて生成され、制御をスーパーバイザ状態に移行させる、例外の一種である。一態様では、再計算されたハッシュの不一致の発生時に、制御を実行中のアプリケーションからシステム・ソフトウェアに移行させる、明示的なハッシュ・チェック命令が提供される。実施形態では、署名(ハッシュ)が一致しない場合に、障害が発生するのを待機するよりも良い制御を提供して、復帰命令が実行されないように、任意選択的なトラップ例外が、プログラムの制御をスーパーバイザ状態に移動/移行させる。
【0039】
本開示の1つまたは複数の実施形態がさらに詳細に説明されるが、特許請求の範囲の文言に明示的に示されない限り、本発明がこれらの詳細に限定されないことが認識されるべきである。ハッシュ(好ましくは、「hashgen」と呼ばれる秘密ハッシュ)を計算するための命令は、hashgen RT,RA,RBの形態をとり、RT<=ハッシュ関数(RA,RB,秘密鍵SPR)という関数を実行し、RT、RA、RBは、すべて汎用レジスタであり、64ビットの汎用レジスタであるのが好ましい。秘密鍵は、move-to(mtlr)またはmove-from(mflr)SPR命令によってハッシュを実行する特権レベルでは直接アクセスできず、その特権レベルの上の特権レベルでアクセスできる専用レジスタ(SPR)によって指定された64ビットの鍵であるのが好ましい。実施形態では、RBは、保護されているコード・ポインタ(例えば、コード・ポインタのメモリ・アドレスを保持する汎用レジスタ)を提供し、RAは、タグ/コンテキスト情報(例えば、コンテキストIDを保持する汎用レジスタ)を提供し、「秘密鍵SPR」は、秘密鍵を保持するSPRであり、RTは、計算されたハッシュ(例えば、結果/署名)が出力されるか、または返される先となる復帰レジスタである。
【0040】
関数呼び出し時(例えば、関数に入るとき)にハッシュを生成するための命令は、通常、ハッシュをメモリに格納するための格納命令と共に使用される。したがって、関数呼び出し(関数エントリ)が位置しているコードに挿入される命令は、次のように使用され得る。
hashgen RT,RA,RB
store RT,D(RA)[メモリ[RA+D]<=temp]
ここで、ハッシュ計算の出力(署名)をメモリに格納する動作は、別の命令である。実施形態では、ハッシュ計算命令「hashgen」が、ハッシュ署名を別の汎用レジスタ(GPR)(例えば、RT)に出力し、次に、ハッシュ結果(署名)をメモリに格納するための動作が、既存の格納命令(例えば、「std」)を使用して実行され得る。すなわち、ハッシュ計算(例えば、署名)をRTからメモリに格納するための動作は、別の格納命令(例えば、「std」)とすることができる。実施形態では、タグ/コンテキスト情報を指定する入力レジスタに対してオフセットを指定することによって、ハッシュ計算の値がメモリに格納され得る。
【0041】
代替の実施形態では、ハッシュ計算/生成命令は、別の格納(「st」)命令を使用せずにハッシュの計算結果(例えば、署名)が正しくメモリに格納されるように、格納動作/命令をハッシュ計算命令と組み合わせることができる。実施形態では、ハッシュを計算して、ハッシュ計算結果(署名)をRTからメモリに格納するマイクロオペレーションは、「hashgen」と呼ばれることが可能であるか、または異なる用語「hashst」を使用し得る、単一の命令とすることができる。一態様では、ハッシュの計算および格納の2つのマイクロオペレーションを実行する単一の命令は、タグ/コンテキスト情報を指定する入力レジスタに対してオフセットを指定することによってハッシュを格納することを含むことができる。
【0042】
同じ「hashgen」命令を使用してハッシュ(署名2)を再計算すること、および前に計算されてメモリに格納されたハッシュ(署名1)に対してチェックすることは、次の形態をとることができる。
load R1,D(RA)
hashgen RT,RA,RB
trapne R1,RT[比較し、レジスタ値が異なる場合、任意選択的にトラップする]
ここで、「load」R1,D(RA)は、前に計算されてメモリに格納されたハッシュ(署名1)の値をR1に読み込むことを指しており、「hashgen」RT,RA,RBは、RA、RB内の現在の値に基づいて、また1つまたは複数の実施形態では任意選択的な秘密鍵に基づいて、ハッシュ(署名2)を再計算する。命令「trapne」(「tdne」とも呼ばれる)は、メモリからR1に読み込まれたハッシュ値(署名1)を、RTに出力された現在生成されているハッシュ(署名2)に対してチェックまたは比較する。実施形態では、「trapne」または「tdne」命令は、トラップ関数を含むこともできる。例えば、2つのレジスタR1、RT内の値を比較したときに、値が同じでない場合、障害を待機するのではなく、制御がオペレーティング・システムに移行されるか、もしくは関数復帰命令を実行してコードを実行し続けるのではなく、動作が関数を終了するか、またはその両方である。単一の命令がハッシュ値(署名)の比較およびトラップ関数を実行するように、任意選択的なトラップ関数(トラップ割り込み)が、ハッシュ・チェック動作と組み合わせられ得る。
【0043】
代替の実施形態では、コンパクトな形態の命令が、メモリ読み込み命令およびハッシュ・チェック/トラップ関数を同じ命令に組み込むことができる。すなわち、ハッシュ署名チェック命令「trapne」または「tdne」(実施形態では、任意選択的にトラップ関数を含む)は、ストレージ・アクセス(すなわち、メモリへの読み込み命令)を組み込むことができる。同じ「hashgen」命令を使用してハッシュ(署名2)を再計算すること、ハッシュ値(署名1)をメモリから読み込むこと、前に計算されてメモリに格納されたハッシュ(署名1)に対してチェックすること、および任意選択的に、トラップ関数を含むことは、次の形態をとることができる。
hashgen RT,RA,RB
trapne R1,RT[比較し、レジスタ値が異なる場合、任意選択的にトラップする]
ここで、「trapne」は、(1)ハッシュ値(署名1)をメモリから読み込む動作、(2)メモリからのハッシュ値(署名1)を再計算されたハッシュ(署名2)に対してチェックする動作、および(3)任意選択的に含まれる場合、トラップ・マイクロオペレーションを実行する動作を含む。
【0044】
「hashgen」命令を使用して、および実施形態では、「tdne」または「trapne」命令を使用して、ハッシュ(署名)をチェックすることは、通常、ソフトウェア・アプリケーション内の関数を終了する前、または終了するときに、実行される。そのため、「ld」(読み込み)命令、「hashgen」命令、および「tdne」(「trapne」)命令(および実施形態では、読み込み命令を組み込むコンパクトな形態の命令)が、関数終了前または関数終了時(関数復帰命令の実行時または実行前)に挿入され、ハッシュ(署名2)が再計算されて、関数に入るとき、または入る前に、前にメモリに格納されたハッシュ(署名1)に対してチェックされる。
【0045】
プロセッサは、ハッシュ計算関数(例えば、新しい(hashgen)命令、または格納命令を組み込むコンパクトなバージョン)、ならびに新しいハッシュ・チェックおよび任意選択的にトラップ関数(例えば、「tdne」命令、または読み込み命令を組み込むコンパクトなバージョン)をサポートするための回路、ロジック、機能ユニット(例えば、秘密鍵のための専用レジスタ)、ファームウェアなどを備えており、コンパイラは、新しい命令を適切な場所(関数呼び出しおよび関数復帰)に挿入し、このようにしてアプリケーション・コードを攻撃から保護する。
【0046】
図4は、プロセッサを保護するため、およびより詳細には、ソフトウェア・アプリケーションの実行中の攻撃に対するプロセッサの抵抗力を高めるためのプロセスを実行する方法400の実施形態を示している。方法400は、より詳細には、特にソフトウェア・アプリケーションの動作中に、プロセッサをよりセキュアにするために、暗号署名を計算して利用することを対象にする。
図4に示されている方法400は便宜のために説明されており、一連のステップもしくは複数のステップまたはその両方を含んでいるとして本開示を制限することを意図していないが、特に示されない限り、プロセスは、一連のステップとして実行される必要がないか、もしくは
図4に関して示され説明された順序でステップが実行される必要がないか、またはその両方であるが、プロセスが統合されているか、または1つもしくは複数のステップがまとめて同時に実行されるか、またはその両方であってもよいし、またはステップが、開示された順序もしくは別の順序で実行されてよいことが、理解されるべきである。
【0047】
ソフトウェア・アプリケーションを実行するプロセッサをよりセキュアにし、例えば、プログラム・フローを制御しようとする試みもしくは許可されていないデータ・アクセスを獲得しようとする試みまたはその両方に対する抵抗力を高める方法400は、410で、例えばソフトウェア・アプリケーションの実行中に関数エントリを実行することを含む。一例では、処理中に関数呼び出し(関数プロローグとも呼ばれる)が発生する。420で、関数エントリ時に復帰アドレス値が汎用レジスタ(例えば、GRP r0)にコピーされる。一態様では、コピーされる復帰アドレスは、リンク・レジスタ(LR)によって提供される。一態様では、汎用レジスタ(例えば、GRP r0)は、64ビットのGRPであるが、他のサイズが企図される。430で、汎用レジスタGRP r0からの復帰アドレス値がメモリ位置に格納される。すなわち、この例では、GRP r0からの値がメモリ位置に移動される。1つまたは複数の実施形態では、GRP r0からの値は、汎用レジスタGRP r1内のスタック・ポインタからのオフセット(例えば、オフセット1)でメモリに格納されるのが好ましい。例えば、このオフセットは、GRP r1内のスタック・ポインタからの負または正のオフセットとすることができる。
【0048】
440で、ハッシュ関数Hを使用してハッシュ(例えば、署名)が計算される。ハッシュ計算は、複数の入力またはパラメータを含むことができ、実施形態では、3つのパラメータまたは入力を含む。実施形態では、ハッシュ計算の結果または出力は、GRP r0内に生成され、好ましい実施形態では64ビットである。ハッシュ計算のための3つの入力またはパラメータは、GRP r0、GRP r1、および専用レジスタ(SPR)内の値である。専用レジスタ(SPR)内の値は秘密鍵であり、一態様では、SPRは「HASHKEYR」と呼ばれる。実施形態では、専用レジスタHASHKEYR内の値は、ハッシュ計算の実行より高い特権レベルからのみアクセス可能である。ハッシュ関数Hは、任意の数のハッシュ関数であることができ、この方法は、選択されるか、または使用されるハッシュ関数Hによって制限されない。実施形態では、事前に定義されたハッシュ関数が使用される。GRP r0への出力は、特定の好ましい実施形態では、r0=H(GPR r0,GPR r1,HASHKEYR)によって表され得る。
【0049】
1つまたは複数の実施形態では、450で、GRP r0に出力されたハッシュ値が、メモリ位置に格納され、実施形態では、GRP r1内のスタック・ポインタからの別のオフセット(オフセット2)に格納される。460で、410で入った関数の残りの部分が実行される。関数の処理が実行され、関数が完了してプログラムが関数を終了するときに(例えば、関数復帰で)、関数終了で実行される再計算されたハッシュに対して、関数エントリで実行されたハッシュ署名をチェックするために、さらなる処理が実行される。
【0050】
図5は、プロセッサを保護するため、およびより詳細には、ソフトウェア・アプリケーションの実行中の攻撃に対するプロセッサの抵抗力を高めるためのプロセスを実行する方法500の実施形態を示している。方法500は、より詳細には、特にソフトウェア・アプリケーションの動作中に、プロセッサをよりセキュアにするために、暗号署名を計算して利用することを対象にする。
図5に示されている方法500は便宜のために説明されており、一連のステップもしくは複数のステップまたはその両方を含んでいるとして本開示を制限することを意図していないが、特に示されない限り、プロセスが一連のステップとして実行される必要がないか、もしくは
図5に関して示され説明された順序でステップが実行される必要がないか、またはその両方であるが、プロセスが統合されるか、または1つもしくは複数のステップがまとめて同時に実行されるか、またはその両方であってもよいし、またはステップが、開示された順序または別の順序で実行されてよいことが、理解されるべきである。
【0051】
ソフトウェア・アプリケーションを実行するプロセッサをよりセキュアにし、例えば、プログラム・フローを制御しようとする試みもしくは許可されていないデータ・アクセスを獲得しようとする試みまたはその両方に対する抵抗力を高める方法500は、510で、例えばソフトウェア・アプリケーションの実行中に、関数が完了した後に、関数終了(関数復帰)命令が発生することを含む。1つの例では、関数の処理中に、関数が完了し、関数が終了するか、または復帰する(関数エピローグとも呼ばれる)。520で、関数の終了時または終了前に、ハッシュ署名がメモリから汎用レジスタ(例えば、GPR r31)に読み込まれる。一例では、450で説明された、関数エントリ時にGRP r1内のスタック・ポインタからのオフセット2に格納された値が、GPR r31に読み込まれる。530で、(例えば、430で
図4を参照して説明されたように、GRP r1内のスタック・ポインタからのオフセット1に格納された)復帰アドレスが、メモリからGPR r31に読み込まれる。540で、復帰アドレスがGRP r0からリンク・レジスタ(LR)に移動される。
【0052】
550で、ハッシュ関数Hを使用してハッシュ(例えば、署名)が計算される。これに関して、550で、関数に入るときにハッシュを計算するために使用された方法と同じ方法(例えば、440でハッシュが計算された方法と同じ方法)で、同じレジスタ内の値を使用してハッシュが再計算される。このハッシュ関数Hは、関数エントリ時にハッシュを計算するために使用されたのと同じハッシュ関数Hである。このハッシュ計算は、関数に入るときにハッシュを計算する際に使用されたパラメータと同じパラメータを含む。実施形態では、このハッシュ計算の結果または出力は、GRP r0内に生成され、関数エントリ時にハッシュを計算するために使用されたビット数と同じビット数である。実施形態では、ハッシュ計算のための3つの入力またはパラメータは、GRP r0、GRP r1、および専用レジスタ(SPR)(例えば、HASHKEYR)内の値である。550からのGRP r0への出力は、特定の好ましい実施形態では、r0=H(GPR r0,GPR r1,HASHKEYR)によって表され得る。
【0053】
560で、GRP r31内の値がGRP r0内の値と同じであるかどうか(関数エントリ時のハッシュ署名が関数終了時のハッシュ署名に等しいかどうか)が判定される。ハッシュ署名値が同じである場合(560の「はい」)、プロセス500が570に進み、セキュリティ・チェックが合格した。570で、GRP r31が復元され、リンク・レジスタ内のアドレスへの関数復帰または関数終了が実行される。560で、GRP r31内のハッシュ値が、GRP r0内の再計算されたハッシュ値に等しくない場合(560の「いいえ」)、プロセスが580に続き、セキュリティ・チェックが失敗した。実施形態では、580で、トラップ割り込みによって制御がオペレーティング・システム(OS)に移行される。
【0054】
実施形態に従って、関数呼び出し(関数エントリ)時にハッシュを計算するためにコードに挿入される命令の例が、
図6を参照して説明され、
図6では、プロセッサにおいてサポートされる新しい命令「hashgen」が、ソフトウェア・プログラム/アプリケーションの処理中に関数エントリの前または関数エントリ時に3つのパラメータの暗号ハッシュを計算する。計算された暗号ハッシュは、署名として機能し、汎用レジスタ(GPR)31に保存される。
図6では、命令番号0および1が、ロジック・レジスタからの値を保存する関数を実行する。より詳細には、命令0(リンク・レジスタからの移動(mflr))が、リンク・レジスタからの値を汎用レジスタ(GRP)r0に移動し、命令1が、リンク・レジスタからの値を、GRP r1内のスタック・ポインタからのオフセット1でメモリ位置に格納する。命令2で、「hashgen」命令が実行されて、ハッシュを計算する。好ましい実施形態では、GRP r0内の値、GRP r1内の値、および秘密鍵(hashgen命令より高い特権レベルで専用レジスタからアクセス可能であるのが好ましい)を含む3つの入力を使用してハッシュが計算され、ハッシュ計算をr0に出力する(返す)。命令4は、GRP r0に出力されたハッシュ値を、GRP r1内のスタック・ポインタからのオフセット2でのメモリ位置に格納する。命令5は、GRP31内の値をGRP r1内のスタック・ポインタからのオフセット3に保存する。
【0055】
実施形態に従って、関数復帰(関数終了)時にハッシュ署名をチェックするために、例えばコンパイラによってコードに挿入される命令の例が、
図7を参照して説明され、
図7では、プロセッサにおいてサポートされる新しい命令「tdne」が、ソフトウェア・プログラム/アプリケーションの処理中に関数終了(復帰)で暗号ハッシュをチェックし、ハッシュ署名が一致しないという条件に従って、トラップ割り込み関数を実行する。
図7では、命令0が、関数呼び出し時に計算されてメモリに格納されたハッシュ署名(例えば、GRP r1内のスタック・ポインタからのオフセット2に格納された値)をGPR31に読み込む。命令1で、(例えば、関数エントリ・マイクロオペレーションの間に格納されたGRP r1内のスタック・ポインタからのオフセット1に格納された)復帰アドレスが、メモリからGPR r0に読み込まれる。命令2で、復帰アドレスがGRP r0からリンク・レジスタに移動される。命令3で、「hashgen」命令が実行され、関数呼び出し(関数エントリ)時に計算された第1のハッシュを計算するために使用されたのと同じハッシュ関数および同じパラメータを使用して第2のハッシュ(署名2)を計算する。GRP r0内の値、GRP r1内の値、および秘密鍵(hashgen命令より高い特権レベルで専用レジスタからアクセス可能であるのが好ましい)を含む3つの入力を使用してハッシュが再計算され、第2のハッシュ計算(署名2)をr0に出力する(返す)。命令4は、メモリから復元された(関数エントリ時に計算された)ハッシュ(署名1)を、
図7の命令3で再計算されたハッシュ(署名2)に対してチェックして、署名が一致するかどうかを検証する。命令4は、マイクロオペレーションが命令に含まれている場合、かつ条件が満たされた(すなわち、ハッシュ署名1がハッシュ署名2に一致しない)場合に、任意選択的なトラップ関数をさらに実行する。命令5は、GRP r1内のスタック・ポインタからのオフセット3での値を使用してGPRを復元し(読み込み)、命令6は、リンク・レジスタ内のアドレスに戻る。
【0056】
本発明は、システム、方法、もしくはコンピュータ・プログラム製品、またはその組み合わせであってよい。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を含んでいるコンピュータ可読ストレージ媒体を含んでよい。
【0057】
コンピュータ可読ストレージ媒体は、命令実行デバイスによって使用するための命令を保持および格納できる有形のデバイスとすることができる。コンピュータ可読ストレージ媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、またはこれらの任意の適切な組み合わせであってよいが、これらに限定されない。コンピュータ可読ストレージ媒体のさらに具体的な例の非網羅的リストは、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、リード・オンリ・メモリ(ROM)、消去可能プログラマブル・リード・オンリ・メモリ(EPROMまたはフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク・リード・オンリ・メモリ(CD-ROM)、デジタル・バーサタイル・ディスク(DVD)、メモリ・スティック、フロッピー・ディスク、命令が記録されているパンチカードまたは溝の中の隆起構造などの機械的にエンコードされるデバイス、およびこれらの任意の適切な組み合わせを含む。本明細書において使用されるとき、コンピュータ可読ストレージ媒体は、電波もしくは他の自由に伝搬する電磁波、導波管もしくは他の送信媒体を伝搬する電磁波(例えば、光ファイバ・ケーブルを通過する光パルス)、またはワイヤを介して送信される電気信号などの,それ自体が一過性の信号であると解釈されるべきではない。
【0058】
本明細書に記載されたコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体から各コンピューティング・デバイス/処理デバイスへ、またはネットワーク(例えば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク、もしくはワイヤレス・ネットワーク、またはそれらの組み合わせ)を介して外部コンピュータまたは外部ストレージ・デバイスへダウンロードされ得る。このネットワークは、銅伝送ケーブル、光伝送ファイバ、ワイヤレス送信、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、もしくはエッジ・サーバ、またはそれらの組み合わせを備えてよい。各コンピューティング・デバイス/処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェイスは、コンピュータ可読プログラム命令をネットワークから受信し、それらのコンピュータ可読プログラム命令を各コンピューティング・デバイス/処理デバイス内のコンピュータ可読ストレージ媒体に格納するために転送する。
【0059】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA)命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、またはSmalltalk、C++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語もしくは同様のプログラミング言語などの従来の手続き型プログラミング言語を含む1つもしくは複数のプログラミング言語の任意の組み合わせで記述されたソース・コードもしくはオブジェクト・コードであってよい。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で全体的に実行すること、ユーザのコンピュータ上でスタンドアロン・ソフトウェア・パッケージとして部分的に実行すること、ユーザのコンピュータ上およびリモート・コンピュータ上でそれぞれ部分的に実行すること、またはリモート・コンピュータ上もしくはサーバ上で全体的に実行することができる。後者のシナリオでは、リモート・コンピュータが、ローカル・エリア・ネットワーク(LAN)もしくは広域ネットワーク(WAN)を含む任意の種類のネットワークを介してユーザのコンピュータに接続されてもよいし、または接続が、(例えば、インターネット・サービス・プロバイダを使用してインターネットを介して)外部コンピュータに対して行われてもよい。一部の実施形態では、本発明の態様を実行するために、例えばプログラマブル・ロジック回路、フィールドプログラマブル・ゲート・アレイ(FPGA)、またはプログラマブル・ロジック・アレイ(PLA)を含む電子回路は、コンピュータ可読プログラム命令の状態情報を利用することによってコンピュータ可読プログラム命令を実行し、電子回路をカスタマイズしてよい。
【0060】
本発明の態様は、本明細書において、本発明の実施形態に従って、方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート図もしくはブロック図またはその両方を参照して説明される。フローチャート図もしくはブロック図またはその両方の各ブロック、およびフローチャート図もしくはブロック図またはその両方に含まれるブロックの組み合わせが、コンピュータ可読プログラム命令によって実装され得るということが理解されるであろう。
【0061】
これらのコンピュータ可読プログラム命令は、コンピュータまたは他のプログラム可能なデータ処理装置のプロセッサを介して実行される命令が、フローチャートもしくはブロック図またはその両方の1つまたは複数のブロックに指定される機能/動作を実施する手段を作り出すべく、汎用コンピュータ、専用コンピュータ、または他のプログラム可能なデータ処理装置のプロセッサに提供されてマシンを作り出すものであってよい。これらのコンピュータ可読プログラム命令は、命令が格納されたコンピュータ可読ストレージ媒体がフローチャートもしくはブロック図またはその両方の1つまたは複数のブロックに指定される機能/動作の態様を実施する命令を含んでいる製品を備えるように、コンピュータ可読ストレージ媒体に格納され、コンピュータ、プログラム可能なデータ処理装置、もしくは他のデバイス、またはそれらの組み合わせに特定の方式で機能するように指示できるものであってもよい。
【0062】
コンピュータ可読プログラム命令は、コンピュータ上、他のプログラム可能な装置上、または他のデバイス上で実行される命令が、フローチャートもしくはブロック図またはその両方の1つまたは複数のブロックに指定される機能/動作を実施するように、コンピュータ、他のプログラム可能なデータ処理装置、または他のデバイスに読み込まれ、コンピュータ上、他のプログラム可能な装置上、またはコンピュータ実装プロセスを生成する他のデバイス上で一連の動作可能なステップを実行させるものであってもよい。
【0063】
図内のフローチャートおよびブロック図は、本発明のさまざまな実施形態に従って、システム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、および動作を示す。これに関連して、フローチャートまたはブロック図内の各ブロックは、規定された論理機能を実装するための1つまたは複数の実行可能な命令を備える、命令のモジュール、セグメント、または部分を表してよい。一部の代替の実装では、ブロックに示された機能は、図に示された順序とは異なる順序で発生してよい。例えば、連続して示された2つのブロックは、含まれている機能に応じて、実質的に同時に実行されるか、または場合によっては逆の順序で実行されてよい。ブロック図もしくはフローチャート図またはその両方の各ブロック、およびブロック図もしくはフローチャート図またはその両方に含まれるブロックの組み合わせは、規定された機能もしくは動作を実行するか、または専用ハードウェアおよびコンピュータ命令の組み合わせを実行する専用ハードウェアベースのシステムによって実装され得るということにも注意する。
【0064】
さらに、さまざまな実施形態に従うシステムは、プロセッサ、およびプロセッサに統合されたロジックもしくはプロセッサによって実行可能なロジックまたはその両方を含んでよく、このロジックは、本明細書において列挙された処理ステップのうちの1つまたは複数を実行するように構成される。統合されるということは、プロセッサにロジックが、特定用途向け集積回路(ASIC)、フィールド・プログラマブル・ゲート・アレイ(FPGA)などのハードウェア・ロジックとして組み込まれるということである。プロセッサによって実行可能であるということは、ロジックが、プロセッサによってアクセス可能なハードウェア・ロジック、ソフトウェア・ロジック(ファームウェア、オペレーティング・システムの一部、アプリケーション・プログラムの一部など)など、またはハードウェア・ロジックおよびソフトウェア・ロジックの何らかの組み合わせであり、プロセッサによって実行されたときに何らかの機能をプロセッサに実行させるように構成されているということである。ソフトウェア・ロジックは、従来技術において知られた任意のメモリ・タイプの、ローカルもしくはリモートまたはその両方のメモリに格納されてよい。ASIC、FPGA、中央処理装置(CPU)、集積回路(IC)、グラフィック処理装置(GPU)といった、ソフトウェア・プロセッサ・モジュールもしくはハードウェア・プロセッサまたはその両方などの、従来技術において知られた任意のプロセッサが使用されてよい。
【0065】
上で提示された説明から複数の組み合わせを作成して、前述のシステムもしくは方法またはその両方のさまざまな特徴が任意の方法で組み合わせられてよいということが明らかである。
【0066】
本発明の実施形態が、サービスをオンデマンドで提供するように顧客のために展開されるサービスの形態で提供されてよいということがさらに理解されるであろう。
【0067】
本発明のさまざまな実施形態の説明は、例示の目的で提示されているが、網羅的であることは意図されておらず、開示された実施形態に制限されない。説明された実施形態の範囲から逸脱しない多くの変更および変形が、当業者に明らかとなろう。本明細書で使用された用語は、実施形態の原理、実際の適用、もしくは市場で見られる技術を超える技術的改良を最も良く説明するため、または他の当業者が本明細書で開示された実施形態を理解できるようにするために選択されている。
【手続補正書】
【提出日】2023-07-13
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
プロセッサにおいてデータを処理する方法であって、前記プロセッサが、
関数呼び出し命令が発生することに応答して、3つのハッシュ入力パラメータのハッシュを使用してエントリ・ハッシュ値を計算することであって、前記入力パラメータのうちの1つが、専用レジスタに格納された秘密鍵である、前記計算することと、
前記エントリ・ハッシュ値を第1のメモリ位置に格納することと
を実行する、方法。
【請求項2】
前記第1のメモリ位置は、第1の汎用レジスタ内のスタック・ポインタからの第1のオフセットにある、請求項1に記載の方法。
【請求項3】
リンク・レジスタによって提供された値を第2の汎用レジスタ・エントリにコピーすることと、
前記第2の汎用レジスタ・エントリからの前記値を第2のメモリ位置に格納することと
を前記プロセッサがさらに実行する、請求項1
または2に記載の方法。
【請求項4】
前記第2のメモリ位置は、前記第1の汎用レジスタ・エントリ内のスタック・ポインタからの第2のオフセットにある、請求項3に記載の方法。
【請求項5】
前記エントリ・ハッシュを計算するための前記3つのハッシュ入力パラメータは、前記第1の汎用レジスタ・エントリ内の前記値である第1のハッシュ入力パラメータと、前記第2の汎用レジスタ・エントリ内の前記値である第2のハッシュ入力パラメータと、前記秘密鍵である第3のハッシュ入力パラメータとを含む、請求項4に記載の方法。
【請求項6】
前記秘密鍵を格納している前記専用レジスタは、前記エントリ・ハッシュ値を計算する前記特権レベルより高い特権レベルでのみアクセス可能である、請求項5に記載の方法。
【請求項7】
関数終了命令が発生することに応答して、前記エントリ・ハッシュ値を計算するときに使用されたのと同じ3つの入力パラメータおよび同じハッシュを使用して終了ハッシュ値を計算することと、前記エントリ・ハッシュ値が前記終了ハッシュ値と同じであるかどうかを判定することとを前記プロセッサが更に実行する、請求項1
~6のいずれか1項に記載の方法。
【請求項8】
前記エントリ・ハッシュ値が前記終了ハッシュ値に等しいということに応答して、前記関数を前記プロセッサにより終了する関数復帰を実行することと、
前記エントリ・ハッシュ値が前記終了ハッシュ値に等しくないということに応答して、トラップ割り込みを実行することと
を前記プロセッサが更に実行する、請求項7に記載の方法。
【請求項9】
前記トラップ割り込みは、制御をオペレーティング・システムに移行させる、請求項8に記載の方法。
【請求項10】
関数終了命令が発生することに応答して、
前記エントリ・ハッシュ値を前記第2のメモリ位置から第3の汎用レジスタに読み込むことと、
前記値を前記第1のメモリ位置から前記第2の汎用レジスタに読み込むことと、
前記値を前記第2の汎用レジスタから前記リンク・レジスタに移動することと
を前記プロセッサが更に実行する、請求項3に記載の方法。
【請求項11】
前記終了ハッシュを計算するための前記3つのハッシュ・パラメータ入力は、前記第1の汎用レジスタ・エントリ内の前記値である第1のハッシュ入力パラメータと、前記第2の汎用レジスタ・エントリ内の前記値である第2のハッシュ入力パラメータと、前記秘密鍵である第3のハッシュ入力パラメータとを含む、請求項10に記載の方法。
【請求項12】
ソフトウェア・アプリケーションにおいて命令を実行するためのシステムであって、
プロセッサと、
プログラム命令を格納するコンピュータ可読媒体と
を備え、前記プログラム命令は、前記プロセッサに、
関数エントリ命令が発生することに応答して、3つのハッシュ入力パラメータのハッシュを使用してエントリ・ハッシュ値を計算することであって、前記入力パラメータのうちの1つが、前記専用レジスタに格納された秘密鍵である、前記計算することと、
関数終了命令が発生することに応答して、前記エントリ・ハッシュ値を計算するときに使用されたのと同じ3つの入力パラメータおよび同じハッシュを使用して終了ハッシュ値を計算することと、
前記エントリ・ハッシュ値が前記終了ハッシュ値と同じであるかどうかを判定することと
を実行させる、システム。
【請求項13】
前記プロセッサに、前記エントリ・ハッシュ値を第1のメモリ位置に格納することを実行させるプログラム命令を更に含む、請求項12に記載のシステム。
【請求項14】
リンク・レジスタによって提供された値を第2の汎用レジスタ・エントリにコピーすることと、
前記第2の汎用レジスタ・エントリからの前記値を第2のメモリ位置に格納することと
を前記プロセッサに実行させるように、前記プロセッサによって実行可能であるプログラム命令をさらに備える、請求項13に記載のシステム。
【請求項15】
前記エントリ・ハッシュを計算するための前記3つのハッシュ・パラメータ入力は
、第1の汎用レジスタ・エントリ内の前記値である第1のハッシュ入力パラメータと、前記第2の汎用レジスタ・エントリ内の前記値である第2のハッシュ入力パラメータと、前記秘密鍵である第3のハッシュ入力パラメータとを含む、請求項14に記載のシステム。
【請求項16】
前記秘密鍵を格納している前記専用レジスタは、前記エントリ・ハッシュ値を計算する前記特権レベルより高い特権レベルでのみアクセス可能である、請求項
12~15
のいずれか1項に記載のシステム。
【請求項17】
前記エントリ・ハッシュ値が前記終了ハッシュ値に等しいということに応答して、前記プロセッサが前記関数を終了する関数復帰を実行することと、
前記エントリ・ハッシュ値が前記終了ハッシュ値に等しくないということに応答して、トラップ割り込みを実行することと
を前記プロセッサに実行させるように、前記プロセッサによって実行可能であるプログラム命令をさらに備える、請求項12
~16のいずれか1項に記載のシステム。
【請求項18】
前記トラップ割り込みを実行することは、制御をオペレーティング・システムに移行させる、請求項17に記載のシステム。
【請求項19】
関数終了命令が発生することに応答して、
前記エントリ・ハッシュ値を前記第2のメモリ位置から第3の汎用レジスタに読み込むことと、
前記値を前記第1のメモリ位置から前記第2の汎用レジスタに読み込むことと、
前記値を前記第2の汎用レジスタから前記リンク・レジスタに移動することと
を前記プロセッサに実行させるように、前記プロセッサによって実行可能であるプログラム命令をさらに含む、請求項14に記載の
システム。
【請求項20】
プロセッサにおいてデータを処理する方法であって、
前記プロセッサが、
関数呼び出し命令が発生することに応答して、1つまたは複数のハッシュ入力パラメータのハッシュを使用してエントリ・ハッシュ値を計算することであって、前記入力パラメータのうちの1つが、専用レジスタに格納された秘密鍵である、前記計算することと、
関数復帰命令が発生することに応答して、前記エントリ・ハッシュ値を計算するときに使用されたのと同じ1つまたは複数の入力パラメータおよび同じハッシュを使用して終了ハッシュ値を計算することと、
前記エントリ・ハッシュ値が前記終了ハッシュ値と同じであるかどうかを判定することと、
前記エントリ・ハッシュ値が前記終了ハッシュ値に等しくないということに応答して、制御をオペレーティング・システムに移行させ、前記関数復帰命令を実行しないことと
を
実行する、方法。
【請求項21】
命令を備えているコンピュータ・プログラ
ムであって、前記プロセッサに、請求項1ないし11のいずれかに記載の方法を実行させる、コンピュータ・プログラ
ム。
【請求項22】
請求項21に記載のコンピュータ・プログラムを記録した、コンピュータ可読な記録媒体。
【国際調査報告】