(57)【特許請求の範囲】
【請求項１】
ソースコードの演算パスを偽装する方法であって、
コンピュータプログラムのソースコードに具体化され、計算ステップシーケンスを含む、元の式パスを識別する工程と、
前記元の式パスを複製して複数の複製式パスを生成する工程と、
元の式パスと前記複数の複製式パスとを含む一群の式パスから、前記コンピュータプログラムの実行中に、式パスをランダムに選択するよう構成された選択機構を生成する工程と、
前記複製式パスのそれぞれにおける１つ以上の演算を、それぞれの式パスについて最小および最大の許容実行時間を特定するタイミングウィンドウの少なくとも一部に基づいて、前記１つ以上の演算と等価の代替演算へ置換する置換工程と、
前記元の式パスと前記複数の複製式パスと前記選択機構とを含む、攻撃耐性のあるソースコードを生成する工程とを含む、方法。
【請求項２】
前記計算ステップシーケンスは、コンピュータ命令の一群を含む、請求項１に記載の方法。
【請求項３】
前記計算ステップシーケンスは、タスクを計算装置上で行う高度なソフトウェアプログラミングの一つを含む、請求項１に記載の方法。
【請求項４】
前記計算ステップシーケンスは、タスク群を計算装置上で行う高度なソフトウェアプログラミングの一つを含む、請求項１に記載の方法。
【請求項５】
前記置換工程は、所定の制約オプションの少なくとも一部に基づいて、前記代替演算を選択することを含み、前記所定の制約オプションは、タイミングウィンドウ許容差、目標性能、目標サイズ、目標安全レベル、およびランタイム制約のうち１つ以上を含む、請求項１に記載の方法。
【請求項６】
前記置換工程は、等価演算のパレットから前記代替演算を選択することを含む、請求項１に記載の方法。
【請求項７】
恒等演算のパレットから選択された１つ以上の恒等演算を挿入することにより、前記複数の式パスの少なくとも１つにおける前記代替演算の少なくとも一部を拡張する工程をさらに含み、
前記１つ以上の恒等演算は、前記タイミングウィンドウの少なくとも一部に基づいて選択される、請求項６に記載の方法。
【請求項８】
前記等価演算のパレットと前記恒等演算のパレットとは、前記コンピュータプログラムを記載するのに用いられたコンピュータプログラミング言語に基づいて事前準備されている、請求項７に記載の方法。
【請求項９】
前記等価演算のパレットと、前記恒等演算のパレットとは、ともに選択肢のパレットを形成し、前記選択肢のパレットは、
前記コンピュータプログラミング言語から、数学的および論理的演算のすべてを選択し、
前記数学的および論理的演算の等価物である、事前準備された演算の一群を構築し、
前記事前準備された演算の一群を、それらの関連タイミング属性によって特徴付け、
前記事前準備された演算の一群に準拠した恒等式の一群を構築し、
前記恒等式の一群を、それらの関連タイミング属性によって特徴づけること、によって作成される、請求項８に記載の方法。
【請求項１０】
前記１つ以上の恒等演算の各々の非特殊な入力を、前記コンピュータプログラムの少なくとも１つの定数および前記コンピュータプログラムの少なくとも１つの変数に結合させて、１つ以上の関連するおとり演算を形成する工程をさらに含む、請求項７に記載の方法。
【請求項１１】
前記選択機構は、前記代替演算と、前記１つ以上の恒等演算と、前記１つ以上の関連するおとり演算とを含む、固有のパスを選択する、請求項１０に記載の方法。
【請求項１２】
前記選択機構は、制御フロー条件ステートメントと、ジャンプ間接テーブルと、関数への間接コールと、ソフトウェアマルチプレクサとのうち、少なくとも１つを含む、請求項１に記載の方法。
【請求項１３】
前記選択機構は、エントロピーソースに基づいてランダム化されている、請求項１２に記載の方法。
【請求項１４】
ソースコードの演算パスを偽装するシステムであって、
１つ以上のプロセッサと、
前記１つ以上のプロセッサの少なくとも１つと動作的に結合する１つ以上のメモリとを含み、
前記１つ以上のメモリは、前記１つ以上のプロセッサの少なくとも１つにより実行される命令を格納し、
前記命令は、前記１つ以上のプロセッサの少なくとも１つに実行されたとき、
コンピュータプログラムのソースコードに具体化され、計算ステップシーケンスを含む、元の式パスを識別する工程と、
前記元の式パスを複製して複数の複製式パスを生成する工程と、
元の式パスと前記複数の複製式パスとを含む一群の式パスから、前記コンピュータプログラムの実行中に、式パスをランダムに選択するよう構成された選択機構を生成する工程と、
前記複製式パスのそれぞれにおける１つ以上の演算を、それぞれの式パスについて最小および最大の許容実行時間を特定するタイミングウィンドウの少なくとも一部に基づいて、前記１つ以上の演算と等価の代替演算へ置換する置換工程と、
前記元の式パスと前記複数の複製式パスと前記選択機構とを含む、攻撃耐性のあるソースコードを生成する工程と、
を含む方法を前記プロセッサに実行させる、システム。
【請求項１５】
前記計算ステップシーケンスは、コンピュータ命令の一群を含む、請求項１４に記載のシステム。
【請求項１６】
前記計算ステップシーケンスは、タスクを計算装置上で行う高度なソフトウェアプログラミングの一つを含む、請求項１４に記載のシステム。
【請求項１７】
前記計算ステップシーケンスは、タスク群を計算装置上で行う高度なソフトウェアプログラミングの一つを含む、請求項１４に記載のシステム。
【請求項１８】
前記置換工程は、所定の制約オプションの少なくとも一部に基づいて、前記代替演算を選択することを含み、前記所定の制約オプションは、タイミングウィンドウ許容差、目標性能、目標サイズ、目標安全レベル、およびランタイム制約のうち１つ以上を含む、請求項１４に記載のシステム。
【請求項１９】
前記置換工程は、等価演算のパレットから前記代替演算を選択することを含む、請求項１４に記載のシステム。
【請求項２０】
前記命令は、
恒等演算のパレットから選択された１つ以上の恒等演算を挿入することにより、前記複数の式パスの少なくとも１つにおける前記代替演算の少なくとも一部を拡張する工程を前記プロセッサに実行させる命令をさらに含み、
前記１つ以上の恒等演算は、前記タイミングウィンドウの少なくとも一部に基づいて選択される、請求項１９に記載のシステム。
【請求項２１】
前記等価演算のパレットと前記恒等演算のパレットとは、前記コンピュータプログラムを記載するのに用いられたコンピュータプログラミング言語に基づいて事前準備されている、請求項２０に記載のシステム。
【請求項２２】
前記等価演算のパレットと、前記恒等演算のパレットとは、ともに選択肢のパレットを形成し、前記選択肢のパレットは、
前記コンピュータプログラミング言語から、数学的および論理的演算のすべてを選択し、
前記数学的および論理的演算の等価物である、事前準備された演算の一群を構築し、
前記事前準備された演算の一群を、それらの関連タイミング属性によって特徴付け、
前記事前準備された演算の一群に準拠した恒等式フォーミュラの一群を構築し、
前記恒等式フォーミュラの一群を、それらの関連タイミング属性によって特徴づけること、によって作成される、請求項２１に記載のシステム。
【請求項２３】
前記命令は、
前記１つ以上の恒等演算の各々の非特殊な入力を、前記コンピュータプログラムの少なくとも１つの定数および前記コンピュータプログラムの少なくとも１つの変数に結合させて、１つ以上の関連するおとり演算を形成する工程を前記プロセッサに実行させる命令をさらに含む、請求項２０に記載のシステム。
【請求項２４】
前記選択機構は、前記代替演算と、前記１つ以上の恒等演算と、前記１つ以上の関連するおとり演算とを含む、固有のパスを選択する、請求項２３に記載のシステム。
【請求項２５】
前記選択機構は、制御フロー条件ステートメントと、ジャンプ間接テーブルと、関数への間接コールと、ソフトウェアマルチプレクサとのうち、少なくとも１つを含む、請求項２４に記載のシステム。
【請求項２６】
前記選択機構は、エントロピーソースに基づいてランダム化されている、請求項２５に記載のシステム。
【請求項２７】
ソースコードの演算パスを偽装するためのコンピュータで実行可能な命令を記憶したコンピュータ読み出し可能な記憶媒体であって、
前記命令は、１つ以上のコンピュータで実行されたとき、
コンピュータプログラムのソースコードに具体化され、計算ステップシーケンスを含む、元の式パスを識別する工程と、
前記元の式パスを複製して複数の複製式パスを生成する工程と、
元の式パスと前記複数の複製式パスとを含む一群の式パスから、前記コンピュータプログラムの実行中に、式パスをランダムに選択するよう構成された選択機構を生成する工程と、
前記複製式パスのそれぞれにおける１つ以上の演算を、それぞれの式パスについて最小および最大の許容実行時間を特定するタイミングウィンドウの少なくとも一部に基づいて、前記１つ以上の演算と等価の代替演算へ置換する置換工程と、
前記元の式パスと前記複数の複製式パスと前記選択機構とを含む、攻撃耐性のあるソースコードを生成する工程と、
を含む方法を前記コンピュータに実行させる、コンピュータ読み出し可能な記憶媒体。
【請求項２８】
前記置換工程は、等価演算のパレットから前記代替演算を選択することを含む、請求項２７に記載のコンピュータ読み出し可能な記憶媒体。
【請求項２９】
前記命令は、１つ以上のコンピュータで実行されたとき、恒等演算のパレットから選択された１つ以上の恒等演算を挿入することにより、前記複数の式パスの少なくとも１つにおける前記代替演算の少なくとも一部を拡張する工程を前記コンピュータに実行させる命令をさらに含み、
前記１つ以上の恒等演算は、前記タイミングウィンドウの少なくとも一部に基づいて選択される、請求項２８に記載のコンピュータ読み出し可能な記憶媒体。
【請求項３０】
前記命令は、１つ以上のコンピュータで実行されたとき、前記１つ以上の恒等演算の各々の非特殊な入力を、前記コンピュータプログラムの少なくとも１つの定数および前記コンピュータプログラムの少なくとも１つの変数に結合させて、１つ以上の関連するおとり演算を形成する工程を前記コンピュータに実行させる命令をさらに含む、請求項２９に記載のコンピュータ読み出し可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般に、不正な解析に侵されないソフトウェアに関する。本発明は特に、演算パス（Operational Paths）を偽装するソフトウェアコードの製造のためのシステムおよび方法であって、ランタイム中または逆行分析試行中のコードの分析がより困難になるような、システムおよび方法に関する。
【背景技術】
【０００２】
コンピュータ技術の分野において、ソフトウェアは通常、モノリシックであるよりもむしろモジュラーの特徴を呈する。その上、所与のソフトウェアで多数の分離した個別のアルゴリズムが使用されることはよくある。このような完全に異なるアルゴリズムが組み合わされて、ソフトウェアが必要とするサービス（すなわち機能性）を提供するようにする。ある特定のサービスのために、多数の異なるアルゴリズムが利用されることはよくあることである。概して言えば、この状況におけるアルゴリズムは、タスクまたはタスク群を遂行するための計算ステップのシーケンスである。アルゴリズムのサイズは多様である。非常に大きい場合もあれば、数個の命令の群ほどに小さい場合もある。一つのアルゴリズムが、それより小さいアルゴリズムを含むこともあるし、それがさらに小さいアルゴリズムを含むこともある。このヒエラルキーの階層の数はいくつであってもよい。
【０００３】
かかるソフトウェアは攻撃者によって様々な方法で逆行分析されたり改ざんされたりすることがよく知られている。かかる改ざんは、多くの市販のアプリケーションにおいて望ましくなく、かかる攻撃に対抗するための暗号が作成されている。暗号作成において、サイドチャネル攻撃とは、暗号システムの物理的インプリメンテーションと関連する物理的特徴とから得られる情報に基づくターゲットソフトウェアコード内の基本アルゴリズムへの攻撃である。暴力的な攻撃を含むような直接的な侵害やアルゴリズムそのものの理論的弱点よりも、システムの物理的な特徴に基づくかかる攻撃には通常、タイミング情報、消費電力、電磁漏洩や、同様の物理的特徴などの属性（これらには限定されない）が関与している。たとえば、音声ですら、暗号システムを解読するために悪用できる情報のさらなる情報源を提供しうる。多くの場合、サイドチャネル攻撃の多くには、暗号作成が実行されるシステムの内部操作の技術的情報が、かなり必要とされる。
【０００４】
サイドチャネル攻撃と同様に、反復起動攻撃は、暗号システムの物理的インプリメンテーションと関連する物理的な特徴とから得られる情報に基づいてターゲットソフトウェアコード内の基本アルゴリズムを攻撃するために通常使用される技術の一種である。ただし、かかる反復起動攻撃は、ある一群の入力があったときに、ある起動から次の起動への同じ実行パスをナビゲートする特定のアプリケーションに依拠している。この特性により、アタッカーは、不明な情報がより明瞭になるまでそれを繰り返し実行することによりアプリケーションのマップを構築することができる。
【０００５】
具体的な攻撃技術の例としては、タイミング解析、単純電力解析（SPA)、または差分電力解析（DPA)がある。かかる例にはそれぞれ、使用されているソフトウェアコードへの深い洞察と、制御された入力でのインプリメンテーションの反復起動とが関与している。これら攻撃技術は、実行アルゴリズム情報から情報を取得する際に有用である。情報は、漏えいすると解析演繹に役立ち、システム中の特定のインプリメンテーションの正確な場所や、また、システムによってどの暗号作成アルゴリズムが使用されたか、などの項目を含む。サイドチャネル攻撃または反復起動攻撃が成功するためには、インプリメンテーションが制御された状態で動作することが期待される。
【０００６】
SPAおよびDPAは消費電力の変化の計算処理における攻撃に歩をすすめるが、このさらに進化した攻撃技術には、情報漏えいに焦点を絞った統計およびエラー訂正コードをも利用するものがある。たとえば、公開鍵暗号法のリベスト−シャミア−アドルマン（Rivest, Shamir and Adleman, RSA)アルゴリズム、ディフィー−ヘルマン(Diffie-Hellman)鍵共有暗号プロトコル、デジタル信号標準（Digital Signal Standard, DSS)暗号標準、デジタル暗号化標準(Digital Encryption Standard, DES)暗号標準、高度暗号化標準（Advanced Encryption Standard, AES）暗号標準、およびその他の暗号化サブシステムが、様々なタイミング技術や差分電力技術によって攻撃されてきた。サイドチャネル攻撃または反復起動攻撃に共通する問題は、追加的に質問に答えるためにシステムを継続的に再起動する必要があることである。演算が繰り返されるうちに、そのソフトウェアの所定の実行が情報の断片を漏えいし、それら情報の断片が最終的にはより完全な情報を構成し得る。
【０００７】
この問題の根底にあるのは、再起動の際の何らかのソフトウェアインプリメンテーション予測可能性である。サイドチャネル攻撃または反復起動攻撃は、ソフトウェアが反復可能に動作するであろうと予測するが、その反復動作から情報が抽出されうる。さらに、この同じ特性に依存する、ソフトウェアに対する別の種類の攻撃もある。たとえば、デバッギングおよび／またはエミュレーションは、反復性に依拠した攻撃の一般的な形式である。これらの場合、アタッカーはたとえば、特定の関数にブレイクポイントを設定しプログラムに踏み込んで、その演算を理解しようとするかもしれない。アタッカーは、関心のあるポイントを通過するときにプログラムを初めから再起動して、その二回目の起動で同じブレイクポイントに到達することを期待するだろう。
【０００８】
サイドチャネル攻撃または反復起動攻撃を阻止するための通常の公知の防御法は、情報の漏えいを減らす試みとして演算の変動量を低減するなどの対策を通常講じる。一般に、演算の変動は次のような試みによって低減できる：a) より遅いデータパス（たとえば、積除算演算）よりも実行に長くかかるように、高速データパス（たとえば、加減算演算）を冗長にする；b)システムにノイズを付加する；c)コードを等時性にして、秘密の値から独立した一定の時間量で実行されるようにする；d)物理的に外界に限定されている堅牢なCPUを使用する。
【０００９】
これらの試みは特定の場合においてはサイドチャネル攻撃または反復起動攻撃の効果を低減する一助となるかもしれないが、どれも、一般的なアルゴリズム構築に適用できる一般的なアプローチを提案してはいない。したがって、サイドチャネル攻撃または反復起動攻撃を防ぐ、より普遍的に有用なシステムおよび方法を提供することが望ましい。
【発明の概要】
【００１０】
本発明の目的は、サイドチャネル攻撃または反復起動攻撃を防ぐ従来の方法の欠点の少なくとも一つを取り除くかまたは軽減することである。
【００１１】
本発明は、ソフトウェアにおいて実現されるシステムおよび方法であって、タイミング、期間、および消費電力などのサイドチャネル特性または反復起動特性が、ある起動から次の起動に移行しても手続き的に非一貫的ではあるが機能的に等価になるための、数多くの多様な演算パス（Operational Paths）を提供するシステムおよび方法を提供する。なお、かかる演算パスは、メモリ設計やチップセットレイアウト（ただしこれらには限定されない）などの物理的属性に必然であることは理解されよう。これらパスは、タイミング特性や電力特性が予測可能性を回避できるようにデータフロー部分や制御フロー部分を使用して構築することができる。さらに、前記計算パス選択肢は、前記システムから発するタイミング属性および電力属性における非予測可能性量を増加させるために、多数の様々な粒度で構築される。
【００１２】
さらに、前記計算パス選択肢は、公知のモジュラープログラム構築実務下では依存性を有さないようなプログラムのフォーミュラ間に、かつ、かかるプログラムの変数に対して、非明瞭な依存性が存在するように、構築される。この形式は、プロテクションがかかっているシステムから情報を引き出すアタッカーの能力にさらに対抗する。
【００１３】
第一の態様において、本発明は、コンピュータプログラムのコンピュータソフトウェアのソースコードに具体化される計算ステップシーケンスを少なくとも１つ識別する工程と、前記少なくとも１つの計算ステップシーケンス内の式パス（expression path）に基づく代替の演算パスを作成する工程と、前記代替の演算パスを含む計算ステップの攻撃耐性シーケンスを生成する工程とを含む、コンピュータソフトウェアのソースコードの演算パスを偽装する方法を提供する。前記作成工程はさらに、複数の複製式パスを形成するために、前記少なくとも１つの計算ステップシーケンスに対応する前記式パスを複製する工程と、前記複数の複製式パス間にランダムな選択を適用する工程と、前記複数の複製式パス内の演算と等価の代替演算を取得する工程と、前記入力タイミングウィンドウの限定に従って１つ以上の恒等式（identity）を挿入することによって前記代替演算を拡張する工程と、前記１つ以上の恒等式の各々の非特殊な入力を、前記コンピュータプログラムの定数および／または変数に結合させて、１つ以上の関連するおとりを形成する工程と、前記コンピュータプログラムのユーザーが設定した基準に対応する入力タイミングウィンドウを形成する工程と、を含み、前記計算ステップの攻撃耐性シーケンスは、前記式パスと、前記代替演算と、前記１つ以上の恒等式と、前記おとりとを含む。
【００１４】
別の態様において、本発明は、コンピュータソフトウェアのソースコードの演算パスを偽装するシステムを提供し、前記システムは、前記コンピュータソフトのソースコードに含まれる計算工程の回路選択をランダム化するソフトウェアコードを生成するマシン実行可能なコードセグメントの一群を含み、前記マシン実行可能なコードは、コンピュータプログラムのコンピュータソフトウェアのソースコードに具体化される計算ステップシーケンスを少なくとも１つ識別する工程と、前記少なくとも１つの計算ステップシーケンス内の式パスに基づく代替の演算パスを作成する工程と、前記代替の演算パスを含む計算ステップの攻撃耐性シーケンスを生成する工程とを含む。前記作成工程はさらに、複数の複製式パスを形成するために、前記少なくとも１つの計算ステップシーケンスに対応する前記式パスを複製する工程と、前記複数の複製式パス間にランダムな選択を適用する工程と、前記複数の複製式パス内の演算と等価の代替演算を取得する工程と、前記入力タイミングウィンドウの限定に従って１つ以上の恒等式を挿入することによって前記代替演算を拡張する工程と、前記１つ以上の恒等式の各々の非特殊な入力を、前記コンピュータプログラムの定数および／または変数に結合させて、１つ以上の関連するおとりを形成する工程と、前記コンピュータプログラムのユーザーが設定した基準に対応する入力タイミングウィンドウを形成する工程と、を含み、前記計算ステップの攻撃耐性シーケンスは、前記式パスと、前記代替演算と、前記１つ以上の恒等式と、前記おとりとを含む。
【００１５】
さらに別の様態において、本発明は、コンピュータプログラムのコンピュータソフトウェアのソースコードに具体化される計算ステップシーケンスを少なくとも１つ識別する手段と、前記少なくとも１つの計算ステップシーケンス内の式パスに基づく代替の演算パスを作成する手段と、前記代替の演算パスを含む計算ステップの攻撃耐性シーケンスを生成する手段とを含む、コンピュータソフトウェアのソースコードの演算パスを偽装する装置を提供する。前記作成手段はさらに、複数の複製式パスを形成するために、前記少なくとも１つの計算ステップシーケンスに対応する前記式パスを複製する手段と、前記複数の複製式パス間にランダムな選択を適用する手段と、前記複数の複製式パス内の演算と等価の代替演算を取得する手段と、前記入力タイミングウィンドウの限定に従って１つ以上の恒等式を挿入することによって前記代替演算を拡張する手段と、前記１つ以上の恒等式の各々の非特殊な入力を、前記コンピュータプログラムの定数および／または変数に結合させて、１つ以上の関連するおとりを形成する手段と、前記コンピュータプログラムのユーザーが設定した基準に対応する入力タイミングウィンドウを形成する手段と、を含み、前記計算ステップの攻撃耐性シーケンスは、前記複数の複製式パスと、前記複数の複製式パスの各々の中の代替演算と、前記１つ以上の恒等式と、前記おとりとを含む。
【００１６】
さらに別の態様において、本発明は、コンピュータソフトウェアのソースコードの演算パスを偽装するためのコンピュータソフトウェアコードを記憶するコンピュータ読み出し可能な記憶媒体を提供し、前記コンピュータソフトウェアのコードは、コンピュータプログラムのコンピュータソフトウェアのソースコードに具体化される計算ステップシーケンスを少なくとも１つ識別する工程と、前記少なくとも１つの計算ステップシーケンス内の式パスに基づく代替の演算パスを作成する工程と、前記代替の演算パスを含む計算ステップの攻撃耐性シーケンスを生成する工程とを実行可能である。前記コンピュータソフトウェアコードの作成工程はさらに、複数の複製式パスを形成するために、前記少なくとも１つの計算ステップシーケンスに対応する前記式パスを複製する工程と、前記複数の複製式パス間にランダムな選択を適用する工程と、前記複数の複製式パス内の演算と等価の代替演算を取得する工程と、前記入力タイミングウィンドウの限定に従って１つ以上の恒等式を挿入することによって前記代替演算を拡張する工程と、前記１つ以上の恒等式の各々の非特殊な入力を、前記コンピュータプログラムの定数および／または変数に結合させて、１つ以上の関連するおとりを形成する工程と、前記コンピュータプログラムのユーザーが設定した基準に対応する入力タイミングウィンドウを形成する工程と、をさらに実行可能であり、前記計算ステップの攻撃耐性シーケンスは、前記複数の複製式パスと、前記複数の複製式パスの各々の中の代替演算と、前記１つ以上の恒等式と、前記おとりとを含む。
【００１７】
本発明のさらなる様態と特徴は、当業者には、添付の図面とともに本発明の特定の実施形態についての下記の記載を参照すれば明白になるであろう。
【図面の簡単な説明】
【００１８】
本発明の実施形態を、あくまでも例として、添付の図面を参照して説明する。
【図１】図１は、本発明が実施されうる公知のコンピュータシステムを示す。
【図２】図２は、本発明にかかるプロセスの全体を示す。
【図３】図３は、図２に示された本発明にかかるビルドタイムの攻撃耐性アルゴリズム作成の工程を示すフローチャートである。
【図４】図４は、図２に示された本発明にかかるランタイム実行を静的および動的に示した図である。
【図５】図５は、図３に示された本発明にかかるビルドタイムフローチャートに使用されたような等価物および恒等式のパレットを作成するための工程を示すフローチャートである。
【図６】図６は、本発明に準じて使用されたターゲットタイミングウィンドウ内の特定の回路パスのビルドタイム作成例を示す。
【図７】図７は、本発明に準じて使用されうるジャンプ間接パス選択の形式の演算処理パス選択の一種を示す。
【図８】図８は、本発明に準じて使用されうる関数ポインタテーブル選択の形式の演算処理パス選択の別の一種を示す。
【図９】図９は、本発明に準じて使用された可変タイミングパスのランタイム選択の一例を示す。
【図１０】図１０は、図９に示されたようなブロックＣの典型例である、二つの異なるタイミングのデータパスからの選択の具体的なインプリメンテーションを示す。
【発明を実施するための形態】
【００１９】
上記のように、アルゴリズムは一般的には、タスクまたはタスク群を遂行するための計算ステップのシーケンスである。本発明では、アルゴリズムの定義は、アルゴリズムのインプリメンテーションをも包含するものとして理解されるべきである。したがって、アルゴリズムは、タスクまたはタスク群を計算装置上で行うコンピュータ命令の一群または高度なソフトウェアプログラミングであってもよい。
【００２０】
一般的には、本発明は、サイドチャネル攻撃または反復起動攻撃に耐性のあるアルゴリズムのインプリメンテーションを作成するために、ソースコードレベルで既存のアルゴリズムを処理する方法およびシステムを提供する。本発明によって作成されるアルゴリズムのインプリメンテーションは、挿入された、もともとサイドチャネル解析を抑制する可変タイミング演算処理パスを含む。パスの可変タイミングは、公知のタイミングのウィンドウに対して制御され（すなわち、下限の閾値および上限の閾値）、実時間制約に応じて動作をパラメータ化し制御する手段を提供する。
【００２１】
なお、本発明は、いかなるコンピュータシステム上でも実施されうると理解されるべきである。本発明が遂行されるコンピュータシステムの単純化された例は、図１のブロック図のように表される。このコンピュータシステム１１０は、表示部１１２、キーボード１１４、コンピュータ１１６、および外部装置１１８を含む。
【００２２】
コンピュータ１１６は、中央処理装置（ＣＰＵ）１２０などの、プロセッサまたはマイクロプロセッサを一つ以上含んでもよい。ＣＰＵ１２０は数学的演算処理を行い機能を制御して、内部メモリ１２２、好適にはランダムアクセスメモリ（ＲＡＭ）および／または読み出し専用メモリ（ＲＯＭ）、および場合によっては増設メモリ１２４に保存されているソフトウェアを実行する。増設メモリ１２４は、たとえば、ビデオゲーム装置、ＥＰＲＯＭやＰＲＯＭなどの着脱式メモリチップや、当該技術分野で公知の同様の記憶媒体のような、マスメモリストレージ、ハードディスク装置、フロッピーディスクドライブ、磁気テープドライブ、コンパクトディスクドライブ、プログラムカートリッジ、およびカートリッジインターフェースを含んでいてもよい。この増設メモリ１２４はコンピュータ１１６の内部に物理的に設けられてもよく、または図１に示されるように外部に設けられてもよい。
【００２３】
コンピュータシステム１１０は、コンピュータプログラムやその他の命令を読み込ませる、その他の同様な手段も含んでもよい。かかる手段は、たとえば、ソフトウェアやデータがコンピュータシステム１１０と外部システムとの間でやりとりされるようにするコミュニケーションインターフェース１２６を含むことができる。コミュニケーションインターフェース１２６の例としては、モデムや、イーサネットカードなどのネットワークインターフェース、シリアルまたはパラレルコミュニケーションポートなどがある。コミュニケーションインターフェース１２６を介してやり取りされるソフトウェアやデータは、コミュニケーションインターフェース１２６によって受信できる電子信号、電磁信号、光学信号、またはその他の信号の形式である。言うまでもなく、複数のインターフェースを単一のコンピュータシステム１１０上に設けることができる。
【００２４】
コンピュータ１１６への入力およびコンピュータ１１６からの出力は、入力／出力（Ｉ／Ｏ）インターフェース１２８によって管理されている。このＩ／Ｏインターフェース１２８は、表示装置１１２、キーボード１１４、外部装置１１８、およびコンピュータシステム１１０のその他のかかる部品の制御を管理する。
【００２５】
本発明は便宜上、これらに基づき記載される。本発明がその他のコンピュータなどの制御システム１１０に適用できることは、当業者には明らかであろう。かかるシステムはとしては、電話、携帯電話、テレビ、テレビのセットトップユニット、販売時点管理（ＰＯＳ）コンピュータ、自動銀行取引機、ラップトップコンピュータ、サーバ、個人情報端末（ＰＤＡ）、および自動車など、コンピュータまたはプロセッサ制御装置を備えたあらゆる電化製品が挙げられる。
【００２６】
好適な実施形態において、本発明は、コンピュータシステム１１０上で作動する中間コンパイラプログラムとして実行される。標準的なコンパイラ技術は当該技術分野では周知であり、本明細書中では詳細に検討しない。必要な背景知識を提供する標準的な参考文献が二つあり、それは「Compilers Principles, Techniques, and Tools（コンパイラの原理、技術、およびツール）」1988年、Alfred Aho、Ravi Sethi、およびJeffrey Ullman著（ISBN 0-201-1008-6）、および「Advanced Compiler Design & Implementation（最新コンパイラ設計およびインプリメンテーション」1997年、Steven Muchnick著（ISBN 1-55860-320-4）である。
【００２７】
大まかには、ソフトウェアコンパイラは、フロントエンド、ミドル、バックエンドのように記載される、３つの部分に分けられる。フロントエンドは言語に依存した解析を担当し、バックエンドはコード生成の機械に依存した部分を取り扱う。必要に応じて、言語や機械から独立した最適化を行う中間部分が含まれてもよい。通常は、各コンパイラファミリが、中間部を一つだけと、各高水準言語用のフロントエンドと、各機械依存言語用のバックエンドとを有する。コンパイラファミリ中の上記部分の全ては概して共通の中間言語でコミュニケーションできるので、それらは簡単に交換できる。この中間言語は概して、コントロールフローとデータフローとが簡便に操作されるように、コントロールフローとデータフローとの両方をエクスポーズする形式である。かかる中間の形態は、フローエクスポーズドフォーム（flow-exposed form）と称することもできる。本発明の好適な実施形態において、入力されたソフトウェアの所望の領域を不正に改ざんできないようにするために操作されるのは、この中間コードである。
【００２８】
本発明は、静的単一代入（ＳＳＡ）形式のソフトウェアコードに最も容易に適用できる。ＳＳＡは、スカラー変数を伴う解析と最適化を行うための符号表現としてソフトウェアコンパイラにより使用される、一般的で効率のよい、周知のフローエクスポーズド形式である。定数伝播、冗長計算の検出、デッドコード削除、帰納変数の削除などの用件に対応するために、ＳＳＡに基づく効果的なアルゴリズムが開発されてきた。もちろん、ＧＮＵコンパイラコレクション（Gnu CC）で提供されるように、ＳＳＡ以外のフローエクスポーズド形式が意味情報の同様のレベルを提供する場合には、本発明の方法はそれらＳＳＡ以外のフローエクスポーズドフォームに適用可能である。Gnu CCソフトウェアは現在、フリーソフトウェア財団から無料で入手できる。同様に、必須のコントロールフロー情報およびデータフロー情報によってソフトウェアの形式が補強されるなら、本発明の方法がソフトウェアに、それよりも高水準または低水準の形式で適用できるであろう。この柔軟性は、以下に記載される暗号化技術の記載から明瞭になるであろう。
【００２９】
本発明は、あらゆるアルゴリズムに一般に適用でき、ビルドタイム・プリコンパイル・ツール（build-time pre-compilation tool）に封入できるという利点を有する。したがって、本発明は、暗号、ハッシュを含むいかなるソフトウェアアプリケーションにも適用できる。さらに、本発明は、サイドチャネル攻撃の脅威があるいかなるソフトウェアに適用してもよい。さらに、本発明のシステムおよび方法は、他の種類の攻撃にも耐えられるように、一般的にいかなるアルゴリズムに適用してもよい。これら攻撃としては、ソフトウェアの予測可能性および再現性に依拠したデバッギング攻撃およびエミュレーション攻撃などがある。たとえば、デバッギング攻撃は通常、ブレイクポイントを設定して、ある起動から次の起動に移行しても全く同じブレイクポイントに到達することを期待しながらアプリケーションを初めから繰り返し起動するという能力に依拠している。本発明の記載での明瞭性のために「サイドチャネル攻撃」という用語を全体で使用するが、本発明は反復起動攻撃や同様の攻撃に対しても有用であることはすでに明白である。
【００３０】
図２について、単純化された図は本発明に係る攻撃耐性アルゴリズムを作成するためのプロセス２０の全体を示す。プロセス２０は、元のアルゴリズム２１について動的可変タイミング演算パス（Operational Paths）を設けるためのコンパイルサイクルおよびビルドサイクルを含むビルドタイム２７に関して、ならびに、アルゴリズム２１の攻撃耐性形式の実行およびランサイクルを含むランタイム２５に関して、全体的に示されている。ビルドタイム２７中、以降に詳細に記載されるように、本発明のシステムおよび方法を包含するプリコンパイルツール２６にたいして、元のアルゴリズム２１が適用される。概して言えば、プリコンパイルツール２６は、以下のようなビルドタイムオプション２２（ただしこれらには限定されない）を包含している：タイミングウィンドウ許容差；目標性能、サイズ、および／または安全レベル；および／またはランタイム制約など。かかるオプション２２は、元のアルゴリズム２１に基づいて攻撃耐性アルゴリズム２４を作成するために本発明によって使用される。ランタイム２５中、ランタイムのエントロピーソース２３によって提供されるランダムネスについて、ランダムな回路選択が起こる。
【００３１】
ビルドタイムについての本発明のより詳細な実施形態は、図３に示される。ここに、本発明に準じて攻撃耐性アルゴリズムを作成するビルドタイム法を示すビルドタイムフローチャート３０が示されている。図示のように、ビルドタイム法は、ユーザーの元のアルゴリズムとタイミング制約を構文解析し解釈することから開始する。特に、本発明の方法はステップ３１で元のアルゴリズム３１０を取得し、さらにステップ３２で、ユーザーのタイミング制約３２０について所与のアルゴリズム３１０のタイミングウィンドウを処理する。なお、かかるタイミング制約は、所与のユーザーの操作環境に応じて変動することは理解されよう。ユーザーの元のアルゴリズム３１０と所与のタイミング制約３２０とが構文解析され解釈されると、アルゴリズム３１０の式パス（expression path）がステップ３３で複製される。
【００３２】
式パスを複製すると、第２のパスにおいてほぼ同じ実行を作成する入力が提供される。複製されたパスは、全く同じ演算を含んでいるわけではなく、選択肢パレットからの代替の表現を含んでいる。ランタイムにおいては、複製されたパスが同じ機能を、元のパスとは異なる演算で実行する。
【００３３】
次に、ステップ３４でインターフェースが提供され、それにより回路セレクタ機構が挿入される。回路セレクタ機構はランタイムにおいて入手可能なエントロピーソースを使用する。エントロピーソースは、代替の回路を選択する際に使用されるランダム性を発生させるために公知の方法で作動する疑似乱数生成器（ＰＲＮＧ）への入力である。有効なソフトウェアベースのＰＲＮＧアルゴリズムが知られている。または、乱数を生成するために信頼できるハードウェア乱数生成器を使用し、堅牢なチャネルを介してその値を返信してもよい。ＰＲＮＧのかかる詳細は、プログラミング技術分野の常識の範疇であり、本明細書でこれ以上は記載しない。
【００３４】
ステップ３４でＰＲＮＧを使用して回路セレクタインターフェースが追加されると、本発明の方法はステップ３５へ進み、タイミングウィンドウ制約を超えないでアルゴリズムの演算を代替の演算に置き換える。これは、後に記載する、等価演算３５０のパレットを使用することで達成される。同様に、ステップ３６で、後に記載する恒等式（identity）３６０のパレットによってタイミングウィンドウ制約に従って恒等式を挿入することにより、アルゴリズムの演算がさらに拡張される。次に、ステップ３７で、おとり用恒等式をアルゴリズムの定数および変数に結合させて、アタッカーが求める有意の情報のおとりを提供する。本発明の方法はステップ３８で、ランタイムで使用される、このような攻撃耐性アルゴリズム３８０を生成する。
【００３５】
図４について、ランタイムの代替図４００、４０１を示す概略図４０が本発明に準じて提示される。ここで、本発明の静止図４００を、本発明の動図４０１と対比する。静的には、回路セレクタ４１は、一連の回路１、２、…Ｎ（Ｎは１より大きい整数）を表す回路４１ａ、４１ｂ、４１ｃで具体化した可変ランタイムパスの選択肢を有する。図示されたような回路セレクタ４１は、エントロピーソース４２によって提供されるランダム性に応じてランダムに一連の回路１〜Ｎから回路一つを選択できる。なお、一連の回路１〜Ｎは、等価回路の一群である。または、ランタイムの、本発明に準じた攻撃耐性アルゴリズムを構築した結果は、図４０１に見られるように、動的に示すこともできる。起動１が回路３に対応する実行パス４１ｄを起動し、起動２が回路１に対応する実行パス４１ａを起動するという、３つの起動が示される。同様に、起動３が回路ｊに対応する実行パス４１ｅを起動する。このように、アルゴリズムの各起動がそれぞれの回路（たとえば４１ａ〜４１ｅ）を効果的にランさせることは明瞭である。さらに、各ランタイム起動時のパスは、アルゴリズムの固有のランタイムインスタンスであることが有利である。
【００３６】
等価演算と恒等式のパレットについて、ここでより詳細に述べる。概して言えば、所与のアルゴリズムを含む等価演算を構築するためには、公知の技術が使用できる。たとえば、Zhouらによる「Information Hiding in Software with Mixed Boolean-Arithmetic Transforms（混合ブール演算変換を伴うソフトウェアに潜む情報）」、8th International workshop on Information Security Applications (第８回情報セキュリティアプリケーション国際ワークショップ）（WISA 2007）、６１〜７５頁、Springer Lecture Notes in Computer Science 4867、2008に開示された、混合ブール演算（ＭＢＡ)式は、全ての算術演算および論理演算のための複数の恒等式（すなわち式）を作成するために使用できる一つの技術である。これら恒等式は、対応するターゲット演算と同じ動作をする性質を有する。ただし、複数の恒等式の各々は、個別の関連するタイミング（つまり、実行遅延）を有する。
【００３７】
この動作の例としては、３２ビットの２の補数のコンテクストにおいて、ＡＤＤ（すなわち＋）演算が以下に示す式を使用して等価的に実行できる。
【００３８】
1. ADD1(x,y) = x＋y
2. ADD2(x,y) = x − ~y − 1
3. ADD3(x,y) = 2*(x｜y) − (x＾y)
【００３９】
上記式ＡＤＤ１は、上記３つの等価な式のうちＡＤＤ演算の最も明白なインプリメンテーションである。ただし、その他の二つのフォーミュラ、ＡＤＤ２およびＡＤＤ３はそれぞれ、一般的に使用されている３２ビットの２の補数演算に基づいた、全く同じ動作を提供する。なお、もちろん、同様の式が、３２より大きいビットサイズ用に構築できる。演算の動作は、上記に示された３つの式すべてについて同じだが、タイミング特性は異なると予想される。式ＡＤＤ１は一つの算術演算を含み、式ＡＤＤ２は３つの演算を含む。同様に、ＡＤＤ３の演算は４つの演算を含み、そのうちの一つは、通常他の演算よりも時間がかかる乗算である。
【００４０】
ここで単純に数値ｖに定数を加えて引く恒等式の作成を考察する。
【００４１】
Identity(v,c) = v ＋ c − c
【００４２】
上記恒等式は、数値ｃから独立して数値ｖを作成する。さらに、ｃは、恒等式の演算処理中、一定でありさえすればよい。したがって、ｃはプログラミングの意味においては変数でありうる。ここで恒等式におけるＡＤＤ演算を、上記の式ＡＤＤ１、２、３の一つと置き換えることを考察する。たとえば、上記恒等式におけるＡＤＤ３は、下記のようになる。
【００４３】
Identity(v,c) = ADD3(v,c) − c
= 2*(v｜c) − (v＾c) − c
【００４４】
得られたのは、演算５つという付加的な演算オーバーヘッドを伴う、定数または変数ｃに依存性を有するｖの一致演算である。ｃへの依存性は、標準的なコンパイラ最適化プラクティスに基づいて従来通りに最適化することはできない。これはＭＢＡ演算を使用するからである。これは、１）ユーザーの制御下にある任意の演算サイズおよび演算タイミング、２）定数またはプログラム変数への任意の依存性（ただし変数は式の演算処理中には一定でなければならない）、という二つの重要な特性の算術式を作成するメカニズムを示している。
【００４５】
本発明に準じてこれらの式をオンデマンドで作成するという目的を達成するために、全ての元の算術演算及ビット単位の演算は、等価の式を構築するためにアクセスされる。演算各々について５〜１０個の式を構築する。各フォーミュラは、演算の数と、タイミング特性とによって特徴づけられる。最終的に出来上がるのは、ターゲットアルゴリズムに必要とされる各演算に対して等価である演算の大きなパレットである。演算のパレットを作成した結果、上記のＡＤＤ例によって示されたような等価の式を組み合わせることによって非常に多くの恒等式を構築することができる。各恒等式は、意図する演算処理を隠すような方法で、他のプログラム定数や変数を結び付けることができる。これら恒等式は、演算タイミングについてもまた特徴づけられている。
【００４６】
等価演算と恒等式とのパレットは、上記の構築形式（すなわちＭＢＡ）に限定されず、数々の数学的手段を通じて到達できる。たとえば、等価演算を作成するために行列式を使用することができ、その結果新たな恒等式が得られる。また、色々なオーダーの有限環の演算を使用して、恒等式に加えてその他の等価演算を作成することができる。様々なメカニズムを使用して等価演算を作成することにおいて、非常に幅広く深い、選択肢パレットを作成する機会は無限である。
【００４７】
パレットの作成という点で、等価演算および恒等式のパレットを構築する一般的な方法が図５に示されている。ここに示されているパレット作成５０では、公知のプログラミング言語５１０（たとえばＣ言語）から構成パスを抽出し、代替物を生成することができる。ステップ５１で、所与のプログラミング言語５１０から全算術演算および論理演算が選択される。次にステップ５２で、上記の方法（たとえば、上述したようなＭＢＡの式など）を使用して、ステップ５１で選択された各演算用に代替等価演算を構築する。ステップ５３で、等価演算はそのタイミング属性（すなわち演算処理による遅延）によって特徴づけられるが、ステップ５３ではまた、選択肢のパレット５２０へ等価演算群５２０ａが提供される。次に、等価演算５２０ａは、ステップ５４で恒等式を構築するために使用される。
【００４８】
本発明では、恒等式全般と、特に所与の恒等式演算とは、多数の入力と一つの出力を有する関数である。関数への入力の一つが特別に指定されて必ず計算され出力される。関数へのその他の入力は、何らかの値を持っても持たなくてもよい。演算（たとえば３２ビットの２の補数の算術演算）の有界系内で、関数の出力は、常に特定の入力を計算する。恒等式のこれらのタイプについては、Zhou et al.による「Information Hiding in Software with Mixed Boolean-Arithmetic Transforms」というタイトルの上記出版物の記載内容からよりよく理解され、また、そこにさらに記載されている。ただし、Zhou et al.はプログラム内の定数／鍵隠蔽および透かし隠蔽のために恒等式を使用することを記載しているのに対し、本発明は恒等式を使用して回路演算処理における多様なタイミングを作り出すユニークなシステムおよび方法を提供している。
【００４９】
さらに、Zhou et al.は、構築された式が、所与の入力の値から独立していることを示している。本発明では、これら入力は、回路演算処理の多様性を増やして、アタッカーが関連する情報を求めてプログラムにおける多数の種々異なるポイントに注目するようにするために使用される。本発明はまた、恒等式演算を利用して、回路を通る際の遅延をできるだけ増大させる能力によって、回路のタイミングを制御する。さらに、恒等式への非特殊な入力はいかなる値をとってもよいので、本発明のシステムおよび方法は、これら非特殊入力を、演算処理されている有意な値を探し求めているアタッカーに対するおとりとして、プログラム変数に結び付ける。
【００５０】
複数の恒等式は、ステップ５５で、それら各々のタイミング属性によって特徴づけられ、恒等式群５２０ｂが生成されて選択肢パレット５２０に蓄積される。選択肢パレット５２０は、本発明に準じたシステムおよび方法での使用のために、このように得ることができる。したがって、所与の選択肢パレットを構築することは、所与のアルゴリズムの代替の演算パスを生成することの前提条件でもあるが、本発明の不可欠な部分でもあることが理解されよう。
【００５１】
選択肢（すなわち、演算等価式および恒等式）パレットを活用して、所与のアルゴリズムを、ターゲットタイミング特性を有するパスとして構築できる。これらの式を多様に結び付けることにより、所望の最大サイズの演算ツリーを作成するメカニズムを提供する。さらに、これら式への入力は、所与の式の演算処理中に一定でありさえすればよい。このことは、これら入力が、上記に示唆したようにアタッカーへのおとり用にプログラム中の変数と結合させることができることを意味する。これらおとりは、演算処理パスから取り込むこともでき、完全に独立したパスであろうと同じ演算処理パスであろうと構わない。これらの本発明の方法を使用して、耐逆行分析依存性が複雑に関係し合うものを作成することができる。
【００５２】
図６に、ターゲットタイミングウィンドウを備えた特定の回路のビルドタイム作成６０を示す概略図が示されている。タイミングウィンドウ制約６５と共に元の回路を作る元の式６４が、自動選択を行う回路構築ツール６３へ入力される。ここで、元の回路６４は、演算Ａｄｄ、Ｘｏｒ、およびＳｕｂを含む。回路構築ツール６３が選択肢パレット６１を使用して等価式パス６２を作成し、また、要求されたタイミングウィンドウ６５を標的とする。ここで、選択肢パレットは、代替Ａｄｄ演算であるＡｄｄ１、Ａｄｄ２、Ａｄｄ３、Ａｄｄ４…の群と、代替Ｓｕｂ演算であるＳｕｂ１、Ｓｕｂ２、Ｓｕｂ３、Ｓｕｂ４…の群と、代替Ｘｏｒ演算の群と、上記に記載したように生成された恒等式ｄ１、Ｉｄ２、Ｉｄ３、Ｉｄ４、Ｉｄ５、Ｉｄ６，Ｉｄ７，Ｉｄ８…の群とを含む。等価演算のタイミングに加えて、恒等式演算もまた選択され、挿入される。たとえば、図示されているようにＩｄ１、Ｉｄ２，Ｉｄ３，Ｉｄ７，およびＩｄ８のようにである。これら演算は、式のパスのタイミングを変更させるが、また、他の変数や定数へのおとりの依存性が作り上げられるようにする。おとりの依存性は、破線によって示されている。恒等式演算は、それらが式パス中の、文字通りいずれのポイントにも柔軟に設定できるという興味深い性質を有する。その結果、回路セレクタ６３は、細かな粒度でターゲットタイミングウィンドウに対応できる。
【００５３】
本発明によると、いかなるサイズの演算ツリーをも作成する能力によって、演算の所望の群のためにタイミングを多様化する多数のコードパスを作成する容量が提供される。このことと、ランタイム時に異なるパスを選択する能力とを結び付けることにより、サイドチャネル攻撃に対する耐性が提供される。さらに、異なるパスがＰＲＮＧと関連エントロピーソースとから起動されなければならないと規定すると、高度な耐改ざん性が得られる。
【００５４】
なお、回路構築ツール６３について、演算処理パスからの選択は、本発明の意図する範囲を逸脱せずに多様なメカニズムを介して達成できるであろう。この回路選択プロセスには下記の方法（これらに限定されるわけではない）がある。
−  制御フロー条件ステートメント（たとえば、条件付き分岐など）
−  ジャンプ間接テーブル（たとえば、スイッチステートメントから生じてもよい、など）
−  関数への間接コール（たとえば、テーブル中に関数ポインタを置くことから生じてもよい、など）
−  ソフトウェアマルチプレクサ（たとえば、１または０による乗算により演算を効果的に選択すること、など）
【００５５】
これらメカニズムはよく理解されており、関連する選択方法を構築するために必要とされる構成体がよく知られているが、本発明はこれらの方法を新しいやり方で使用して、演算の可変タイミングパス用の回路セレクタを作成する。本発明において計算のブロックは、コードのアタッカーがある起動から別の起動へソフトウェアがどのように動作するのかを簡単に予測できないように、ランタイム時（すなわち実行時）にランダムに選択される。したがって、パスのランダムな選択が本発明のユニークな態様であることは容易に理解されよう。
【００５６】
図７について、条件付き制御フローおよびジャンプ間接テーブルの方法によって作成された構成体７０のコンパイルの結果が示されている。制御フロー条件ステートメントは、二つのパスから選択する際の最も直接的な方法であり、下記のように示される。
【００５７】
if(cond) {
Path l ;
}
else {
Path2;
}
【００５８】
ただし、条件付き制御フローは、最終プログラムにおいて、ほぼ間違いなくアタッカーによって簡単に逆行分析されうる分岐命令群となるという欠点を有する。したがってジャンプ間接テーブルをさらに使用すれば効果があるだろう。ジャンプ間接テーブルは、スイッチ／ケースステートメント群からコンパイラによる最適化としてしばしば取り上げられる。
【００５９】
switch(cond) {
case A:
path1;
case B:
path2;
}
【００６０】
図８について、関数ポインタテーブルを使用してパスが選択でき、それによって間接関数コールが示される、関数ポインタ選択８０が示される。いくつかの関数のポインタ（すなわち、アドレス）を使い、アレイ（すなわち、テーブル）の要素としてそれらを置くことにより、様々なパスから選択する能力を提供する。これは、たとえば以下のように、アレイの様々な要素を選択することにより簡単に行える。
【００６１】
a[0] = &func0();
a[1] = &func1 ();
【００６２】
図８に示されているように、ｘが０または１であるa[x]へのコールにより、func0またはfunc1がコールされる。
【００６３】
前述のケース（制御フロー条件ステートメント、ジャンプ間接テーブル、および関数への間接コール）の各々は、パスを選択する制御フロー法を使用している。言いかえれば、実行されるべきパスの位置へプログラムがジャンプし、選択されたパスのみが実行される。ソフトウェアマルチプレクサの場合と異なり、本発明は、両方（またはそれ以上）のパスが実行され、その後演算処理が為されると、その結果のうちの一つのみが実際には選択されるという方法を定義している。たとえば、要素が０または１である二要素テーブルを考察する。
【００６４】
A[0] = 0
A[1] = 1
Result = A[x] * Path1 + A[y] + Path2
If x=1 and y=0, then Path1 is chosen.
If x=0 and y=1 , then Path2 is chosen.
【００６５】
上記の例は、２つよりも多いパスにあてはめることができる。さらに、乗算以外の演算を使用して同様の結果を得ることもできる。これは、回路セレクタを作成するためのテーブルと算術演算との新規の使用法である。
【００６６】
図９について、可変タイミングパス９０のランタイム選択が示される。ここでは、特定のタイミングウィンドウ９３を保証するために可変タイミング演算ブロック９４、９５、９６がどのように設定されるかを知ることができる。図９は、演算パスの３つの連続したブロックＡ，Ｂ，Ｃを示す。これらブロックの各々は、代替かつ等価のインプリメンテーションを内部に有する。
ブロックＡは３つのインプリメンテーションＡ１、Ａ２、Ａ３を有する。
ブロックＢは３つのインプリメンテーションＢ１、Ｂ２、Ｂ３を有する。
ブロックＣは２つのインプリメンテーションＣ１、Ｃ２を有する。
インプリメンテーションの各々は、括弧内の値として示された予測タイミングを有している。回路セレクタ９１が考えられうるインプリメンテーションを通じてＡ→Ｂ→Ｃの順に実行するパスを選択する。全タイミングウィンドウ［１５、４０］の回路を介するパスとしては、１８個ありうる。もっとも早い回路はＡ２→Ｂ１→Ｃ１＝１５であり、最も遅い回路はＡ３→Ｂ２→Ｃ２＝４０である。
【００６７】
回路のタイミングウィンドウは、回路セレクタ９１が選択するパスを限定することによってさらに制約することができる。たとえば、制約タイミングウィンドウ[２５、３０］は、１０個のパスから回路セレクタが選択できることを示している（９３の中にリストアップされている）。この小さな例に示されているように、幅広い可変タイミングパスが構築でき、一方で回路全体の制約タイミングウィンドウは維持される。これが回路の動的に多様な実行という目的を達成する。これによりソフトウェアの再起動に基づく攻撃に抵抗できる。その一方で、これにより、システム全体のリアルタイム制約にとって重要である、回路全体の一貫したパフォーマンスウィンドウが維持される。エントロピーソース９２が、回路パスを選択することを含むランタイム決定の入力を提供するために必要である。これらエントロピーソースを使用して、公知のＰＲＮＧ技術がシード指定されてもよい。エントロピーソースの例としては、１）日付・時刻ソース、２）プロセス識別子（ＰＩＤｓ）、３）入手可能なメモリのアドレス、４）ランタイムシステム状態情報、５）ハードウェアのエントロピーソース（たとえば、トラステッド・プラットフォーム・モジュール（Trusted Platform Module) (TPM))などがある（ただし、これに限定されない）。
【００６８】
図１０は、２つの異なるタイミングのデータパスから選択するプロセス１００を示す。ここで、異なるタイミングで等価の機能を行う２つの式パス（関数１０１および１０５）の具体例が示されている。パスを関数としてカプセル化することは、単なる一例である。さらに、これはインラインコードとして、または、基本ブロック内で、行うこともできる。図１０は、図９のブロックＣに対応する図として見てもよい。図９の関数Ｃ１（５）およびＣ２（１０）が関数１０１および１０５にそれぞれ対応する。ソフトウェアマルチプレクサ１０３を介して、関数１０１および１０５が組み合わさって、示されているような演算パス１０２を生成する。回路選択プロセスは、プロセス１０４からランダムに選択されたものを用いてソフトウェアマルチプレクサによって行われる。
【００６９】
本発明の方法のステップは、オブジェクトコードやソースコードなど多様なフォーマットで保存されている実行可能なマシンコードの群として実施できる。かかるコードは、本明細書中では一般的に、単純化のため、アルゴリズム、代替のアルゴリズム、プログラミングコード、コンピュータプログラムなどとして記載している。実行可能なマシンコードは、外部プログラムコールや当該技術分野で公知のその他の技術によって、他のプログラムのコードと一体化でき、サブルーチンとして実行してもよいことは明らかである。
【００７０】
本発明の実施形態は、方法のステップでプログラムされたコンピュータプロセッサや同様の機器によって実行されてもよく、またはこれらステップを実行する手段を備えた電子システムによって実行されてもよい。同様に、コンピュータディスケット、ＣＤ−ＲＯＭ、ランダムアクセスメモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ)や、当該技術分野で公知の同様なコンピュータソフトウェア記憶手段などの電子メモリ手段が、かかる方法ステップを実行するようプログラムされてもよい。また、これらの方法ステップを表す電子信号が通信ネットワークを介して伝達されてもよい。
【００７１】
また、本発明がコンピュータおよびコンピュータシステムの既存の範囲に限定される必要が無いことも当業者には明白であろう。クレジットカード、デビットカード、銀行のカード、およびスマートカードは、コード化でき、本発明をそのそれぞれのアプリケーションに適用できる。本発明に準じた電子商取引システムはたとえば、ソフトウェアやパスワードを記憶するために磁気ストライプや電子回路を使用するパーキングメーター、自動販売機、公衆電話、在庫管理、レンタカーなどに適用できる。また、かかるインプリメンテーションは当業者に明瞭であり、本発明から逸脱するものではない。本発明の実施形態は、もっぱら例証のためのものである。多様な種類のソフトウェア、または数々のソフトウェアが、本発明によって強化されたセキュリティの恩恵を受けるであろうことも、同様に明白であろう。さらに、当業者によって、添付のクレームによってのみ定義される本発明の範囲を逸脱することなく、特定の実施形態に変更、変形、変種がもたらされるであろう。
【図１】
0005643894.tif 000002
【図２】
0005643894.tif 000003
【図３】
0005643894.tif 000004
【図４】
0005643894.tif 000005
【図５】
0005643894.tif 000006
【図６】
0005643894.tif 000007
【図７】
0005643894.tif 000008
【図８】
0005643894.tif 000009
【図９】
0005643894.tif 000010
【図１０】
0005643894.tif 000011