(57)【要約】装置および方法は、ソフトウェアが実行の間に曝露され得る（非保護であり得る）ときに、キーおよび同様にクリティカルなソフトウェアエレメントを不正アクセスから保護する。キーが実行ソフトウェアに必要であるとの決定がなされると、キー検索コード（ＫＲＣ）がトリガされ、以前にメモリへとロードされたキーを検索するために実行を開始する。ＫＲＣとともに使用可能な監視タイマが、イネーブルにされ、カウンタを定期的にインクリメントする。ＫＲＣは、実行の間に異なる時点でカウンタをチェックするためのコードを含む。一実施形態において、監視タイマの値はまた、監視タイマによってチェックされ得る。監視タイマが所定の値に到達する（例えば、コードがエミュレータ上で実行されることを示す）場合には、システムはリセットされる。監視タイマが所定の値に到達する前に、キーが検索された場合には、ＫＲＣはキーをコードに戻す。
2010507873.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアエレメントを保護するための方法であって、該方法は、
コードを実行することと、
キーが該コードによって必要とされることを決定することと、
キー検索コード（ＫＲＣ）の実行をトリガすることであって、該ＫＲＣは、以前にメモリへとロードされたキーを検索するように構成され、該メモリは、該ＫＲＣによってアクセス可能である、ことと、
経過時間に基づいて、タイマ値を決定するために使用可能なタイマをイネーブルにすることと、
該ＫＲＣを実行することと、
該タイマ値をチェックすることと、
該タイマ値が所定の値に到達する前に、キーが検索される場合には、該ＫＲＣによって該キーを該コードに再調整することと、
該タイマ値が、該所定の値に到達する場合には、該キーを該コードに再調整する前に、該ＫＲＣの実行を停止することと
を包含する、方法。
【請求項２】
前記メモリ内の不連続な複数のメモリ位置に前記キーを格納することをさらに包含する、請求項１に記載の方法。
【請求項３】
前記複数のメモリ位置のそれぞれは、その内に格納された前記キーが操作される部分を有する、請求項２に記載の方法。
【請求項４】
前記実行を停止することは、システムをリセットすることをさらに包含する、請求項１に記載の方法。
【請求項５】
前記ＫＲＣを実行することは、
複数のメモリ位置からデータをフェッチすることであって、該メモリ位置は、それぞれキーを検索するために必要な該データの一部分を格納する、ことと、
該フェッチされたデータを操作することと、
該操作されたデータから該キーを検索することと
をさらに包含する、請求項１に記載の方法。
【請求項６】
前記タイマ値をチェックすることは、
前記ＫＲＣを始動する際に前記タイマを始動することと、
該ＫＲＣが、前記キーが格納されるすべてのメモリ位置をフェッチしたときに、該タイマ値をチェックすることと
をさらに包含する、請求項１に記載の方法。
【請求項７】
前記タイマ値をチェックすることは、
前記ＫＲＣを始動する際に前記タイマを始動することと、
前記キーが複数のメモリ位置に格納されるときには、該ＫＲＣが、該キーの最初の部分をフェッチしたときに、該タイマ値をチェックすることと
をさらに包含する、請求項１に記載の方法。
【請求項８】
複数のタイマをイネーブルにすることであって、各タイマは値と関連づけられる、ことと、
前記キーを互いに含む複数のメモリ位置のフェッチングを始動することと、
該キーのメモリ位置を互いに備える該複数のメモリ位置のフェッチのそれぞれに対してタイマを用いることと、
該タイマのいくつかが、その関連づけられた値に到達する場合には、前記ＫＲＣの実行を停止することと
をさらに包含する、請求項７に記載の方法。
【請求項９】
前記複数のタイマは、前記キー全体のフェッチに対するタイマをさらに含む、請求項８に記載の方法。
【請求項１０】
ソフトウェアエレメントを保護するための方法であって、該方法は、
コードを実行することと、
キーが、該コードによって必要とされることを決定することと、
キー検索コード（ＫＲＣ）の実行をトリガすることであって、該ＫＲＣは、以前に該ＫＲＣによってアクセス可能なメモリへとロードされたキーを検索するように構成される、ことと、
該ＫＲＣとともに使用可能な監視タイマをイネーブルにすることと、
値を該監視タイマと関連づけることと、
該ＫＲＣを実行することと、
該監視タイマによって該監視タイマの値をチェックすることと、
該監視タイマが所定の値に到達する前に、キーが検索される場合には、該ＫＲＣによって該キーを該コードに再調整することと、
該監視タイマが、該所定の値に到達する場合には、システムをリセットすることと
を包含する、方法。
【請求項１１】
前記メモリ内の不連続な複数のメモリ位置に前記キーを格納することをさらに包含する、請求項１０に記載の方法。
【請求項１２】
前記複数のメモリ位置のそれぞれは、その内に格納された前記キーが操作された形態において格納される部分を有する、請求項１１に記載の方法。
【請求項１３】
前記ＫＲＣを実行することは、
複数のメモリ位置からデータをフェッチすることであって、該メモリ位置は、それぞれキーを検索するために必要な該データの一部分を格納する、ことと、
該フェッチされたデータを操作することと、
該操作されたデータから該キーを検索することと
をさらに包含する、請求項１０に記載の方法。
【請求項１４】
前記監視タイマ値をチェックすることは、
前記ＫＲＣを始動する際に前記タイマを始動することと、
該ＫＲＣが、前記キーが格納されるすべてのメモリ位置をフェッチした後、該ＫＲＣによって該監視タイマ値をリセットすることと
をさらに包含する、請求項１０に記載の方法。
【請求項１５】
前記タイマ値をチェックすることは、
前記ＫＲＣを始動する際に前記タイマを始動することと、
前記キーが複数のメモリ位置に格納され、該ＫＲＣが、該キーの次の部分をフェッチする前に、該キーの最初の部分をフェッチしたときに、該タイマ値をリセットすることと
をさらに包含する、請求項１０に記載の方法。
【請求項１６】
前記キーの各部分がフェッチされた後、前記タイマ値をリセットすることであって、該タイマ値は、該フェッチのいずれか１つが、所定の量まで平均のフェッチ時間を超える場合には、システムリセットをトリガする所定の値に設定される、こと
をさらに包含する、請求項１５に記載の方法。
【請求項１７】
ＣＰＵと、
該ＣＰＵと動作可能に通信しているメモリと、
該ＣＰＵと動作可能に通信しているシステムクロックと、
該ＣＰＵをリセットし、設定可能な監視タイマ値（ＷＴＶ）を用いるように動作可能な監視タイマであって、該監視タイマは、該ＷＴＶが所定の値に到達するときに、該ＣＰＵをリセットするように構成される、監視タイマと、
キーとキー検索コード（ＫＲＣ）とを必要とするコードを備える該メモリ内の、該ＣＰＵによって実行可能なコードと
を備え、
該ＫＲＣは、該キーを検索するように構成され、
該キーは、該メモリ内に格納され、
該ＫＲＣは、経過時間値（ＳＣ  ＥＴＶ）を決定するために該システムクロックを用い、そして該監視タイマが、該ＣＰＵをリセットする前に、時間の量を増大させる方法で該ＷＴＶを設定するように構成され、
該ＫＲＣは、該キーを検索し、そして該キーを検索する間、
（ｉ）該ＳＣ  ＥＴＶをチェックして、該ＳＣ  ＥＴＶが所定の値を超える場合には、該キーの検索を停止し、
（ｉｉ）ＫＲＣコード実行時間が、所定の時間制限を超える場合には、該監視タイマが、該ＣＰＵをリセットするように、該ＷＴＶを設定するようにさらに構成される、
モバイルデバイス。
【請求項１８】
前記ＫＲＣは、該ＫＲＣが終了する前に、前記ＣＰＵがリセットされることを前記監視タイマに示すように、前記ＷＴＶを設定するようにさらに構成され、そしてさらに、該ＫＲＣは、実行の間に複数の所定の時点で該ＷＴＶをリセットするように構成される、請求項１７に記載のモバイルデバイス。
【請求項１９】
前記ＫＲＣは、該ＫＲＣ実行の時間の異なる部分に対して使用可能な複数のＳＣ  ＥＴＶを決定するようにさらに構成される、請求項１７に記載のモバイルデバイス。
【請求項２０】
フェッチされ、組み合わされるときに、キー全体を構成する前記キーの部分は、複数の位置に格納され、前記複数のＳＣ  ＥＴＶの少なくとも一部は、該キーの部分をフェッチする間の実行時間をチェックするために用いられる、請求項１９に記載のモバイルデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
（発明の分野）
本開示は、ソフトウェアセキュリティの分野に関する。特に、本開示は、キーソフトウェアエレメントを、物理的にセキュア化されていない可能性のあるデバイス内に配置されたコードから、またはコード自身が物理的にセキュア化されていない可能性のあるコードから検索することを非常に困難にするために使用可能な装置と方法との両方に関する。
【背景技術】
【０００２】
（発明の背景）
通常、実行可能なイメージを形成するようにリンクされたターゲット（コンパイルされた）コードという形態のソフトウェアを内部で用いる、世界中で使用される無数のデバイスが存在する。それらのデバイスの一部（例えば、リモートセンサからの画像を格納し、分析するために用いられる監視処理機器）は、物理的にセキュア化され得る。モバイル通信デバイスなどの他のデバイスは、物理的にセキュア化されていない可能性がある。
【０００３】
物理的にセキュア化されていない可能性のあるデバイスは、物理的にセキュア化されたデバイスにとっては可能でない方法でハッカーによって攻撃され得る。これらの無防備なデバイスは、分解され得、ソフトウェアが実行されるハードウェアを曝露した後に、様々な方法で攻撃され得る。１つの攻撃は、メインプロセッサ基板上のＪｏｉｎｔ  Ｔｅｓｔ  Ａｃｔｉｏｎ  Ｇｒｏｕｐ「ＪＴＡＧ」バッファに接続されたＩ２Ｃバスポートなどのトラブルシューティングポートを用いることである。コードが、実行の間にトレースされ、バッファの内容が読み取られ得る。別の攻撃は、デバイスのメモリの内容をコピーするかまたは引き出し、シミュレータ上でコードを実行することにより、実行可能なコードがトレースされたり、標的にされた情報が引き出されたりすることを可能にする。
【０００４】
製品内のコードを保護することは常に問題となるが、特定の機能を使用可能にするキーの使用、そしてコード内の指定されたフィールドにおける識別「ＩＤ」および他の機密情報の存在における最近の高まりは、物理的に小さいけれども非常に重要なビット配列に対する保護を提供する特別のニーズを作り出した。現在、利用可能な保護は、特別なメモリまたは他の追加されたハードウェアの使用を介している。これらのハードウェアベースの解決策は、制限された製品寿命を有し、非常にコストに敏感であり、かつ／または製品化までの制限された時間的要件を有する製品に対して、高価すぎ、かつ柔軟性が十分ではない。
【発明の概要】
【課題を解決するための手段】
【０００５】
（概要）
本明細書中に開示されるシステムおよび方法は、無認可の発見または開示からソフトウェアエレメントを保護するために使用可能である。「ソフトウェアエレメント」は、無認可の閲覧または発見から通常以上の保護を必要とする、ビットの任意のストリングを意味するために用いられる。特に一般的な例はキーであり、そのキーは、ソフトウェアまたはデータファイルを復号化したり、暗号解読したり、または使用を認可したりするために用いられる。しかし、開示された保護の機構および方法は、人物またはデバイスに対するＩＤ情報を含む、特別な保護が必要な任意のビットの組に適用可能である。
【０００６】
無認可の開示として本明細書中で言及される、ソフトウェアへの不正アクセスを得る攻撃は、ある人物がデバイスの物理的制御を有する場合には、その人物が該デバイスを攻撃することを含み、または彼らがコードのコピーを有し、エミュレータ上でコードを実行することを試みる場合には、彼らが該コードを攻撃することを含む。前者の場合には、コードがデバイス上で実行する間、攻撃は通常、コードをトレースする試みであり得る。このことは通常、搭載チップのトラブルシューティングポートおよびＪＴＡＧ能力を用いる形態をとる。後者の場合には、無認可の人物は、デバイスに対するコードイメージの制御を何とかして得て、エミュレータ上でコードを実行することを試みる。それぞれの場合において、攻撃の基本的な目的は、コードをトレースし、価値のあるソフトウェアエレメントを捕捉することである。
【０００７】
保護されるソフトウェアエレメントは、デバイスのメモリ内のどこかに格納される。「メモリ」は、デバイス内またはデバイスによって使用可能なメモリの任意の形態およびすべての形態を含み、読み出し専用または読み取り書き込み型であり得る。保護されるソフトウェアエレメントは、通常デバイス内のメインメモリまたは読み出し専用メモリ内にあるけれども、ソフトウェアエレメントは、取り外し可能なメモリ上にも存在したり、またはリモートアクセスされたりし得る。
【０００８】
命令（関数、ルーチンなど）の組は、フェッチされたデータから格納されたデータを集めたり、ソフトウェアエレメントを生成したり、または回復したりするように書き込まれる。このソフトウェアエレメント検索ソフトウェアは、本明細書中でキー検索コード「ＫＲＣ」と呼ばれる。ＫＲＣを構成するコードが、明確な命令の組として認識可能であり得る（または認識可能ではないことがあり得る）こと、あるいはデバイスのコードベースにおいて単一のインターフェースを提示し得る（または提示しないことがあり得る）ことが理解されるべきである。ＫＲＣの機能性を構成するコードの列は、無認可のトレースの試みをさらに妨げるために、非常に拡散され得、意図的にそのようにされ得る。さらに、ＫＲＣの部分は、割り込みサービスルーチン「ＩＳＲ」、および関数またはルーチンとして編成された伝統的なコードベース内などの場所に存在し得る。従って、ＫＲＣおよび同様な概念は、本明細書中に用いられるときに、ＫＲＣに属するとして記述された関数を実行するために用いられる、システムまたはその構成要素内のどこかに配置される任意のコードおよびすべてのコードを含むことが理解されるべきである。
【０００９】
本明細書中では、ソフトウェアエレメントの保護は、多くの実施形態において与えられており、それらの実施形態の組み合わせとして実装され得る。一実施形態におけるソフトウェアエレメントの保護は、２つのタイマを用いる。一方のタイプのタイマは、システムクロック（タイミング情報の専用でない供給源）に基づき、もう一方のタイプのタイマは、監視（ｗａｔｃｈｄｏｇ）タイマ（システムをリセットし得る専用のタイマ）に基づく。ＫＲＣは、コードトレーシングを妨げるために、１つまたは両方のタイマと連携して用いられる。複数のタイマの例も用いられ得る。
【００１０】
システムクロックベースのタイマは、メモリフェッチまたはコードの列を実行する際に、時間デルタをチェックするために用いられる。コードが、ＪＴＡＧまたは同様な技術を用いてトレースされる場合には、命令を実行するためにかかる時間の長さは著しく増大する。ＫＲＣが実行する間、実際の時間デルタ（指定された機能を完了するまでの時間）を計画された最大の時間デルタと比較することは、コードがトレースされたことの検出を可能にする。時間の計算は、時間差変数、カウントダウンタイマ、または他の方法として実装され得る。クリティカルなコードの実行の間に、トレース状態が検出されると、ＫＲＣは、偽の値（ｆａｌｓｅ  ｖａｌｕｅ）、値なし（ｎｏ  ｖａｌｕｅ）を返し得、システムをリセットさせるかまたは他の動作をとらせる。
【００１１】
監視タイマは、２つの方法で用いられる。一実施形態において、監視タイマ値は、正常な（非トレーシング）状況の下では、監視タイマがリセットをＣＰＵに送信するべきであることをタイマ値が示す前にＫＲＣが実行を終了するように、設定される。監視タイマは通常、バッファまたはカウンタのオーバランの結果としてシステムリセットを発行する。バッファは、実行コードの適切な動作を示すために、定期的に０にリセットされ得る。別の実施形態において、監視タイマとＫＲＣとは、タイマ値に加えて、共通の読み取り書き込みエリア（共有変数、バッファなど）を共有する。共通の読み取り書き込みエリアは、監視タイマというよりもＫＲＣがＣＰＵリセットコマンドをいつ送るかを決定し得るような方法で、実行するＫＲＣと監視タイマとを結びつけるために用いられる。このことは、より十分に以下で説明される。
【００１２】
さらに、無認可のコードトレーサーからＫＲＣをさらに隠す、間接コーディングを用いる方法およびその効果を示す他の実施形態が開示される。開示される例示的実施形態が、必要に応じて各実装のために、組み合わされることが意図されている。
【図面の簡単な説明】
【００１３】
【図１ａ】図１ａは、本明細書中に記述される様々な実施形態に関連して用いられ得る、例示的な無線通信デバイスを示すブロック図である。
【図１ｂ】図１ｂは、本明細書中に記述される様々な実施形態に関連して用いられ得る、例示的なコンピュータシステムを示すブロック図である。
【図２】図２は、デバイスのための例示的ソフトウェアのブロック図である。
【図３】図３は、無認可の開示からソフトウェアエレメントを保護するための流れ図である。
【図４ａ】図４ａ、図４ｂ、図４ｃ、および図４ｄは、無認可の開示からソフトウェアエレメントを保護するためのさらなる実施形態を例示する流れ図の組である。
【図４ｂ】図４ａ、図４ｂ、図４ｃ、および図４ｄは、無認可の開示からソフトウェアエレメントを保護するためのさらなる実施形態を例示する流れ図の組である。
【図４ｃ】図４ａ、図４ｂ、図４ｃ、および図４ｄは、無認可の開示からソフトウェアエレメントを保護するためのさらなる実施形態を例示する流れ図の組である。
【図４ｄ】図４ａ、図４ｂ、図４ｃ、および図４ｄは、無認可の開示からソフトウェアエレメントを保護するためのさらなる実施形態を例示する流れ図の組である。
【図５】図５は、無認可の開示からソフトウェアエレメントを保護するための監視タイマの使用を示す状態図である。
【図６】図６は、無認可の開示からソフトウェアエレメントを保護するための監視タイマの使用を示す流れ図である。
【発明を実施するための形態】
【００１４】
（詳細な説明）
当業者は、本発明の以下の説明が例示的であり、決して制限することではないことを理解されたい。本発明の他の実施形態はまた、本開示の利益を有するそのような当業者に対して容易にそれら自身を示唆するであろう。概して図面を参照すると、例示目的のための本発明が、図１から図６を通して具体化されて示される。装置が、構成に応じて、そして部分の詳細に応じて変化し得、方法が、本明細書中に開示される発明の概念から逸脱することなく、詳細および任意の動作の順序に応じて変化し得ることは認識されたい。
【００１５】
単語「例示的な（ｅｘｅｍｐｌａｒｙ）」または「例示的（ｅｘｅｍｐｌａｒ）」は、「実施例、例、または例示として役に立つこと」を意味するために用いられる。「例示的な」として、または「例示的」として記述される実施形態は、必ずしも他の実施形態より優れて好適かまたは有利であるとして解釈されることはない。
【００１６】
用語「コンピュータ読み取り可能な媒体」は、中央処理ユニット（ＣＰＵ、マイクロプロセッサ、ＤＳＰ、または命令を実行することが可能な任意の他の論理デバイス）による実行のために使用できる実行可能な命令（例えば、ソフトウェア、コンピュータプログラム）を提供するか、保持するか、または担持するために用いられる任意の媒体を示すために用いられる。媒体は、それらに制限することではないけれども、ＣＰＵによって読み取り可能な（ローカル、リモート、揮発性、不揮発性、取り外し可能などであり得る）メモリを含み、一次メモリ、（ディスク、取り外し可能なカードまたはフラッシュ、リモートディスクなどを含む）二次メモリなどの任意の適切な形態をとり得る。コンピュータ読み取り可能な媒体はさらに、無線通信デバイス、基地局、または他のＣＰＵを有するエンティティにおいて用いられる、実行可能なコード、プログラム命令、および／または決定入力をＣＰＵに提供するための任意の手段を含む。実行可能なコード、プログラム命令、決定入力などは、ＣＰＵによって実行される際に、本明細書中に記述される発明の特徴および機能を、ＣＰＵにイネーブルにさせ、サポートさせ、かつ／または実行させるために用いられる。
【００１７】
図１ａは、本明細書中に記述される様々な実施形態に関連して用いられ得る、例示的な無線通信デバイス１００を示すブロック図である。無線通信デバイス１００は、物理的に保護されないデバイスの実施例である。該開示において用いられるときに、「物理的に保護されない」は、潜在的な攻撃者またはハッカーが、どのような理由のためかまたは任意の手段によって、デバイス内のコードの少なくともなんらかの調査をなんらかの手段によって可能にする、物理デバイスに対して物理的にアクセスできる任意のデバイスを意味する。該概念はまた、攻撃者が、保護されるデータを有するコードまたはそのコピーを含むメモリの内容を取得し得るいかなる方法をも含んでいる。例えば、無認可の人物が、コードサーバが物理的にセキュアである会社内部のコードサーバへのアクセスを取得し、デバイス内で用いられたコードのコピーをそれでも取得し得る場合には、「物理的に保護されない」または「保護されない」の概念が適用される。後者の場合において、コードは、エミュレータまたは他の手段を用いて探査するハッカーに対して利用可能となり、保護されないことになる。
【００１８】
無線通信デバイス１００は、無線メッシュ状ネットワーク内のハンドセット、ＰＤＡ、無線ネットワークデバイス、またはセンサノードであり得る。他のすべての無線通信デバイスが、本明細書中では完全に企図される。
【００１９】
無線通信デバイス１００は、アンテナ１０２と、マルチプレクサ１０４と、低雑音増幅器（「ＬＮＡ」）１０６と、電力増幅器（「ＰＡ」）１０８と、変調回路１１０と、ベースバンドプロセッサ１１２と、スピーカ１１４と、マイクロホン１１６と、中央処理ユニット（「ＣＰＵ」）１２０と、データストレージ領域１２２と、ハードウェアインターフェース１１８とを備える。無線通信デバイス１００において、無線周波数（「ＲＦ」）信号は、アンテナ１０２によって送信され、受信される。マルチプレクサ１０４は、アンテナ１０２を送信信号経路と受信信号経路との間に連結するスイッチとして動作する。受信経路において、受信されたＲＦ信号は、マルチプレクサ１０４からＬＮＡ１０６に連結される。ＬＮＡ１０６は、受信されたＲＦ信号を増幅し、増幅された信号を変調回路１１０の復調部分に連結する。
【００２０】
一般に、変調回路１１０は、１つの集積回路（「ＩＣ」）内に復調器および変調器を組み合わせる。復調器および変調器はまた、別個の構成要素であり得る。復調器は、ＲＦ搬送波信号を取り去ってベースバンド受信音声信号を残し、その音声信号は、復調器出力からベースバンドプロセッサ１１２に送られる。
【００２１】
ベースバンド受信音声信号が、音声情報を含む場合には、ベースバンドプロセッサ１１２は、信号を復号化し、その信号をアナログ信号に変換する。次いで信号は、増幅され、スピーカ１１４に送られる。ベースバンドプロセッサ１１２はまた、マイクロホン１１６からアナログの音声信号を受信する。これらのアナログ音声信号は、ベースバンドプロセッサ１１２によってデジタル信号に変換され、符号化される。ベースバンドプロセッサ１１２はまた、送信のためのデジタル信号をコード化し、変調回路１１０の変調器部分にルーティングされるベースバンド送信音声信号を生成する。変調器は、ベースバンド送信音声信号をＲＦ搬送波信号と混合し、電力増幅器１０８にルーティングされるＲＦ送信信号を生成する。電力増幅器１０８は、ＲＦ送信信号を増幅し、その信号をマルチプレクサ１０４にルーティングする。そこでは、該信号が、アンテナ１０２による送信のためにアンテナポートに切り替えられる。ベースバンドプロセッサ１１２はまた、中央処理ユニット１２０と通信によって連結される。中央処理ユニット１２０は、メモリとデータストレージ領域１２２とにアクセスできる。中央処理ユニット１２０は、データストレージ領域１２２に格納され得る命令（すなわち、コンピュータプログラムまたはソフトウェア）を実行するように構成される。コンピュータプログラムはまた、ベースバンドプロセッサ１１２から受信され、データストレージ領域１２２に格納されるか、または受信の際に実行され得る。
【００２２】
中央処理ユニットはまた、新しいデバイスが、ハードウェアインターフェースによって検出されるときに、ハードウェアインターフェース１１８から通知を受信するように構成され得る。ハードウェアインターフェース１１８は、ＣＰＵ１２０と通信し、新しいデバイスと相互作用する制御ソフトウェアを有する電気機械的な検出器の組み合わせであり得る。
【００２３】
監視タイマ１２４は、一般にＣＰＵ１２０と同じ基板上に配置される追加のハードウェアデバイスである。監視タイマ１２４は、ＣＰＵとともに特定の共通バッファにアクセスし得、ＣＰＵリセットコマンドを発行し得る。ＣＰＵリセットコマンドは、全体のシステムを再始動させる（システムを再立ち上げする）。
【００２４】
通信デバイス１００は、筐体内に配置され、例示的ハンドセット筐体が、参照番号１６２として示される。筐体の性質は、上記された（そして、システム１３０に対して下記される）物理的構成要素に対する取り付け部分を単に提供し、その意図された用途に応じたフォームファクタと、埃、水、衝撃などからの内部構成要素の保護とを提供する。明らかに、ノート型コンピュータは、セル式電話器と異なる筐体を有するが、それらは、物理的構造内／物理的構造上に構成要素を取り付ける筐体の性質を共有し、そこでは、その構造は、デバイスの意図された用途のニーズを満たしている。ポータブルデバイスまたはモバイルデバイスは、筐体と、その内に取り付けられたその構成要素とが、人物によって携帯されるか、または人物によって可動にされるように設計されるデバイスである。例としては、ハンドセット、ノート型コンピュータ、ＰＤＡ、家庭用ＷｉＦｉルータ、モデムなどを含む。
【００２５】
図１ｂのコンピュータシステム１３０は、本明細書中に開示される保護機構とともに使用可能な、ＰＣ、複写機、音響復号化および再生デバイスなどを含むデバイス内で見出される例示的システムである。
【００２６】
システム１３０は、プロセッサ１３４などの１つ以上のプロセッサまたは論理ユニットを含む。追加のプロセッサが提供され得、そのようなプロセッサは、例えば、入力／出力を管理する補助プロセッサ、浮動小数点数値演算を実行する補助プロセッサ、信号処理アルゴリズムの高速実行に適切なアーキテクチャを有する特定目的マイクロプロセッサ（例えば、デジタルシグナルプロセッサ）、メイン処理システム（例えば、バックエンドプロセッサ）に従属するスレーブプロセッサ、デュアルまたはマルチプロセッサシステムのための追加のマイクロプロセッサまたはコントローラ、あるいはコプロセッサなどである。そのような補助プロセッサは、個別のプロセッサであり得るか、またはプロセッサ１３４と統合され得る。
【００２７】
プロセッサ１３４は、通信バス１３２に接続される。通信バス１３２は、コンピュータシステム１３０のストレージと他の周辺構成要素との間の情報伝送を容易にするためのデータチャネルを含み得る。通信バス１３２は、通常、データバス、アドレスバス、および制御バス（図示されない）を含む、プロセッサ１３４との通信のために用いられる信号の組から成り立っている。通信バス１３２は、任意のバスアーキテクチャ規格または規格化されていないバスアーキテクチャを含み得る。そのバスアーキテクチャは、例えば、ｉｎｄｕｓｔｒｙ  ｓｔａｎｄａｒｄ  ａｒｃｈｉｔｅｃｔｕｒｅ（「ＩＳＡ」）、ｅｘｔｅｎｄｅｄ  ｉｎｄｕｓｔｒｙ  ｓｔａｎｄａｒｄ  ａｒｃｈｉｔｅｃｔｕｒｅ（「ＥＩＳＡ」）、Ｍｉｃｒｏ  Ｃｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ（「ＭＣＡ」）、ｐｅｒｉｐｈｅｒａｌ  ｃｏｍｐｏｎｅｎｔ  ｉｎｔｅｒｃｏｎｎｅｃｔ（「ＰＣＩ」）ローカルバス、に準拠するバスアーキテクチャ、またはＩＥＥＥ４８８  ｇｅｎｅｒａｌ−ｐｕｒｐｏｓｅ  ｉｎｔｅｒｆａｃｅ  ｂｕｓ（「ＧＰＩＢ」）、ＩＥＥＥ６９６／Ｓ−１００を含む、米国電気電子技術者協会（「ＩＥＥＥ」）によって公布された標準規格、などである。
【００２８】
コンピュータシステム１３０は、メインメモリ１３６を含み、また二次メモリ１４４を含み得る。メインメモリ１３６は、プロセッサ１３４上で実行するプログラムのために命令およびデータのストレージを提供する。メインメモリ１３６は、一般にダイナミックランダムアクセスメモリ（「ＤＲＡＭ」）および／またはスタティックランダムアクセスメモリ（「ＳＲＡＭ」）などの半導体ベースのメモリである。他の半導体ベースのメモリタイプは、例えば、同期式ＤＲＡＭ（「ＳＤＲＡＭ」）、ラムバスＤＲＡＭ（「ＲＤＲＡＭ」）、強誘電体ＲＡＭ（「ＦＲＡＭ」）、などを含み、読み出し専用メモリ（「ＲＯＭ」）を含む。
【００２９】
二次メモリ１４４は、ハードディスクドライブ１４６および／または取り外し可能なストレージドライブまたはポート１４８、例えば、フロッピー（登録商標）ディスクドライブ、磁気テープドライブ、コンパクトディスク（「ＣＤ」）ドライブ、デジタルバーサタイルディスク（「ＤＶＤ」）ドライブ、またはソリッドステートメモリフォームファクタをオプションで含み得る。取り外し可能なストレージドライブ１４８は、媒体インターフェース１５２を介して取り外し可能なストレージ媒体１５４から読み出し、かつ／または取り外し可能なストレージ媒体１５４に書き込む。取り外し可能なストレージ媒体１５４は、ドライブまたはポート１４８と互換のタイプであり、例えば、フロッピー（登録商標）ディスク、磁気テープ、ＣＤ、ＤＶＤ、様々な種類およびフォームファクタのソリッドステートメモリなどである。代替の実施形態において、二次メモリ１４４は、コンピュータプログラムまたは他のデータまたは命令が、コンピュータシステム１３０へとロードされることを可能にするための、他の同様な手段を含み得る。そのような手段は、例えば、外部ストレージ媒体１５８およびインターフェース１５０を含み得る。外部ストレージ媒体１５８の例は、外部ハードディスクドライブまたは外部オプティカルドライブ、または／および外部光磁気ドライブを含み得る。
【００３０】
コンピュータシステム１３０はまた、監視タイマ１６０を有し、監視タイマ１６０は、ＣＰＵが、（そのプログラミングを介して）リセットし得る値をチェックする能力を有する。監視タイマ値が、所定のしきい値に到達する場合には、監視タイマは、ＣＰＵリセットコマンドを発行し、ＣＰＵリセットコマンドは、システムを再始動させる。
【００３１】
コンピュータシステム１３０はまた、通信インターフェース１３８を含み得る。通信インターフェース１３８は、ソフトウェアおよび／またはデータが、コンピュータシステム１３０と、外部デバイスおよび／またはセンサと、適用可能な場合には、ネットワークまたは他の情報源との間で伝送されることを可能にする。通信インターフェース１３８の例は、いくつかだけを挙げると、モデム、ネットワークインターフェースカード（「ＮＩＣ」）、シリアル通信ポートまたはパラレル通信ポート、ＰＣＭＣＩＡスロットおよびＰＣＭＣＩＡカード、赤外線インターフェース、およびＩＥＥＥ１３９４ファイアワイヤを含む。
【００３２】
接続性は、入力信号１４２（センサおよび／またはデバイスへの出力信号をも備え得る）を受信する通信チャネル１４０を介して達成される。通信チャネル１４０は、信号１４２を伝え、様々な通信手段（いくつかだけを挙げると、電線、ケーブル、光ファイバ、従来の電話回線、セル式電話リンク、無線周波数（ＲＦ）リンク、または赤外線リンクを含む）を用いて実装される。
【００３３】
図２は、図１ａおよび図１ｂにおいて論じられたようなデバイス内の例示的ソフトウェア（またはコード）２００のブロック図である。例示される実施形態において、オペレーティングシステム２０２は、デバイスが機能することを可能にする基本的な実行可能プログラムまたはプログラムを備える。オペレーティングシステム２０２に加えて、ソフトウェアは、アプリケーションデータ２１０とユーザインターフェース２０４とを備える。アプリケーションデータ２１０は、アプリケーションが機能するために必要な、またはアプリケーションがそのサービスを提供するために用いる、ユーザ情報とアプリケーション情報とを備える。
【００３４】
ユーザインターフェース２０４は、ＵＩアプリケーションによって用いられる、実行可能なユーザインターフェースアプリケーションと、ユーザインターフェースデータとの両方を備え得る。代替の実施形態において、ユーザインターフェースアプリケーション部分は、オペレーティングシステムの部分として含まれ得、ユーザインターフェース２０４は、ユーザインターフェースアプリケーションまたはユーザによって使用可能な、補助的なユーザデータまたはカスタマイズされたデータまたは他のデータを備え得る。ソフトウェアまたはコード２００は、デバイスドライバ２０６、デバイスドライバ２０８から、デバイスドライバｎまでなどの、１つ以上のデバイスドライバを通常さらに備える。これらのデバイスドライバは、オペレーティングシステム２０２上またはオペレーティングシステム２０２内で実行するソフトウェアと、オペレーティングシステム２０２と通信する様々な構成要素（いくつかを挙げると、ディスプレイ、キーパッド、スピーカ、マイクロホン、イヤホン、データセンサなど）との間の通信を容易にする実行可能なコードを備える。
【００３５】
さらに、アプリケーション２１２、２１４、２１６、２１８、アプリケーションｎまでなどの、ソフトウェアアプリケーションの組またはモジュールが示される。例示されるように、多数のアプリケーションが、デバイス内のソフトウェアまたはコード部分を備え得る。アプリケーションの数上の唯一の限界は、デバイス内で利用可能なストレージの物理的な限界である。
【００３６】
また、キー検索コード（ＫＲＣ）２２０が示される。オペレーティングシステム「ＯＳ」層の部分として示されたが、ＫＲＣは、システム全体の設計に依存してアプリケーションレベルのプログラムであり得る。ＫＲＣは、以下でより十分に記述されるように、メモリからソフトウェアエレメントを検索する命令の組であり、それらのエレメントに最大限の保護を提供する。
【００３７】
制限ではないけれども、音楽復号器を含むアプリケーションは、符号化または暗号化された音楽ファイルなどの適用可能なデータを実行するかまたは操作するために、しばしばキーを必要とする。アプリケーションと関連づけられる１つ以上のキーは、無認可の発見および使用から保護される１つ以上のビット配列であり、アプリケーション全体またはデータファイル全体ではない。同様に、（コードまたは大量のデータのセクション全体ではない）一意のＩＤ配列、キーまたは他のビット／バイト配列は、情報へのアクセスを得るために、アプリケーションの使用を認可または可能にするために用いられるか、あるいはデータまたはコードを使用可能な形態に変換するために用いられ、本開示が保護するために設計されるソフトウェアエレメントである。典型的なキー、ビット配列、バイト配列、ワード配列、または他のソフトウェアエレメント（本明細書中で、「キー」または「ソフトウェアエレメント」のいずれかとして集合的に称される）は、１バイト〜８バイト長の程度であり得るけれども、本明細書中に開示される方法および装置とともに使用可能なキーまたは保護可能なソフトウェアエレメントのサイズにおける特定の上限または下限は存在しない。キーは、ＯＳ内、システムデータ内、アプリケーションコード内、またはコードベースにわたって他の場所内に配置され得る。
【００３８】
本明細書中に開示される方法および装置はまた、企業秘密または機密データの操作技術、およびキーを含む、短いコード配列を保護するために用いられ得る。それらはまた、任意のタイプの機密データの比較的短い配列を保護するために用いられ得る。
【００３９】
図３は、ソフトウェアエレメントを保護するための、例示的配列および設計を示す。フローチャート３００は、キーを保護するために使用可能な方法の組を表している。図３の説明に加えて、その後の図からのエレメントとの組み合わせがなされ得る。
【００４０】
最初のフェーズにおいて、ブロック３０２で示されるように、キーは、それ自身のサブセットに分割され、それらのサブセクションは次いで、メモリ内の様々な位置に格納される。このことは、単にメモリを走査することによって見出されることから、キーを保護するために行われる。キー（ソフトウェアエレメント）は、それらが、メモリ内のすべてのデータおよびコード（すべてのメモリ位置）を走査することによって見出されることを可能にする、認識できるパターンをしばしば有している。従って、最初のステップは、キーをその最終的な形態で決して格納しないことである。キーは、多くのバイトまたはワードに単に分割され、メモリのまったく異なるセクション内に格納され得る。バイトまたはワードはまた、あらゆる認識できるパターンをさらに隠すために、任意の配列によって位置的に組み合わされ得る。例えば、デバイス内のメモリが、１６ビット単位でアドレス指定可能な（格納される）場合には、６４ビットのキーは、８つ（８）の８ビット配列へと分解され、８つ（８）のメモリ位置に格納される。各１６ビットのメモリ位置は、保護された配列の認識可能性を低減するために用いられる、別の８つ（８）のビットによってパディングされた残りの８つ（８）のビットを有する。検索される際に、パディングビットは単に取り去られる。パディングは、各保護されるビット間で無作為にビットを交互にするか、保護されるワードの前または後にワードを追加するか、または所望のビット配列の回復を可能にする任意の他の方法など、任意の方法であり得る。従って、ブロック３０２は、コード（複数のメモリ位置へのキーストレージ機構の設計）の設計特微と、設計方法を用いる動作との両方を表している。動作は、適正なメモリ位置からデータを検索し、それからキーを検索するために情報を組み立てることと関連づけられた動作である。
【００４１】
ブロック３０４において、アプリケーションは、コードであるキー検索関数を呼び出すことによって、キーをメモリ内のその複数の格納位置から検索する。キーを用いる必要があるＯＳまたはアプリケーションコードは、キーをその分散された位置から直接に検索し得ない。このことは、メモリ位置が増殖されることを防ぎ、パディングアルゴリズムを可能な限り未知にしておくために、メモリ位置が、単一のコード配列において保持されることを可能にする。従って、キーが必要なコードは、キー検索関数を呼び出す。キー検索関数は、読み取るためのメモリ位置と、格納されたキーセクションのパディングまたは（もしあれば）用いられた他の隠ぺい方法とを知る。特定の実施形態のために必要であるように、キー検索関数は、複数のメモリ位置からキーセクションを回復し、正しいビットを引き出し、検索されたキーを戻すためにビットを組み立てる。
【００４２】
ブロック３０６は、特徴のない関数名またはルーチン名の使用を表している。例えば、キー検索に用いられることになっている関数が命名されるときに、「ｋｅｙ＿ｒｅｔｒｉｅｖａｌ」または何か同様な名前に命名されるべきではない。ハッカーは、キーまたは識別「ＩＤ」が必要なアプリケーションまたはＯＳ内の特定の地点に現われる記述的名前を捜す。１つ以上の疑わしい名前を見出すと、ハッカーは、単に、関数が呼び出されることを待ち構え、戻り値（キー）を捕捉し得る。従って、関数呼び出しが、キーを検索するために用いられる場合には、関数名は、任意の英数字の配列であるべきである。従って、ブロック３０６は、コードの設計特微と、設計を用いることと関連づけられた動作との両方を表している。設計は、関数に対して特徴のない名前を用いることである。動作は、指名された特徴のない名前を用いて、任意の必要なパラメータとともに関数を呼び出すことと関連づけられた動作である。
【００４３】
キー検索コードの検出を防ぐさらなるステップは、ブロック３０８で示される。実行可能なイメージが生成された後、キー検索関数のためのシンボルは、任意のテーブルから取り去られ得る。このことは、単にアドレスへのなんらかの種類のジャンプを行わせ、そのことは、ハッカーが、有意なイベントとして検出することをより困難にする。従って、ブロック３０８は、実行可能なイメージの構築の間にとられる動作を表し、そして実行の間に例示されたシンボルを用いる、キー検索関数の呼び出しを表しており、そこでは、シンボルテーブルは、リストにされたこの関数に対するシンボルを有しない。
【００４４】
上記の説明のそれぞれは、ハッカーが、イメージを走査することによって、キー検索関数呼び出し、またはキー検索コードのセクションを認識することを困難にする、実行可能なイメージを作り出すために使用可能である。これらの技術を可能な限り多く用いることが、好ましいけれども、それらは必須ではない。各アプリケーションまたは実施形態に対して決定されるときに、これらの技術のすべてまたは一部が用いられ得るか、あるいはなにも用いられ得ない。
【００４５】
キー検索アルゴリズムの一部分としてのタイマの使用が、ブロック３１０によって表される。キー検索関数が、呼び出される際に（一実施形態に対して上記されたように、容易な検出から隠ぺいされた後）、該関数は、それがメモリからキーを検索するときにタイマを用いる。この図の説明は、ソフトウェアのみによる解決策であり、すなわち用いられるタイマは、専用のタイマではなくシステムタイマである。キー検索関数は、それが、様々なメモリ位置からキーの一部の検索を開始する直前に、システムクロックを読み取る。コードは次いで、実施形態に依存して、所定の最大の時間デルタが到達されるまでか、またはキーセクションがローカルメモリ内にあるまでの、１つ以上の時間デルタを生成する。時間デルタは、経過時間の測定値またはインジケータである。
【００４６】
最大の時間デルタに最初に到達する場合には、検索コードは、システム再始動コマンド（システムが未知の状態にあるときに、セル式電話器のようなデバイス内で用いられる）を送るか、またはさらなる処理を防ぐなんらかの種類のフラグまたはインジケータをＯＳに設定する。最大の時間デルタは、コード実行をトレースするためのトラブルシューティングポートの使用を防ぐ。コードをトレースするときには、実行にかかった時間は、トレーシングが発生しないときよりも有意に長くなる。システムまたは基板クロックが、通常のスピードでなおも動作しているので、検索時間が、通常予期される特定の量よりも長くかかる場合には、重大なシステム問題があるか、またはソフトウェアが、実行するときに、監視されている（トレースされている）ことが推論され得る。いずれの場合にも、最大のデルタが検出されると、キーは検索されず、かつ／または再調整されない。システムクロック信号を用いる任意の方法が、用いられ得ることに注意されたい。例えば、タイマは、単に、カウントダウンタイマ（時間デルタを計算するというよりも、クロックまたはタイミング信号に基づいて、ローカルタイマをゼロ（０）まで減少するタイマ）であり得る。システムクロック信号を用いる任意の方法が、完全に企図される。
【００４７】
ブロック３１２を続けると、時間デルタは、データ検索イベントに対してチェックされる。キーデータが検索されたか、または処理されたか、あるいはその両方の前に、あまりにも多くの時間が経ったことをタイマが示す場合には、「はい」の分岐が、ブロック３１４に対してとられる。ブロック３１４は、検索プロセスを停止させ、かつ／または関数の呼び出し元に値を戻さないためにとられた動作に対応する。ブロック３１６において、システムは、再始動／再立ち上げされる。ブロック３１４およびブロック３１６は、キーを検索する間のタイマの使用に対する１つの反応を表している。関連する動作は、単独でまたは組み合わせにおいて用いられ得る。例えば、コードは、期限切れのタイマを検出すると直ちに、システムが再始動するように書き込まれ得る。このことは、コードをトレースするあらゆる人物に対して有意な混乱をきたし、発生事象を特定する時間および困難性を大いに増大させる。しかし、示された動作の他の動作もとられ得る。例えば、検索関数は、タイマイベントが発生するときに、機能しない値を単に戻すか、または分岐するか、またはさもなければ実行を他のコードに移転し得る。ブロック３１４で考察された状態に対するこれらの可能な反応のいずれも、本明細書中では完全に企図される。
【００４８】
決定ブロック３１２において、キー部分が到着したときに、タイマが期限切れにならなかった場合には、「いいえ」の出口が、ブロック３１８に対してとられる。ブロック３１８と関連づけられた動作は、キーを呼び出しルーチンに伝えるために必要な動作を含む。ブロック３２０は、キー検索を過ぎて、通常のコード実行の継続を表している。
【００４９】
図４ａ、図４ｂ、図４ｃ、および図４ｄは、図３で示された全体の流れと関連して使用可能な実施形態をさらに例示する。流れ図４００は、キー検索コードを呼び出すための関数呼び出しを用いない実施形態を例示する。流れ図４１０は、複数のタイマを用いる実施形態を例示する。流れ図４２０は、検索関数呼び出しまたはコードからの戻りを捕捉するエミュレータの使用を打倒するための、特定のハードウェアタイマを用いる実施形態を例示する。これらの実施形態のそれぞれは、別個にまたは互いに連携して用いられ得る。流れ図４４０は、メモリからキーを再生成するための流れを例示する。
【００５０】
関数呼び出しを用いない、図４ａの流れ図４００を参照すると、ブロック４０２において開始する。キー検索コード「ＫＲＣ」は、関数名を割り当てられず、関数呼び出しを用いて呼び出されない。ブロック４０４に続くと、一実施形態は、プログラマブルなオペコードを用いる。該オペコードは、ユーザ定義可能なパラメータをとる。該パラメータは、ＫＲＣがどこにあるか（どのコードを実行するか）の指示を含む。従って、ブロック４０４は、設計選択（ユーザ定義オペコードの使用）と、流れとの両方を表しており、この流れは、キーを検索する必要があるコードが、指名されたパラメータを有するオペコードを用いて検索コードを呼び出すときにとられる動作を含む。これは、図３のブロック３０４〜ブロック３０８に対する代替の実施形態である。
【００５１】
あるいは、流れ図４００は、ブロック４０６を用いて具現化され得る。ブロック４０６は、設計選択と、キー検索ソフトウェアを呼び出すためのＩＳＲおよびその関連づけられたベクトルを用いることと関連づけられた動作とを表している。ＩＳＲと関連づけられたベクトルは、キー検索コードを示すように設定される。キーが、検索される必要があるときに、呼び出しコードは、ソフトウェア割り込みを発行する。割り込みサービスルーチンは、関連づけられたベクトルを探索することによって割り込みを処理する。ベクトルは、キー検索コードを示し、そしてコードが実行される。このことは、キー検索コードが、それと関連づけられた関数呼び出しを有しないことを意味しており、そのことは、コードをハッカーからさらに隠ぺいする（間接的動作のさらなるレベルである）。ブロック４０６は、図３のブロック３０４〜ブロック３０８に対する代替の実施形態である。
【００５２】
図４ｂは、概してブロック４１２で示されるような複数のタイマが、ブロック４１４と関連づけられた動作を用いて実施され得る方法４１０を例示する。メモリからのキー検索に対応する単一の計時動作の代わりに、キー生成プロセスは、時間が測定できるサブ動作にさらに再分割される。これらはまた、物理的時間においてオーバーラップし得る（タイマは同時に動作し得る）。ブロック４１４に対応する動作は、キー検索コードが始動されるときに、任意の必要なタイマを初期化することである。ブロック４１６に続くと、各タイマは、各所定の計時されるイベントでトリガされる。計時されるイベントは、キーのすべての部分を検索する時間、検索されたデータを処理する時間、および各個々のキー部分を検索する時間を含む。始動されると、複数のタイマが、図３のブロック３１０と関連づけられた動作の一部分として初期化され、図３のブロック３１２〜ブロック３２０で記述されたように、各タイマが処理される。複数のタイマのうちの任意の最初のタイマが期限切れになることは、タイミングの失敗と考えられ、所望の失敗モード（システム再始動または他の動作）をトリガする。
【００５３】
ハードウェアタイマ、監視タイマが、キー検索ソフトウェアによって用いられる実施形態は、図４ｃの流れ図４２０で示される。検索コードが実行する間、タイマは、検索コードに専用の専有可能な（ｄｅｄｉｃａｔｅａｂｌｅ）ハードウェアリソースである。このことは、専用のリソースではなく一般的なシステムクロックである図３で記述されたタイマとは異なる。図４ｃで示される方法で専用のリソースを用いることは、無認可のコードトレーシングの間の混乱を引き起こす。なぜならば、そのことが、明白な理由もなく（現在トレースされているコード内の特定の場所と直接相関しない）、システムリセットを生成するからである。
【００５４】
ブロック４２２は、キー検索コードの始動においてかまたはキー検索ソフトウェアを呼び出す前に、監視タイマを設定するかまたは起動させることと関連づけられた動作に対応している。この起動またはタイマの０へのリセットは、ＩＳＲの結果として実行される他のコードでそれを隠すことによってより不明瞭にされ得る。監視タイマが、実行されるコードから別個に動作するので、どれが用いられているかを決定することは困難である。ブロック４２４に続くと、動作は、２つの一般的なアプローチに対応する。最初のアプローチにおいて、監視タイマの最高値は、それが０まで動作する前に、キー検索コードが正常な状況下で終了するように、十分に高い値に設定される。完了すると、タイマは、非作動にされるか、またはリセットされる。別のアプローチにおいて、監視タイマの最高値は、キー検索プロセスが実行されるときに、キー検索コードが監視タイマをリセットしなければならないように、設定される。いずれかのアプローチまたは他の同様なアプローチが、監視タイマをサービスすることを備える。監視カウンタをリセットすることは、直接呼び出しによってか、またはＩＳＲの使用を介して間接的に遂行され得る。ほとんどの場合において、さらなる間接動作を作り出すために、ＩＳＲの方法を用いることが好ましい。
【００５５】
決定ブロック４２６に続くと、監視タイマの割り込みを処理するＩＳＲは、監視タイマの値を最高の値に対してチェックする。監視タイマの値が超えられている場合には、値はＯＫではなく、「いいえ」の出口が、ブロック４２８に対してとられる。ブロック４２８と関連づけられた動作は、システムをリセットするために必要な動作である。値がＯＫである場合には、「はい」の出口が、ブロック４３０に対してとられ、そこでは、通常のコード実行が継続し、タイマ（ｔｉｍｅ）が非作動にされるかまたは値が超えられるまで、決定ブロック４２６を介して通常のコード自身へと論理的にループバックする。他の実施形態は示されず、例えば、指定された期間の後、一部の監視タイマが、バッファを作成することによって動作するか、またはカウンタがオーバランし、そこでは、オーバランが、システムリセットをもたらす割り込みを生成する。監視タイマのあらゆる実施形態が、本明細書中に企図される。
【００５６】
プロセス４４０は、図４ｄに示されるように、キー検索（図３のブロック３１０）と関連づけられる流れを例示する。キー検索コードまたは関数が呼び出されるときに、ブロック４４２と関連づけられた動作が実行される。キーの一部を含むメモリ位置が、読み取られ、データが、キー検索コードに対して使用可能にされる。一実施形態において、これらのメモリ位置は連続している。他の実施形態において、メモリ位置は連続し得ない。該位置は、実装者によって行われる設計選択である。ブロック４４４において、関連する動作は、メモリから読み取られたデータを操作することが必要な、任意の動作またはすべての動作である。このことは、各ワードから交互のビットを取り外すことか、１つおきのワードを捨てることか、または同様なことと同じくらい単純であり得る。それはまた、キーの一部を再生成するための、より洗練されたアルゴリズムの使用を含み得る。ブロック４４６に続くと、動作は、完全なキーを操作されたデータから引き出すかまたは引き抜くことを終了するために必要な動作に対応している。このことは、前に操作されたデータの部分を互いに連結することと同じくらい単純であり得るか、またはより洗練された操作であり得る。ブロック４４８において、ブロック４４６から引き出されたか、再生成されたか、さもなければ決定されたキーは、キー検索コードを呼び出したコードに提供される。どのようにキーが戻され得るかについては制限がない。それは、相互にアクセス可能なバッファまたは変数へとロードされるか、さもなければ呼び出しコードに対して利用可能にされた、関数呼び出しの戻り値であり得る。
【００５７】
図５は、ソフトウェアエレメントを検索するエミュレータの無認可の使用を打破することに役立つように監視カウンタが用いられる、実施形態を示す状態図５００である。図３のようなシステムクロックまたは図４のブロック４２０に示されるような監視カウンタを用いることは、コードがデバイスのハードウェア上に駐在する間の無認可のコードトレーシングを打破することに役立つ。それは、イメージ全体がエミュレータ上で実行されるときには、無認可のコードトレーシングを検出するために用いられ得ない。エミュレータは、エミュレートされたクロック信号を提供するので、図３で測定される時間デルタは、適正に見える。さらに、エミュレータは、図４のブロック４２０で示された監視カウンタを有しないので、システムリセットはトリガされない。
【００５８】
図５を続けると、ブロック５０２は、停止状態の監視タイマを表している。キー検索コードを始動する一部分として、監視タイマは、ブロック５０６で起動される。該起動は、キー検索プロセスを始動する呼び出しの前または呼び出しの後に発生し得るが、好ましくは、メモリフェッチが始まる前に発生する。ブロック５０８によって例示されるように、監視カウンタは、ここで動作している。監視カウンタが動作している間、キー検索コードもまたＣＰＵ上で実行する。監視カウンタＩＳＲとキー検索コード（または、そのＩＳＲ）との両方によってアクセス可能な、共有変数、バッファ、または他の読み取り書き込みエリアが存在する。
【００５９】
監視が動作するときに、監視は、その関連づけられたＩＳＲをＣＰＵ上に定期的に呼び出す。ＩＳＲは、共有変数内の値をブロック５１２ごとにインクリメントする。それはまた、図４ｃで記述されたプロセスを同時に実行するように構成され得、すなわち、２つの論理的な流れが両方とも発生する。キー検索コードが実行するときに、それは、共有変数の値を定期的にチェックする。このことは、直接行われ得るけれども、何者かがコードをトレースする際に、共有エリアを直接チェックすることは、検出するには簡単すぎ得る。代替の方法は、ＩＳＲの使用を介して共有変数を間接的にチェックすることである。キー検索コードが、そのＩＳＲによって処理される割り込みを送るときには、該ＩＳＲは、タイマの値が、特定の値までインクリメントしたか、または特定の値を過ぎてインクリメントしたかを調べるためにチェックする。値がインクリメントしなかった場合には、何ものか（例えば、エミュレータ上で実行されるコード）が、変数をインクリメントさせないようにしている（ブロック５１４）。
【００６０】
インクリメントにおける失敗は、システムリセットをトリガ（ｔｒｉｇｇｉｎｇ）するキー検索ＩＳＲをもたらす（ブロック５１６）。共有変数が適切にインクリメントされる場合には、キー検索コードによってトリガされたＩＳＲは、共有変数を０までリセットする（ブロック５１０）。監視ＩＳＲは、共有変数をインクリメントすることを継続し、キー検索コードは、共有変数の値を定期的にチェックする。この論理的なループは、ブロック５０４に示されるように、クリティカルなコードセクションまで継続する。その地点では、監視タイマは、非作動にされる（ブロック５０２）か、あるいは他のプロセスまたはデフォルトのシステム検査プロセスに対して利用可能にされる。
【００６１】
図６は、ＫＲＣの実行と関連する監視タイマの使用を示す流れ図である。ＫＲＣと監視タイマとの両方を始動するためにとられる動作が、ブロック６００で示される。監視タイマとＫＲＣとの両方は、この図でカウンタと呼ばれる共通エリアへの読み取り書き込みアクセスを有する。決定ブロック６０６と決定ブロック６１２とに示されるカウンタは、同じカウンタを参照する。監視タイマおよびＫＲＣは、同時に実行する。
【００６２】
ブロック６０２を続けると、行われる動作は、監視タイマが割り込みをメインプロセッサに送ることを含み、それは、割り込みサービスルーチン「ＩＳＲ」を呼び出す）。ブロック６０４において、ＩＳＲを実行することによってとられる動作は、カウンタをインクリメントすることを含む。決定ブロック６０６が、点線６１６で取り囲んで示されることにより、さらなる実施形態が、この決定を省略し得ることを示す。その場合には、監視タイマは、ＩＳＲが呼び出されるごとにカウンタを単にインクリメントする。決定ブロック６０６を用いる実施形態において、カウンタは、カウンタ値が最大の「ＭＡＸ」値を越えているか否かを決定するためにチェックされる。ＭＡＸ値は、ＫＲＣが完了することか、またはカウンタを０にリセットしたことを可能にするために、十分な時間を残すように設定される。ＭＡＸに到達する場合には、ＫＲＣが、ハングした（例えば、応答を待っている）か、またはトレースされているかのいずれかであり、「はい」の出口が、ブロック６０８に対してとられる。ブロック６０８に対応する動作は、システムをリセットする（再始動させる）ために必要な動作である。カウンタがＭＡＸ未満の場合には、「いいえ」の出口が、ブロック６０２に対してとられる。実際の実装は、変化し得ることに注意されたい。例えば、ＭＡＸ値のチェックは、カウンタのオーバフローであり得る。監視タイマは、ＫＲＣ実行の終わりに非作動にされるまで、この順序を介してループする。
【００６３】
監視タイマは、ＫＲＣと同時に実行する。ブロック６１０は、ＫＲＣ実行の間にとられる動作を表している。ＫＲＣは、実行の間に様々な地点でカウンタをチェックするためのコードを含む。このことは、任意の数の方法において実装され得る。好適な一実施形態は、割り込みを送り、ＩＳＲにカウンタを処理させることである。このことは、コードの間接動作のさらなるレベルを提供し、監視タイマとＫＲＣ実行との間の相互接続を検出し、破ることをより困難にする。別の実施形態は、ＫＲＣ命令ストリーム内でカウンタを直接チェックすることである。たとえどのような方法が、カウンタコードを実装するために用いられても、関数の効果は、カウンタが、その値が０であるか否かを調べるためにチェックされることである。答が、はいである場合には、「はい」の出口が、ブロック６０８に対してとられ、システムはリセットされる。このことは、カウンタが、ＫＲＣによって０にリセットされる頻度よりもかなり高く（大きさの順序であり得る）、監視タイマが、呼び出される頻度のために行われる。カウンタは、初期化と、その後のＫＲＣからのリセットとによってのみ０に設定される。カウンタが０であることをＫＲＣが見出す場合には、それは、監視タイマが存在しないことを意味する。このことは、コードがエミュレータ内で実行することを示している。
【００６４】
カウンタが０でない場合には、「いいえ」の出口が、ブロック６１４に対してとられる。ブロック６１４と関連づけられた動作は、カウンタを０にリセットするために必要な動作を含む。ブロック６１４は次いで、ブロック６１０に向かう。ループは、ＫＲＣが実行を終了するまで継続される。
【００６５】
本発明の例示的な実施形態の上記の説明から、様々な技術が、本発明の範囲を逸脱することなく本発明の概念を実施するために用いられ得ることは明白である。さらに、本発明は、特定の実施形態に対する特有の参照とともに記述されたけれども、本開示の利益を有する当業者はまた、本明細書中に開示された本発明の概念の精神および範囲から逸脱することなく、変形が形態および詳細においてなされ得ることを認識する。記述された例示的な実施形態は、すべての点において制限ではなく例示として考慮される。本発明は、本明細書中に記述された特定の例示的な実施形態に制限されないけれども、本発明の範囲を逸脱することなく多くの再配置、組み合わせ、修正、および置換えが可能であることはまた理解されるべきである。
【図１ａ】
2010507873.tif 000003
【図１ｂ】
2010507873.tif 000004
【図２】
2010507873.tif 000005
【図３】
2010507873.tif 000006
【図４ａ】
2010507873.tif 000007
【図４ｂ】
2010507873.tif 000008
【図４ｃ】
2010507873.tif 000009
【図４ｄ】
2010507873.tif 000010
【図５】
2010507873.tif 000011
【図６】
2010507873.tif 000012
【国際調査報告】
2010507873.tif 000013
2010507873.tif 000014